monomind 2.5.0 → 2.5.2

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 (289) hide show
  1. package/package.json +2 -1
  2. package/packages/@monomind/cli/.claude/agents/design/design-monodesign.md +6 -6
  3. package/packages/@monomind/cli/.claude/commands/mastermind/_repeat.md +4 -4
  4. package/packages/@monomind/cli/.claude/commands/mastermind/approvev1.md +4 -4
  5. package/packages/@monomind/cli/.claude/commands/mastermind/architect.md +6 -6
  6. package/packages/@monomind/cli/.claude/commands/mastermind/autodev.md +5 -5
  7. package/packages/@monomind/cli/.claude/commands/mastermind/brain.md +2 -2
  8. package/packages/@monomind/cli/.claude/commands/mastermind/build.md +6 -6
  9. package/packages/@monomind/cli/.claude/commands/mastermind/code-review.md +2 -2
  10. package/packages/@monomind/cli/.claude/commands/mastermind/content.md +6 -6
  11. package/packages/@monomind/cli/.claude/commands/mastermind/createorg.md +4 -4
  12. package/packages/@monomind/cli/.claude/commands/mastermind/createtask.md +3 -3
  13. package/packages/@monomind/cli/.claude/commands/mastermind/debug.md +5 -5
  14. package/packages/@monomind/cli/.claude/commands/mastermind/design.md +5 -5
  15. package/packages/@monomind/cli/.claude/commands/mastermind/do.md +2 -2
  16. package/packages/@monomind/cli/.claude/commands/mastermind/execute.md +5 -5
  17. package/packages/@monomind/cli/.claude/commands/mastermind/finance.md +6 -6
  18. package/packages/@monomind/cli/.claude/commands/mastermind/finish.md +5 -5
  19. package/packages/@monomind/cli/.claude/commands/mastermind/idea.md +6 -6
  20. package/packages/@monomind/cli/.claude/commands/mastermind/ideate.md +5 -5
  21. package/packages/@monomind/cli/.claude/commands/mastermind/improve.md +6 -6
  22. package/packages/@monomind/cli/.claude/commands/mastermind/marketing.md +6 -6
  23. package/packages/@monomind/cli/.claude/commands/mastermind/master.md +54 -54
  24. package/packages/@monomind/cli/.claude/commands/mastermind/ops.md +6 -6
  25. package/packages/@monomind/cli/.claude/commands/mastermind/orgs.md +2 -2
  26. package/packages/@monomind/cli/.claude/commands/mastermind/orgstatus.md +2 -2
  27. package/packages/@monomind/cli/.claude/commands/mastermind/plan.md +5 -5
  28. package/packages/@monomind/cli/.claude/commands/mastermind/receive-review.md +5 -5
  29. package/packages/@monomind/cli/.claude/commands/mastermind/release.md +6 -6
  30. package/packages/@monomind/cli/.claude/commands/mastermind/research.md +6 -6
  31. package/packages/@monomind/cli/.claude/commands/mastermind/review.md +6 -6
  32. package/packages/@monomind/cli/.claude/commands/mastermind/runorg.md +4 -4
  33. package/packages/@monomind/cli/.claude/commands/mastermind/runorgv1.md +5 -5
  34. package/packages/@monomind/cli/.claude/commands/mastermind/sales.md +6 -6
  35. package/packages/@monomind/cli/.claude/commands/mastermind/skill-builder.md +5 -5
  36. package/packages/@monomind/cli/.claude/commands/mastermind/stoporg.md +3 -3
  37. package/packages/@monomind/cli/.claude/commands/mastermind/taskdev.md +5 -5
  38. package/packages/@monomind/cli/.claude/commands/mastermind/tdd.md +5 -5
  39. package/packages/@monomind/cli/.claude/commands/mastermind/techport.md +5 -5
  40. package/packages/@monomind/cli/.claude/commands/mastermind/verify.md +5 -5
  41. package/packages/@monomind/cli/.claude/commands/mastermind/worktree.md +5 -5
  42. package/packages/@monomind/cli/.claude/helpers/control-start.cjs +30 -0
  43. package/packages/@monomind/cli/.claude/helpers/utils/monograph.cjs +44 -12
  44. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/access.md → mastermind-access/SKILL.md} +2 -2
  45. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/activity.md → mastermind-activity/SKILL.md} +2 -2
  46. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/adapter-manager.md → mastermind-adapter-manager/SKILL.md} +2 -2
  47. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/adapters.md → mastermind-adapters/SKILL.md} +2 -2
  48. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/agent-detail.md → mastermind-agent-detail/SKILL.md} +2 -2
  49. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/agents.md → mastermind-agents/SKILL.md} +2 -2
  50. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/approval-detail.md → mastermind-approval-detail/SKILL.md} +2 -2
  51. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/approvev1.md → mastermind-approvev1/SKILL.md} +2 -2
  52. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/architect.md → mastermind-architect/SKILL.md} +7 -7
  53. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/autodev.md → mastermind-autodev/SKILL.md} +10 -10
  54. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/backup.md → mastermind-backup/SKILL.md} +2 -2
  55. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/bootstrap.md → mastermind-bootstrap/SKILL.md} +2 -2
  56. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/budgets.md → mastermind-budgets/SKILL.md} +2 -2
  57. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/build.md → mastermind-build/SKILL.md} +5 -5
  58. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/companies.md → mastermind-companies/SKILL.md} +2 -2
  59. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/content.md → mastermind-content/SKILL.md} +5 -5
  60. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/costs.md → mastermind-costs/SKILL.md} +2 -2
  61. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/createorg.md → mastermind-createorg/SKILL.md} +3 -3
  62. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/debug.md → mastermind-debug/SKILL.md} +4 -4
  63. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/_delegation.md → mastermind-delegation/SKILL.md} +1 -1
  64. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/design.md → mastermind-design/SKILL.md} +9 -9
  65. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/diagnose.md → mastermind-diagnose/SKILL.md} +2 -2
  66. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/env.md → mastermind-env/SKILL.md} +2 -2
  67. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/environments.md → mastermind-environments/SKILL.md} +2 -2
  68. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/execute.md → mastermind-execute/SKILL.md} +10 -10
  69. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/export.md → mastermind-export/SKILL.md} +2 -2
  70. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/finance.md → mastermind-finance/SKILL.md} +5 -5
  71. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/goal-detail.md → mastermind-goal-detail/SKILL.md} +2 -2
  72. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/goals.md → mastermind-goals/SKILL.md} +2 -2
  73. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/heartbeatv1.md → mastermind-heartbeatv1/SKILL.md} +2 -2
  74. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/idea.md → mastermind-idea/SKILL.md} +7 -7
  75. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/import.md → mastermind-import/SKILL.md} +2 -2
  76. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/inbox.md → mastermind-inbox/SKILL.md} +2 -2
  77. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/instance.md → mastermind-instance/SKILL.md} +2 -2
  78. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/instance-settings.md → mastermind-instance-settings/SKILL.md} +2 -2
  79. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/invite-landing.md → mastermind-invite-landing/SKILL.md} +2 -2
  80. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/invites.md → mastermind-invites/SKILL.md} +2 -2
  81. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/issue-detail.md → mastermind-issue-detail/SKILL.md} +2 -2
  82. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/issues.md → mastermind-issues/SKILL.md} +2 -2
  83. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/join-queue.md → mastermind-join-queue/SKILL.md} +2 -2
  84. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/liveness.md → mastermind-liveness/SKILL.md} +2 -2
  85. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/marketing.md → mastermind-marketing/SKILL.md} +8 -8
  86. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/memory.md → mastermind-memory/SKILL.md} +2 -2
  87. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/monitor.md → mastermind-monitor/SKILL.md} +2 -2
  88. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/my-issues.md → mastermind-my-issues/SKILL.md} +2 -2
  89. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/new-agent.md → mastermind-new-agent/SKILL.md} +2 -2
  90. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/ops.md → mastermind-ops/SKILL.md} +5 -5
  91. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/org-chart.md → mastermind-org-chart/SKILL.md} +2 -2
  92. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/org-settings.md → mastermind-org-settings/SKILL.md} +2 -2
  93. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/orgs.md → mastermind-orgs/SKILL.md} +1 -1
  94. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/orgstatus.md → mastermind-orgstatus/SKILL.md} +2 -2
  95. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/plan.md → mastermind-plan/SKILL.md} +7 -7
  96. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/plan-to-tasks.md → mastermind-plan-to-tasks/SKILL.md} +2 -2
  97. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/plugin-manager.md → mastermind-plugin-manager/SKILL.md} +2 -2
  98. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/plugin-settings.md → mastermind-plugin-settings/SKILL.md} +2 -2
  99. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/plugins.md → mastermind-plugins/SKILL.md} +2 -2
  100. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/profile.md → mastermind-profile/SKILL.md} +2 -2
  101. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/project-detail.md → mastermind-project-detail/SKILL.md} +2 -2
  102. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/project-workspace.md → mastermind-project-workspace/SKILL.md} +2 -2
  103. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/projects.md → mastermind-projects/SKILL.md} +2 -2
  104. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/_protocol.md → mastermind-protocol/SKILL.md} +3 -3
  105. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/release.md → mastermind-release/SKILL.md} +5 -5
  106. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/_repeat.md → mastermind-repeat/SKILL.md} +2 -2
  107. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/research.md → mastermind-research/SKILL.md} +5 -5
  108. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/review.md → mastermind-review/SKILL.md} +5 -5
  109. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/routine-detail.md → mastermind-routine-detail/SKILL.md} +2 -2
  110. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/routines.md → mastermind-routines/SKILL.md} +2 -2
  111. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/runorgv1.md → mastermind-runorgv1/SKILL.md} +2 -2
  112. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/sales.md → mastermind-sales/SKILL.md} +5 -5
  113. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/search.md → mastermind-search/SKILL.md} +2 -2
  114. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/secrets.md → mastermind-secrets/SKILL.md} +2 -2
  115. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/skill-builder.md → mastermind-skill-builder/SKILL.md} +16 -14
  116. package/packages/@monomind/cli/.claude/skills/mastermind-skills/{skills.md → SKILL.md} +2 -2
  117. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/stoporg.md → mastermind-stoporg/SKILL.md} +2 -2
  118. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/taskdev.md → mastermind-taskdev/SKILL.md} +6 -6
  119. package/packages/@monomind/cli/.claude/skills/{mastermind-skills → mastermind-taskdev}/implementer-prompt.md +1 -1
  120. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/tasks.md → mastermind-tasks/SKILL.md} +2 -2
  121. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/tdd.md → mastermind-tdd/SKILL.md} +4 -4
  122. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/techport.md → mastermind-techport/SKILL.md} +5 -5
  123. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/threads.md → mastermind-threads/SKILL.md} +2 -2
  124. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/tree-control.md → mastermind-tree-control/SKILL.md} +2 -2
  125. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/verify.md → mastermind-verify/SKILL.md} +1 -1
  126. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/wiki.md → mastermind-wiki/SKILL.md} +2 -2
  127. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/workspace-detail.md → mastermind-workspace-detail/SKILL.md} +2 -2
  128. package/packages/@monomind/cli/.claude/skills/{mastermind-skills/workspaces.md → mastermind-workspaces/SKILL.md} +2 -2
  129. package/packages/@monomind/cli/.claude/skills/monodesign/SKILL.md +114 -190
  130. package/packages/@monomind/cli/.claude/skills/monodesign/adapt.md +1 -1
  131. package/packages/@monomind/cli/.claude/skills/monodesign/agents/monodesign-asset-producer.md +4 -4
  132. package/packages/@monomind/cli/.claude/skills/monodesign/agents/monodesign-manual-edit-applier.md +103 -0
  133. package/packages/@monomind/cli/.claude/skills/monodesign/audit.md +1 -1
  134. package/packages/@monomind/cli/.claude/skills/monodesign/craft.md +2 -2
  135. package/packages/@monomind/cli/.claude/skills/monodesign/critique.md +1 -1
  136. package/packages/@monomind/cli/.claude/skills/monodesign/init.md +30 -0
  137. package/packages/@monomind/cli/.claude/skills/monodesign/layout.md +36 -0
  138. package/packages/@monomind/cli/.claude/skills/monodesign/live.md +19 -44
  139. package/packages/@monomind/cli/.claude/skills/monodesign/reference/adapt.md +122 -0
  140. package/packages/@monomind/cli/.claude/skills/monodesign/reference/adapt.native.md +58 -0
  141. package/packages/@monomind/cli/.claude/skills/monodesign/reference/android.md +40 -0
  142. package/packages/@monomind/cli/.claude/skills/monodesign/reference/animate.md +39 -11
  143. package/packages/@monomind/cli/.claude/skills/monodesign/reference/antipatterns-catalog.md +22 -16
  144. package/packages/@monomind/cli/.claude/skills/monodesign/reference/audit.md +5 -3
  145. package/packages/@monomind/cli/.claude/skills/monodesign/reference/audit.native.md +139 -0
  146. package/packages/@monomind/cli/.claude/skills/monodesign/reference/bolder.md +71 -64
  147. package/packages/@monomind/cli/.claude/skills/monodesign/reference/brand.md +12 -18
  148. package/packages/@monomind/cli/.claude/skills/monodesign/reference/clarify.md +114 -0
  149. package/packages/@monomind/cli/.claude/skills/monodesign/reference/codex.md +4 -6
  150. package/packages/@monomind/cli/.claude/skills/monodesign/reference/colorize.md +108 -5
  151. package/packages/@monomind/cli/.claude/skills/monodesign/reference/craft.md +70 -143
  152. package/packages/@monomind/cli/.claude/skills/monodesign/reference/critique.md +635 -68
  153. package/packages/@monomind/cli/.claude/skills/monodesign/reference/delight.md +1 -1
  154. package/packages/@monomind/cli/.claude/skills/monodesign/reference/distill.md +1 -1
  155. package/packages/@monomind/cli/.claude/skills/monodesign/reference/document.md +24 -22
  156. package/packages/@monomind/cli/.claude/skills/monodesign/reference/extract.md +1 -1
  157. package/packages/@monomind/cli/.claude/skills/monodesign/reference/hooks.md +22 -29
  158. package/packages/@monomind/cli/.claude/skills/monodesign/reference/init.md +221 -0
  159. package/packages/@monomind/cli/.claude/skills/monodesign/reference/interaction-design.md +0 -6
  160. package/packages/@monomind/cli/.claude/skills/monodesign/reference/ios.md +45 -0
  161. package/packages/@monomind/cli/.claude/skills/monodesign/reference/layout.md +57 -13
  162. package/packages/@monomind/cli/.claude/skills/monodesign/reference/live.md +159 -63
  163. package/packages/@monomind/cli/.claude/skills/monodesign/reference/overdrive.md +1 -1
  164. package/packages/@monomind/cli/.claude/skills/monodesign/reference/personas.md +1 -1
  165. package/packages/@monomind/cli/.claude/skills/monodesign/reference/polish.md +16 -8
  166. package/packages/@monomind/cli/.claude/skills/monodesign/reference/pre-delivery-checklist.md +1 -1
  167. package/packages/@monomind/cli/.claude/skills/monodesign/reference/product.md +1 -3
  168. package/packages/@monomind/cli/.claude/skills/monodesign/reference/quieter.md +1 -1
  169. package/packages/@monomind/cli/.claude/skills/monodesign/reference/shape.md +27 -13
  170. package/packages/@monomind/cli/.claude/skills/monodesign/reference/teach.md +6 -152
  171. package/packages/@monomind/cli/.claude/skills/monodesign/reference/typeset.md +180 -3
  172. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/command-metadata.json +94 -0
  173. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/context-signals.mjs +227 -0
  174. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/context.mjs +1062 -0
  175. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/critique-storage.mjs +243 -0
  176. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detect-csp.mjs +199 -0
  177. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detect.mjs +34 -0
  178. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/browser/injected/index.mjs +1938 -0
  179. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/cli/main.mjs +322 -0
  180. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/design-system.mjs +815 -0
  181. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/detect-antipatterns-browser.js +5246 -0
  182. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/detect-antipatterns.mjs +51 -0
  183. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/engines/browser/detect-url.mjs +260 -0
  184. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/engines/browser/drivers.mjs +259 -0
  185. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/engines/regex/detect-text.mjs +574 -0
  186. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/engines/static-html/css-cascade.mjs +1016 -0
  187. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/engines/static-html/detect-html.mjs +235 -0
  188. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/engines/visual/screenshot-contrast.mjs +199 -0
  189. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/findings.mjs +13 -0
  190. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/node/file-system.mjs +199 -0
  191. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/profile/profiler.mjs +167 -0
  192. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/registry/antipatterns.mjs +515 -0
  193. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/rules/checks.mjs +2704 -0
  194. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/shared/color.mjs +125 -0
  195. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/shared/constants.mjs +102 -0
  196. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/shared/fonts.mjs +31 -0
  197. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/shared/inline-ignores.mjs +149 -0
  198. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/shared/page.mjs +8 -0
  199. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/hook-admin.mjs +662 -0
  200. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/hook-before-edit.mjs +517 -0
  201. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/hook-lib.mjs +1777 -0
  202. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/hook.mjs +62 -0
  203. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/lib/design-parser.mjs +843 -0
  204. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/lib/is-generated.mjs +70 -0
  205. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/lib/monodesign-config.mjs +641 -0
  206. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/lib/monodesign-paths.mjs +130 -0
  207. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/lib/provider.mjs +5 -0
  208. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/lib/target-args.mjs +43 -0
  209. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/browser-script-parts.mjs +51 -0
  210. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/completion.mjs +20 -0
  211. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/event-validation.mjs +138 -0
  212. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/insert-ui.mjs +459 -0
  213. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/manual-apply.mjs +940 -0
  214. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/manual-edit-routes.mjs +358 -0
  215. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/manual-edits-buffer.mjs +153 -0
  216. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/session-store.mjs +290 -0
  217. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/svelte-component.mjs +827 -0
  218. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/sveltekit-adapter.mjs +275 -0
  219. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/ui-core.mjs +181 -0
  220. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/vocabulary.mjs +37 -0
  221. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-accept.mjs +813 -0
  222. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-browser-dom.js +147 -0
  223. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-browser-session.js +124 -0
  224. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-browser.js +11241 -0
  225. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-commit-manual-edits.mjs +1242 -0
  226. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-complete.mjs +76 -0
  227. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-copy-edit-agent.mjs +684 -0
  228. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-discard-manual-edits.mjs +52 -0
  229. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-inject.mjs +584 -0
  230. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-insert.mjs +273 -0
  231. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-manual-edit-evidence.mjs +364 -0
  232. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-poll.mjs +385 -0
  233. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-resume.mjs +95 -0
  234. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-server.mjs +1138 -0
  235. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-status.mjs +62 -0
  236. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-target.mjs +31 -0
  237. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-wrap.mjs +895 -0
  238. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live.mjs +298 -0
  239. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/modern-screenshot.umd.js +15 -0
  240. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/palette.mjs +634 -0
  241. package/packages/@monomind/cli/.claude/skills/monodesign/scripts/pin.mjs +222 -0
  242. package/packages/@monomind/cli/.claude/skills/monodesign/teach.md +7 -58
  243. package/packages/@monomind/cli/dist/src/commands/design-detect.d.ts +7 -1
  244. package/packages/@monomind/cli/dist/src/commands/design-detect.js +70 -38
  245. package/packages/@monomind/cli/dist/src/commands/design-palette.d.ts +1 -1
  246. package/packages/@monomind/cli/dist/src/commands/design-palette.js +3 -3
  247. package/packages/@monomind/cli/dist/src/commands/doc.js +72 -15
  248. package/packages/@monomind/cli/dist/src/commands/doctor-project-checks.d.ts +4 -0
  249. package/packages/@monomind/cli/dist/src/commands/doctor-project-checks.js +23 -0
  250. package/packages/@monomind/cli/dist/src/commands/doctor.js +3 -3
  251. package/packages/@monomind/cli/dist/src/commands/org.js +109 -9
  252. package/packages/@monomind/cli/dist/src/init/executor.js +14 -3
  253. package/packages/@monomind/cli/dist/src/knowledge/document-pipeline.d.ts +2 -0
  254. package/packages/@monomind/cli/dist/src/knowledge/document-pipeline.js +1 -0
  255. package/packages/@monomind/cli/dist/src/mcp-tools/knowledge-tools.js +38 -7
  256. package/packages/@monomind/cli/dist/src/mcp-tools/memory-tools.d.ts +8 -3
  257. package/packages/@monomind/cli/dist/src/mcp-tools/memory-tools.js +193 -31
  258. package/packages/@monomind/cli/dist/src/memory/memory-bridge.d.ts +33 -0
  259. package/packages/@monomind/cli/dist/src/memory/memory-bridge.js +169 -18
  260. package/packages/@monomind/cli/dist/src/memory/memory-kg.d.ts +185 -0
  261. package/packages/@monomind/cli/dist/src/memory/memory-kg.js +449 -0
  262. package/packages/@monomind/cli/dist/src/memory/query-router.d.ts +44 -0
  263. package/packages/@monomind/cli/dist/src/memory/query-router.js +113 -0
  264. package/packages/@monomind/cli/dist/src/orgrt/daemon.d.ts +18 -0
  265. package/packages/@monomind/cli/dist/src/orgrt/daemon.js +249 -12
  266. package/packages/@monomind/cli/dist/src/orgrt/migrate.js +7 -0
  267. package/packages/@monomind/cli/dist/src/orgrt/policy.js +7 -0
  268. package/packages/@monomind/cli/dist/src/orgrt/session.d.ts +24 -1
  269. package/packages/@monomind/cli/dist/src/orgrt/session.js +18 -3
  270. package/packages/@monomind/cli/dist/src/orgrt/templates.d.ts +1 -0
  271. package/packages/@monomind/cli/dist/src/orgrt/templates.js +9 -4
  272. package/packages/@monomind/cli/dist/src/orgrt/types.d.ts +15 -0
  273. package/packages/@monomind/cli/dist/src/orgrt/types.js +2 -0
  274. package/packages/@monomind/cli/dist/src/ui/dashboard.html +154 -6
  275. package/packages/@monomind/cli/dist/src/ui/orgs.html +24 -0
  276. package/packages/@monomind/cli/dist/src/ui/server.mjs +211 -13
  277. package/packages/@monomind/cli/package.json +6 -4
  278. /package/packages/@monomind/cli/.claude/skills/{mastermind-skills/_agent-select.md → mastermind-agent-select/SKILL.md} +0 -0
  279. /package/packages/@monomind/cli/.claude/skills/{mastermind-skills/finish.md → mastermind-finish/SKILL.md} +0 -0
  280. /package/packages/@monomind/cli/.claude/skills/{mastermind-skills/_intake.md → mastermind-intake/SKILL.md} +0 -0
  281. /package/packages/@monomind/cli/.claude/skills/{mastermind-skills → mastermind-marketing}/references/copywriting-frameworks.md +0 -0
  282. /package/packages/@monomind/cli/.claude/skills/{mastermind-skills → mastermind-marketing}/references/persuasion-psychology.md +0 -0
  283. /package/packages/@monomind/cli/.claude/skills/{mastermind-skills/monotask.md → mastermind-monotask/SKILL.md} +0 -0
  284. /package/packages/@monomind/cli/.claude/skills/{mastermind-skills/receive-review.md → mastermind-receive-review/SKILL.md} +0 -0
  285. /package/packages/@monomind/cli/.claude/skills/{mastermind-skills/runorg.md → mastermind-runorg/SKILL.md} +0 -0
  286. /package/packages/@monomind/cli/.claude/skills/{mastermind-skills → mastermind-taskdev}/code-quality-reviewer-prompt.md +0 -0
  287. /package/packages/@monomind/cli/.claude/skills/{mastermind-skills → mastermind-taskdev}/final-reviewer-prompt.md +0 -0
  288. /package/packages/@monomind/cli/.claude/skills/{mastermind-skills → mastermind-taskdev}/spec-reviewer-prompt.md +0 -0
  289. /package/packages/@monomind/cli/.claude/skills/{mastermind-skills/worktree.md → mastermind-worktree/SKILL.md} +0 -0
