@monoes/monomindcli 2.16.3 → 2.16.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/agents/github/repo-architect.md +1 -1
- package/.claude/agents/specialists/integration-architect.md +9 -13
- package/.claude/commands/agents/agent-capabilities.md +1 -0
- package/.claude/commands/agents/agent-coordination.md +1 -0
- package/.claude/commands/agents/agent-spawning.md +1 -0
- package/.claude/commands/agents/agent-types.md +1 -0
- package/.claude/commands/analysis/bottleneck-detect.md +1 -0
- package/.claude/commands/analysis/performance-bottlenecks.md +1 -0
- package/.claude/commands/analysis/performance-report.md +1 -0
- package/.claude/commands/analysis/token-usage.md +1 -0
- package/.claude/commands/automation/README.md +1 -1
- package/.claude/commands/automation/auto-agent.md +1 -0
- package/.claude/commands/automation/self-healing.md +1 -0
- package/.claude/commands/automation/session-memory.md +1 -0
- package/.claude/commands/automation/smart-agents.md +1 -0
- package/.claude/commands/automation/smart-spawn.md +1 -0
- package/.claude/commands/automation/workflow-select.md +22 -27
- package/.claude/commands/coordination/README.md +2 -2
- package/.claude/commands/coordination/agent-spawn.md +1 -0
- package/.claude/commands/coordination/monoswarm-init.md +9 -8
- package/.claude/commands/coordination/task-orchestrate.md +6 -5
- package/.claude/commands/github/README.md +1 -1
- package/.claude/commands/github/github-modes.md +1 -0
- package/.claude/commands/github/issue-tracker.md +1 -0
- package/.claude/commands/github/pr-manager.md +1 -0
- package/.claude/commands/github/release-manager.md +1 -2
- package/.claude/commands/github/repo-architect.md +1 -0
- package/.claude/commands/github/sync-coordinator.md +1 -0
- package/.claude/commands/hooks/overview.md +1 -0
- package/.claude/commands/hooks/post-edit.md +1 -0
- package/.claude/commands/hooks/post-task.md +1 -0
- package/.claude/commands/hooks/pre-edit.md +1 -0
- package/.claude/commands/hooks/pre-task.md +1 -0
- package/.claude/commands/hooks/session-end.md +1 -0
- package/.claude/commands/hooks/setup.md +1 -0
- package/.claude/commands/mastermind/adr.md +3 -1
- package/.claude/commands/mastermind/brain.md +3 -1
- package/.claude/commands/mastermind/budget.md +3 -1
- package/.claude/commands/mastermind/code-review.md +3 -1
- package/.claude/commands/mastermind/content.md +3 -1
- package/.claude/commands/mastermind/createorg.md +4 -2
- package/.claude/commands/mastermind/createtask.md +6 -4
- package/.claude/commands/mastermind/debug.md +3 -1
- package/.claude/commands/mastermind/design.md +3 -1
- package/.claude/commands/mastermind/do.md +5 -3
- package/.claude/commands/mastermind/execute.md +3 -1
- package/.claude/commands/mastermind/finance.md +3 -1
- package/.claude/commands/mastermind/graph-status.md +3 -1
- package/.claude/commands/mastermind/help.md +17 -20
- package/.claude/commands/mastermind/idea.md +3 -1
- package/.claude/commands/mastermind/ideate.md +4 -2
- package/.claude/commands/mastermind/improve.md +4 -2
- package/.claude/commands/mastermind/loops.md +3 -1
- package/.claude/commands/mastermind/marketing.md +3 -1
- package/.claude/commands/mastermind/master.md +4 -3
- package/.claude/commands/mastermind/memory.md +8 -36
- package/.claude/commands/mastermind/monoswarm.md +3 -2
- package/.claude/commands/mastermind/okf-export.md +3 -1
- package/.claude/commands/mastermind/okf-import.md +3 -1
- package/.claude/commands/mastermind/ops.md +3 -1
- package/.claude/commands/mastermind/orgs.md +3 -1
- package/.claude/commands/mastermind/orgstatus.md +3 -1
- package/.claude/commands/mastermind/plan.md +3 -1
- package/.claude/commands/mastermind/receive-review.md +3 -1
- package/.claude/commands/mastermind/release.md +3 -1
- package/.claude/commands/mastermind/repeat.md +3 -1
- package/.claude/commands/mastermind/research.md +3 -1
- package/.claude/commands/mastermind/review.md +3 -1
- package/.claude/commands/mastermind/runorg.md +4 -2
- package/.claude/commands/mastermind/sales.md +3 -1
- package/.claude/commands/mastermind/skill-builder.md +3 -1
- package/.claude/commands/mastermind/specialagents.md +3 -1
- package/.claude/commands/mastermind/stoporg.md +9 -11
- package/.claude/commands/mastermind/techport.md +3 -1
- package/.claude/commands/mastermind/topology.md +4 -3
- package/.claude/commands/mastermind/understand.md +3 -1
- package/.claude/commands/mastermind/worktree.md +3 -1
- package/.claude/commands/memory/memory-search.md +1 -0
- package/.claude/commands/monitoring/README.md +1 -1
- package/.claude/commands/monitoring/agent-metrics.md +1 -0
- package/.claude/commands/monitoring/agents.md +1 -0
- package/.claude/commands/monitoring/status.md +1 -0
- package/.claude/commands/monoswarm/README.md +3 -3
- package/.claude/commands/monoswarm/analysis.md +2 -2
- package/.claude/commands/monoswarm/consensus.md +1 -0
- package/.claude/commands/monoswarm/development.md +3 -3
- package/.claude/commands/monoswarm/examples.md +4 -4
- package/.claude/commands/monoswarm/init.md +2 -1
- package/.claude/commands/monoswarm/maintenance.md +2 -2
- package/.claude/commands/monoswarm/memory.md +1 -0
- package/.claude/commands/monoswarm/monoswarm.md +5 -5
- package/.claude/commands/monoswarm/optimization.md +2 -2
- package/.claude/commands/monoswarm/research.md +2 -2
- package/.claude/commands/monoswarm/spawn.md +1 -0
- package/.claude/commands/monoswarm/status.md +2 -1
- package/.claude/commands/monoswarm/stop.md +2 -1
- package/.claude/commands/monoswarm/testing.md +2 -2
- package/.claude/commands/pair/README.md +8 -9
- package/.claude/commands/pair/examples.md +3 -4
- package/.claude/commands/pair/session.md +1 -1
- package/.claude/commands/workflows/README.md +45 -40
- package/.claude/commands/workflows/development.md +42 -55
- package/.claude/commands/workflows/research.md +41 -57
- package/.claude/commands/workflows/workflow-create.md +43 -45
- package/.claude/commands/workflows/workflow-execute.md +58 -68
- package/.claude/commands/workflows/workflow-export.md +37 -63
- package/.claude/helpers/agent-registry.cjs +434 -0
- package/.claude/helpers/build-skill-registry.cjs +10 -6
- package/.claude/helpers/handlers/pick-core.cjs +55 -26
- package/.claude/helpers/handlers/route-handler.cjs +11 -3
- package/.claude/helpers/handlers/session-restore-handler.cjs +4 -1
- package/.claude/helpers/hook-handler.cjs +4 -2
- package/.claude/helpers/jev-catalog.cjs +14 -6
- package/.claude/helpers/jev-picker.cjs +52 -8
- package/.claude/helpers/pick-rank.cjs +184 -6
- package/.claude/helpers/pick-stats.cjs +86 -2
- package/.claude/skills/agentic-jujutsu/SKILL.md +2 -3
- package/.claude/skills/github-toolkit/SKILL.md +1 -1
- package/.claude/skills/hooks-automation/SKILL.md +243 -938
- package/.claude/skills/mastermind-agent-detail/SKILL.md +1 -1
- package/.claude/skills/mastermind-agent-select/SKILL.md +16 -1
- package/.claude/skills/mastermind-agents/SKILL.md +31 -38
- package/.claude/skills/mastermind-createorg/SKILL.md +3 -3
- package/.claude/skills/mastermind-env/SKILL.md +4 -18
- package/.claude/skills/mastermind-inbox/SKILL.md +31 -52
- package/.claude/skills/mastermind-instance/SKILL.md +7 -5
- package/.claude/skills/mastermind-new-agent/SKILL.md +3 -3
- package/.claude/skills/mastermind-org-settings/SKILL.md +3 -4
- package/.claude/skills/mastermind-orgs/SKILL.md +26 -32
- package/.claude/skills/mastermind-orgstatus/SKILL.md +49 -140
- package/.claude/skills/mastermind-plugins/SKILL.md +1 -1
- package/.claude/skills/mastermind-release/SKILL.md +9 -1
- package/.claude/skills/mastermind-research/SKILL.md +9 -1
- package/.claude/skills/mastermind-review/SKILL.md +9 -1
- package/.claude/skills/mastermind-routine-detail/SKILL.md +1 -1
- package/.claude/skills/mastermind-runorg/SKILL.md +13 -13
- package/.claude/skills/mastermind-stoporg/SKILL.md +7 -62
- package/.claude/skills/mastermind-tasks/SKILL.md +6 -8
- package/.claude/skills/monodesign/SKILL.md +257 -0
- package/.claude/skills/monodesign/adapt.md +53 -0
- package/.claude/skills/monodesign/agents/monodesign-asset-producer.md +100 -0
- package/.claude/skills/monodesign/agents/monodesign-manual-edit-applier.md +103 -0
- package/.claude/skills/monodesign/animate.md +65 -0
- package/.claude/skills/monodesign/audit.md +89 -0
- package/.claude/skills/monodesign/bolder.md +50 -0
- package/.claude/skills/monodesign/clarify.md +64 -0
- package/.claude/skills/monodesign/colorize.md +68 -0
- package/.claude/skills/monodesign/craft.md +51 -0
- package/.claude/skills/monodesign/critique.md +66 -0
- package/.claude/skills/monodesign/delight.md +47 -0
- package/.claude/skills/monodesign/distill.md +56 -0
- package/.claude/skills/monodesign/document.md +83 -0
- package/.claude/skills/monodesign/extract.md +74 -0
- package/.claude/skills/monodesign/harden.md +65 -0
- package/.claude/skills/monodesign/init.md +30 -0
- package/.claude/skills/monodesign/layout.md +36 -0
- package/.claude/skills/monodesign/live.md +34 -0
- package/.claude/skills/monodesign/onboard.md +50 -0
- package/.claude/skills/monodesign/optimize.md +64 -0
- package/.claude/skills/monodesign/overdrive.md +56 -0
- package/.claude/skills/monodesign/polish.md +68 -0
- package/.claude/skills/monodesign/quieter.md +57 -0
- package/.claude/skills/monodesign/reference/adapt.md +312 -0
- package/.claude/skills/monodesign/reference/adapt.native.md +58 -0
- package/.claude/skills/monodesign/reference/android.md +40 -0
- package/.claude/skills/monodesign/reference/animate.md +203 -0
- package/.claude/skills/monodesign/reference/antipatterns-catalog.md +410 -0
- package/.claude/skills/monodesign/reference/audit.md +135 -0
- package/.claude/skills/monodesign/reference/audit.native.md +139 -0
- package/.claude/skills/monodesign/reference/bolder.md +120 -0
- package/.claude/skills/monodesign/reference/brand-workflow.md +180 -0
- package/.claude/skills/monodesign/reference/brand.md +108 -0
- package/.claude/skills/monodesign/reference/clarify.md +288 -0
- package/.claude/skills/monodesign/reference/codex.md +105 -0
- package/.claude/skills/monodesign/reference/cognitive-load.md +106 -0
- package/.claude/skills/monodesign/reference/color-and-contrast.md +105 -0
- package/.claude/skills/monodesign/reference/colorize.md +257 -0
- package/.claude/skills/monodesign/reference/component-specs.md +260 -0
- package/.claude/skills/monodesign/reference/component-states.md +274 -0
- package/.claude/skills/monodesign/reference/component-system.md +358 -0
- package/.claude/skills/monodesign/reference/copy-formulas.md +160 -0
- package/.claude/skills/monodesign/reference/craft.md +123 -0
- package/.claude/skills/monodesign/reference/critique.md +780 -0
- package/.claude/skills/monodesign/reference/delight.md +302 -0
- package/.claude/skills/monodesign/reference/design-principles.md +246 -0
- package/.claude/skills/monodesign/reference/distill.md +111 -0
- package/.claude/skills/monodesign/reference/document.md +429 -0
- package/.claude/skills/monodesign/reference/extract.md +69 -0
- package/.claude/skills/monodesign/reference/harden.md +347 -0
- package/.claude/skills/monodesign/reference/heuristics-scoring.md +234 -0
- package/.claude/skills/monodesign/reference/hooks.md +92 -0
- package/.claude/skills/monodesign/reference/image-prompts.md +130 -0
- package/.claude/skills/monodesign/reference/init.md +221 -0
- package/.claude/skills/monodesign/reference/interaction-design.md +189 -0
- package/.claude/skills/monodesign/reference/ios.md +45 -0
- package/.claude/skills/monodesign/reference/layout.md +185 -0
- package/.claude/skills/monodesign/reference/live.md +710 -0
- package/.claude/skills/monodesign/reference/motion-design.md +109 -0
- package/.claude/skills/monodesign/reference/onboard.md +234 -0
- package/.claude/skills/monodesign/reference/optimize.md +258 -0
- package/.claude/skills/monodesign/reference/overdrive.md +130 -0
- package/.claude/skills/monodesign/reference/personas.md +179 -0
- package/.claude/skills/monodesign/reference/polish.md +241 -0
- package/.claude/skills/monodesign/reference/pre-delivery-checklist.md +108 -0
- package/.claude/skills/monodesign/reference/product.md +60 -0
- package/.claude/skills/monodesign/reference/quieter.md +99 -0
- package/.claude/skills/monodesign/reference/responsive-design.md +114 -0
- package/.claude/skills/monodesign/reference/shape.md +165 -0
- package/.claude/skills/monodesign/reference/spatial-design.md +100 -0
- package/.claude/skills/monodesign/reference/teach.md +10 -0
- package/.claude/skills/monodesign/reference/token-architecture.md +222 -0
- package/.claude/skills/monodesign/reference/typeset.md +301 -0
- package/.claude/skills/monodesign/reference/typography.md +159 -0
- package/.claude/skills/monodesign/reference/ux-research.md +143 -0
- package/.claude/skills/monodesign/reference/ux-rules.md +211 -0
- package/.claude/skills/monodesign/reference/ux-writing.md +107 -0
- package/.claude/skills/monodesign/scripts/command-metadata.json +94 -0
- package/.claude/skills/monodesign/scripts/context-signals.mjs +260 -0
- package/.claude/skills/monodesign/scripts/context.mjs +1065 -0
- package/.claude/skills/monodesign/scripts/critique-storage.mjs +416 -0
- package/.claude/skills/monodesign/scripts/detect-csp.mjs +193 -0
- package/.claude/skills/monodesign/scripts/detect.mjs +33 -0
- package/.claude/skills/monodesign/scripts/detector/browser/injected/index.mjs +1960 -0
- package/.claude/skills/monodesign/scripts/detector/cli/main.mjs +321 -0
- package/.claude/skills/monodesign/scripts/detector/design-system.mjs +814 -0
- package/.claude/skills/monodesign/scripts/detector/detect-antipatterns-browser.js +5628 -0
- package/.claude/skills/monodesign/scripts/detector/detect-antipatterns.mjs +50 -0
- package/.claude/skills/monodesign/scripts/detector/engines/browser/detect-url.mjs +259 -0
- package/.claude/skills/monodesign/scripts/detector/engines/browser/drivers.mjs +339 -0
- package/.claude/skills/monodesign/scripts/detector/engines/regex/detect-text.mjs +636 -0
- package/.claude/skills/monodesign/scripts/detector/engines/static-html/css-cascade.mjs +1016 -0
- package/.claude/skills/monodesign/scripts/detector/engines/static-html/detect-html.mjs +253 -0
- package/.claude/skills/monodesign/scripts/detector/engines/visual/screenshot-contrast.mjs +198 -0
- package/.claude/skills/monodesign/scripts/detector/findings.mjs +12 -0
- package/.claude/skills/monodesign/scripts/detector/fix/css-regions.mjs +181 -0
- package/.claude/skills/monodesign/scripts/detector/fix/fixers.mjs +373 -0
- package/.claude/skills/monodesign/scripts/detector/fix/index.mjs +426 -0
- package/.claude/skills/monodesign/scripts/detector/node/file-system.mjs +198 -0
- package/.claude/skills/monodesign/scripts/detector/profile/profiler.mjs +166 -0
- package/.claude/skills/monodesign/scripts/detector/registry/antipatterns.mjs +563 -0
- package/.claude/skills/monodesign/scripts/detector/rules/checks.mjs +3024 -0
- package/.claude/skills/monodesign/scripts/detector/shared/color.mjs +124 -0
- package/.claude/skills/monodesign/scripts/detector/shared/constants.mjs +101 -0
- package/.claude/skills/monodesign/scripts/detector/shared/fonts.mjs +30 -0
- package/.claude/skills/monodesign/scripts/detector/shared/inline-ignores.mjs +148 -0
- package/.claude/skills/monodesign/scripts/detector/shared/page.mjs +7 -0
- package/.claude/skills/monodesign/scripts/hook-admin.mjs +694 -0
- package/.claude/skills/monodesign/scripts/hook-before-edit.mjs +516 -0
- package/.claude/skills/monodesign/scripts/hook-lib.mjs +1785 -0
- package/.claude/skills/monodesign/scripts/hook.mjs +61 -0
- package/.claude/skills/monodesign/scripts/lib/design-parser.mjs +809 -0
- package/.claude/skills/monodesign/scripts/lib/is-generated.mjs +69 -0
- package/.claude/skills/monodesign/scripts/lib/monodesign-config.mjs +640 -0
- package/.claude/skills/monodesign/scripts/lib/monodesign-paths.mjs +129 -0
- package/.claude/skills/monodesign/scripts/lib/provider.mjs +4 -0
- package/.claude/skills/monodesign/scripts/lib/target-args.mjs +42 -0
- package/.claude/skills/monodesign/scripts/live/browser-script-parts.mjs +50 -0
- package/.claude/skills/monodesign/scripts/live/completion.mjs +19 -0
- package/.claude/skills/monodesign/scripts/live/event-validation.mjs +137 -0
- package/.claude/skills/monodesign/scripts/live/insert-ui.mjs +458 -0
- package/.claude/skills/monodesign/scripts/live/manual-apply.mjs +939 -0
- package/.claude/skills/monodesign/scripts/live/manual-edit-routes.mjs +357 -0
- package/.claude/skills/monodesign/scripts/live/manual-edits-buffer.mjs +152 -0
- package/.claude/skills/monodesign/scripts/live/session-store.mjs +293 -0
- package/.claude/skills/monodesign/scripts/live/svelte-component.mjs +826 -0
- package/.claude/skills/monodesign/scripts/live/sveltekit-adapter.mjs +279 -0
- package/.claude/skills/monodesign/scripts/live/ui-core.mjs +180 -0
- package/.claude/skills/monodesign/scripts/live/vocabulary.mjs +36 -0
- package/.claude/skills/monodesign/scripts/live-accept.mjs +812 -0
- package/.claude/skills/monodesign/scripts/live-browser-dom.js +147 -0
- package/.claude/skills/monodesign/scripts/live-browser-session.js +124 -0
- package/.claude/skills/monodesign/scripts/live-browser.js +11213 -0
- package/.claude/skills/monodesign/scripts/live-commit-manual-edits.mjs +1241 -0
- package/.claude/skills/monodesign/scripts/live-complete.mjs +75 -0
- package/.claude/skills/monodesign/scripts/live-copy-edit-agent.mjs +683 -0
- package/.claude/skills/monodesign/scripts/live-discard-manual-edits.mjs +51 -0
- package/.claude/skills/monodesign/scripts/live-inject.mjs +596 -0
- package/.claude/skills/monodesign/scripts/live-insert.mjs +272 -0
- package/.claude/skills/monodesign/scripts/live-manual-edit-evidence.mjs +363 -0
- package/.claude/skills/monodesign/scripts/live-poll.mjs +384 -0
- package/.claude/skills/monodesign/scripts/live-resume.mjs +94 -0
- package/.claude/skills/monodesign/scripts/live-server.mjs +1210 -0
- package/.claude/skills/monodesign/scripts/live-status.mjs +61 -0
- package/.claude/skills/monodesign/scripts/live-target.mjs +30 -0
- package/.claude/skills/monodesign/scripts/live-wrap.mjs +884 -0
- package/.claude/skills/monodesign/scripts/live.mjs +297 -0
- package/.claude/skills/monodesign/scripts/modern-screenshot.umd.js +14 -0
- package/.claude/skills/monodesign/scripts/palette.mjs +635 -0
- package/.claude/skills/monodesign/scripts/pin.mjs +221 -0
- package/.claude/skills/monodesign/shape.md +71 -0
- package/.claude/skills/monodesign/teach.md +18 -0
- package/.claude/skills/monodesign/typeset.md +59 -0
- package/.claude/skills/monolean-audit/SKILL.md +4 -6
- package/.claude/skills/monolean-help/SKILL.md +0 -1
- package/.claude/skills/monoswarm/SKILL.md +17 -17
- package/.claude/skills/pair-programming/SKILL.md +127 -1100
- package/README.md +28 -43
- package/dist/src/agents/registry-builder.d.ts +58 -22
- package/dist/src/agents/registry-builder.d.ts.map +1 -1
- package/dist/src/agents/registry-builder.js +41 -341
- package/dist/src/agents/registry-builder.js.map +1 -1
- package/dist/src/agents/registry-freshness.d.ts +4 -4
- package/dist/src/agents/registry-freshness.d.ts.map +1 -1
- package/dist/src/agents/registry-freshness.js +11 -60
- package/dist/src/agents/registry-freshness.js.map +1 -1
- package/dist/src/commands/doc.d.ts.map +1 -1
- package/dist/src/commands/doc.js +6 -15
- package/dist/src/commands/doc.js.map +1 -1
- package/dist/src/commands/doctor-pick-checks.d.ts +20 -3
- package/dist/src/commands/doctor-pick-checks.d.ts.map +1 -1
- package/dist/src/commands/doctor-pick-checks.js +138 -45
- package/dist/src/commands/doctor-pick-checks.js.map +1 -1
- package/dist/src/commands/doctor-project-checks.d.ts +2 -2
- package/dist/src/commands/doctor-project-checks.d.ts.map +1 -1
- package/dist/src/commands/doctor-project-checks.js +21 -17
- package/dist/src/commands/doctor-project-checks.js.map +1 -1
- package/dist/src/commands/doctor.d.ts.map +1 -1
- package/dist/src/commands/doctor.js +6 -4
- package/dist/src/commands/doctor.js.map +1 -1
- package/dist/src/commands/hooks-routing-commands.d.ts.map +1 -1
- package/dist/src/commands/hooks-routing-commands.js +4 -3
- package/dist/src/commands/hooks-routing-commands.js.map +1 -1
- package/dist/src/commands/init-upgrade.d.ts.map +1 -1
- package/dist/src/commands/init-upgrade.js +10 -0
- package/dist/src/commands/init-upgrade.js.map +1 -1
- package/dist/src/commands/init-wizard.d.ts.map +1 -1
- package/dist/src/commands/init-wizard.js +7 -2
- package/dist/src/commands/init-wizard.js.map +1 -1
- package/dist/src/commands/init.d.ts.map +1 -1
- package/dist/src/commands/init.js +27 -27
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/monograph.d.ts.map +1 -1
- package/dist/src/commands/monograph.js +16 -21
- package/dist/src/commands/monograph.js.map +1 -1
- package/dist/src/commands/org.js +1 -1
- package/dist/src/commands/org.js.map +1 -1
- package/dist/src/commands/pick.d.ts.map +1 -1
- package/dist/src/commands/pick.js +4 -3
- package/dist/src/commands/pick.js.map +1 -1
- package/dist/src/decision/jev.d.ts +20 -0
- package/dist/src/decision/jev.d.ts.map +1 -1
- package/dist/src/decision/jev.js +12 -0
- package/dist/src/decision/jev.js.map +1 -1
- package/dist/src/decision/pick-eval.d.ts +23 -0
- package/dist/src/decision/pick-eval.d.ts.map +1 -1
- package/dist/src/decision/pick-eval.js +24 -1
- package/dist/src/decision/pick-eval.js.map +1 -1
- package/dist/src/decision/pick-real.d.ts +93 -0
- package/dist/src/decision/pick-real.d.ts.map +1 -0
- package/dist/src/decision/pick-real.js +253 -0
- package/dist/src/decision/pick-real.js.map +1 -0
- package/dist/src/decision/picks.d.ts +6 -0
- package/dist/src/decision/picks.d.ts.map +1 -1
- package/dist/src/decision/picks.js +34 -11
- package/dist/src/decision/picks.js.map +1 -1
- package/dist/src/init/claudemd-generator.d.ts.map +1 -1
- package/dist/src/init/claudemd-generator.js +1 -0
- package/dist/src/init/claudemd-generator.js.map +1 -1
- package/dist/src/init/copy-assets.d.ts.map +1 -1
- package/dist/src/init/copy-assets.js +17 -9
- package/dist/src/init/copy-assets.js.map +1 -1
- package/dist/src/init/embeddings-step.d.ts +23 -0
- package/dist/src/init/embeddings-step.d.ts.map +1 -0
- package/dist/src/init/embeddings-step.js +53 -0
- package/dist/src/init/embeddings-step.js.map +1 -0
- package/dist/src/init/executor.d.ts.map +1 -1
- package/dist/src/init/executor.js +35 -5
- package/dist/src/init/executor.js.map +1 -1
- package/dist/src/init/file-guard.d.ts +93 -0
- package/dist/src/init/file-guard.d.ts.map +1 -0
- package/dist/src/init/file-guard.js +239 -0
- package/dist/src/init/file-guard.js.map +1 -0
- package/dist/src/init/helpers-generator.d.ts +7 -0
- package/dist/src/init/helpers-generator.d.ts.map +1 -1
- package/dist/src/init/helpers-generator.js +13 -0
- package/dist/src/init/helpers-generator.js.map +1 -1
- package/dist/src/init/init-memory.d.ts +10 -0
- package/dist/src/init/init-memory.d.ts.map +1 -1
- package/dist/src/init/init-memory.js +44 -1
- package/dist/src/init/init-memory.js.map +1 -1
- package/dist/src/init/managed-block.d.ts +3 -1
- package/dist/src/init/managed-block.d.ts.map +1 -1
- package/dist/src/init/managed-block.js +9 -2
- package/dist/src/init/managed-block.js.map +1 -1
- package/dist/src/init/mcp-generator.d.ts +9 -0
- package/dist/src/init/mcp-generator.d.ts.map +1 -1
- package/dist/src/init/mcp-generator.js +28 -0
- package/dist/src/init/mcp-generator.js.map +1 -1
- package/dist/src/init/project-indexes.d.ts +19 -0
- package/dist/src/init/project-indexes.d.ts.map +1 -0
- package/dist/src/init/project-indexes.js +44 -0
- package/dist/src/init/project-indexes.js.map +1 -0
- package/dist/src/init/runtime-config-merge.d.ts +21 -0
- package/dist/src/init/runtime-config-merge.d.ts.map +1 -0
- package/dist/src/init/runtime-config-merge.js +88 -0
- package/dist/src/init/runtime-config-merge.js.map +1 -0
- package/dist/src/init/settings-generator.js +1 -1
- package/dist/src/init/settings-generator.js.map +1 -1
- package/dist/src/init/shared-instructions-generator.d.ts +3 -1
- package/dist/src/init/shared-instructions-generator.d.ts.map +1 -1
- package/dist/src/init/shared-instructions-generator.js +14 -39
- package/dist/src/init/shared-instructions-generator.js.map +1 -1
- package/dist/src/init/shared.d.ts +17 -2
- package/dist/src/init/shared.d.ts.map +1 -1
- package/dist/src/init/shared.js +39 -7
- package/dist/src/init/shared.js.map +1 -1
- package/dist/src/init/types.d.ts +22 -2
- package/dist/src/init/types.d.ts.map +1 -1
- package/dist/src/init/types.js +11 -3
- package/dist/src/init/types.js.map +1 -1
- package/dist/src/init/upgrade.d.ts +7 -0
- package/dist/src/init/upgrade.d.ts.map +1 -1
- package/dist/src/init/upgrade.js +60 -48
- package/dist/src/init/upgrade.js.map +1 -1
- package/dist/src/init/write-antigravity.d.ts +1 -0
- package/dist/src/init/write-antigravity.d.ts.map +1 -1
- package/dist/src/init/write-antigravity.js +28 -4
- package/dist/src/init/write-antigravity.js.map +1 -1
- package/dist/src/init/write-claude.d.ts.map +1 -1
- package/dist/src/init/write-claude.js +47 -23
- package/dist/src/init/write-claude.js.map +1 -1
- package/dist/src/init/write-kimicode.d.ts +27 -0
- package/dist/src/init/write-kimicode.d.ts.map +1 -1
- package/dist/src/init/write-kimicode.js +119 -92
- package/dist/src/init/write-kimicode.js.map +1 -1
- package/dist/src/init/write-opencode.d.ts.map +1 -1
- package/dist/src/init/write-opencode.js +45 -6
- package/dist/src/init/write-opencode.js.map +1 -1
- package/dist/src/init/write-runtime-config.d.ts.map +1 -1
- package/dist/src/init/write-runtime-config.js +108 -81
- package/dist/src/init/write-runtime-config.js.map +1 -1
- package/dist/src/knowledge/eval/golden-set.js +0 -15
- package/dist/src/knowledge/eval/golden-set.js.map +1 -1
- package/dist/src/mcp-tools/embeddings-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/embeddings-tools.js +14 -5
- package/dist/src/mcp-tools/embeddings-tools.js.map +1 -1
- package/dist/src/mcp-tools/hooks-routing.d.ts.map +1 -1
- package/dist/src/mcp-tools/hooks-routing.js +4 -3
- package/dist/src/mcp-tools/hooks-routing.js.map +1 -1
- package/dist/src/mcp-tools/monograph/build-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/monograph/build-tools.js +16 -9
- package/dist/src/mcp-tools/monograph/build-tools.js.map +1 -1
- package/dist/src/mcp-tools/org-skill-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/org-skill-tools.js +6 -2
- package/dist/src/mcp-tools/org-skill-tools.js.map +1 -1
- package/dist/src/mcp-tools/pick-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/pick-tools.js +13 -4
- package/dist/src/mcp-tools/pick-tools.js.map +1 -1
- package/dist/src/memory/embedding-operations.d.ts +0 -4
- package/dist/src/memory/embedding-operations.d.ts.map +1 -1
- package/dist/src/memory/embedding-operations.js +11 -85
- package/dist/src/memory/embedding-operations.js.map +1 -1
- package/dist/src/memory/memory-bridge.d.ts +7 -0
- package/dist/src/memory/memory-bridge.d.ts.map +1 -1
- package/dist/src/memory/memory-bridge.js +15 -0
- package/dist/src/memory/memory-bridge.js.map +1 -1
- package/dist/src/orgrt/bash-timeout.d.ts +17 -0
- package/dist/src/orgrt/bash-timeout.d.ts.map +1 -1
- package/dist/src/orgrt/bash-timeout.js +15 -0
- package/dist/src/orgrt/bash-timeout.js.map +1 -1
- package/dist/src/orgrt/session.d.ts.map +1 -1
- package/dist/src/orgrt/session.js +5 -2
- package/dist/src/orgrt/session.js.map +1 -1
- package/dist/src/orgrt/task-match.d.ts +3 -1
- package/dist/src/orgrt/task-match.d.ts.map +1 -1
- package/dist/src/orgrt/task-match.js +12 -4
- package/dist/src/orgrt/task-match.js.map +1 -1
- package/dist/src/platform-adapters/merge.d.ts +4 -3
- package/dist/src/platform-adapters/merge.d.ts.map +1 -1
- package/dist/src/platform-adapters/merge.js +18 -8
- package/dist/src/platform-adapters/merge.js.map +1 -1
- package/dist/src/platform-adapters/mutation.d.ts +6 -1
- package/dist/src/platform-adapters/mutation.d.ts.map +1 -1
- package/dist/src/platform-adapters/mutation.js +9 -3
- package/dist/src/platform-adapters/mutation.js.map +1 -1
- package/dist/src/platform-adapters/operations.d.ts.map +1 -1
- package/dist/src/platform-adapters/operations.js +14 -6
- package/dist/src/platform-adapters/operations.js.map +1 -1
- package/dist/src/platform-adapters/types.d.ts +5 -0
- package/dist/src/platform-adapters/types.d.ts.map +1 -1
- package/dist/src/routing/agent-pick.d.ts +9 -7
- package/dist/src/routing/agent-pick.d.ts.map +1 -1
- package/dist/src/routing/agent-pick.js +17 -17
- package/dist/src/routing/agent-pick.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +6 -6
- package/.claude/skills/github-issue-triage/SKILL.md +0 -354
- package/.claude/skills/github-repo-recap/SKILL.md +0 -207
|
@@ -313,8 +313,10 @@ async function main() {
|
|
|
313
313
|
function isSimpleCommand(p) {
|
|
314
314
|
if (typeof p !== 'string') return false;
|
|
315
315
|
var s = p.trim();
|
|
316
|
-
// Slash commands: /ts, /list-agents, /commit, /help,
|
|
317
|
-
|
|
316
|
+
// Slash commands: /ts, /list-agents, /commit, /help, and namespaced ones
|
|
317
|
+
// (/mastermind:plan). A path (/var/log/app.log …) has a second '/' and is
|
|
318
|
+
// not a command.
|
|
319
|
+
if (/^\/[a-z0-9_-]+(:[a-z0-9_-]+)*(\s|$)/i.test(s)) return true;
|
|
318
320
|
// Short single-word operator tokens (toggle, list, status)
|
|
319
321
|
if (/^(ts|ls|ps|pwd|help|clear|exit|quit|status|toggle|refresh)$/i.test(s)) return true;
|
|
320
322
|
// Already-resolved command messages (Claude Code sends hook with command-name context)
|
|
@@ -4,7 +4,8 @@
|
|
|
4
4
|
* prompt hook (via jev-picker.cjs) and the CLI (`monomind pick`, MCP pick via
|
|
5
5
|
* src/decision/catalogs.ts), so both rank exactly the same agents and skills.
|
|
6
6
|
*
|
|
7
|
-
* agents .monomind/registry.json (
|
|
7
|
+
* agents .monomind/registry.json (agent-registry.cjs: project,
|
|
8
|
+
* ~/.claude/agents and extra roots)
|
|
8
9
|
* skills .claude/helpers/skill-registry.json (build-skill-registry.cjs):
|
|
9
10
|
* `skills` = platform commands/skills, `orgSkills` = Org library
|
|
10
11
|
*/
|
|
@@ -48,7 +49,9 @@ function norm(s) {
|
|
|
48
49
|
|
|
49
50
|
/** Agents from .monomind/registry.json (built by registry-builder.ts), or from
|
|
50
51
|
* opts.registry (an in-memory build outside a project). The description leads
|
|
51
|
-
* with the one-line `when_to_use`; deprecated agents drop.
|
|
52
|
+
* with the one-line `when_to_use`; deprecated agents drop. The `vibe`
|
|
53
|
+
* personality line is not ranked: its words ("crashes", "segfault") name no
|
|
54
|
+
* capability and pulled unrelated tasks to the agent. */
|
|
52
55
|
function loadAgentCatalog(root, opts) {
|
|
53
56
|
var reg = (opts && opts.registry) || readJsonFile(path.join(root, '.monomind', 'registry.json'));
|
|
54
57
|
var list = reg && Array.isArray(reg.agents) ? reg.agents : [];
|
|
@@ -60,16 +63,19 @@ function loadAgentCatalog(root, opts) {
|
|
|
60
63
|
var category = typeof a.category === 'string' ? a.category : '';
|
|
61
64
|
var description = typeof a.description === 'string' ? a.description : '';
|
|
62
65
|
var when = typeof a.whenToUse === 'string' ? a.whenToUse.trim() : '';
|
|
63
|
-
|
|
66
|
+
var item = {
|
|
64
67
|
id: a.slug,
|
|
65
68
|
name: typeof a.name === 'string' ? a.name : a.slug,
|
|
66
69
|
category: category,
|
|
67
70
|
description: when ? when + (description ? ' — ' + description : '') : description,
|
|
68
71
|
text: [category]
|
|
69
|
-
.concat(strings(a.tags), strings(a.capabilities), strings(a.taskTypes)
|
|
72
|
+
.concat(strings(a.tags), strings(a.capabilities), strings(a.taskTypes))
|
|
70
73
|
.filter(Boolean)
|
|
71
74
|
.join(' '),
|
|
72
|
-
}
|
|
75
|
+
};
|
|
76
|
+
// 'project' | 'user' (~/.claude/agents) | 'extra'; shown by `pick --json`, never sent to the model.
|
|
77
|
+
if (typeof a.origin === 'string') item.origin = a.origin;
|
|
78
|
+
out.push(item);
|
|
73
79
|
});
|
|
74
80
|
return out;
|
|
75
81
|
}
|
|
@@ -139,11 +145,13 @@ function jevAllowed(gate, s, root) {
|
|
|
139
145
|
}
|
|
140
146
|
|
|
141
147
|
/** Platform commands/skills. Command/skill mirrors of one capability collapse,
|
|
142
|
-
* preferring the slash form.
|
|
148
|
+
* preferring the slash form. An entry whose source file is gone (the index
|
|
149
|
+
* predates its removal) is dropped: naming it would fail at invoke time. */
|
|
143
150
|
function platformSkills(root, list, gate) {
|
|
144
151
|
var byKey = new Map();
|
|
145
152
|
list.forEach(function (s) {
|
|
146
153
|
if (!s || typeof s.skill !== 'string' || typeof s.invoke !== 'string') return;
|
|
154
|
+
if (typeof s.source === 'string' && !fs.existsSync(sourceFile(root, s.source))) return;
|
|
147
155
|
// A catalog projection reaches the decision model only when approved with
|
|
148
156
|
// the jev target; ordinary skills carry no catalog field and are unaffected.
|
|
149
157
|
if (s.catalog && s.catalog.jev !== true) return;
|
|
@@ -12,7 +12,8 @@
|
|
|
12
12
|
*/
|
|
13
13
|
var redaction = require('./redact-secrets.cjs');
|
|
14
14
|
// Keyword ranking builds the candidate shortlist (and is every caller's fallback).
|
|
15
|
-
var
|
|
15
|
+
var pickRank = require('./pick-rank.cjs');
|
|
16
|
+
var shortlist = pickRank.shortlist;
|
|
16
17
|
|
|
17
18
|
var TYPESAFE_BASE_URL = 'https://api.typesafe.ai';
|
|
18
19
|
var DEFAULT_MODEL = 'jev-latest';
|
|
@@ -37,7 +38,10 @@ var NONE_ID = '__none__';
|
|
|
37
38
|
var OFF_VALUES = ['0', 'off', 'false', 'no'];
|
|
38
39
|
var ON_VALUES = ['1', 'on', 'true', 'yes'];
|
|
39
40
|
var DEFAULT_HOOK_TIMEOUT_MS = 1500;
|
|
40
|
-
|
|
41
|
+
// Every prompt waits on the hook window, so a larger value is capped here
|
|
42
|
+
// whatever MONOMIND_JEV_HOOK_TIMEOUT_MS asks: a dead endpoint once held each
|
|
43
|
+
// prompt 10 s. Hosted Jev answers well inside it.
|
|
44
|
+
var MAX_HOOK_TIMEOUT_MS = 3000;
|
|
41
45
|
|
|
42
46
|
class JevError extends Error {
|
|
43
47
|
constructor(message, provider, status) {
|
|
@@ -82,10 +86,11 @@ function resolveTimeoutMs(env) {
|
|
|
82
86
|
return Number.isInteger(n) && n >= MIN_TIMEOUT_MS && n <= MAX_TIMEOUT_MS ? n : DEFAULT_TIMEOUT_MS;
|
|
83
87
|
}
|
|
84
88
|
|
|
85
|
-
/** The per-prompt hook's window: short, because every prompt waits on it.
|
|
89
|
+
/** The per-prompt hook's window: short, because every prompt waits on it.
|
|
90
|
+
* Values above MAX_HOOK_TIMEOUT_MS are capped to it. */
|
|
86
91
|
function resolveHookTimeoutMs(env) {
|
|
87
92
|
var n = Number((env || process.env).MONOMIND_JEV_HOOK_TIMEOUT_MS);
|
|
88
|
-
return Number.isInteger(n) && n >= MIN_TIMEOUT_MS
|
|
93
|
+
return Number.isInteger(n) && n >= MIN_TIMEOUT_MS ? Math.min(n, MAX_HOOK_TIMEOUT_MS) : DEFAULT_HOOK_TIMEOUT_MS;
|
|
89
94
|
}
|
|
90
95
|
|
|
91
96
|
function resolveMinConfidence(env) {
|
|
@@ -281,6 +286,39 @@ function toAnswer(answer, criteria) {
|
|
|
281
286
|
return { choice: answer.choice, confidence: answer.confidence, ranked: rankedFrom(answer, criteria) };
|
|
282
287
|
}
|
|
283
288
|
|
|
289
|
+
/** The options sent for one question: the keyword-ranked items that share a
|
|
290
|
+
* word with the task (forced `include` ids first), then the rest round-robin
|
|
291
|
+
* across categories (an agent's category, else an id's first segment) — so
|
|
292
|
+
* a task that matches few or no words (a non-English prompt) is not judged
|
|
293
|
+
* over the first `max` entries of one category. */
|
|
294
|
+
function candidatesFor(text, items, max, include) {
|
|
295
|
+
var forced = new Set(include || []);
|
|
296
|
+
var out = shortlist(text, items, max, include).filter(function (item) {
|
|
297
|
+
return item.score > 0 || forced.has(item.id);
|
|
298
|
+
});
|
|
299
|
+
if (out.length >= max) return out;
|
|
300
|
+
var taken = new Set(out.map(function (item) { return item.id; }));
|
|
301
|
+
var groups = new Map();
|
|
302
|
+
items.forEach(function (item) {
|
|
303
|
+
if (taken.has(item.id)) return;
|
|
304
|
+
var key = item.category || String(item.id).toLowerCase().split(/[-:_/]/)[0];
|
|
305
|
+
if (!groups.has(key)) groups.set(key, []);
|
|
306
|
+
groups.get(key).push(item);
|
|
307
|
+
});
|
|
308
|
+
var lists = Array.from(groups.values());
|
|
309
|
+
for (var round = 0; out.length < max; round++) {
|
|
310
|
+
var added = false;
|
|
311
|
+
for (var g = 0; g < lists.length && out.length < max; g++) {
|
|
312
|
+
if (round < lists[g].length) {
|
|
313
|
+
out.push(lists[g][round]);
|
|
314
|
+
added = true;
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
if (!added) break;
|
|
318
|
+
}
|
|
319
|
+
return out;
|
|
320
|
+
}
|
|
321
|
+
|
|
284
322
|
/** Pick an agent and/or a skill for `task` in ONE request. null = no decision. */
|
|
285
323
|
async function pick(task, catalogs, opts) {
|
|
286
324
|
opts = opts || {};
|
|
@@ -295,14 +333,16 @@ async function pick(task, catalogs, opts) {
|
|
|
295
333
|
var skills = catalogs && Array.isArray(catalogs.skills) ? catalogs.skills : [];
|
|
296
334
|
var questions = {};
|
|
297
335
|
if (agents.length >= 2) {
|
|
336
|
+
var agentCriteria = criteriaFor(candidatesFor(text, agents, max, include.agents));
|
|
337
|
+
agentCriteria[NONE_ID] = 'None of these agents fits the task';
|
|
298
338
|
questions.agent = {
|
|
299
339
|
type: 'choice',
|
|
300
340
|
instructions: opts.agentInstructions || 'Which specialist agent should handle this task?',
|
|
301
|
-
criteria:
|
|
341
|
+
criteria: agentCriteria,
|
|
302
342
|
};
|
|
303
343
|
}
|
|
304
344
|
if (skills.length >= 1) {
|
|
305
|
-
var skillCriteria = criteriaFor(
|
|
345
|
+
var skillCriteria = criteriaFor(candidatesFor(text, skills, max, include.skills));
|
|
306
346
|
skillCriteria[NONE_ID] = 'None of these skills fits the task';
|
|
307
347
|
questions.skill = {
|
|
308
348
|
type: 'choice',
|
|
@@ -325,9 +365,10 @@ async function pick(task, catalogs, opts) {
|
|
|
325
365
|
return out;
|
|
326
366
|
}
|
|
327
367
|
|
|
328
|
-
/** `minConfidence` overrides the automatic-decision floor for this call.
|
|
368
|
+
/** `minConfidence` overrides the automatic-decision floor for this call.
|
|
369
|
+
* "None fits" is never an agent. */
|
|
329
370
|
function acceptAgent(answer, env, minConfidence) {
|
|
330
|
-
if (!answer) return null;
|
|
371
|
+
if (!answer || answer.choice === NONE_ID) return null;
|
|
331
372
|
return answer.confidence >= floorFor(env, minConfidence) ? answer.choice : null;
|
|
332
373
|
}
|
|
333
374
|
|
|
@@ -380,6 +421,9 @@ module.exports = {
|
|
|
380
421
|
ask: ask,
|
|
381
422
|
probe: probe,
|
|
382
423
|
shortlist: shortlist,
|
|
424
|
+
withoutExclusions: pickRank.withoutExclusions,
|
|
425
|
+
KEYWORD_GATE: pickRank.KEYWORD_GATE,
|
|
426
|
+
leads: pickRank.leads,
|
|
383
427
|
pick: pick,
|
|
384
428
|
acceptAgent: acceptAgent,
|
|
385
429
|
acceptSkills: acceptSkills,
|
|
@@ -13,6 +13,26 @@
|
|
|
13
13
|
* the item matches. An item marked `pick: 'low'` (admin/meta skills, from
|
|
14
14
|
* `pick: low` frontmatter) keeps LOW_PICK_FACTOR of its score, so it surfaces
|
|
15
15
|
* only when the task names it. Equal scores keep catalog order.
|
|
16
|
+
*
|
|
17
|
+
* Exclusions in the task (English only): words the task explicitly
|
|
18
|
+
* rules out do not count ("anything pending rather than release" must not
|
|
19
|
+
* pick release-manager). withoutExclusions() drops each cue and the words in
|
|
20
|
+
* its scope before tokenizing. Cues: "rather than", "other than", "instead
|
|
21
|
+
* of", "apart from", "aside from", "except", "besides", "excluding",
|
|
22
|
+
* "without", "not", "no", "nor", "don't"/"dont". The scope ends at clause
|
|
23
|
+
* punctuation (. , ; : ! ? brackets, dashes), at "but"/"then"/"so", at
|
|
24
|
+
* "and" once a word was dropped ("or"/"nor" keep excluding: "without CI or
|
|
25
|
+
* staging"), or after SCOPE_WORDS content words. Problem descriptions are not
|
|
26
|
+
* exclusions: "not"/"no" after a copula or auxiliary ("is not loading",
|
|
27
|
+
* "are no tests", "does not"), "not only", and "don't know/see/get/..." stay.
|
|
28
|
+
*
|
|
29
|
+
* Exclusions on the document side (English only): a description's own
|
|
30
|
+
* "not for X" / "never for X" / "do not use for X" clause names work the item
|
|
31
|
+
* is NOT for. Its words leave the item's index unless the rest of the
|
|
32
|
+
* description uses them too, so "Not for pull requests" no longer matches
|
|
33
|
+
* "pull request". A task that names what a "not for" clause rules out (more
|
|
34
|
+
* than half the words of one of its alternatives, at least one of them a word
|
|
35
|
+
* the item does not otherwise carry) keeps EXCLUDED_FACTOR of its score.
|
|
16
36
|
*/
|
|
17
37
|
|
|
18
38
|
var K1 = 1.2;
|
|
@@ -23,13 +43,15 @@ var STRONG_WEIGHT = 2;
|
|
|
23
43
|
var PREFIX_MIN_SHARED = 3;
|
|
24
44
|
// Share of its score a `pick: 'low'` item keeps.
|
|
25
45
|
var LOW_PICK_FACTOR = 0.35;
|
|
46
|
+
// Share of its score an item keeps when the task names what it is not for.
|
|
47
|
+
var EXCLUDED_FACTOR = 0.2;
|
|
26
48
|
|
|
27
49
|
var STOPWORDS = new Set(
|
|
28
50
|
(
|
|
29
|
-
'a about above after again against all also am an and any are as at be because been before being below ' +
|
|
30
|
-
'between both but by can could did do does doing down during each etc every few for from further had has ' +
|
|
51
|
+
'a about above after again against all also am an and any anything are as at be because been before being below ' +
|
|
52
|
+
'between both but by can could did do does doing down during each else etc every everything few for from further had has ' +
|
|
31
53
|
'have having he her here hers him his how i if in into is it its itself just me more most must my no nor ' +
|
|
32
|
-
'not now of off on once only or other our ours out over own per please same she should so some such than ' +
|
|
54
|
+
'not nothing now of off on once only or other our ours out over own per please same she should so some something such than ' +
|
|
33
55
|
'that the their theirs them then there these they this those through to too under until up upon us very ' +
|
|
34
56
|
'via was we were what when where which while who whom why will with within without would you your yours'
|
|
35
57
|
).split(' '),
|
|
@@ -111,6 +133,111 @@ function tokens(text) {
|
|
|
111
133
|
return words(text).filter(isContent).map(stem);
|
|
112
134
|
}
|
|
113
135
|
|
|
136
|
+
// Content words an exclusion cue rules out at most.
|
|
137
|
+
var SCOPE_WORDS = 4;
|
|
138
|
+
var CLAUSE_SPLIT = /[.,;:!?()[\]{}<>|\n\r\u2013\u2014]+|\s-+\s/;
|
|
139
|
+
var SINGLE_CUES = new Set('except besides excluding without not no nor dont'.split(' '));
|
|
140
|
+
var PAIR_CUES = { rather: 'than', other: 'than', instead: 'of', apart: 'from', aside: 'from', don: 't' };
|
|
141
|
+
// "is not loading", "are no tests", "does not work": a description, not an exclusion.
|
|
142
|
+
var DESCRIBES = new Set(
|
|
143
|
+
('am is are was were be been being does did has have had can could will would get gets got ' +
|
|
144
|
+
'isn aren wasn weren doesn didn hasn haven hadn won wouldn couldn there').split(' '),
|
|
145
|
+
);
|
|
146
|
+
// "don't know why the build fails" describes a problem too.
|
|
147
|
+
var DONT_DESCRIBES = new Set('know understand see get think remember why how'.split(' '));
|
|
148
|
+
var SCOPE_ENDS = new Set('but then so'.split(' '));
|
|
149
|
+
|
|
150
|
+
/** Words the cue at ws[i] spans (0: no cue there). */
|
|
151
|
+
function cueAt(ws, i) {
|
|
152
|
+
var w = ws[i];
|
|
153
|
+
var next = ws[i + 1];
|
|
154
|
+
if (PAIR_CUES[w] && next === PAIR_CUES[w]) {
|
|
155
|
+
if (w === 'don' && DONT_DESCRIBES.has(ws[i + 2])) return 0;
|
|
156
|
+
return 2;
|
|
157
|
+
}
|
|
158
|
+
if (!SINGLE_CUES.has(w)) return 0;
|
|
159
|
+
if ((w === 'dont' || (w === 'not' && ws[i - 1] === 'do')) && DONT_DESCRIBES.has(next)) return 0;
|
|
160
|
+
if ((w === 'not' || w === 'no') && (DESCRIBES.has(ws[i - 1]) || next === 'only')) return 0;
|
|
161
|
+
return 1;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/** `text` minus the exclusion cues and the words they rule out (see the file
|
|
165
|
+
* header), clause breaks kept as ". ". Lowercased; a text without cues keeps
|
|
166
|
+
* every word. */
|
|
167
|
+
function withoutExclusions(text) {
|
|
168
|
+
return String(text || '')
|
|
169
|
+
.toLowerCase()
|
|
170
|
+
.replace(/\u2019/g, "'")
|
|
171
|
+
.split(CLAUSE_SPLIT)
|
|
172
|
+
.map(function (clause) {
|
|
173
|
+
var ws = clause.match(/[\p{L}\p{N}]+/gu) || [];
|
|
174
|
+
var out = [];
|
|
175
|
+
var left = 0;
|
|
176
|
+
var dropped = 0;
|
|
177
|
+
for (var i = 0; i < ws.length; i++) {
|
|
178
|
+
var n = cueAt(ws, i);
|
|
179
|
+
if (n) {
|
|
180
|
+
i += n - 1;
|
|
181
|
+
left = SCOPE_WORDS;
|
|
182
|
+
dropped = 0;
|
|
183
|
+
continue;
|
|
184
|
+
}
|
|
185
|
+
var w = ws[i];
|
|
186
|
+
if (left > 0) {
|
|
187
|
+
if (SCOPE_ENDS.has(w) || (w === 'and' && dropped > 0)) left = 0;
|
|
188
|
+
else {
|
|
189
|
+
if (isContent(w)) {
|
|
190
|
+
left--;
|
|
191
|
+
dropped++;
|
|
192
|
+
}
|
|
193
|
+
continue;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
out.push(w);
|
|
197
|
+
}
|
|
198
|
+
return out.join(' ');
|
|
199
|
+
})
|
|
200
|
+
.join('. ');
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
/** tokens() of a task: the words it rules out dropped first. */
|
|
204
|
+
function queryTokens(text) {
|
|
205
|
+
return tokens(withoutExclusions(text));
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
// A description clause: sentence punctuation, brackets or dashes end it.
|
|
209
|
+
var DOC_CLAUSE_SPLIT = /[.;:!?()[\]{}<>|\n\r\u2013\u2014]+|\s-+\s/;
|
|
210
|
+
var DOC_NOT_FOR = /\b(?:not|never)\s+(?:intended\s+|meant\s+)?for\s+(.+)$|\b(?:do\s+not|don't|dont|never)\s+use\s+(?:it\s+|this\s+)?for\s+(.+)$/;
|
|
211
|
+
var DOC_ALTERNATIVES = /,|\s(?:or|and|nor)\s/;
|
|
212
|
+
|
|
213
|
+
/** A description's own exclusions (see the file header): `kept` is the text
|
|
214
|
+
* without its "not for" clauses, `ruledOut` the word lists of each
|
|
215
|
+
* alternative a "not for" clause names, `dropped` every word those clauses
|
|
216
|
+
* hold. */
|
|
217
|
+
function docExclusions(description) {
|
|
218
|
+
var kept = [];
|
|
219
|
+
var ruledOut = [];
|
|
220
|
+
var dropped = [];
|
|
221
|
+
String(description || '')
|
|
222
|
+
.toLowerCase()
|
|
223
|
+
.replace(/\u2019/g, "'")
|
|
224
|
+
.split(DOC_CLAUSE_SPLIT)
|
|
225
|
+
.forEach(function (clause) {
|
|
226
|
+
var m = DOC_NOT_FOR.exec(clause);
|
|
227
|
+
if (m) {
|
|
228
|
+
kept.push(clause.slice(0, m.index));
|
|
229
|
+
(m[1] || m[2]).split(DOC_ALTERNATIVES).forEach(function (alt) {
|
|
230
|
+
var t = tokens(alt);
|
|
231
|
+
if (t.length) ruledOut.push(t);
|
|
232
|
+
});
|
|
233
|
+
dropped.push(m[1] || m[2]);
|
|
234
|
+
return;
|
|
235
|
+
}
|
|
236
|
+
kept.push(clause);
|
|
237
|
+
});
|
|
238
|
+
return { kept: kept.join(' . '), ruledOut: ruledOut, dropped: new Set(tokens(dropped.join(' '))) };
|
|
239
|
+
}
|
|
240
|
+
|
|
114
241
|
/** Leading id segments ("engineering-", "mastermind:", "analysis:") that are
|
|
115
242
|
* shared by >= PREFIX_MIN_SHARED ids or equal the item's category. */
|
|
116
243
|
function categoryPrefixes(items) {
|
|
@@ -150,13 +277,26 @@ function indexFor(items) {
|
|
|
150
277
|
var total = 0;
|
|
151
278
|
var docs = items.map(function (item) {
|
|
152
279
|
var strong = strongTerms(item, isPrefix);
|
|
153
|
-
var
|
|
280
|
+
var ex = docExclusions(item.description);
|
|
281
|
+
var keptList = tokens(ex.kept);
|
|
282
|
+
var own = new Set(keptList);
|
|
283
|
+
// `text` repeats description words (derived keywords): a word only an
|
|
284
|
+
// exclusion clause holds leaves it too.
|
|
285
|
+
var weakList = keptList.concat(tokens(item.text || '').filter(function (t) {
|
|
286
|
+
return own.has(t) || !ex.dropped.has(t);
|
|
287
|
+
}));
|
|
154
288
|
var weak = termCounts(weakList);
|
|
155
289
|
new Set(Array.from(strong).concat(Array.from(weak.keys()))).forEach(function (t) {
|
|
156
290
|
df.set(t, (df.get(t) || 0) + 1);
|
|
157
291
|
});
|
|
158
292
|
total += weakList.length;
|
|
159
|
-
|
|
293
|
+
// Each "not for" alternative, with the words it names beyond the item's own.
|
|
294
|
+
var ruledOut = ex.ruledOut
|
|
295
|
+
.map(function (alt) {
|
|
296
|
+
return { all: alt, own: alt.filter(function (t) { return strong.has(t) || weak.has(t); }) };
|
|
297
|
+
})
|
|
298
|
+
.filter(function (alt) { return alt.own.length < alt.all.length; });
|
|
299
|
+
return { strong: strong, weak: weak, len: weakList.length, low: item.pick === 'low', ruledOut: ruledOut };
|
|
160
300
|
});
|
|
161
301
|
return { size: items.length, docs: docs, df: df, avg: total / items.length || 1 };
|
|
162
302
|
}
|
|
@@ -166,6 +306,16 @@ function idf(index, term) {
|
|
|
166
306
|
return Math.log(1 + (index.size - n + 0.5) / (n + 0.5));
|
|
167
307
|
}
|
|
168
308
|
|
|
309
|
+
/** True when the task names more than half of the words of one of the
|
|
310
|
+
* item's "not for" alternatives, one of them a word the item does not
|
|
311
|
+
* otherwise carry. */
|
|
312
|
+
function namesRuledOut(doc, query) {
|
|
313
|
+
return doc.ruledOut.some(function (alt) {
|
|
314
|
+
var hits = alt.all.filter(function (t) { return query.indexOf(t) !== -1; });
|
|
315
|
+
return hits.length * 2 > alt.all.length && hits.some(function (t) { return alt.own.indexOf(t) === -1; });
|
|
316
|
+
});
|
|
317
|
+
}
|
|
318
|
+
|
|
169
319
|
function scoreDoc(index, doc, query) {
|
|
170
320
|
var score = 0;
|
|
171
321
|
var matched = 0;
|
|
@@ -182,6 +332,7 @@ function scoreDoc(index, doc, query) {
|
|
|
182
332
|
// Coordination: an item matching more of the task's words ranks higher.
|
|
183
333
|
if (query.length) score *= matched / query.length;
|
|
184
334
|
if (doc.low) score *= LOW_PICK_FACTOR;
|
|
335
|
+
if (namesRuledOut(doc, query)) score *= EXCLUDED_FACTOR;
|
|
185
336
|
return Math.round(score * 1000) / 1000;
|
|
186
337
|
}
|
|
187
338
|
|
|
@@ -190,7 +341,7 @@ function scoreDoc(index, doc, query) {
|
|
|
190
341
|
* overlap). Equal scores keep catalog order. */
|
|
191
342
|
function shortlist(query, items, limit, include) {
|
|
192
343
|
var index = indexFor(items);
|
|
193
|
-
var q = Array.from(new Set(
|
|
344
|
+
var q = Array.from(new Set(queryTokens(query)));
|
|
194
345
|
var scored = items.map(function (item, i) {
|
|
195
346
|
return { item: item, index: i, score: scoreDoc(index, index.docs[i], q) };
|
|
196
347
|
});
|
|
@@ -214,8 +365,35 @@ function shortlist(query, items, limit, include) {
|
|
|
214
365
|
return out;
|
|
215
366
|
}
|
|
216
367
|
|
|
368
|
+
// The bar a keyword pick must clear before anything acts on it (the prompt
|
|
369
|
+
// hook's [PICK] line, `pick`'s summary and `confident` flag): a minimum
|
|
370
|
+
// relevance AND a lead over the runner-up. Ties and weak overlap are no
|
|
371
|
+
// decision — a wrong pick in Claude's context costs more than none. Agents
|
|
372
|
+
// were tuned on the 40-task pick benchmark (25/40 shown, 23 correct), skills
|
|
373
|
+
// on tests/pick-eval (59 tasks, 514 skills: 34 shown, 31 correct).
|
|
374
|
+
var KEYWORD_GATE = {
|
|
375
|
+
agents: { min: 2, lead: 1.5 },
|
|
376
|
+
skills: { min: 3, lead: 1.25 },
|
|
377
|
+
};
|
|
378
|
+
|
|
379
|
+
/** The top of a ranked list when it clears `min` and leads the runner-up by
|
|
380
|
+
* `ratio`, else null. The floor is on keyword relevance alone (`baseScore`
|
|
381
|
+
* when an outcome prior re-ranked). */
|
|
382
|
+
function leads(list, min, ratio) {
|
|
383
|
+
var top = list && list[0];
|
|
384
|
+
if (!top || !((top.baseScore !== undefined ? top.baseScore : top.score) >= min)) return null;
|
|
385
|
+
var second = list[1];
|
|
386
|
+
if (!second || !(second.score > 0)) return top;
|
|
387
|
+
return top.score >= second.score * (ratio || 1) && top.score > second.score ? top : null;
|
|
388
|
+
}
|
|
389
|
+
|
|
217
390
|
module.exports = {
|
|
391
|
+
KEYWORD_GATE: KEYWORD_GATE,
|
|
392
|
+
leads: leads,
|
|
218
393
|
stem: stem,
|
|
219
394
|
tokens: tokens,
|
|
395
|
+
queryTokens: queryTokens,
|
|
396
|
+
withoutExclusions: withoutExclusions,
|
|
397
|
+
docExclusions: docExclusions,
|
|
220
398
|
shortlist: shortlist,
|
|
221
399
|
};
|
|
@@ -17,6 +17,13 @@
|
|
|
17
17
|
* watermark beyond the ones already counted there. Nothing here
|
|
18
18
|
* throws to a hook: update() returns null on any failure.
|
|
19
19
|
*
|
|
20
|
+
* Adherence is a route's, not a spawn's: a route counts as followed once, at
|
|
21
|
+
* its first spawn of the picked agent (an override counted for an earlier
|
|
22
|
+
* spawn of that route is taken back), and as overridden once otherwise.
|
|
23
|
+
* Slash-command routes are not picks. When .monomind/registry.json is
|
|
24
|
+
* readable only its agents are tracked (other subagent_types, e.g. "issue-337",
|
|
25
|
+
* never enter the stats, and stored ones are dropped).
|
|
26
|
+
*
|
|
20
27
|
* The prior: an agent with >= MIN_OBS observations gets a factor in
|
|
21
28
|
* [1 - SPAN, 1 + SPAN] from Beta(1,1)-smoothed success and adoption rates. It
|
|
22
29
|
* multiplies a keyword score, so a zero-overlap item stays at zero, and the
|
|
@@ -41,6 +48,10 @@ var MAX_ENTRIES = 300;
|
|
|
41
48
|
var MAX_EDGE_KEYS = 50;
|
|
42
49
|
var MIN_OBS = 5;
|
|
43
50
|
var SPAN = 0.15;
|
|
51
|
+
// Routes whose adherence is remembered (followed / overridden / a command).
|
|
52
|
+
var MAX_ROUTE_STATES = 500;
|
|
53
|
+
// A prompt that is a slash command (the route hook's rule): not a pick.
|
|
54
|
+
var COMMAND_PROMPT = /^\/[a-z0-9_-]+(:[a-z0-9_-]+)*(\s|$)/i;
|
|
44
55
|
|
|
45
56
|
function emptyStats() {
|
|
46
57
|
return {
|
|
@@ -61,6 +72,7 @@ function emptyStats() {
|
|
|
61
72
|
},
|
|
62
73
|
agents: {},
|
|
63
74
|
skills: {},
|
|
75
|
+
routeStates: {},
|
|
64
76
|
};
|
|
65
77
|
}
|
|
66
78
|
|
|
@@ -109,6 +121,17 @@ function load(root) {
|
|
|
109
121
|
if (isObject(s.skills[k])) out.skills[k] = { recommended: count(s.skills[k].recommended) };
|
|
110
122
|
});
|
|
111
123
|
}
|
|
124
|
+
if (isObject(s.routeStates)) {
|
|
125
|
+
Object.keys(s.routeStates).slice(-MAX_ROUTE_STATES).forEach(function (k) {
|
|
126
|
+
var r = s.routeStates[k];
|
|
127
|
+
if (!isObject(r)) return;
|
|
128
|
+
var st = {};
|
|
129
|
+
if (r.c === 1) st.c = 1;
|
|
130
|
+
if (r.f === 1) st.f = 1;
|
|
131
|
+
if (typeof r.o === 'string') st.o = r.o.slice(0, 128);
|
|
132
|
+
out.routeStates[String(k).slice(0, 128)] = st;
|
|
133
|
+
});
|
|
134
|
+
}
|
|
112
135
|
return out;
|
|
113
136
|
} catch (e) {
|
|
114
137
|
return emptyStats();
|
|
@@ -230,9 +253,30 @@ function readNew(file, cursor) {
|
|
|
230
253
|
|
|
231
254
|
// ── Aggregation ─────────────────────────────────────────────────────────────
|
|
232
255
|
|
|
256
|
+
/** normName()s of every agent name and slug in .monomind/registry.json, or
|
|
257
|
+
* null when it cannot be read (then nothing is filtered). */
|
|
258
|
+
function registryNames(root) {
|
|
259
|
+
try {
|
|
260
|
+
var file = path.join(root, '.monomind', 'registry.json');
|
|
261
|
+
if (fs.statSync(file).size > 5 * 1024 * 1024) return null;
|
|
262
|
+
var reg = JSON.parse(fs.readFileSync(file, 'utf-8'));
|
|
263
|
+
if (!reg || !Array.isArray(reg.agents)) return null;
|
|
264
|
+
var names = new Set();
|
|
265
|
+
reg.agents.forEach(function (a) {
|
|
266
|
+
if (!a) return;
|
|
267
|
+
if (typeof a.name === 'string') names.add(normName(a.name));
|
|
268
|
+
if (typeof a.slug === 'string') names.add(normName(a.slug));
|
|
269
|
+
});
|
|
270
|
+
return names;
|
|
271
|
+
} catch (e) {
|
|
272
|
+
return null;
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
|
|
233
276
|
function agentEntry(stats, name) {
|
|
234
277
|
var key = normName(name);
|
|
235
278
|
if (!key) return null;
|
|
279
|
+
if (stats._known && !stats._known.has(key)) return null;
|
|
236
280
|
if (!stats.agents[key]) {
|
|
237
281
|
stats.agents[key] = { name: String(name).slice(0, 128), recommended: 0, followed: 0, overridden: 0, chosen: 0, success: 0, failure: 0 };
|
|
238
282
|
}
|
|
@@ -246,7 +290,26 @@ function skillEntry(stats, invoke) {
|
|
|
246
290
|
return stats.skills[key];
|
|
247
291
|
}
|
|
248
292
|
|
|
293
|
+
/** This route's remembered adherence (created on demand; oldest dropped). */
|
|
294
|
+
function routeState(stats, routeId) {
|
|
295
|
+
var id = String(routeId).slice(0, 128);
|
|
296
|
+
var st = stats.routeStates[id];
|
|
297
|
+
if (st) return st;
|
|
298
|
+
st = stats.routeStates[id] = {};
|
|
299
|
+
var ids = Object.keys(stats.routeStates);
|
|
300
|
+
for (var i = 0; i < ids.length - MAX_ROUTE_STATES; i++) delete stats.routeStates[ids[i]];
|
|
301
|
+
return st;
|
|
302
|
+
}
|
|
303
|
+
|
|
304
|
+
function dec(obj, key) {
|
|
305
|
+
if (obj && obj[key] > 0) obj[key]--;
|
|
306
|
+
}
|
|
307
|
+
|
|
249
308
|
function addRoute(stats, rec) {
|
|
309
|
+
if (COMMAND_PROMPT.test(String(rec.promptPreview || rec.task || '').trim())) {
|
|
310
|
+
if (rec.routeId) routeState(stats, rec.routeId).c = 1;
|
|
311
|
+
return;
|
|
312
|
+
}
|
|
250
313
|
stats.totals.routes++;
|
|
251
314
|
if (!rec.shown) return;
|
|
252
315
|
stats.totals.shown++;
|
|
@@ -258,16 +321,30 @@ function addRoute(stats, rec) {
|
|
|
258
321
|
|
|
259
322
|
function addAdherence(stats, rec) {
|
|
260
323
|
stats.totals.spawns++;
|
|
261
|
-
|
|
324
|
+
var st = rec.routeId ? routeState(stats, rec.routeId) : null;
|
|
325
|
+
if (!rec.recommended || (st && st.c)) { stats.totals.unpicked++; return; }
|
|
262
326
|
var rec1 = agentEntry(stats, rec.recommended);
|
|
263
327
|
if (rec.followed === true) {
|
|
328
|
+
if (st && st.f) return;
|
|
329
|
+
if (st && st.o !== undefined) {
|
|
330
|
+
// An earlier spawn of this route was counted as an override: the
|
|
331
|
+
// route was followed after all.
|
|
332
|
+
dec(stats.totals, 'overridden');
|
|
333
|
+
dec(rec1, 'overridden');
|
|
334
|
+
if (st.o) dec(stats.agents[st.o], 'chosen');
|
|
335
|
+
delete st.o;
|
|
336
|
+
}
|
|
264
337
|
stats.totals.followed++;
|
|
265
338
|
if (rec1) rec1.followed++;
|
|
339
|
+
if (st) st.f = 1;
|
|
266
340
|
} else if (rec.followed === false) {
|
|
341
|
+
if (st && (st.f || st.o !== undefined)) return;
|
|
267
342
|
stats.totals.overridden++;
|
|
268
343
|
if (rec1) rec1.overridden++;
|
|
269
344
|
var actual = rec.actual ? agentEntry(stats, rec.actual) : null;
|
|
270
|
-
|
|
345
|
+
var chosen = actual && actual !== rec1;
|
|
346
|
+
if (chosen) actual.chosen++;
|
|
347
|
+
if (st) st.o = chosen ? normName(rec.actual) : '';
|
|
271
348
|
}
|
|
272
349
|
}
|
|
273
350
|
|
|
@@ -303,6 +380,13 @@ function update(root, opts) {
|
|
|
303
380
|
var persist = !opts || opts.persist !== false;
|
|
304
381
|
var stats = load(root);
|
|
305
382
|
var dir = path.join(root, '.monomind');
|
|
383
|
+
var known = registryNames(root);
|
|
384
|
+
Object.defineProperty(stats, '_known', { value: known, enumerable: false });
|
|
385
|
+
if (known) {
|
|
386
|
+
Object.keys(stats.agents).forEach(function (k) {
|
|
387
|
+
if (!known.has(k)) delete stats.agents[k];
|
|
388
|
+
});
|
|
389
|
+
}
|
|
306
390
|
var adders = { routes: addRoute, adherence: addAdherence, feedback: addFeedback };
|
|
307
391
|
Object.keys(SOURCES).forEach(function (src) {
|
|
308
392
|
var got = readNew(path.join(dir, SOURCES[src]), stats.cursors[src]);
|
|
@@ -165,7 +165,7 @@ const key = crypto.randomBytes(32).toString('base64');
|
|
|
165
165
|
jj.enableEncryption(key);
|
|
166
166
|
```
|
|
167
167
|
|
|
168
|
-
### 6. Operation Tracking
|
|
168
|
+
### 6. Operation Tracking
|
|
169
169
|
|
|
170
170
|
Automatic tracking of all operations:
|
|
171
171
|
|
|
@@ -396,7 +396,7 @@ for (let i = 1; i <= 10; i++) {
|
|
|
396
396
|
| `queryTrajectories(task, limit)` | Find similar trajectories | JSON: Trajectory[] |
|
|
397
397
|
| `resetLearning()` | Clear learned data | void |
|
|
398
398
|
|
|
399
|
-
###
|
|
399
|
+
### Operation Log Methods
|
|
400
400
|
|
|
401
401
|
| Method | Description | Returns |
|
|
402
402
|
|--------|-------------|---------|
|
|
@@ -630,7 +630,6 @@ async function agentSwarm(taskList) {
|
|
|
630
630
|
- **GitHub**: https://github.com/monoes/monomind
|
|
631
631
|
- **Full README**: See package README.md
|
|
632
632
|
- **Validation Guide**: docs/VALIDATION_FIXES_v2.3.1.md
|
|
633
|
-
- **LanceDB Guide**: docs/LANCEDB_GUIDE.md
|
|
634
633
|
|
|
635
634
|
## Version History
|
|
636
635
|
|
|
@@ -5,7 +5,7 @@ description: >
|
|
|
5
5
|
repo structure, and multi-package sync. Trigger on "open a PR", "manage
|
|
6
6
|
issues", "cut a release", "sync packages", or any GitHub Actions/repo
|
|
7
7
|
automation request. All GitHub operations use the `gh` CLI plus monomind's
|
|
8
|
-
MCP GitHub tools —
|
|
8
|
+
MCP GitHub tools — the `monomind` CLI has no `github` command group.
|
|
9
9
|
---
|
|
10
10
|
|
|
11
11
|
# GitHub Toolkit
|