monomind 2.5.1 → 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.
- package/package.json +2 -1
- package/packages/@monomind/cli/.claude/agents/design/design-monodesign.md +6 -6
- package/packages/@monomind/cli/.claude/commands/mastermind/_repeat.md +4 -4
- package/packages/@monomind/cli/.claude/commands/mastermind/approvev1.md +4 -4
- package/packages/@monomind/cli/.claude/commands/mastermind/architect.md +6 -6
- package/packages/@monomind/cli/.claude/commands/mastermind/autodev.md +5 -5
- package/packages/@monomind/cli/.claude/commands/mastermind/brain.md +2 -2
- package/packages/@monomind/cli/.claude/commands/mastermind/build.md +6 -6
- package/packages/@monomind/cli/.claude/commands/mastermind/code-review.md +2 -2
- package/packages/@monomind/cli/.claude/commands/mastermind/content.md +6 -6
- package/packages/@monomind/cli/.claude/commands/mastermind/createorg.md +4 -4
- package/packages/@monomind/cli/.claude/commands/mastermind/createtask.md +3 -3
- package/packages/@monomind/cli/.claude/commands/mastermind/debug.md +5 -5
- package/packages/@monomind/cli/.claude/commands/mastermind/design.md +5 -5
- package/packages/@monomind/cli/.claude/commands/mastermind/do.md +2 -2
- package/packages/@monomind/cli/.claude/commands/mastermind/execute.md +5 -5
- package/packages/@monomind/cli/.claude/commands/mastermind/finance.md +6 -6
- package/packages/@monomind/cli/.claude/commands/mastermind/finish.md +5 -5
- package/packages/@monomind/cli/.claude/commands/mastermind/idea.md +6 -6
- package/packages/@monomind/cli/.claude/commands/mastermind/ideate.md +5 -5
- package/packages/@monomind/cli/.claude/commands/mastermind/improve.md +6 -6
- package/packages/@monomind/cli/.claude/commands/mastermind/marketing.md +6 -6
- package/packages/@monomind/cli/.claude/commands/mastermind/master.md +54 -54
- package/packages/@monomind/cli/.claude/commands/mastermind/ops.md +6 -6
- package/packages/@monomind/cli/.claude/commands/mastermind/orgs.md +2 -2
- package/packages/@monomind/cli/.claude/commands/mastermind/orgstatus.md +2 -2
- package/packages/@monomind/cli/.claude/commands/mastermind/plan.md +5 -5
- package/packages/@monomind/cli/.claude/commands/mastermind/receive-review.md +5 -5
- package/packages/@monomind/cli/.claude/commands/mastermind/release.md +6 -6
- package/packages/@monomind/cli/.claude/commands/mastermind/research.md +6 -6
- package/packages/@monomind/cli/.claude/commands/mastermind/review.md +6 -6
- package/packages/@monomind/cli/.claude/commands/mastermind/runorg.md +4 -4
- package/packages/@monomind/cli/.claude/commands/mastermind/runorgv1.md +5 -5
- package/packages/@monomind/cli/.claude/commands/mastermind/sales.md +6 -6
- package/packages/@monomind/cli/.claude/commands/mastermind/skill-builder.md +5 -5
- package/packages/@monomind/cli/.claude/commands/mastermind/stoporg.md +3 -3
- package/packages/@monomind/cli/.claude/commands/mastermind/taskdev.md +5 -5
- package/packages/@monomind/cli/.claude/commands/mastermind/tdd.md +5 -5
- package/packages/@monomind/cli/.claude/commands/mastermind/techport.md +5 -5
- package/packages/@monomind/cli/.claude/commands/mastermind/verify.md +5 -5
- package/packages/@monomind/cli/.claude/commands/mastermind/worktree.md +5 -5
- package/packages/@monomind/cli/.claude/helpers/control-start.cjs +30 -0
- package/packages/@monomind/cli/.claude/helpers/utils/monograph.cjs +44 -12
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/access.md → mastermind-access/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/activity.md → mastermind-activity/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/adapter-manager.md → mastermind-adapter-manager/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/adapters.md → mastermind-adapters/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/agent-detail.md → mastermind-agent-detail/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/agents.md → mastermind-agents/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/approval-detail.md → mastermind-approval-detail/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/approvev1.md → mastermind-approvev1/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/architect.md → mastermind-architect/SKILL.md} +7 -7
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/autodev.md → mastermind-autodev/SKILL.md} +10 -10
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/backup.md → mastermind-backup/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/bootstrap.md → mastermind-bootstrap/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/budgets.md → mastermind-budgets/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/build.md → mastermind-build/SKILL.md} +5 -5
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/companies.md → mastermind-companies/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/content.md → mastermind-content/SKILL.md} +5 -5
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/costs.md → mastermind-costs/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/createorg.md → mastermind-createorg/SKILL.md} +3 -3
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/debug.md → mastermind-debug/SKILL.md} +4 -4
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/_delegation.md → mastermind-delegation/SKILL.md} +1 -1
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/design.md → mastermind-design/SKILL.md} +9 -9
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/diagnose.md → mastermind-diagnose/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/env.md → mastermind-env/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/environments.md → mastermind-environments/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/execute.md → mastermind-execute/SKILL.md} +10 -10
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/export.md → mastermind-export/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/finance.md → mastermind-finance/SKILL.md} +5 -5
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/goal-detail.md → mastermind-goal-detail/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/goals.md → mastermind-goals/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/heartbeatv1.md → mastermind-heartbeatv1/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/idea.md → mastermind-idea/SKILL.md} +7 -7
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/import.md → mastermind-import/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/inbox.md → mastermind-inbox/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/instance.md → mastermind-instance/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/instance-settings.md → mastermind-instance-settings/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/invite-landing.md → mastermind-invite-landing/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/invites.md → mastermind-invites/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/issue-detail.md → mastermind-issue-detail/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/issues.md → mastermind-issues/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/join-queue.md → mastermind-join-queue/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/liveness.md → mastermind-liveness/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/marketing.md → mastermind-marketing/SKILL.md} +8 -8
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/memory.md → mastermind-memory/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/monitor.md → mastermind-monitor/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/my-issues.md → mastermind-my-issues/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/new-agent.md → mastermind-new-agent/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/ops.md → mastermind-ops/SKILL.md} +5 -5
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/org-chart.md → mastermind-org-chart/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/org-settings.md → mastermind-org-settings/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/orgs.md → mastermind-orgs/SKILL.md} +1 -1
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/orgstatus.md → mastermind-orgstatus/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/plan.md → mastermind-plan/SKILL.md} +7 -7
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/plan-to-tasks.md → mastermind-plan-to-tasks/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/plugin-manager.md → mastermind-plugin-manager/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/plugin-settings.md → mastermind-plugin-settings/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/plugins.md → mastermind-plugins/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/profile.md → mastermind-profile/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/project-detail.md → mastermind-project-detail/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/project-workspace.md → mastermind-project-workspace/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/projects.md → mastermind-projects/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/_protocol.md → mastermind-protocol/SKILL.md} +3 -3
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/release.md → mastermind-release/SKILL.md} +5 -5
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/_repeat.md → mastermind-repeat/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/research.md → mastermind-research/SKILL.md} +5 -5
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/review.md → mastermind-review/SKILL.md} +5 -5
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/routine-detail.md → mastermind-routine-detail/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/routines.md → mastermind-routines/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/runorgv1.md → mastermind-runorgv1/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/sales.md → mastermind-sales/SKILL.md} +5 -5
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/search.md → mastermind-search/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/secrets.md → mastermind-secrets/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/skill-builder.md → mastermind-skill-builder/SKILL.md} +16 -14
- package/packages/@monomind/cli/.claude/skills/mastermind-skills/{skills.md → SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/stoporg.md → mastermind-stoporg/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/taskdev.md → mastermind-taskdev/SKILL.md} +6 -6
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills → mastermind-taskdev}/implementer-prompt.md +1 -1
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/tasks.md → mastermind-tasks/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/tdd.md → mastermind-tdd/SKILL.md} +4 -4
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/techport.md → mastermind-techport/SKILL.md} +5 -5
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/threads.md → mastermind-threads/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/tree-control.md → mastermind-tree-control/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/verify.md → mastermind-verify/SKILL.md} +1 -1
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/wiki.md → mastermind-wiki/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/workspace-detail.md → mastermind-workspace-detail/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/{mastermind-skills/workspaces.md → mastermind-workspaces/SKILL.md} +2 -2
- package/packages/@monomind/cli/.claude/skills/monodesign/SKILL.md +114 -190
- package/packages/@monomind/cli/.claude/skills/monodesign/adapt.md +1 -1
- package/packages/@monomind/cli/.claude/skills/monodesign/agents/monodesign-asset-producer.md +4 -4
- package/packages/@monomind/cli/.claude/skills/monodesign/agents/monodesign-manual-edit-applier.md +103 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/audit.md +1 -1
- package/packages/@monomind/cli/.claude/skills/monodesign/craft.md +2 -2
- package/packages/@monomind/cli/.claude/skills/monodesign/critique.md +1 -1
- package/packages/@monomind/cli/.claude/skills/monodesign/init.md +30 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/layout.md +36 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/live.md +19 -44
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/adapt.md +122 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/adapt.native.md +58 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/android.md +40 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/animate.md +39 -11
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/antipatterns-catalog.md +22 -16
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/audit.md +5 -3
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/audit.native.md +139 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/bolder.md +71 -64
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/brand.md +12 -18
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/clarify.md +114 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/codex.md +4 -6
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/colorize.md +108 -5
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/craft.md +70 -143
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/critique.md +635 -68
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/delight.md +1 -1
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/distill.md +1 -1
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/document.md +24 -22
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/extract.md +1 -1
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/hooks.md +22 -29
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/init.md +221 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/interaction-design.md +0 -6
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/ios.md +45 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/layout.md +57 -13
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/live.md +159 -63
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/overdrive.md +1 -1
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/personas.md +1 -1
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/polish.md +16 -8
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/pre-delivery-checklist.md +1 -1
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/product.md +1 -3
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/quieter.md +1 -1
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/shape.md +27 -13
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/teach.md +6 -152
- package/packages/@monomind/cli/.claude/skills/monodesign/reference/typeset.md +180 -3
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/command-metadata.json +94 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/context-signals.mjs +227 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/context.mjs +1062 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/critique-storage.mjs +243 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detect-csp.mjs +199 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detect.mjs +34 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/browser/injected/index.mjs +1938 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/cli/main.mjs +322 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/design-system.mjs +815 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/detect-antipatterns-browser.js +5246 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/detect-antipatterns.mjs +51 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/engines/browser/detect-url.mjs +260 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/engines/browser/drivers.mjs +259 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/engines/regex/detect-text.mjs +574 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/engines/static-html/css-cascade.mjs +1016 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/engines/static-html/detect-html.mjs +235 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/engines/visual/screenshot-contrast.mjs +199 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/findings.mjs +13 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/node/file-system.mjs +199 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/profile/profiler.mjs +167 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/registry/antipatterns.mjs +515 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/rules/checks.mjs +2704 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/shared/color.mjs +125 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/shared/constants.mjs +102 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/shared/fonts.mjs +31 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/shared/inline-ignores.mjs +149 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/detector/shared/page.mjs +8 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/hook-admin.mjs +662 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/hook-before-edit.mjs +517 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/hook-lib.mjs +1777 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/hook.mjs +62 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/lib/design-parser.mjs +843 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/lib/is-generated.mjs +70 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/lib/monodesign-config.mjs +641 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/lib/monodesign-paths.mjs +130 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/lib/provider.mjs +5 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/lib/target-args.mjs +43 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/browser-script-parts.mjs +51 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/completion.mjs +20 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/event-validation.mjs +138 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/insert-ui.mjs +459 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/manual-apply.mjs +940 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/manual-edit-routes.mjs +358 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/manual-edits-buffer.mjs +153 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/session-store.mjs +290 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/svelte-component.mjs +827 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/sveltekit-adapter.mjs +275 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/ui-core.mjs +181 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live/vocabulary.mjs +37 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-accept.mjs +813 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-browser-dom.js +147 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-browser-session.js +124 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-browser.js +11241 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-commit-manual-edits.mjs +1242 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-complete.mjs +76 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-copy-edit-agent.mjs +684 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-discard-manual-edits.mjs +52 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-inject.mjs +584 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-insert.mjs +273 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-manual-edit-evidence.mjs +364 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-poll.mjs +385 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-resume.mjs +95 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-server.mjs +1138 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-status.mjs +62 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-target.mjs +31 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live-wrap.mjs +895 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/live.mjs +298 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/modern-screenshot.umd.js +15 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/palette.mjs +634 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/scripts/pin.mjs +222 -0
- package/packages/@monomind/cli/.claude/skills/monodesign/teach.md +7 -58
- package/packages/@monomind/cli/dist/src/commands/design-detect.d.ts +7 -1
- package/packages/@monomind/cli/dist/src/commands/design-detect.js +70 -38
- package/packages/@monomind/cli/dist/src/commands/design-palette.d.ts +1 -1
- package/packages/@monomind/cli/dist/src/commands/design-palette.js +3 -3
- package/packages/@monomind/cli/dist/src/commands/doc.js +72 -15
- package/packages/@monomind/cli/dist/src/commands/doctor-project-checks.d.ts +4 -0
- package/packages/@monomind/cli/dist/src/commands/doctor-project-checks.js +23 -0
- package/packages/@monomind/cli/dist/src/commands/doctor.js +3 -3
- package/packages/@monomind/cli/dist/src/commands/org.js +109 -9
- package/packages/@monomind/cli/dist/src/init/executor.js +14 -3
- package/packages/@monomind/cli/dist/src/knowledge/document-pipeline.d.ts +2 -0
- package/packages/@monomind/cli/dist/src/knowledge/document-pipeline.js +1 -0
- package/packages/@monomind/cli/dist/src/mcp-tools/knowledge-tools.js +38 -7
- package/packages/@monomind/cli/dist/src/mcp-tools/memory-tools.d.ts +8 -3
- package/packages/@monomind/cli/dist/src/mcp-tools/memory-tools.js +193 -31
- package/packages/@monomind/cli/dist/src/memory/memory-bridge.d.ts +33 -0
- package/packages/@monomind/cli/dist/src/memory/memory-bridge.js +166 -17
- package/packages/@monomind/cli/dist/src/memory/memory-kg.d.ts +185 -0
- package/packages/@monomind/cli/dist/src/memory/memory-kg.js +449 -0
- package/packages/@monomind/cli/dist/src/memory/query-router.d.ts +44 -0
- package/packages/@monomind/cli/dist/src/memory/query-router.js +113 -0
- package/packages/@monomind/cli/dist/src/orgrt/daemon.d.ts +18 -0
- package/packages/@monomind/cli/dist/src/orgrt/daemon.js +249 -12
- package/packages/@monomind/cli/dist/src/orgrt/migrate.js +7 -0
- package/packages/@monomind/cli/dist/src/orgrt/policy.js +7 -0
- package/packages/@monomind/cli/dist/src/orgrt/session.d.ts +24 -1
- package/packages/@monomind/cli/dist/src/orgrt/session.js +18 -3
- package/packages/@monomind/cli/dist/src/orgrt/templates.d.ts +1 -0
- package/packages/@monomind/cli/dist/src/orgrt/templates.js +9 -4
- package/packages/@monomind/cli/dist/src/orgrt/types.d.ts +15 -0
- package/packages/@monomind/cli/dist/src/orgrt/types.js +2 -0
- package/packages/@monomind/cli/dist/src/ui/dashboard.html +154 -6
- package/packages/@monomind/cli/dist/src/ui/orgs.html +24 -0
- package/packages/@monomind/cli/dist/src/ui/server.mjs +162 -12
- package/packages/@monomind/cli/package.json +5 -3
- /package/packages/@monomind/cli/.claude/skills/{mastermind-skills/_agent-select.md → mastermind-agent-select/SKILL.md} +0 -0
- /package/packages/@monomind/cli/.claude/skills/{mastermind-skills/finish.md → mastermind-finish/SKILL.md} +0 -0
- /package/packages/@monomind/cli/.claude/skills/{mastermind-skills/_intake.md → mastermind-intake/SKILL.md} +0 -0
- /package/packages/@monomind/cli/.claude/skills/{mastermind-skills → mastermind-marketing}/references/copywriting-frameworks.md +0 -0
- /package/packages/@monomind/cli/.claude/skills/{mastermind-skills → mastermind-marketing}/references/persuasion-psychology.md +0 -0
- /package/packages/@monomind/cli/.claude/skills/{mastermind-skills/monotask.md → mastermind-monotask/SKILL.md} +0 -0
- /package/packages/@monomind/cli/.claude/skills/{mastermind-skills/receive-review.md → mastermind-receive-review/SKILL.md} +0 -0
- /package/packages/@monomind/cli/.claude/skills/{mastermind-skills/runorg.md → mastermind-runorg/SKILL.md} +0 -0
- /package/packages/@monomind/cli/.claude/skills/{mastermind-skills → mastermind-taskdev}/code-quality-reviewer-prompt.md +0 -0
- /package/packages/@monomind/cli/.claude/skills/{mastermind-skills → mastermind-taskdev}/final-reviewer-prompt.md +0 -0
- /package/packages/@monomind/cli/.claude/skills/{mastermind-skills → mastermind-taskdev}/spec-reviewer-prompt.md +0 -0
- /package/packages/@monomind/cli/.claude/skills/{mastermind-skills/worktree.md → mastermind-worktree/SKILL.md} +0 -0
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// Pattern adapted from impeccable (Apache-2.0) — rebranded for monomind
|
|
3
|
+
/**
|
|
4
|
+
* Pin/unpin sub-commands as standalone skill shortcuts.
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* node <scripts_path>/pin.mjs pin <command>
|
|
8
|
+
* node <scripts_path>/pin.mjs unpin <command>
|
|
9
|
+
*
|
|
10
|
+
* `pin audit` creates a lightweight audit skill that redirects to Monodesign's audit workflow.
|
|
11
|
+
* `unpin audit` removes that shortcut.
|
|
12
|
+
*
|
|
13
|
+
* The script discovers harness directories (.claude/skills, .cursor/skills, etc.)
|
|
14
|
+
* in the project root and creates/removes the pin in all of them.
|
|
15
|
+
*/
|
|
16
|
+
|
|
17
|
+
import { existsSync, readFileSync, writeFileSync, mkdirSync, rmSync, readdirSync } from 'node:fs';
|
|
18
|
+
import { basename, join, resolve, dirname } from 'node:path';
|
|
19
|
+
import { fileURLToPath } from 'node:url';
|
|
20
|
+
|
|
21
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
22
|
+
|
|
23
|
+
// All known harness directories
|
|
24
|
+
const HARNESS_DIRS = [
|
|
25
|
+
'.claude', '.cursor', '.gemini', '.codex', '.agents',
|
|
26
|
+
'.trae', '.trae-cn', '.pi', '.opencode', '.kiro', '.rovodev',
|
|
27
|
+
];
|
|
28
|
+
|
|
29
|
+
const CODEX_HARNESSES = new Set(['.codex', '.agents']);
|
|
30
|
+
|
|
31
|
+
// Valid sub-command names
|
|
32
|
+
const VALID_COMMANDS = [
|
|
33
|
+
'craft', 'init', 'extract', 'document', 'shape',
|
|
34
|
+
'critique', 'audit',
|
|
35
|
+
'polish', 'bolder', 'quieter', 'distill', 'harden', 'onboard', 'live',
|
|
36
|
+
'animate', 'colorize', 'typeset', 'layout', 'delight', 'overdrive',
|
|
37
|
+
'clarify', 'adapt', 'optimize',
|
|
38
|
+
];
|
|
39
|
+
|
|
40
|
+
// Marker to identify pinned skills (so unpin doesn't delete user skills)
|
|
41
|
+
const PIN_MARKER = '<!-- monodesign-pinned-skill -->';
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Walk up from startDir to find a project root.
|
|
45
|
+
*/
|
|
46
|
+
function findProjectRoot(startDir = process.cwd()) {
|
|
47
|
+
let dir = resolve(startDir);
|
|
48
|
+
while (dir !== '/') {
|
|
49
|
+
if (
|
|
50
|
+
existsSync(join(dir, 'package.json')) ||
|
|
51
|
+
existsSync(join(dir, '.git')) ||
|
|
52
|
+
existsSync(join(dir, 'skills-lock.json'))
|
|
53
|
+
) {
|
|
54
|
+
return dir;
|
|
55
|
+
}
|
|
56
|
+
const parent = resolve(dir, '..');
|
|
57
|
+
if (parent === dir) break;
|
|
58
|
+
dir = parent;
|
|
59
|
+
}
|
|
60
|
+
return resolve(startDir);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Find harness skill directories that have an monodesign skill installed.
|
|
65
|
+
*/
|
|
66
|
+
function findHarnessDirs(projectRoot) {
|
|
67
|
+
const dirs = [];
|
|
68
|
+
for (const harness of HARNESS_DIRS) {
|
|
69
|
+
const skillsDir = join(projectRoot, harness, 'skills');
|
|
70
|
+
// Only pin in harness dirs that already have monodesign installed
|
|
71
|
+
const monodesignDir = join(skillsDir, 'monodesign');
|
|
72
|
+
if (existsSync(monodesignDir) || existsSync(join(skillsDir, 'i-monodesign'))) {
|
|
73
|
+
dirs.push(skillsDir);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return dirs;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Load command metadata (descriptions for pinned skills).
|
|
81
|
+
*/
|
|
82
|
+
function loadCommandMetadata() {
|
|
83
|
+
const metadataPath = join(__dirname, 'command-metadata.json');
|
|
84
|
+
if (existsSync(metadataPath)) {
|
|
85
|
+
return JSON.parse(readFileSync(metadataPath, 'utf-8'));
|
|
86
|
+
}
|
|
87
|
+
return {};
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/**
|
|
91
|
+
* Generate a pinned skill's SKILL.md content.
|
|
92
|
+
*/
|
|
93
|
+
function commandPrefixForSkillsDir(skillsDir) {
|
|
94
|
+
return CODEX_HARNESSES.has(basename(dirname(skillsDir))) ? '$' : '/';
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
function generatePinnedSkill(command, metadata, commandPrefix) {
|
|
98
|
+
const desc = metadata[command]?.description || `Shortcut for ${commandPrefix}monodesign ${command}.`;
|
|
99
|
+
const hint = metadata[command]?.argumentHint || '[target]';
|
|
100
|
+
|
|
101
|
+
return `---
|
|
102
|
+
name: ${command}
|
|
103
|
+
description: "${desc}"
|
|
104
|
+
argument-hint: "${hint}"
|
|
105
|
+
user-invocable: true
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
${PIN_MARKER}
|
|
109
|
+
|
|
110
|
+
This is a pinned shortcut for \`${commandPrefix}monodesign ${command}\`.
|
|
111
|
+
|
|
112
|
+
Invoke ${commandPrefix}monodesign ${command}, passing along any arguments provided here, and follow its instructions.
|
|
113
|
+
`;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Pin a command: create shortcut skill in all harness dirs.
|
|
118
|
+
*/
|
|
119
|
+
function pin(command, projectRoot) {
|
|
120
|
+
const metadata = loadCommandMetadata();
|
|
121
|
+
const harnessDirs = findHarnessDirs(projectRoot);
|
|
122
|
+
|
|
123
|
+
if (harnessDirs.length === 0) {
|
|
124
|
+
console.log('No harness directories with monodesign installed found.');
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
let created = 0;
|
|
129
|
+
|
|
130
|
+
for (const skillsDir of harnessDirs) {
|
|
131
|
+
const commandPrefix = commandPrefixForSkillsDir(skillsDir);
|
|
132
|
+
const content = generatePinnedSkill(command, metadata, commandPrefix);
|
|
133
|
+
// Check if skill already exists (and isn't a pin)
|
|
134
|
+
const skillDir = join(skillsDir, command);
|
|
135
|
+
if (existsSync(skillDir)) {
|
|
136
|
+
const existingMd = join(skillDir, 'SKILL.md');
|
|
137
|
+
if (existsSync(existingMd)) {
|
|
138
|
+
const existing = readFileSync(existingMd, 'utf-8');
|
|
139
|
+
if (!existing.includes(PIN_MARKER)) {
|
|
140
|
+
console.log(` SKIP: ${skillDir} (non-pinned skill already exists)`);
|
|
141
|
+
continue;
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
mkdirSync(skillDir, { recursive: true });
|
|
147
|
+
writeFileSync(join(skillDir, 'SKILL.md'), content, 'utf-8');
|
|
148
|
+
console.log(` + ${skillDir}`);
|
|
149
|
+
created++;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
if (created > 0) {
|
|
153
|
+
console.log(`\nPinned '${command}' as a standalone shortcut in ${created} location(s).`);
|
|
154
|
+
console.log('Use the pinned command directly in each harness.');
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
return created > 0;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Unpin a command: remove shortcut skill from all harness dirs.
|
|
162
|
+
*/
|
|
163
|
+
function unpin(command, projectRoot) {
|
|
164
|
+
const harnessDirs = findHarnessDirs(projectRoot);
|
|
165
|
+
let removed = 0;
|
|
166
|
+
|
|
167
|
+
for (const skillsDir of harnessDirs) {
|
|
168
|
+
const skillDir = join(skillsDir, command);
|
|
169
|
+
if (!existsSync(skillDir)) continue;
|
|
170
|
+
|
|
171
|
+
const skillMd = join(skillDir, 'SKILL.md');
|
|
172
|
+
if (!existsSync(skillMd)) continue;
|
|
173
|
+
|
|
174
|
+
// Safety: only remove if it's a pinned skill
|
|
175
|
+
const content = readFileSync(skillMd, 'utf-8');
|
|
176
|
+
if (!content.includes(PIN_MARKER)) {
|
|
177
|
+
console.log(` SKIP: ${skillDir} (not a pinned skill)`);
|
|
178
|
+
continue;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
rmSync(skillDir, { recursive: true, force: true });
|
|
182
|
+
console.log(` - ${skillDir}`);
|
|
183
|
+
removed++;
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
if (removed > 0) {
|
|
187
|
+
console.log(`\nUnpinned '${command}' from ${removed} location(s).`);
|
|
188
|
+
console.log(`Use Monodesign's '${command}' workflow directly to access it.`);
|
|
189
|
+
} else {
|
|
190
|
+
console.log(`No pinned '${command}' shortcut found.`);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
return removed > 0;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
// --- CLI ---
|
|
197
|
+
const [,, action, command] = process.argv;
|
|
198
|
+
|
|
199
|
+
if (!action || !command) {
|
|
200
|
+
console.log('Usage: node pin.mjs <pin|unpin> <command>');
|
|
201
|
+
console.log(`\nAvailable commands: ${VALID_COMMANDS.join(', ')}`);
|
|
202
|
+
process.exit(1);
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
if (action !== 'pin' && action !== 'unpin') {
|
|
206
|
+
console.error(`Unknown action: ${action}. Use 'pin' or 'unpin'.`);
|
|
207
|
+
process.exit(1);
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
if (!VALID_COMMANDS.includes(command)) {
|
|
211
|
+
console.error(`Unknown command: ${command}`);
|
|
212
|
+
console.error(`Available commands: ${VALID_COMMANDS.join(', ')}`);
|
|
213
|
+
process.exit(1);
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
const root = findProjectRoot();
|
|
217
|
+
|
|
218
|
+
if (action === 'pin') {
|
|
219
|
+
pin(command, root);
|
|
220
|
+
} else {
|
|
221
|
+
unpin(command, root);
|
|
222
|
+
}
|
|
@@ -1,69 +1,18 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: monodesign-teach
|
|
3
|
-
description:
|
|
3
|
+
description: Alias of /monodesign init — set up a project for monodesign by producing PRODUCT.md (strategic context), optionally DESIGN.md (visual system), and pre-configuring live mode.
|
|
4
4
|
type: design-sub-command
|
|
5
5
|
argument-hint: "[project path or description]"
|
|
6
6
|
user-invocable: true
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
-
# Monodesign: Teach
|
|
9
|
+
# Monodesign: Teach (alias of Init)
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
`teach` is the historical name for the setup command and remains fully supported; it is an alias of `init`. Both invocations behave identically.
|
|
12
12
|
|
|
13
|
-
`
|
|
13
|
+
Follow `commands/init.md` and the authoritative flow in `reference/init.md` from the monodesign skill directory: one codebase crawl plus a short strategic interview produces **PRODUCT.md** (register, users, purpose, brand personality, anti-references, design principles), offers **DESIGN.md** via `/monodesign document`, and pre-configures `.monodesign/live/config.json` for `/monodesign live`.
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
Notes preserved from the teach era:
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
-
|
|
19
|
-
- The existing `PRODUCT.md` is empty, placeholder (<200 chars), or has `[TODO]` markers
|
|
20
|
-
- The product has significantly evolved and the `PRODUCT.md` is stale
|
|
21
|
-
|
|
22
|
-
## Discovery Protocol
|
|
23
|
-
|
|
24
|
-
**Step 1: Gather existing signals**
|
|
25
|
-
|
|
26
|
-
Read the following files if they exist:
|
|
27
|
-
- `README.md` — what is this product?
|
|
28
|
-
- `package.json` — name, description, keywords
|
|
29
|
-
- Any landing page copy (`index.html`, `src/pages/index.astro`, etc.)
|
|
30
|
-
- Existing `PRODUCT.md` (to assess completeness)
|
|
31
|
-
|
|
32
|
-
If a description or tagline exists, extract: target user, core value proposition, brand personality signals.
|
|
33
|
-
|
|
34
|
-
**Step 2: Ask for what's missing**
|
|
35
|
-
|
|
36
|
-
Ask the user 3–5 targeted questions based on what couldn't be inferred:
|
|
37
|
-
- Who specifically uses this? (Role, context, skill level)
|
|
38
|
-
- What's the one thing this does better than alternatives?
|
|
39
|
-
- Three words that describe the brand personality
|
|
40
|
-
- What design style do you want to AVOID? (anti-references)
|
|
41
|
-
- Is this a marketing surface, product UI, or both?
|
|
42
|
-
|
|
43
|
-
**Step 3: Write PRODUCT.md**
|
|
44
|
-
|
|
45
|
-
```markdown
|
|
46
|
-
# Product
|
|
47
|
-
|
|
48
|
-
## Register
|
|
49
|
-
[brand | product | both]
|
|
50
|
-
|
|
51
|
-
## Users
|
|
52
|
-
[Specific description of who uses this — not "developers", but "senior engineers at mid-size SaaS companies who need to..."]
|
|
53
|
-
|
|
54
|
-
## Product Purpose
|
|
55
|
-
[What this does and why it matters to those users. One paragraph.]
|
|
56
|
-
|
|
57
|
-
## Brand Personality
|
|
58
|
-
[3 words + a description of the tone. Direct, specific, no hedging.]
|
|
59
|
-
|
|
60
|
-
## Anti-references
|
|
61
|
-
[Specific things this product should NOT look like. Brand names, aesthetics, clichés to avoid.]
|
|
62
|
-
|
|
63
|
-
## Design Principles
|
|
64
|
-
[3–5 opinionated principles that guide all design decisions.]
|
|
65
|
-
```
|
|
66
|
-
|
|
67
|
-
## After Writing
|
|
68
|
-
|
|
69
|
-
Confirm with the user that the PRODUCT.md is accurate before continuing to any design work. The PRODUCT.md is the foundation — if it's wrong, everything built on it is built on the wrong foundation.
|
|
17
|
+
- A legacy `.monodesign.md` at the project root is auto-renamed to `PRODUCT.md` by the context loader; mention this once and merge into that content rather than starting fresh.
|
|
18
|
+
- If teach was invoked as a setup blocker by another monodesign command, complete the init flow, then resume the original task with the fresh context.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* CLI Design Detect Command
|
|
3
|
-
* Thin wrapper around
|
|
3
|
+
* Thin wrapper around the bundled @monoes/monodesign anti-pattern detector
|
|
4
4
|
*
|
|
5
5
|
* github.com/monoes/monomind
|
|
6
6
|
*/
|
|
@@ -16,6 +16,12 @@ export interface DesignDetectResult {
|
|
|
16
16
|
patterns: DesignAntiPattern[];
|
|
17
17
|
count: number;
|
|
18
18
|
}
|
|
19
|
+
/**
|
|
20
|
+
* Resolve the bundled monodesign CLI entry (cli/bin/cli.js) from the
|
|
21
|
+
* @monoes/monodesign package. Falls back to the monorepo sibling layout when
|
|
22
|
+
* running from a source checkout without installed workspace links.
|
|
23
|
+
*/
|
|
24
|
+
export declare function resolveMonodesignCli(): string | null;
|
|
19
25
|
export declare const designCommand: Command;
|
|
20
26
|
export default designCommand;
|
|
21
27
|
//# sourceMappingURL=design-detect.d.ts.map
|
|
@@ -1,39 +1,52 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* CLI Design Detect Command
|
|
3
|
-
* Thin wrapper around
|
|
3
|
+
* Thin wrapper around the bundled @monoes/monodesign anti-pattern detector
|
|
4
4
|
*
|
|
5
5
|
* github.com/monoes/monomind
|
|
6
6
|
*/
|
|
7
7
|
import { output } from '../output.js';
|
|
8
|
-
import { spawn
|
|
9
|
-
import {
|
|
8
|
+
import { spawn } from 'child_process';
|
|
9
|
+
import { createRequire } from 'module';
|
|
10
|
+
import { dirname, join } from 'path';
|
|
11
|
+
import { existsSync } from 'fs';
|
|
12
|
+
import { fileURLToPath } from 'url';
|
|
10
13
|
import { paletteSubcommand } from './design-palette.js';
|
|
11
|
-
const execFileAsync = promisify(execFile);
|
|
12
14
|
// ─── Helpers ─────────────────────────────────────────────────────────────────
|
|
13
|
-
|
|
15
|
+
/**
|
|
16
|
+
* Resolve the bundled monodesign CLI entry (cli/bin/cli.js) from the
|
|
17
|
+
* @monoes/monodesign package. Falls back to the monorepo sibling layout when
|
|
18
|
+
* running from a source checkout without installed workspace links.
|
|
19
|
+
*/
|
|
20
|
+
export function resolveMonodesignCli() {
|
|
21
|
+
// 1. Normal resolution through the package's "./engine" export.
|
|
14
22
|
try {
|
|
15
|
-
|
|
16
|
-
|
|
23
|
+
const require = createRequire(import.meta.url);
|
|
24
|
+
const enginePath = require.resolve('@monoes/monodesign/engine');
|
|
25
|
+
const binPath = join(dirname(enginePath), '..', 'bin', 'cli.js');
|
|
26
|
+
if (existsSync(binPath))
|
|
27
|
+
return binPath;
|
|
17
28
|
}
|
|
18
29
|
catch {
|
|
19
|
-
//
|
|
20
|
-
try {
|
|
21
|
-
await execFileAsync('which', ['impeccable'], { timeout: 3000 });
|
|
22
|
-
return true;
|
|
23
|
-
}
|
|
24
|
-
catch {
|
|
25
|
-
return false;
|
|
26
|
-
}
|
|
30
|
+
// fall through to monorepo-relative lookup
|
|
27
31
|
}
|
|
32
|
+
// 2. Monorepo layout: packages/@monomind/cli/{src|dist/src}/commands/ → packages/@monoes/monodesign
|
|
33
|
+
const here = dirname(fileURLToPath(import.meta.url));
|
|
34
|
+
for (const toCliRoot of ['../..', '../../..']) {
|
|
35
|
+
// <cli root>/../../@monoes/monodesign = packages/@monoes/monodesign
|
|
36
|
+
const candidate = join(here, toCliRoot, '..', '..', '@monoes', 'monodesign', 'cli', 'bin', 'cli.js');
|
|
37
|
+
if (existsSync(candidate))
|
|
38
|
+
return candidate;
|
|
39
|
+
}
|
|
40
|
+
return null;
|
|
28
41
|
}
|
|
29
|
-
function
|
|
42
|
+
function runMonodesign(cliPath, args) {
|
|
30
43
|
return new Promise((resolve) => {
|
|
31
|
-
const child = spawn(
|
|
44
|
+
const child = spawn(process.execPath, [cliPath, ...args], {
|
|
32
45
|
stdio: 'inherit',
|
|
33
46
|
shell: false,
|
|
34
47
|
});
|
|
35
48
|
child.on('error', (err) => {
|
|
36
|
-
output.printError(`Failed to run
|
|
49
|
+
output.printError(`Failed to run the monodesign detector: ${err.message}`);
|
|
37
50
|
resolve(1);
|
|
38
51
|
});
|
|
39
52
|
child.on('close', (code) => {
|
|
@@ -41,10 +54,18 @@ function runImpeccable(args) {
|
|
|
41
54
|
});
|
|
42
55
|
});
|
|
43
56
|
}
|
|
57
|
+
function printEngineMissing() {
|
|
58
|
+
output.writeln();
|
|
59
|
+
output.writeln(output.warning('The bundled monodesign detection engine could not be found.'));
|
|
60
|
+
output.writeln();
|
|
61
|
+
output.writeln('The detector ships with @monoes/monodesign. Reinstall monomind to restore it:');
|
|
62
|
+
output.writeln(output.dim(' npm install -g monomind # or: pnpm install (in a monomind checkout)'));
|
|
63
|
+
output.writeln();
|
|
64
|
+
}
|
|
44
65
|
// ─── detect subcommand ────────────────────────────────────────────────────────
|
|
45
66
|
const detectSubcommand = {
|
|
46
67
|
name: 'detect',
|
|
47
|
-
description: 'Detect design anti-patterns in HTML/CSS files using
|
|
68
|
+
description: 'Detect design anti-patterns in HTML/CSS files using the bundled monodesign engine',
|
|
48
69
|
options: [
|
|
49
70
|
{
|
|
50
71
|
name: 'target',
|
|
@@ -70,28 +91,37 @@ const detectSubcommand = {
|
|
|
70
91
|
output.writeln();
|
|
71
92
|
output.writeln(output.bold('Design Anti-Pattern Detection'));
|
|
72
93
|
output.writeln(output.dim('─'.repeat(50)));
|
|
73
|
-
const
|
|
74
|
-
if (!
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
output.writeln();
|
|
78
|
-
output.writeln('Install it to enable design anti-pattern detection:');
|
|
79
|
-
output.writeln(output.dim(' npm install -g impeccable'));
|
|
80
|
-
output.writeln();
|
|
81
|
-
output.writeln('Or run directly without installing:');
|
|
82
|
-
output.writeln(output.dim(' npx impeccable detect <file-or-dir>'));
|
|
83
|
-
output.writeln();
|
|
84
|
-
output.writeln(output.dim('impeccable checks for 46 known design anti-patterns across:'));
|
|
85
|
-
output.writeln(output.dim(' • slop — AI tells: purple palettes, side-tabs, card grids, italic-serif heroes'));
|
|
86
|
-
output.writeln(output.dim(' • quality — spacing, hierarchy, readability, contrast, motion, typography'));
|
|
87
|
-
return { success: false, message: 'impeccable not installed' };
|
|
94
|
+
const cliPath = resolveMonodesignCli();
|
|
95
|
+
if (!cliPath) {
|
|
96
|
+
printEngineMissing();
|
|
97
|
+
return { success: false, message: 'monodesign detection engine not found' };
|
|
88
98
|
}
|
|
89
99
|
output.writeln(output.dim(`Scanning: ${target}`));
|
|
90
100
|
output.writeln();
|
|
91
|
-
const forwardArgs = [target];
|
|
101
|
+
const forwardArgs = ['detect', target];
|
|
92
102
|
if (jsonOutput)
|
|
93
103
|
forwardArgs.push('--json');
|
|
94
|
-
const exitCode = await
|
|
104
|
+
const exitCode = await runMonodesign(cliPath, forwardArgs);
|
|
105
|
+
return { success: exitCode === 0, exitCode };
|
|
106
|
+
},
|
|
107
|
+
};
|
|
108
|
+
// ─── ignores subcommand ───────────────────────────────────────────────────────
|
|
109
|
+
const ignoresSubcommand = {
|
|
110
|
+
name: 'ignores',
|
|
111
|
+
description: 'Manage monodesign detector ignore rules, files, and values',
|
|
112
|
+
examples: [
|
|
113
|
+
{ command: 'monomind design ignores list', description: 'Show current ignore configuration' },
|
|
114
|
+
{ command: 'monomind design ignores add-rule <rule-id>', description: 'Ignore a detector rule project-wide' },
|
|
115
|
+
{ command: 'monomind design ignores add-file <path>', description: 'Exclude a file from detection' },
|
|
116
|
+
{ command: 'monomind design ignores remove-rule <rule-id>', description: 'Re-enable an ignored rule' },
|
|
117
|
+
],
|
|
118
|
+
action: async (ctx) => {
|
|
119
|
+
const cliPath = resolveMonodesignCli();
|
|
120
|
+
if (!cliPath) {
|
|
121
|
+
printEngineMissing();
|
|
122
|
+
return { success: false, message: 'monodesign detection engine not found' };
|
|
123
|
+
}
|
|
124
|
+
const exitCode = await runMonodesign(cliPath, ['ignores', ...ctx.args]);
|
|
95
125
|
return { success: exitCode === 0, exitCode };
|
|
96
126
|
},
|
|
97
127
|
};
|
|
@@ -99,10 +129,11 @@ const detectSubcommand = {
|
|
|
99
129
|
export const designCommand = {
|
|
100
130
|
name: 'design',
|
|
101
131
|
description: 'Design tooling: anti-pattern detection, OKLCH palette seeding, and design quality checks',
|
|
102
|
-
subcommands: [detectSubcommand, paletteSubcommand],
|
|
132
|
+
subcommands: [detectSubcommand, ignoresSubcommand, paletteSubcommand],
|
|
103
133
|
examples: [
|
|
104
134
|
{ command: 'monomind design detect', description: 'Detect design anti-patterns' },
|
|
105
135
|
{ command: 'monomind design detect -t ./src --json', description: 'JSON output for CI' },
|
|
136
|
+
{ command: 'monomind design ignores list', description: 'Manage detector ignore rules' },
|
|
106
137
|
{ command: 'monomind design palette', description: 'Pick an OKLCH brand seed color' },
|
|
107
138
|
{ command: 'monomind design palette --from "my-product"', description: 'Deterministic seed from product name' },
|
|
108
139
|
],
|
|
@@ -113,7 +144,8 @@ export const designCommand = {
|
|
|
113
144
|
output.writeln();
|
|
114
145
|
output.writeln('Subcommands:');
|
|
115
146
|
output.printList([
|
|
116
|
-
'detect - Detect design anti-patterns
|
|
147
|
+
'detect - Detect design anti-patterns (bundled monodesign engine)',
|
|
148
|
+
'ignores - Manage detector ignore rules, files, and values',
|
|
117
149
|
'palette - OKLCH brand seed — returns anchor color + mood + composition strategy',
|
|
118
150
|
]);
|
|
119
151
|
output.writeln();
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* CLI Design Palette Command
|
|
3
3
|
* OKLCH brand-seed picker — returns one anchor seed color + mood + composition strategy.
|
|
4
|
-
*
|
|
4
|
+
* Pattern adapted from impeccable (Apache-2.0) — rebranded for monomind (129 hand-curated seeds).
|
|
5
5
|
*
|
|
6
6
|
* github.com/monoes/monomind
|
|
7
7
|
*/
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* CLI Design Palette Command
|
|
3
3
|
* OKLCH brand-seed picker — returns one anchor seed color + mood + composition strategy.
|
|
4
|
-
*
|
|
4
|
+
* Pattern adapted from impeccable (Apache-2.0) — rebranded for monomind (129 hand-curated seeds).
|
|
5
5
|
*
|
|
6
6
|
* github.com/monoes/monomind
|
|
7
7
|
*/
|
|
@@ -496,8 +496,8 @@ export const paletteSubcommand = {
|
|
|
496
496
|
const idFlag = ctx.flags.id;
|
|
497
497
|
const fromFlag = ctx.flags.from;
|
|
498
498
|
const jsonFlag = ctx.flags.json;
|
|
499
|
-
// Respect
|
|
500
|
-
const fromKey = fromFlag || process.env['
|
|
499
|
+
// Respect MONODESIGN_PALETTE_SEED env var as a fallback for --from
|
|
500
|
+
const fromKey = fromFlag || process.env['MONODESIGN_PALETTE_SEED'];
|
|
501
501
|
let seed;
|
|
502
502
|
if (idFlag) {
|
|
503
503
|
const found = SEEDS.find((s) => s.id === idFlag);
|
|
@@ -88,6 +88,7 @@ const searchDocCommand = {
|
|
|
88
88
|
{ name: 'scope', short: 's', description: 'Knowledge scope (default: shared)', type: 'string', default: 'shared' },
|
|
89
89
|
{ name: 'min-score', description: 'Minimum similarity (default: 0.3)', type: 'number', default: 0.3 },
|
|
90
90
|
{ name: 'store', description: 'Which store(s): project | global | all (default: all — project results win ties)', type: 'string', default: 'all' },
|
|
91
|
+
{ name: 'surfaces', description: "Override routing: comma list of chunks,kg,rules,memory (default: rule-based router picks)", type: 'string' },
|
|
91
92
|
],
|
|
92
93
|
examples: [
|
|
93
94
|
{ command: 'monomind doc search -q "authentication flow"', description: 'Search project + global brain' },
|
|
@@ -100,28 +101,84 @@ const searchDocCommand = {
|
|
|
100
101
|
return { success: false, exitCode: 1 };
|
|
101
102
|
}
|
|
102
103
|
const { searchKnowledge } = await import('../knowledge/document-pipeline.js');
|
|
104
|
+
const { routeQuery, rrfFuse, recordRouteOverride } = await import('../memory/query-router.js');
|
|
103
105
|
const storeFlag = String(ctx.flags.store || 'all');
|
|
104
|
-
const
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
106
|
+
const limit = Number(ctx.flags.limit || 10);
|
|
107
|
+
// Same surface routing as the MCP knowledge_search tool and the warm
|
|
108
|
+
// /api/knowledge/search endpoint: the rule-based router picks which
|
|
109
|
+
// retrieval surfaces to spend queries on; --surfaces overrides it.
|
|
110
|
+
const route = routeQuery(query);
|
|
111
|
+
const VALID_SURFACES = ['chunks', 'kg', 'rules', 'memory'];
|
|
112
|
+
const rawSurfaces = String(ctx.flags.surfaces || '').split(',').map(s => s.trim()).filter(Boolean);
|
|
113
|
+
const requested = rawSurfaces.filter(s => VALID_SURFACES.includes(s));
|
|
114
|
+
const invalidSurfaces = rawSurfaces.filter(s => !VALID_SURFACES.includes(s));
|
|
115
|
+
if (invalidSurfaces.length) {
|
|
116
|
+
output.writeln(output.dim(`ignoring unknown surface(s): ${invalidSurfaces.join(',')} (valid: ${VALID_SURFACES.join(',')})`));
|
|
117
|
+
}
|
|
118
|
+
const surfaces = requested.length
|
|
119
|
+
? requested
|
|
120
|
+
: (route.confident ? route.surfaces : ['chunks', ...route.surfaces.filter(s => s !== 'chunks')]);
|
|
121
|
+
const bridge = await import('../memory/memory-bridge.js');
|
|
122
|
+
const kg = await import('../memory/memory-kg.js');
|
|
123
|
+
const [excerpts, graph, rules, memories] = await Promise.all([
|
|
124
|
+
surfaces.includes('chunks')
|
|
125
|
+
? searchKnowledge(query, {
|
|
126
|
+
scope: String(ctx.flags.scope || 'shared'),
|
|
127
|
+
limit,
|
|
128
|
+
minScore: Number(ctx.flags['min-score'] || 0.3),
|
|
129
|
+
store: storeFlag === 'project' || storeFlag === 'global' ? storeFlag : 'all',
|
|
130
|
+
})
|
|
131
|
+
: [],
|
|
132
|
+
surfaces.includes('kg') ? kg.kgSearch({ query, limit: 6 }).catch(() => null) : null,
|
|
133
|
+
surfaces.includes('rules') ? bridge.bridgeSearchEntries({ query, namespace: 'rules', limit: 3, threshold: 0.35 }).catch(() => null) : null,
|
|
134
|
+
surfaces.includes('memory') ? bridge.bridgeSearchEntries({ query, namespace: 'patterns', limit: 3 }).catch(() => null) : null,
|
|
135
|
+
]);
|
|
136
|
+
// Confident non-chunk routing against an empty surface (e.g. a project
|
|
137
|
+
// with no KG yet) must not read as "no knowledge" — fall back to chunks.
|
|
138
|
+
let fellBack = false;
|
|
139
|
+
let chunkExcerpts = excerpts;
|
|
140
|
+
if (!requested.length && !chunkExcerpts.length && !(graph?.triplets?.length) && !(rules?.results?.length) && !(memories?.results?.length) && !surfaces.includes('chunks')) {
|
|
141
|
+
fellBack = true;
|
|
142
|
+
recordRouteOverride(surfaces[0], 'chunks');
|
|
143
|
+
chunkExcerpts = await searchKnowledge(query, {
|
|
144
|
+
scope: String(ctx.flags.scope || 'shared'),
|
|
145
|
+
limit,
|
|
146
|
+
minScore: Number(ctx.flags['min-score'] || 0.3),
|
|
147
|
+
store: storeFlag === 'project' || storeFlag === 'global' ? storeFlag : 'all',
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
const fused = rrfFuse([
|
|
151
|
+
chunkExcerpts.map(e => ({ id: e.id || `${e.filePath}#${e.chunkIndex}`, kind: 'excerpt', ...e })),
|
|
152
|
+
(graph?.triplets ?? []).map((t, i) => ({ id: `kg:${i}:${t.source}|${t.relation}|${t.target}`, kind: 'triplet', ...t })),
|
|
153
|
+
(rules?.results ?? []).map(r => ({ id: r.id, kind: 'rule', key: r.key, text: r.content, score: r.score, importance: 0.7 })),
|
|
154
|
+
(memories?.results ?? []).map(r => ({ id: r.id, kind: 'memory', key: r.key, text: r.content, score: r.score })),
|
|
155
|
+
], limit);
|
|
156
|
+
if (!fused.length) {
|
|
111
157
|
output.writeln(output.dim('No results found.'));
|
|
112
158
|
return { success: true, data: [] };
|
|
113
159
|
}
|
|
114
|
-
output.writeln(output.bold(`${
|
|
160
|
+
output.writeln(output.bold(`${fused.length} results ${output.dim(`(surfaces: ${fellBack ? surfaces.join(',') + ' → chunks fallback' : surfaces.join(',')})`)}:`));
|
|
115
161
|
output.writeln();
|
|
116
|
-
for (let i = 0; i <
|
|
117
|
-
const
|
|
118
|
-
const
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
162
|
+
for (let i = 0; i < fused.length; i++) {
|
|
163
|
+
const r = fused[i];
|
|
164
|
+
const n = output.highlight(`${i + 1}.`);
|
|
165
|
+
if (r.kind === 'triplet') {
|
|
166
|
+
const fact = r.fact && r.fact !== `${r.source} ${r.relation} ${r.target}` ? ` ${output.dim(`(${String(r.fact).slice(0, 160)})`)}` : '';
|
|
167
|
+
output.writeln(`${n} ${output.dim('[kg]')} ${r.source} —${r.relation}→ ${r.target}${fact}`);
|
|
168
|
+
}
|
|
169
|
+
else if (r.kind === 'rule' || r.kind === 'memory') {
|
|
170
|
+
output.writeln(`${n} ${output.dim(`[${r.kind}]`)} ${String(r.text || '').replace(/\s+/g, ' ').slice(0, 200)}`);
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
const origin = r.scope === 'global' ? ` ${output.dim('[global]')}` : '';
|
|
174
|
+
const sim = typeof r.similarity === 'number' ? `(${r.similarity.toFixed(3)}) ` : '';
|
|
175
|
+
output.writeln(`${n} ${output.dim(sim)}${r.filePath || 'unknown'}${origin}`);
|
|
176
|
+
const text = String(r.text || '');
|
|
177
|
+
output.writeln(` ${output.dim(text.length > 200 ? text.slice(0, 200) + '...' : text)}`);
|
|
178
|
+
}
|
|
122
179
|
output.writeln();
|
|
123
180
|
}
|
|
124
|
-
return { success: true, data:
|
|
181
|
+
return { success: true, data: fused };
|
|
125
182
|
},
|
|
126
183
|
};
|
|
127
184
|
const listDocCommand = {
|
|
@@ -6,6 +6,10 @@ import type { HealthCheck } from './doctor-env-checks.js';
|
|
|
6
6
|
export type { HealthCheck };
|
|
7
7
|
export declare function checkConfigFile(): Promise<HealthCheck>;
|
|
8
8
|
export declare function checkMemoryDatabase(): Promise<HealthCheck>;
|
|
9
|
+
/** Memory knowledge graph (cognee port): entities/relations/rules distilled
|
|
10
|
+
* from sessions and org runs. Informational — an empty graph on a fresh
|
|
11
|
+
* project is normal, so it never fails. */
|
|
12
|
+
export declare function checkMemoryKnowledgeGraph(): Promise<HealthCheck>;
|
|
9
13
|
/** Second Brain: when this project has an indexed knowledge base, semantic
|
|
10
14
|
* search needs the local embedding model. Its absence is silent (search
|
|
11
15
|
* degrades to keyword matching) — surface it here instead. */
|