@@ -426,8 +426,53 @@ html, body { height: 100%; background: var(--bg); color: var(--text-hi); font-fa
426
426
  .oms-val { font-size: 12px; color: var(--text-hi); word-break: break-word; line-height: 1.4; }
427
427
 
428
428
  /* SVG org chart */
429
- .org-chart-wrap { background: var(--surface); border: 1px solid var(--border); border-radius: var(--r); overflow: hidden; margin-bottom: 12px; }
429
+ .org-chart-wrap { position: relative; background: var(--surface); border: 1px solid var(--border); border-radius: var(--r); overflow: hidden; margin-bottom: 12px; }
430
430
  .org-chart-svg { width: 100%; display: block; }
431
+ .v2-chart-expand {
432
+ position: absolute; top: 8px; right: 8px; z-index: 3;
433
+ width: 28px; height: 28px; padding: 0;
434
+ display: grid; place-items: center;
435
+ font-size: 14px; line-height: 1; cursor: pointer;
436
+ color: oklch(60% 0.01 75); background: oklch(16% 0.01 55 / 0.85);
437
+ border: 1px solid var(--border); border-radius: 6px;
438
+ transition: color 0.15s, border-color 0.15s;
439
+ }
440
+ .v2-chart-expand:hover { color: oklch(80% 0.12 75); border-color: oklch(72% 0.18 75 / 0.5); }
441
+ #v2-chart-modal {
442
+ position: fixed; inset: 0; z-index: 1200;
443
+ display: flex; flex-direction: column;
444
+ background: oklch(9% 0.008 55 / 0.985);
445
+ opacity: 0; transition: opacity 0.3s cubic-bezier(0.22, 1, 0.36, 1);
446
+ }
447
+ #v2-chart-modal.open { opacity: 1; }
448
+ #v2-chart-modal .v2cm-head {
449
+ display: flex; align-items: center; justify-content: space-between;
450
+ padding: 14px 20px; border-bottom: 1px solid var(--border); flex: 0 0 auto;
451
+ }
452
+ #v2-chart-modal .v2cm-title {
453
+ font-size: 14px; font-weight: 600; letter-spacing: 0.02em; color: var(--text-hi, oklch(88% 0.005 75));
454
+ }
455
+ #v2-chart-modal .v2cm-close {
456
+ width: 32px; height: 32px; padding: 0; display: grid; place-items: center;
457
+ font-size: 15px; cursor: pointer; color: oklch(60% 0.01 75);
458
+ background: oklch(16% 0.01 55); border: 1px solid var(--border); border-radius: 7px;
459
+ transition: color 0.15s, border-color 0.15s;
460
+ }
461
+ #v2-chart-modal .v2cm-close:hover { color: oklch(85% 0.01 75); border-color: oklch(50% 0.01 75); }
462
+ #v2-chart-modal .v2cm-body {
463
+ flex: 1 1 auto; min-height: 0; overflow: auto; padding: 18px 24px 24px;
464
+ transform: scale(0.985); transition: transform 0.35s cubic-bezier(0.22, 1, 0.36, 1);
465
+ }
466
+ #v2-chart-modal.open .v2cm-body { transform: scale(1); }
467
+ #v2-chart-modal .org-chart-wrap { border: none; background: transparent; }
468
+ #v2-chart-modal .org-chart-svg { min-height: calc(100vh - 260px) !important; max-height: none; }
469
+ .v2cm-placeholder {
470
+ padding: 40px 16px; text-align: center;
471
+ color: oklch(48% 0.005 75); font-size: 12px; letter-spacing: 0.02em;
472
+ }
473
+ @media (prefers-reduced-motion: reduce) {
474
+ #v2-chart-modal, #v2-chart-modal .v2cm-body { transition: none; transform: none; }
475
+ }
431
476
  .v2-bubble-inner {
432
477
  background: oklch(18% 0.01 55 / 0.95);
433
478
  border: 1px solid oklch(72% 0.18 75 / 0.4);
@@ -6050,6 +6095,43 @@ function _v2OrgIsLeader(r) {
6050
6095
  || r.agent_type === 'coordinator' || r.agent_type === 'devbot-orchestrator';
6051
6096
  }
6052
6097
 
6098
+ // ── Full-page chart modal ──────────────────────────────────────────────
6099
+ // While open, v2RenderOrgChart() renders into the modal body (wider viewBox)
6100
+ // and the inline pane holds a placeholder. Close restores the inline chart.
6101
+ let _v2ChartExpanded = false;
6102
+ function _v2ChartEsc(e) { if (e.key === 'Escape') v2ToggleChartExpand(false); }
6103
+ function v2ToggleChartExpand(open) {
6104
+ _v2ChartExpanded = !!open;
6105
+ let m = document.getElementById('v2-chart-modal');
6106
+ if (open) {
6107
+ if (!m) {
6108
+ m = document.createElement('div');
6109
+ m.id = 'v2-chart-modal';
6110
+ m.setAttribute('role', 'dialog');
6111
+ m.setAttribute('aria-modal', 'true');
6112
+ m.setAttribute('aria-label', 'Org chart, expanded view');
6113
+ m.innerHTML = `
6114
+ <div class="v2cm-head">
6115
+ <div class="v2cm-title"></div>
6116
+ <button class="v2cm-close" onclick="v2ToggleChartExpand(false)" aria-label="Close expanded chart">✕</button>
6117
+ </div>
6118
+ <div id="v2-chart-modal-body" class="v2cm-body"></div>`;
6119
+ document.body.appendChild(m);
6120
+ }
6121
+ m.querySelector('.v2cm-title').textContent = _v2SelOrg || 'Org chart';
6122
+ const inlinePane = document.getElementById('odt-chart');
6123
+ if (inlinePane) inlinePane.innerHTML = '<div class="v2cm-placeholder">Chart is expanded to full page · press Esc or ✕ to bring it back</div>';
6124
+ document.addEventListener('keydown', _v2ChartEsc);
6125
+ requestAnimationFrame(() => m.classList.add('open'));
6126
+ v2RenderOrgChart();
6127
+ m.querySelector('.v2cm-close').focus();
6128
+ } else {
6129
+ document.removeEventListener('keydown', _v2ChartEsc);
6130
+ if (m) m.remove();
6131
+ v2RenderOrgChart();
6132
+ }
6133
+ }
6134
+
6053
6135
  function v2RenderOrgChart() {
6054
6136
  if (!_v2SelOrg) return;
6055
6137
  const d = _v2OrgData;
@@ -6060,7 +6142,17 @@ function v2RenderOrgChart() {
6060
6142
  const goalText = d.goal || '—';
6061
6143
  const topo = (d.topology || 'hierarchical').toLowerCase();
6062
6144
  const created = d.created_at ? new Date(d.created_at).toLocaleDateString('en', {month:'short',day:'numeric',year:'numeric'}) : '—';
6063
- const pane = document.getElementById('odt-chart');
6145
+ // Expanded mode renders into the full-page modal instead of the inline pane.
6146
+ // Exactly ONE chart instance exists at a time — the bubble/letter/particle
6147
+ // animation code queries singleton ids (v2-org-svg, v2oc-letters, …).
6148
+ const pane = _v2ChartExpanded
6149
+ ? document.getElementById('v2-chart-modal-body')
6150
+ : document.getElementById('odt-chart');
6151
+ if (!pane) return;
6152
+ if (_v2ChartExpanded) {
6153
+ const _t = document.querySelector('#v2-chart-modal .v2cm-title');
6154
+ if (_t) _t.textContent = _v2SelOrg;
6155
+ }
6064
6156
 
6065
6157
  // ── color palette ─────────────────────────────────────
6066
6158
  const COLORS = [
@@ -6085,7 +6177,19 @@ function v2RenderOrgChart() {
6085
6177
  }
6086
6178
 
6087
6179
  // ── layout positions ──────────────────────────────────
6088
- const W = 720, R = 42, PAD_X = R + 20, PAD_Y = R + 24;
6180
+ // Expanded: width scales with head-count so nodes never overlap (inline
6181
+ // keeps the compact 720 viewBox that fits the tab column).
6182
+ let W = _v2ChartExpanded ? Math.max(1100, roles.length * 130) : 720;
6183
+ // Crowded orgs (8+ roles) get smaller rings + serpentine re-flow in BOTH
6184
+ // views, so topology reads instead of a wall of overlapping circles. Top
6185
+ // padding reserves room for activity bubbles (34px box floating 46px above
6186
+ // the ring) so message pop-ups never clip.
6187
+ const _crowded = roles.length > 7;
6188
+ const R = (_v2ChartExpanded || _crowded) ? 34 : 42;
6189
+ // Side padding must cover the 140px-wide activity bubble (70 each side of
6190
+ // a node center) or edge-column bubbles clip against the chart border.
6191
+ const PAD_X = (_v2ChartExpanded || _crowded) ? Math.max(R + 20, 78) : R + 20;
6192
+ const PAD_Y = (_v2ChartExpanded || _crowded) ? R + 96 : R + 24;
6089
6193
  const roleIds = new Set(roles.map(r => r.id));
6090
6194
  // all leaders at depth 0 (supports co-lead orgs)
6091
6195
  const leaders = roles.filter(_v2OrgIsLeader);
@@ -6182,6 +6286,31 @@ function v2RenderOrgChart() {
6182
6286
  _hubAndSpoke();
6183
6287
  }
6184
6288
 
6289
+ // ── crowded re-flow: break single-row walls into a serpentine grid ──
6290
+ // A 12-role chain or hub laid out on one line says nothing about who talks
6291
+ // to whom. When the layout degenerates to <=2 distinct rows with a crowded
6292
+ // row, re-flow in reading order into rows of ~6, reversing every other row
6293
+ // so consecutive nodes stay physically adjacent across wraps. Applies in
6294
+ // both views for 8+ roles (the inline chart scales the viewBox down).
6295
+ if (_crowded) {
6296
+ const _rowsSeen = new Set(Object.values(pos).map(p => Math.round(p.y)));
6297
+ const _widest = Math.max(..._rowsSeen.size ? [..._rowsSeen].map(y => Object.values(pos).filter(p => Math.round(p.y) === y).length) : [0]);
6298
+ if (_rowsSeen.size <= 2 && _widest > 7) {
6299
+ const seq = [...roles].sort((a, b) => (pos[a.id].y - pos[b.id].y) || (pos[a.id].x - pos[b.id].x));
6300
+ const perRow = Math.min(6, Math.ceil(seq.length / Math.ceil(seq.length / 6)));
6301
+ const COL_W = 185, ROW_H = 205;
6302
+ seq.forEach((r, i) => {
6303
+ const row = Math.floor(i / perRow);
6304
+ let col = i % perRow;
6305
+ if (row % 2 === 1) col = perRow - 1 - col; // serpentine
6306
+ pos[r.id] = { x: PAD_X + col * COL_W, y: PAD_Y + row * ROW_H };
6307
+ });
6308
+ const rows = Math.ceil(seq.length / perRow);
6309
+ W = PAD_X * 2 + (perRow - 1) * COL_W;
6310
+ _layoutH = PAD_Y + (rows - 1) * ROW_H + R + 28;
6311
+ }
6312
+ }
6313
+
6185
6314
  const H = _layoutH || (hasSubs ? 320 : 180);
6186
6315
 
6187
6316
  // ── build edge SVG strings with offset parallel arrows ─
@@ -6217,7 +6346,19 @@ function v2RenderOrgChart() {
6217
6346
  } else {
6218
6347
  stroke='oklch(65% 0.15 150)'; dash=''; marker='v2ah'; opacity=0.6; sw=1.5;
6219
6348
  }
6220
- edgesHTML += `<path id="${pid}" class="v2oc-edge" d="M${x1},${y1} L${x2},${y2}" stroke="${stroke}" stroke-opacity="${opacity}" stroke-width="${sw}" ${dash?`stroke-dasharray="${dash}"`:''} fill="none" marker-end="url(#${marker})"/>`;
6349
+ // Long spans (the boss fan-out crossing rows) bow outward as quadratic
6350
+ // curves so crossings separate; short neighbor links stay straight.
6351
+ const _spanLen = len - (trimS + trimE);
6352
+ let dAttr;
6353
+ if (_spanLen > 260) {
6354
+ const sag = Math.min(56, _spanLen * 0.14) * edgeSide * canonDir;
6355
+ const mx = ((+x1 + +x2) / 2 + px * sag).toFixed(1);
6356
+ const my = ((+y1 + +y2) / 2 + py * sag).toFixed(1);
6357
+ dAttr = `M${x1},${y1} Q${mx},${my} ${x2},${y2}`;
6358
+ } else {
6359
+ dAttr = `M${x1},${y1} L${x2},${y2}`;
6360
+ }
6361
+ edgesHTML += `<path id="${pid}" class="v2oc-edge" d="${dAttr}" stroke="${stroke}" stroke-opacity="${opacity}" stroke-width="${sw}" ${dash?`stroke-dasharray="${dash}"`:''} fill="none" marker-end="url(#${marker})"/>`;
6221
6362
 
6222
6363
  // Animated flow particle on command edges
6223
6364
  if (edge.type === 'command') {
@@ -6269,13 +6410,15 @@ function v2RenderOrgChart() {
6269
6410
  });
6270
6411
 
6271
6412
  // ── assemble HTML ─────────────────────────────────────
6413
+ // Expanded view: the chart owns the space — meta cards stay in the tab.
6272
6414
  pane.innerHTML = `
6273
- <div class="org-meta-strip">
6415
+ ${_v2ChartExpanded ? '' : `<div class="org-meta-strip">
6274
6416
  <div class="oms-cell"><div class="oms-lbl">Goal</div><div class="oms-val" style="color:var(--text-mid);font-size:11px;line-height:1.4">${esc(goalText)}</div></div>
6275
6417
  <div class="oms-cell"><div class="oms-lbl">Topology</div><div class="oms-val">${esc(topo)}</div></div>
6276
6418
  <div class="oms-cell"><div class="oms-lbl">Created</div><div class="oms-val" style="color:var(--text-mid)">${esc(created)}</div></div>
6277
- </div>
6419
+ </div>`}
6278
6420
  <div class="org-chart-wrap">
6421
+ ${_v2ChartExpanded ? '' : `<button class="v2-chart-expand" onclick="v2ToggleChartExpand(true)" title="Expand chart to full page" aria-label="Expand chart to full page">⛶</button>`}
6279
6422
  <svg class="org-chart-svg" id="v2-org-svg" viewBox="0 0 ${W} ${H}" style="min-height:${Math.round(H * 0.5)}px">
6280
6423
  <defs>
6281
6424
  <marker id="v2ac" markerWidth="7" markerHeight="7" refX="6" refY="3.5" orient="auto"><path d="M0,0.5 L0,6.5 L6,3.5 z" fill="oklch(72% 0.18 75 / 0.8)"/></marker>
@@ -13633,8 +13776,13 @@ async function secondBrainSearch() {
13633
13776
  results.map(function (res) {
13634
13777
  var srcTag = (res.tags || []).find(function (t) { return t.indexOf('src:') === 0; });
13635
13778
  var label = srcTag ? srcTag.slice(4).split('/').slice(-2).join('/') : (res.key || '');
13779
+ // Surface badge: the endpoint fuses chunks + KG triplets + rules +
13780
+ // pattern memories (RRF); show non-chunk kinds so users see where a
13781
+ // hit came from.
13782
+ var kindBadge = res.triplet ? 'kg' : (res.rule ? 'rule' : (res.memory ? 'memory' : ''));
13636
13783
  return '<div style="border:1px solid var(--border);border-radius:8px;padding:8px 10px;margin-bottom:6px">' +
13637
13784
  '<div style="font-size:10px;color:var(--text-lo);margin-bottom:3px">' + esc(label) +
13785
+ (kindBadge ? ' <span style="color:var(--accent);border:1px solid var(--accent);border-radius:4px;padding:0 4px">' + kindBadge + '</span>' : '') +
13638
13786
  (res.global ? ' <span style="color:var(--accent-dim,#888);border:1px solid var(--border);border-radius:4px;padding:0 4px">global</span>' : '') +
13639
13787
  ' <span style="color:var(--accent)">' + (typeof res.score === 'number' ? res.score.toFixed(2) : '') + '</span></div>' +
13640
13788
  '<div style="font-size:12px;white-space:pre-wrap;max-height:120px;overflow:hidden">' + esc(String(res.content || '').slice(0, 600)) + '</div>' +
@@ -976,6 +976,7 @@ html, body {
976
976
  <div id="health-grid" class="health-grid"></div>
977
977
  <div id="health-detail"></div>
978
978
  <div id="health-history"></div>
979
+ <div id="health-memory"></div>
979
980
  </div>
980
981
  </div>
981
982
 
@@ -1762,6 +1763,7 @@ function renderHealth() {
1762
1763
  }
1763
1764
 
1764
1765
  loadRunHistory();
1766
+ loadOrgMemory();
1765
1767
  }
1766
1768
 
1767
1769
  // Run history (history.jsonl, written by the daemon at each stopOrg): outcome,
@@ -1793,6 +1795,28 @@ async function loadRunHistory() {
1793
1795
  } catch (_) { el.innerHTML = ''; }
1794
1796
  }
1795
1797
 
1798
+ // Org memory: knowledge-graph size, learned entities, and distilled rules
1799
+ // (accumulated across runs via org_learn / heuristic extraction).
1800
+ async function loadOrgMemory() {
1801
+ const el = document.getElementById('health-memory');
1802
+ if (!el || !selectedOrg) return;
1803
+ try {
1804
+ const listOrg = allOrgs.find(o => o.name === selectedOrg) || {};
1805
+ const r = await fetch(`/api/orgs/${encodeURIComponent(selectedOrg)}/memory?dir=${encodeURIComponent(listOrg.projectDir || '')}`);
1806
+ if (!r.ok) { el.innerHTML = ''; return; }
1807
+ const m = await r.json();
1808
+ if (!m.nodes && !m.rules) { el.innerHTML = ''; return; }
1809
+ el.innerHTML = `
1810
+ <div style="margin-top:16px">
1811
+ <div style="font-size:8px;letter-spacing:2px;color:var(--dim);margin-bottom:8px">ORG MEMORY — ${Number(m.nodes) || 0} ENTITIES · ${Number(m.edges) || 0} RELATIONS · ${Number(m.rules) || 0} RULES</div>
1812
+ ${Array.isArray(m.glossary) && m.glossary.length ? `
1813
+ <div style="font-size:9px;color:var(--muted);line-height:1.7">${m.glossary.map(g => `<span style="border:1px solid oklch(50% 0 0 / 0.25);border-radius:3px;padding:1px 5px;margin-right:4px;white-space:nowrap;display:inline-block;margin-bottom:3px">${esc(g)}</span>`).join('')}</div>` : ''}
1814
+ ${Array.isArray(m.ruleTexts) && m.ruleTexts.length ? m.ruleTexts.map(t => `
1815
+ <div style="font-size:9px;padding:4px 0;border-bottom:1px solid oklch(50% 0 0 / 0.1);color:var(--muted)">▸ ${esc(t)}</div>`).join('') : ''}
1816
+ </div>`;
1817
+ } catch (_) { el.innerHTML = ''; }
1818
+ }
1819
+
1796
1820
  // ── CHAT TAB ──────────────────────────────────────────────────────
1797
1821
  let chatSessions = []; // all sessions from /api/mastermind/sessions
1798
1822
  let chatCurrentId = null; // currently viewed session id
@@ -686,11 +686,72 @@ export async function startServer({ port = 4242, projectDir, openBrowser = true
686
686
  // back via an auth header or query param on non-GET requests.
687
687
  const authBytes = crypto.randomBytes(24);
688
688
  const dashboardAuthValue = authBytes.toString('hex');
689
- try {
690
- const authFileDir = path.join(projectDir || process.cwd(), '.monomind');
691
- fs.mkdirSync(authFileDir, { recursive: true });
692
- fs.writeFileSync(path.join(authFileDir, 'dashboard-token'), dashboardAuthValue, { mode: 0o600 });
693
- } catch (_) {}
689
+ // A project has ONE primary token file (read by hooks, the CLI, and cross-
690
+ // project callers). Writing it eagerly here would let a SECONDARY instance
691
+ // (scratch port, tests, a second `serve`) clobber the live control server's
692
+ // token after which every hook call to the primary 401s until it restarts,
693
+ // silently degrading per-prompt Second Brain injection to keyword fallback.
694
+ // So the write is deferred to bind time and gated: primary instances write
695
+ // `dashboard-token`; secondaries write `dashboard-token-<port>` instead.
696
+ async function writeDashboardToken(actualPort) {
697
+ try {
698
+ actualPort = Number(actualPort);
699
+ const authFileDir = path.join(projectDir || process.cwd(), '.monomind');
700
+ fs.mkdirSync(authFileDir, { recursive: true });
701
+ // Primary = control.json absent/invalid, or it names this port, or
702
+ // nothing answers on the port it names (stale record from a previous
703
+ // run). Liveness is an HTTP probe, not a pid check — control-start may
704
+ // record pid 0 for adopted servers, and dead pids get recycled; a probe
705
+ // is authoritative either way. Anything answering on the claimed port
706
+ // means "don't clobber" (conservative on ambiguity).
707
+ let primary = true;
708
+ try {
709
+ const ctl = JSON.parse(fs.readFileSync(path.join(authFileDir, 'control.json'), 'utf8'));
710
+ const ctlPort = Number(ctl.port || (String(ctl.url || '').match(/:(\d+)/) || [])[1]);
711
+ if (ctlPort && ctlPort !== actualPort && !(Number.isInteger(ctl.pid) && ctl.pid === process.pid)) {
712
+ try {
713
+ await fetch(`http://127.0.0.1:${ctlPort}/api/status`, { signal: AbortSignal.timeout(800) });
714
+ primary = false; // something answered — a live server owns the primary token
715
+ } catch (_) { primary = true; } // nothing answering — stale record
716
+ }
717
+ } catch (_) { /* no readable control.json — treat as primary */ }
718
+ fs.writeFileSync(
719
+ path.join(authFileDir, primary ? 'dashboard-token' : `dashboard-token-${actualPort}`),
720
+ dashboardAuthValue, { mode: 0o600 },
721
+ );
722
+ // Sweep stale secondary tokens (dead scratch/test instances) so they
723
+ // don't accumulate as orphaned credential files.
724
+ // monolean: age-based sweep only — no on-exit unlink plumbing.
725
+ try {
726
+ const weekMs = 7 * 24 * 3600 * 1000;
727
+ for (const f of fs.readdirSync(authFileDir)) {
728
+ if (!/^dashboard-token-\d+$/.test(f) || f === `dashboard-token-${actualPort}`) continue;
729
+ const fp = path.join(authFileDir, f);
730
+ if (Date.now() - fs.statSync(fp).mtimeMs > weekMs) fs.unlinkSync(fp);
731
+ }
732
+ } catch (_) {}
733
+ } catch (_) {}
734
+ }
735
+ // Propagate the fresh token to every known project whose control.json points
736
+ // at this server — otherwise each restart silently orphans cross-project
737
+ // callers (their curls/CLI reads a stale token and 401s forever).
738
+ // Called after bind so the match uses the ACTUAL bound port.
739
+ function propagateDashboardToken(actualPort) {
740
+ try {
741
+ const _kpFile = path.join(projectDir || process.cwd(), 'data', 'known-projects.json');
742
+ if (!fs.existsSync(_kpFile)) return;
743
+ for (const _kp of JSON.parse(fs.readFileSync(_kpFile, 'utf8'))) {
744
+ try {
745
+ const _kpMono = path.join(_kp, '.monomind');
746
+ const _kpCtl = JSON.parse(fs.readFileSync(path.join(_kpMono, 'control.json'), 'utf8'));
747
+ // Only pair projects that direct their traffic to this server's port.
748
+ if (_kpCtl && String(_kpCtl.url || '').includes(`:${actualPort}`)) {
749
+ fs.writeFileSync(path.join(_kpMono, 'dashboard-token'), dashboardAuthValue, { mode: 0o600 });
750
+ }
751
+ } catch (_) { /* project missing/unreadable — skip */ }
752
+ }
753
+ } catch (_) {}
754
+ }
694
755
 
695
756
  // Parse a .claude/agents/*.md definition into { name, description, capability{}, document }.
696
757
  // Tolerant line-based parse of the YAML frontmatter (expertise / task_types as lists).
@@ -763,7 +824,14 @@ export async function startServer({ port = 4242, projectDir, openBrowser = true
763
824
  eventProject = _norm;
764
825
  }
765
826
  }
766
- const root = eventProject || projectDir || process.cwd();
827
+ // Forwarder events omit `project` on everything but org:start — resolve the
828
+ // org's home from known-projects so run-file writes land in the ORG's git
829
+ // dir, not the server's (the dashboard reads the org project's run files).
830
+ let _orgHome = null;
831
+ if (!eventProject && event.org) {
832
+ try { _orgHome = _resolveOrgProjectDir(String(event.org).trim(), projectDir || process.cwd()); } catch (_) {}
833
+ }
834
+ const root = eventProject || _orgHome || projectDir || process.cwd();
767
835
  const dataDir = path.join(root, 'data');
768
836
  try { fs.mkdirSync(dataDir, { recursive: true }); } catch (_) {}
769
837
  // Track known project dirs for aggregated session listing
@@ -1069,7 +1137,55 @@ export async function startServer({ port = 4242, projectDir, openBrowser = true
1069
1137
  } catch (_) { /* watcher callback must never throw */ }
1070
1138
  });
1071
1139
  activeWatchers.push(_sbWatcher);
1072
- } catch (_) { /* recursive watch unavailable — session-start reindex covers it */ }
1140
+ } catch (_) { /* recursive watch unavailable — the sweep below still covers it */ }
1141
+
1142
+ // Polling sweep backstop: fs.watch/fsevents silently stops delivering on
1143
+ // some volumes (exFAT/SMB — exactly where many projects live). Every 60s,
1144
+ // a bounded mtime walk ingests anything the watcher missed. Stat-only
1145
+ // when nothing changed; skips while a sweep is already running.
1146
+ try {
1147
+ const _sbDocExts2 = new Set(['.md', '.txt', '.pdf', '.docx']);
1148
+ const _sbSkipDirs = new Set(['node_modules', '.git', 'dist', '.monomind', '.claude', '.next', '__pycache__', '.venv', 'vendor']);
1149
+ const _sbSweepRoot = path.resolve(projectDir || process.cwd());
1150
+ let _sbLastSweep = Date.now();
1151
+ let _sbSweeping = false;
1152
+ const _sbSweepTimer = setInterval(async () => {
1153
+ if (_sbSweeping) return;
1154
+ _sbSweeping = true;
1155
+ const since = _sbLastSweep - 5000; // small overlap so boundary writes aren't missed
1156
+ _sbLastSweep = Date.now();
1157
+ try {
1158
+ const changed = [];
1159
+ let scanned = 0;
1160
+ const walk = (dir, depth) => {
1161
+ if (depth > 4 || scanned > 3000 || changed.length >= 20) return;
1162
+ let names;
1163
+ try { names = fs.readdirSync(dir, { withFileTypes: true }); } catch (_) { return; }
1164
+ for (const ent of names) {
1165
+ if (scanned++ > 3000 || changed.length >= 20) return;
1166
+ if (ent.name.startsWith('.') || _sbSkipDirs.has(ent.name)) continue;
1167
+ const full = path.join(dir, ent.name);
1168
+ if (ent.isDirectory()) { walk(full, depth + 1); continue; }
1169
+ if (!_sbDocExts2.has(path.extname(ent.name).toLowerCase())) continue;
1170
+ try { if (fs.statSync(full).mtimeMs > since) changed.push(full); } catch (_) {}
1171
+ }
1172
+ };
1173
+ walk(_sbSweepRoot, 0);
1174
+ if (changed.length) {
1175
+ const pipeline = await import('../knowledge/document-pipeline.js');
1176
+ for (const f of changed) {
1177
+ try {
1178
+ const r = await pipeline.ingestDocument(f, 'shared', _sbSweepRoot);
1179
+ if (r.chunksIndexed > 0 && !r.skipped) console.log(`[knowledge] sweep-ingested ${path.basename(f)} (${r.chunksIndexed} chunks)`);
1180
+ } catch (_) { /* per-file failures never matter here */ }
1181
+ }
1182
+ }
1183
+ } catch (_) { /* sweep is best-effort */ }
1184
+ finally { _sbSweeping = false; }
1185
+ }, 60_000);
1186
+ if (_sbSweepTimer.unref) _sbSweepTimer.unref();
1187
+ activeWatchers.push({ close: () => clearInterval(_sbSweepTimer) });
1188
+ } catch (_) { /* non-fatal */ }
1073
1189
  }
1074
1190
  } catch (_) { /* non-fatal */ }
1075
1191
 
@@ -5948,6 +6064,34 @@ new Sigma(g,document.getElementById('g'),{renderEdgeLabels:false,labelColor:{col
5948
6064
  return;
5949
6065
  }
5950
6066
 
6067
+ // GET /api/orgs/:name/memory — org knowledge-graph stats + glossary + rules
6068
+ if (req.method === 'GET' && /^\/api\/orgs\/[^/]+\/memory$/.test(url)) {
6069
+ try {
6070
+ const orgName = decodeURIComponent(url.split('/')[3]);
6071
+ const _memQs = new URL(req.url, 'http://localhost').searchParams;
6072
+ const root = path.resolve(_memQs.get('dir') || projectDir || process.cwd());
6073
+ if (!orgName || orgName.length > 64 || !/^[a-z0-9][a-z0-9_-]*$/i.test(orgName)) {
6074
+ res.writeHead(400); res.end('{"error":"invalid org name"}'); return;
6075
+ }
6076
+ const monoDir = _getGitMonomindDir(root) || path.join(root, '.monomind');
6077
+ const dbPath = path.join(monoDir, 'org-memory');
6078
+ if (!fs.existsSync(dbPath)) {
6079
+ res.writeHead(200, { 'Content-Type': 'application/json', ...(corsOrigin ? { 'Access-Control-Allow-Origin': corsOrigin } : {}) });
6080
+ res.end(JSON.stringify({ nodes: 0, edges: 0, rules: 0, glossary: [], ruleTexts: [] }));
6081
+ return;
6082
+ }
6083
+ const kg = await import('../memory/memory-kg.js');
6084
+ const [stats, glossary, ruleList] = await Promise.all([
6085
+ kg.kgStats({ dbPath }), kg.kgGlossary({ dbPath, limit: 12 }), kg.kgListRules({ dbPath, limit: 10 }),
6086
+ ]);
6087
+ res.writeHead(200, { 'Content-Type': 'application/json', ...(corsOrigin ? { 'Access-Control-Allow-Origin': corsOrigin } : {}) });
6088
+ res.end(JSON.stringify({ ...stats, glossary, ruleTexts: ruleList.map(r => r.rule.slice(0, 200)) }));
6089
+ } catch(err) {
6090
+ res.writeHead(500); res.end(JSON.stringify({ error: err.message }));
6091
+ }
6092
+ return;
6093
+ }
6094
+
5951
6095
  // POST /api/knowledge/search — warm semantic knowledge search for hooks.
5952
6096
  // The dashboard server is the one long-lived process on the machine, so it
5953
6097
  // holds the local embedding model warm; per-prompt hook subprocesses (which
@@ -5988,17 +6132,69 @@ new Sigma(g,document.getElementById('g'),{renderEdgeLabels:false,labelColor:{col
5988
6132
  // scope: project | global | all (default all) — project results get a
5989
6133
  // small tie boost; global hits are flagged so callers can show origin.
5990
6134
  const scope = payload.scope === 'project' || payload.scope === 'global' ? payload.scope : 'all';
5991
- const [proj, glob] = await Promise.all([
6135
+ // Rule-based router (no LLM): chunks always run (this endpoint's
6136
+ // bread and butter); the auxiliary surfaces — distilled rules,
6137
+ // knowledge-graph triplets, pattern memories — only spend a query
6138
+ // when the router votes for them or routing is unconfident.
6139
+ let wantRules = true, wantKg = true, wantMemory = true;
6140
+ let rrfFuse = null;
6141
+ try {
6142
+ const routerMod = await import('../memory/query-router.js');
6143
+ const route = routerMod.routeQuery(query);
6144
+ rrfFuse = routerMod.rrfFuse;
6145
+ wantRules = !route.confident || route.surfaces.includes('rules');
6146
+ wantKg = !route.confident || route.surfaces.includes('kg');
6147
+ wantMemory = !route.confident || route.surfaces.includes('memory');
6148
+ } catch { /* router unavailable — keep all surfaces on */ }
6149
+ let kgSearch = null;
6150
+ if (wantKg && scope !== 'global') {
6151
+ try { kgSearch = (await import('../memory/memory-kg.js')).kgSearch; } catch { /* kg unavailable */ }
6152
+ }
6153
+ const [proj, glob, rules, graph, mems] = await Promise.all([
5992
6154
  scope !== 'global' ? bridge.bridgeSearchEntries({ query, namespace, limit }).catch(() => null) : null,
5993
6155
  scope !== 'project' ? bridge.bridgeSearchEntries({ query, namespace: 'knowledge:global', limit, dbPath: '@global' }).catch(() => null) : null,
6156
+ // Distilled rules ("when X do Y") learned from sessions/runs —
6157
+ // small namespace, high injection value, threshold keeps it quiet.
6158
+ scope !== 'global' && wantRules ? bridge.bridgeSearchEntries({ query, namespace: 'rules', limit: 2, threshold: 0.45 }).catch(() => null) : null,
6159
+ // Knowledge-graph triplets: relationship-shaped queries surface
6160
+ // facts no chunk contains. Triplet scores derive from seeded
6161
+ // cosine matches (≥0.35), so they clear callers' relevance floors.
6162
+ scope !== 'global' && kgSearch ? kgSearch({ query, limit: 4 }).catch(() => null) : null,
6163
+ // Past patterns/decisions for "last time / previously" queries.
6164
+ scope !== 'global' && wantMemory ? bridge.bridgeSearchEntries({ query, namespace: 'patterns', limit: 2, threshold: 0.4 }).catch(() => null) : null,
5994
6165
  ]);
5995
- const merged = [
5996
- ...(proj?.results || []).map(r => ({ key: r.key, content: String(r.content || '').slice(0, 2000), score: r.score + 0.05, global: false, tags: r.tags })),
5997
- ...(glob?.results || []).map(r => ({ key: r.key, content: String(r.content || '').slice(0, 2000), score: r.score, global: true, tags: r.tags })),
5998
- ].sort((a, b) => b.score - a.score).slice(0, limit);
6166
+ const lists = [
6167
+ (proj?.results || []).map(r => ({ id: r.id, key: r.key, content: String(r.content || '').slice(0, 2000), score: r.score + 0.05, global: false, tags: r.tags, importance: 0.6 })),
6168
+ (glob?.results || []).map(r => ({ id: r.id, key: r.key, content: String(r.content || '').slice(0, 2000), score: r.score, global: true, tags: r.tags })),
6169
+ (rules?.results || []).map(r => ({ id: r.id, key: r.key, content: String(r.content || '').slice(0, 2000), score: r.score + 0.05, global: false, rule: true, tags: r.tags, importance: 0.7 })),
6170
+ (graph?.triplets || []).map((t, i) => ({
6171
+ id: 'kg:' + i + ':' + t.source + '|' + t.relation + '|' + t.target,
6172
+ key: 'kg:' + t.source,
6173
+ content: String(t.source + ' —' + t.relation + '→ ' + t.target + (t.fact && t.fact !== (t.source + ' ' + t.relation + ' ' + t.target) ? ' (' + String(t.fact).slice(0, 300) + ')' : '')).slice(0, 2000),
6174
+ score: t.score, global: false, triplet: true,
6175
+ })),
6176
+ (mems?.results || []).map(r => ({ id: r.id, key: r.key, content: String(r.content || '').slice(0, 2000), score: r.score, global: false, memory: true, tags: r.tags })),
6177
+ ];
6178
+ // Rank-fuse across surfaces (raw scores aren't comparable between
6179
+ // cosine chunks and blended triplets); each item keeps its native
6180
+ // score so downstream relevance floors still apply. Fallback: flat
6181
+ // score sort when the router module failed to load.
6182
+ const merged = (rrfFuse
6183
+ ? rrfFuse(lists, limit)
6184
+ : lists.flat().sort((a, b) => b.score - a.score).slice(0, limit)
6185
+ ).map(({ importance, rrf, ...r }) => r);
6186
+ // Served excerpts are (very likely) injected into the caller's prompt —
6187
+ // that IS usage. Reinforce frequency_weight, per-store, fire-and-forget.
6188
+ try {
6189
+ const projIds = merged.filter(m => !m.global && !m.triplet && m.id).map(m => m.id);
6190
+ const globIds = merged.filter(m => m.global && m.id).map(m => m.id);
6191
+ if (projIds.length) bridge.bridgeRecordUsage?.({ entryIds: projIds }).catch(() => {});
6192
+ if (globIds.length) bridge.bridgeRecordUsage?.({ entryIds: globIds, dbPath: '@global' }).catch(() => {});
6193
+ } catch { /* best effort */ }
5999
6194
  res.writeHead(200, { 'Content-Type': 'application/json', ...(corsOrigin ? { 'Access-Control-Allow-Origin': corsOrigin } : {}) });
6000
6195
  res.end(JSON.stringify({
6001
- method: proj?.searchMethod || glob?.searchMethod || 'none',
6196
+ method: proj?.searchMethod || glob?.searchMethod || rules?.searchMethod || mems?.searchMethod
6197
+ || (merged.length ? 'mixed' : 'none'),
6002
6198
  results: merged,
6003
6199
  }));
6004
6200
  } catch (err) {
@@ -6390,6 +6586,8 @@ new Sigma(g,document.getElementById('g'),{renderEdgeLabels:false,labelColor:{col
6390
6586
  fs.writeFileSync(process.env.MONOMIND_BOUND_REPORT, JSON.stringify({ pid: process.pid, port: boundPort, ts: Date.now() }));
6391
6587
  } catch (_) { /* non-fatal — spawner falls back to pid-matched HTTP probe */ }
6392
6588
  }
6589
+ await writeDashboardToken(boundPort);
6590
+ propagateDashboardToken(boundPort);
6393
6591
 
6394
6592
  // ── One-time migration: mastermind-sessions.json → per-session JSONL ─────
6395
6593
  // Runs once on startup. Existing sessions in the old monolithic format are
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@monoes/monomindcli",
3
- "version": "2.5.0",
3
+ "version": "2.5.2",
4
4
  "type": "module",
5
- "description": "CLI engine for Monomind an open-source MCP server that extends Claude Code with a codebase knowledge graph (tree-sitter + SQLite), persistent memory, multi-agent task coordination, and session hooks. MIT licensed, fully local.",
5
+ "description": "CLI engine for Monomind \u2014 an open-source MCP server that extends Claude Code with a codebase knowledge graph (tree-sitter + SQLite), persistent memory, multi-agent task coordination, and session hooks. MIT licensed, fully local.",
6
6
  "main": "dist/src/index.js",
7
7
  "types": "dist/src/index.d.ts",
8
8
  "sideEffects": false,
@@ -72,6 +72,7 @@
72
72
  ".claude",
73
73
  "!.claude/**/.monomind/**",
74
74
  "!.claude/**/*.lock",
75
+ "!.claude/**/._*",
75
76
  "!dist/**/.monomind/**",
76
77
  "!dist/**/._*",
77
78
  "!.claude/agents/generated/**",
@@ -84,7 +85,7 @@
84
85
  "build:loose": "tsc --noEmitOnError false || true && mkdir -p dist/src/browser/dashboard && cp src/browser/dashboard/ui.html dist/src/browser/dashboard/ui.html && mkdir -p dist/src/ui && cp src/ui/dashboard.html src/ui/server.mjs src/ui/collector.mjs src/ui/orgs.html src/ui/orgs-files.js src/ui/sse-manager.mjs src/ui/mastermind-diagram-fallback.html dist/src/ui/ && rm -rf dist/src/ui/data && cp -r src/ui/data dist/src/ui/data",
85
86
  "test": "vitest run",
86
87
  "test:pattern-store": "npx tsx src/transfer/store/tests/standalone-test.ts",
87
- "prepublishOnly": "cp ../../../README.md ./README.md",
88
+ "prepublishOnly": "node ../../@monoes/monodesign/scripts/sync-skill.mjs && cp ../../../README.md ./README.md",
88
89
  "release": "npm version prerelease --preid=alpha && npm run publish:all",
89
90
  "publish:all": "./scripts/publish.sh"
90
91
  },
@@ -95,6 +96,7 @@
95
96
  "dependencies": {
96
97
  "@anthropic-ai/claude-agent-sdk": "^0.3.207",
97
98
  "@monoes/monobrowse": "^1.0.3",
99
+ "@monoes/monodesign": "^1.0.1",
98
100
  "@monoes/monograph": "^1.4.0",
99
101
  "@noble/ed25519": "^2.1.0",
100
102
  "mammoth": "^1.12.0",
@@ -105,7 +107,7 @@
105
107
  },
106
108
  "optionalDependencies": {
107
109
  "@huggingface/transformers": "^3.8.1",
108
- "@monoes/memory": "^1.0.8",
110
+ "@monoes/memory": "^1.0.10",
109
111
  "@monomind/hooks": "*",
110
112
  "@monomind/mcp": "*",
111
113
  "@monomind/routing": "*",