@monoes/monomindcli 1.11.14 → 1.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude/agents/generated/channel-intelligence-director.md +87 -0
- package/.claude/agents/generated/chief-growth-officer.md +88 -0
- package/.claude/agents/generated/content-seo-strategist.md +90 -0
- package/.claude/agents/generated/developer-community-strategist.md +91 -0
- package/.claude/agents/generated/outreach-partnership-strategist.md +90 -0
- package/.claude/agents/generated/social-media-strategist.md +91 -0
- package/.claude/agents/generated/video-visual-strategist.md +90 -0
- package/.claude/commands/mastermind/master.md +1 -1
- package/.claude/helpers/auto-memory-hook.mjs +13 -4
- package/.claude/helpers/control-start.cjs +5 -0
- package/.claude/helpers/event-logger.cjs +114 -0
- package/.claude/helpers/handlers/adr-draft-handler.cjs +19 -5
- package/.claude/helpers/handlers/agent-start-handler.cjs +13 -4
- package/.claude/helpers/handlers/compact-handler.cjs +2 -0
- package/.claude/helpers/handlers/edit-handler.cjs +1 -1
- package/.claude/helpers/handlers/gates-handler.cjs +3 -0
- package/.claude/helpers/handlers/graph-status-handler.cjs +14 -8
- package/.claude/helpers/handlers/loops-status-handler.cjs +5 -2
- package/.claude/helpers/handlers/route-handler.cjs +13 -6
- package/.claude/helpers/handlers/session-handler.cjs +11 -4
- package/.claude/helpers/handlers/session-restore-handler.cjs +21 -11
- package/.claude/helpers/handlers/task-handler.cjs +13 -5
- package/.claude/helpers/intelligence.cjs +7 -2
- package/.claude/helpers/loop-tracker.cjs +15 -3
- package/.claude/helpers/memory.cjs +6 -1
- package/.claude/helpers/router.cjs +5 -2
- package/.claude/helpers/session.cjs +2 -0
- package/.claude/helpers/statusline.cjs +10 -2
- package/.claude/helpers/utils/micro-agents.cjs +20 -4
- package/.claude/skills/mastermind/_protocol.md +25 -15
- package/.claude/skills/mastermind/architect.md +3 -3
- package/.claude/skills/mastermind/autodev.md +4 -2
- package/.claude/skills/mastermind/idea.md +10 -0
- package/.claude/skills/mastermind/ops.md +3 -3
- package/.claude/skills/mastermind/runorg.md +153 -86
- package/dist/src/agents/registry-builder.d.ts.map +1 -1
- package/dist/src/agents/registry-builder.js +2 -0
- package/dist/src/agents/registry-builder.js.map +1 -1
- package/dist/src/autopilot-state.d.ts.map +1 -1
- package/dist/src/autopilot-state.js +10 -5
- package/dist/src/autopilot-state.js.map +1 -1
- package/dist/src/benchmarks/benchmark-runner.d.ts.map +1 -1
- package/dist/src/benchmarks/benchmark-runner.js +13 -0
- package/dist/src/benchmarks/benchmark-runner.js.map +1 -1
- package/dist/src/benchmarks/metric-evaluators.d.ts.map +1 -1
- package/dist/src/benchmarks/metric-evaluators.js +20 -9
- package/dist/src/benchmarks/metric-evaluators.js.map +1 -1
- package/dist/src/browser/actions.d.ts.map +1 -1
- package/dist/src/browser/actions.js +10 -3
- package/dist/src/browser/actions.js.map +1 -1
- package/dist/src/browser/browser.d.ts.map +1 -1
- package/dist/src/browser/browser.js +12 -2
- package/dist/src/browser/browser.js.map +1 -1
- package/dist/src/browser/cdp.d.ts.map +1 -1
- package/dist/src/browser/cdp.js +21 -3
- package/dist/src/browser/cdp.js.map +1 -1
- package/dist/src/browser/har.d.ts.map +1 -1
- package/dist/src/browser/har.js +27 -5
- package/dist/src/browser/har.js.map +1 -1
- package/dist/src/commands/agent.d.ts.map +1 -1
- package/dist/src/commands/agent.js +11 -8
- package/dist/src/commands/agent.js.map +1 -1
- package/dist/src/commands/analyze.d.ts.map +1 -1
- package/dist/src/commands/analyze.js +36 -21
- package/dist/src/commands/analyze.js.map +1 -1
- package/dist/src/commands/autopilot.d.ts.map +1 -1
- package/dist/src/commands/autopilot.js +12 -4
- package/dist/src/commands/autopilot.js.map +1 -1
- package/dist/src/commands/benchmark.d.ts.map +1 -1
- package/dist/src/commands/benchmark.js +51 -8
- package/dist/src/commands/benchmark.js.map +1 -1
- package/dist/src/commands/browse.d.ts.map +1 -1
- package/dist/src/commands/browse.js +5 -2
- package/dist/src/commands/browse.js.map +1 -1
- package/dist/src/commands/claims.d.ts.map +1 -1
- package/dist/src/commands/claims.js +29 -11
- package/dist/src/commands/claims.js.map +1 -1
- package/dist/src/commands/cleanup.d.ts.map +1 -1
- package/dist/src/commands/cleanup.js +25 -5
- package/dist/src/commands/cleanup.js.map +1 -1
- package/dist/src/commands/config.d.ts.map +1 -1
- package/dist/src/commands/config.js +15 -7
- package/dist/src/commands/config.js.map +1 -1
- package/dist/src/commands/daemon.d.ts.map +1 -1
- package/dist/src/commands/daemon.js +6 -0
- package/dist/src/commands/daemon.js.map +1 -1
- package/dist/src/commands/deployment.d.ts.map +1 -1
- package/dist/src/commands/deployment.js +34 -19
- package/dist/src/commands/deployment.js.map +1 -1
- package/dist/src/commands/doctor.d.ts.map +1 -1
- package/dist/src/commands/doctor.js +38 -12
- package/dist/src/commands/doctor.js.map +1 -1
- package/dist/src/commands/guidance.d.ts.map +1 -1
- package/dist/src/commands/guidance.js +15 -2
- package/dist/src/commands/guidance.js.map +1 -1
- package/dist/src/commands/hive-mind.d.ts.map +1 -1
- package/dist/src/commands/hive-mind.js +37 -14
- package/dist/src/commands/hive-mind.js.map +1 -1
- package/dist/src/commands/hooks.d.ts.map +1 -1
- package/dist/src/commands/hooks.js +42 -25
- package/dist/src/commands/hooks.js.map +1 -1
- package/dist/src/commands/init.d.ts.map +1 -1
- package/dist/src/commands/init.js +9 -4
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/issues.d.ts.map +1 -1
- package/dist/src/commands/issues.js +29 -26
- package/dist/src/commands/issues.js.map +1 -1
- package/dist/src/commands/mcp.d.ts.map +1 -1
- package/dist/src/commands/mcp.js +11 -5
- package/dist/src/commands/mcp.js.map +1 -1
- package/dist/src/commands/memory.d.ts.map +1 -1
- package/dist/src/commands/memory.js +10 -0
- package/dist/src/commands/memory.js.map +1 -1
- package/dist/src/commands/migrate.js +5 -5
- package/dist/src/commands/migrate.js.map +1 -1
- package/dist/src/commands/monograph.d.ts.map +1 -1
- package/dist/src/commands/monograph.js +18 -5
- package/dist/src/commands/monograph.js.map +1 -1
- package/dist/src/commands/monovector/backup.d.ts.map +1 -1
- package/dist/src/commands/monovector/backup.js +8 -2
- package/dist/src/commands/monovector/backup.js.map +1 -1
- package/dist/src/commands/monovector/benchmark.d.ts.map +1 -1
- package/dist/src/commands/monovector/benchmark.js +20 -7
- package/dist/src/commands/monovector/benchmark.js.map +1 -1
- package/dist/src/commands/monovector/import.d.ts.map +1 -1
- package/dist/src/commands/monovector/import.js +15 -0
- package/dist/src/commands/monovector/import.js.map +1 -1
- package/dist/src/commands/monovector/migrate.d.ts.map +1 -1
- package/dist/src/commands/monovector/migrate.js +4 -1
- package/dist/src/commands/monovector/migrate.js.map +1 -1
- package/dist/src/commands/monovector/optimize.d.ts.map +1 -1
- package/dist/src/commands/monovector/optimize.js +11 -0
- package/dist/src/commands/monovector/optimize.js.map +1 -1
- package/dist/src/commands/monovector/setup.d.ts.map +1 -1
- package/dist/src/commands/monovector/setup.js +11 -1
- package/dist/src/commands/monovector/setup.js.map +1 -1
- package/dist/src/commands/neural.js +1 -1
- package/dist/src/commands/neural.js.map +1 -1
- package/dist/src/commands/performance.d.ts.map +1 -1
- package/dist/src/commands/performance.js +20 -7
- package/dist/src/commands/performance.js.map +1 -1
- package/dist/src/commands/platforms.d.ts.map +1 -1
- package/dist/src/commands/platforms.js +90 -8
- package/dist/src/commands/platforms.js.map +1 -1
- package/dist/src/commands/plugins.d.ts.map +1 -1
- package/dist/src/commands/plugins.js +12 -5
- package/dist/src/commands/plugins.js.map +1 -1
- package/dist/src/commands/process.d.ts.map +1 -1
- package/dist/src/commands/process.js +33 -10
- package/dist/src/commands/process.js.map +1 -1
- package/dist/src/commands/progress.d.ts.map +1 -1
- package/dist/src/commands/progress.js +5 -3
- package/dist/src/commands/progress.js.map +1 -1
- package/dist/src/commands/providers.js +5 -5
- package/dist/src/commands/providers.js.map +1 -1
- package/dist/src/commands/replay.d.ts.map +1 -1
- package/dist/src/commands/replay.js +8 -2
- package/dist/src/commands/replay.js.map +1 -1
- package/dist/src/commands/route.d.ts.map +1 -1
- package/dist/src/commands/route.js +27 -7
- package/dist/src/commands/route.js.map +1 -1
- package/dist/src/commands/security.d.ts.map +1 -1
- package/dist/src/commands/security.js +4 -0
- package/dist/src/commands/security.js.map +1 -1
- package/dist/src/commands/session.d.ts.map +1 -1
- package/dist/src/commands/session.js +12 -1
- package/dist/src/commands/session.js.map +1 -1
- package/dist/src/commands/start.d.ts.map +1 -1
- package/dist/src/commands/start.js +11 -4
- package/dist/src/commands/start.js.map +1 -1
- package/dist/src/commands/status.d.ts.map +1 -1
- package/dist/src/commands/status.js +7 -4
- package/dist/src/commands/status.js.map +1 -1
- package/dist/src/commands/swarm.d.ts.map +1 -1
- package/dist/src/commands/swarm.js +27 -13
- package/dist/src/commands/swarm.js.map +1 -1
- package/dist/src/commands/task.d.ts.map +1 -1
- package/dist/src/commands/task.js +26 -11
- package/dist/src/commands/task.js.map +1 -1
- package/dist/src/commands/tokens.d.ts.map +1 -1
- package/dist/src/commands/tokens.js +7 -2
- package/dist/src/commands/tokens.js.map +1 -1
- package/dist/src/commands/transfer-store.d.ts.map +1 -1
- package/dist/src/commands/transfer-store.js +36 -22
- package/dist/src/commands/transfer-store.js.map +1 -1
- package/dist/src/commands/update.d.ts.map +1 -1
- package/dist/src/commands/update.js +15 -3
- package/dist/src/commands/update.js.map +1 -1
- package/dist/src/commands/workflow.d.ts.map +1 -1
- package/dist/src/commands/workflow.js +39 -6
- package/dist/src/commands/workflow.js.map +1 -1
- package/dist/src/consensus/audit-writer.d.ts.map +1 -1
- package/dist/src/consensus/audit-writer.js +18 -7
- package/dist/src/consensus/audit-writer.js.map +1 -1
- package/dist/src/consensus/vote-signer.d.ts.map +1 -1
- package/dist/src/consensus/vote-signer.js +25 -8
- package/dist/src/consensus/vote-signer.js.map +1 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +7 -3
- package/dist/src/index.js.map +1 -1
- package/dist/src/init/executor.d.ts.map +1 -1
- package/dist/src/init/executor.js +14 -11
- package/dist/src/init/executor.js.map +1 -1
- package/dist/src/init/shared-instructions-generator.d.ts.map +1 -1
- package/dist/src/init/shared-instructions-generator.js +20 -4
- package/dist/src/init/shared-instructions-generator.js.map +1 -1
- package/dist/src/init/statusline-generator.d.ts.map +1 -1
- package/dist/src/init/statusline-generator.js +36 -15
- package/dist/src/init/statusline-generator.js.map +1 -1
- package/dist/src/mcp-tools/a2a-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/a2a-tools.js +98 -13
- package/dist/src/mcp-tools/a2a-tools.js.map +1 -1
- package/dist/src/mcp-tools/agent-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/agent-tools.js +16 -3
- package/dist/src/mcp-tools/agent-tools.js.map +1 -1
- package/dist/src/mcp-tools/analyze-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/analyze-tools.js +80 -17
- package/dist/src/mcp-tools/analyze-tools.js.map +1 -1
- package/dist/src/mcp-tools/browser-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/browser-tools.js +84 -22
- package/dist/src/mcp-tools/browser-tools.js.map +1 -1
- package/dist/src/mcp-tools/claims-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/claims-tools.js +35 -7
- package/dist/src/mcp-tools/claims-tools.js.map +1 -1
- package/dist/src/mcp-tools/config-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/config-tools.js +82 -17
- package/dist/src/mcp-tools/config-tools.js.map +1 -1
- package/dist/src/mcp-tools/coordination-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/coordination-tools.js +37 -4
- package/dist/src/mcp-tools/coordination-tools.js.map +1 -1
- package/dist/src/mcp-tools/daa-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/daa-tools.js +49 -7
- package/dist/src/mcp-tools/daa-tools.js.map +1 -1
- package/dist/src/mcp-tools/embeddings-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/embeddings-tools.js +45 -18
- package/dist/src/mcp-tools/embeddings-tools.js.map +1 -1
- package/dist/src/mcp-tools/github-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/github-tools.js +75 -25
- package/dist/src/mcp-tools/github-tools.js.map +1 -1
- package/dist/src/mcp-tools/guidance-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/guidance-tools.js +32 -10
- package/dist/src/mcp-tools/guidance-tools.js.map +1 -1
- package/dist/src/mcp-tools/hive-mind-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/hive-mind-tools.js +91 -20
- package/dist/src/mcp-tools/hive-mind-tools.js.map +1 -1
- package/dist/src/mcp-tools/hooks-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/hooks-tools.js +188 -29
- package/dist/src/mcp-tools/hooks-tools.js.map +1 -1
- package/dist/src/mcp-tools/memory-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/memory-tools.js +25 -7
- package/dist/src/mcp-tools/memory-tools.js.map +1 -1
- package/dist/src/mcp-tools/monograph-compat.d.ts.map +1 -1
- package/dist/src/mcp-tools/monograph-compat.js +11 -2
- package/dist/src/mcp-tools/monograph-compat.js.map +1 -1
- package/dist/src/mcp-tools/monograph-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/monograph-tools.js +148 -26
- package/dist/src/mcp-tools/monograph-tools.js.map +1 -1
- package/dist/src/mcp-tools/neural-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/neural-tools.js +44 -9
- package/dist/src/mcp-tools/neural-tools.js.map +1 -1
- package/dist/src/mcp-tools/performance-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/performance-tools.js +45 -10
- package/dist/src/mcp-tools/performance-tools.js.map +1 -1
- package/dist/src/mcp-tools/progress-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/progress-tools.js +7 -4
- package/dist/src/mcp-tools/progress-tools.js.map +1 -1
- package/dist/src/mcp-tools/request-tracker.d.ts.map +1 -1
- package/dist/src/mcp-tools/request-tracker.js +15 -1
- package/dist/src/mcp-tools/request-tracker.js.map +1 -1
- package/dist/src/mcp-tools/security-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/security-tools.js +61 -9
- package/dist/src/mcp-tools/security-tools.js.map +1 -1
- package/dist/src/mcp-tools/session-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/session-tools.js +45 -14
- package/dist/src/mcp-tools/session-tools.js.map +1 -1
- package/dist/src/mcp-tools/swarm-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/swarm-tools.js +15 -3
- package/dist/src/mcp-tools/swarm-tools.js.map +1 -1
- package/dist/src/mcp-tools/system-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/system-tools.js +14 -7
- package/dist/src/mcp-tools/system-tools.js.map +1 -1
- package/dist/src/mcp-tools/task-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/task-tools.js +52 -10
- package/dist/src/mcp-tools/task-tools.js.map +1 -1
- package/dist/src/mcp-tools/terminal-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/terminal-tools.js +40 -6
- package/dist/src/mcp-tools/terminal-tools.js.map +1 -1
- package/dist/src/mcp-tools/transfer-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/transfer-tools.js +37 -4
- package/dist/src/mcp-tools/transfer-tools.js.map +1 -1
- package/dist/src/mcp-tools/workflow-tools.d.ts.map +1 -1
- package/dist/src/mcp-tools/workflow-tools.js +29 -6
- package/dist/src/mcp-tools/workflow-tools.js.map +1 -1
- package/dist/src/memory/ewc-consolidation.d.ts.map +1 -1
- package/dist/src/memory/ewc-consolidation.js +26 -10
- package/dist/src/memory/ewc-consolidation.js.map +1 -1
- package/dist/src/memory/intelligence.d.ts.map +1 -1
- package/dist/src/memory/intelligence.js +80 -19
- package/dist/src/memory/intelligence.js.map +1 -1
- package/dist/src/memory/memory-bridge.d.ts.map +1 -1
- package/dist/src/memory/memory-bridge.js +21 -2
- package/dist/src/memory/memory-bridge.js.map +1 -1
- package/dist/src/memory/memory-initializer.d.ts.map +1 -1
- package/dist/src/memory/memory-initializer.js +67 -3
- package/dist/src/memory/memory-initializer.js.map +1 -1
- package/dist/src/memory/sona-optimizer.d.ts.map +1 -1
- package/dist/src/memory/sona-optimizer.js +14 -4
- package/dist/src/memory/sona-optimizer.js.map +1 -1
- package/dist/src/monovector/command-outcomes.d.ts.map +1 -1
- package/dist/src/monovector/command-outcomes.js +43 -7
- package/dist/src/monovector/command-outcomes.js.map +1 -1
- package/dist/src/monovector/coverage-router.d.ts.map +1 -1
- package/dist/src/monovector/coverage-router.js +8 -4
- package/dist/src/monovector/coverage-router.js.map +1 -1
- package/dist/src/monovector/coverage-tools.d.ts.map +1 -1
- package/dist/src/monovector/coverage-tools.js +6 -3
- package/dist/src/monovector/coverage-tools.js.map +1 -1
- package/dist/src/monovector/diff-classifier.d.ts.map +1 -1
- package/dist/src/monovector/diff-classifier.js +13 -0
- package/dist/src/monovector/diff-classifier.js.map +1 -1
- package/dist/src/monovector/route-outcomes.d.ts +2 -1
- package/dist/src/monovector/route-outcomes.d.ts.map +1 -1
- package/dist/src/monovector/route-outcomes.js +46 -4
- package/dist/src/monovector/route-outcomes.js.map +1 -1
- package/dist/src/plugins/manager.d.ts.map +1 -1
- package/dist/src/plugins/manager.js +8 -3
- package/dist/src/plugins/manager.js.map +1 -1
- package/dist/src/plugins/store/discovery.d.ts.map +1 -1
- package/dist/src/plugins/store/discovery.js +46 -2
- package/dist/src/plugins/store/discovery.js.map +1 -1
- package/dist/src/plugins/store/search.d.ts.map +1 -1
- package/dist/src/plugins/store/search.js +5 -4
- package/dist/src/plugins/store/search.js.map +1 -1
- package/dist/src/production/circuit-breaker.d.ts.map +1 -1
- package/dist/src/production/circuit-breaker.js +17 -3
- package/dist/src/production/circuit-breaker.js.map +1 -1
- package/dist/src/production/error-handler.d.ts.map +1 -1
- package/dist/src/production/error-handler.js +3 -0
- package/dist/src/production/error-handler.js.map +1 -1
- package/dist/src/production/monitoring.d.ts.map +1 -1
- package/dist/src/production/monitoring.js +20 -3
- package/dist/src/production/monitoring.js.map +1 -1
- package/dist/src/production/rate-limiter.d.ts.map +1 -1
- package/dist/src/production/rate-limiter.js +13 -4
- package/dist/src/production/rate-limiter.js.map +1 -1
- package/dist/src/production/retry.d.ts.map +1 -1
- package/dist/src/production/retry.js +17 -9
- package/dist/src/production/retry.js.map +1 -1
- package/dist/src/routing/embed-worker.js +6 -2
- package/dist/src/routing/embed-worker.js.map +1 -1
- package/dist/src/routing/embedder.d.ts.map +1 -1
- package/dist/src/routing/embedder.js +0 -0
- package/dist/src/routing/embedder.js.map +1 -1
- package/dist/src/routing/llm-caller.d.ts.map +1 -1
- package/dist/src/routing/llm-caller.js +13 -2
- package/dist/src/routing/llm-caller.js.map +1 -1
- package/dist/src/routing/route-layer-factory.d.ts.map +1 -1
- package/dist/src/routing/route-layer-factory.js +18 -3
- package/dist/src/routing/route-layer-factory.js.map +1 -1
- package/dist/src/services/claim-service.d.ts +1 -0
- package/dist/src/services/claim-service.d.ts.map +1 -1
- package/dist/src/services/claim-service.js +8 -0
- package/dist/src/services/claim-service.js.map +1 -1
- package/dist/src/services/config-file-manager.d.ts.map +1 -1
- package/dist/src/services/config-file-manager.js +14 -2
- package/dist/src/services/config-file-manager.js.map +1 -1
- package/dist/src/services/headless-worker-executor.d.ts.map +1 -1
- package/dist/src/services/headless-worker-executor.js +18 -2
- package/dist/src/services/headless-worker-executor.js.map +1 -1
- package/dist/src/services/worker-daemon.d.ts.map +1 -1
- package/dist/src/services/worker-daemon.js +53 -12
- package/dist/src/services/worker-daemon.js.map +1 -1
- package/dist/src/transfer/anonymization/index.d.ts +0 -3
- package/dist/src/transfer/anonymization/index.d.ts.map +1 -1
- package/dist/src/transfer/anonymization/index.js +16 -1
- package/dist/src/transfer/anonymization/index.js.map +1 -1
- package/dist/src/transfer/export.d.ts.map +1 -1
- package/dist/src/transfer/export.js +8 -0
- package/dist/src/transfer/export.js.map +1 -1
- package/dist/src/transfer/ipfs/upload.d.ts.map +1 -1
- package/dist/src/transfer/ipfs/upload.js +33 -3
- package/dist/src/transfer/ipfs/upload.js.map +1 -1
- package/dist/src/transfer/serialization/cfp.d.ts.map +1 -1
- package/dist/src/transfer/serialization/cfp.js +9 -3
- package/dist/src/transfer/serialization/cfp.js.map +1 -1
- package/dist/src/transfer/storage/gcs.d.ts.map +1 -1
- package/dist/src/transfer/storage/gcs.js +37 -3
- package/dist/src/transfer/storage/gcs.js.map +1 -1
- package/dist/src/transfer/store/discovery.d.ts.map +1 -1
- package/dist/src/transfer/store/discovery.js +45 -3
- package/dist/src/transfer/store/discovery.js.map +1 -1
- package/dist/src/transfer/store/download.d.ts.map +1 -1
- package/dist/src/transfer/store/download.js +5 -0
- package/dist/src/transfer/store/download.js.map +1 -1
- package/dist/src/transfer/store/publish.d.ts.map +1 -1
- package/dist/src/transfer/store/publish.js +13 -1
- package/dist/src/transfer/store/publish.js.map +1 -1
- package/dist/src/transfer/store/registry.d.ts +8 -0
- package/dist/src/transfer/store/registry.d.ts.map +1 -1
- package/dist/src/transfer/store/registry.js +30 -5
- package/dist/src/transfer/store/registry.js.map +1 -1
- package/dist/src/transfer/store/search.d.ts.map +1 -1
- package/dist/src/transfer/store/search.js +20 -5
- package/dist/src/transfer/store/search.js.map +1 -1
- package/dist/src/ui/collector.mjs +39 -5
- package/dist/src/ui/dashboard.html +934 -1282
- package/dist/src/ui/orgs.html +722 -12
- package/dist/src/ui/server.mjs +573 -134
- package/dist/src/update/checker.d.ts.map +1 -1
- package/dist/src/update/checker.js +59 -7
- package/dist/src/update/checker.js.map +1 -1
- package/dist/src/update/executor.d.ts.map +1 -1
- package/dist/src/update/executor.js +50 -3
- package/dist/src/update/executor.js.map +1 -1
- package/dist/src/update/index.d.ts.map +1 -1
- package/dist/src/update/index.js +18 -1
- package/dist/src/update/index.js.map +1 -1
- package/dist/src/update/rate-limiter.d.ts +6 -0
- package/dist/src/update/rate-limiter.d.ts.map +1 -1
- package/dist/src/update/rate-limiter.js +79 -7
- package/dist/src/update/rate-limiter.js.map +1 -1
- package/dist/src/update/validator.d.ts.map +1 -1
- package/dist/src/update/validator.js +52 -1
- package/dist/src/update/validator.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -3
- package/dist/src/ui/data/mastermind-events.jsonl +0 -59
|
@@ -172,7 +172,7 @@ module.exports = {
|
|
|
172
172
|
const remaining = fs.readdirSync(regDir).filter(f => f.endsWith('.json')).length;
|
|
173
173
|
const _actPath = path.join(CWD, '.monomind', 'metrics', 'swarm-activity.json');
|
|
174
174
|
let _prevLastActive = 0;
|
|
175
|
-
try { _prevLastActive = (JSON.parse(fs.readFileSync(_actPath, 'utf-8'))?.swarm?.lastActive) || 0; } catch { /* ignore */ }
|
|
175
|
+
try { var _actSt = fs.statSync(_actPath); if (_actSt.size < 65536) { _prevLastActive = (JSON.parse(fs.readFileSync(_actPath, 'utf-8'))?.swarm?.lastActive) || 0; } } catch { /* ignore */ }
|
|
176
176
|
fs.writeFileSync(_actPath, JSON.stringify({
|
|
177
177
|
timestamp: new Date().toISOString(),
|
|
178
178
|
swarm: {
|
|
@@ -217,7 +217,8 @@ module.exports = {
|
|
|
217
217
|
try {
|
|
218
218
|
var haltFile = path.join(CWD, 'data', 'halt-signals.jsonl');
|
|
219
219
|
if (fs.existsSync(haltFile)) {
|
|
220
|
-
var
|
|
220
|
+
var haltSt = fs.statSync(haltFile);
|
|
221
|
+
var haltLines = haltSt.size < 1048576 ? fs.readFileSync(haltFile, 'utf-8').trim().split('\n').filter(Boolean) : [];
|
|
221
222
|
if (haltLines.length > 0) {
|
|
222
223
|
console.warn('[HALT_DETECTED] ' + haltLines.length + ' halt signal(s) present');
|
|
223
224
|
}
|
|
@@ -298,8 +299,11 @@ module.exports = {
|
|
|
298
299
|
var settingsPath = path.join(CWD, '.claude', 'settings.json');
|
|
299
300
|
var adrCfg = {};
|
|
300
301
|
if (fs.existsSync(settingsPath)) {
|
|
301
|
-
var
|
|
302
|
-
|
|
302
|
+
var settingsSt = fs.statSync(settingsPath);
|
|
303
|
+
if (settingsSt.size < 524288) {
|
|
304
|
+
var s = JSON.parse(fs.readFileSync(settingsPath, 'utf-8'));
|
|
305
|
+
adrCfg = (s.monomind && s.monomind.adr) || {};
|
|
306
|
+
}
|
|
303
307
|
}
|
|
304
308
|
if (adrCfg.autoGenerate) {
|
|
305
309
|
var taskAgent = hookInput.agentSlug || hookInput.agent_slug || '';
|
|
@@ -307,7 +311,11 @@ module.exports = {
|
|
|
307
311
|
var isArchitectLevel = ['architect', 'system-architect', 'software-architect'].includes(taskAgent)
|
|
308
312
|
|| /\b(architecture|design decision|adr|trade-?off|migration strategy)\b/.test(taskDescAdr);
|
|
309
313
|
if (isArchitectLevel && taskDescAdr.length > 30) {
|
|
310
|
-
|
|
314
|
+
// Guard adrCfg.directory against path traversal outside CWD
|
|
315
|
+
var rawAdrDir = typeof adrCfg.directory === 'string' ? adrCfg.directory : 'docs/adrs';
|
|
316
|
+
var resolvedAdrDir = path.resolve(CWD, rawAdrDir);
|
|
317
|
+
if (!resolvedAdrDir.startsWith(CWD + path.sep) && resolvedAdrDir !== CWD) { throw new Error('adr.directory outside project'); }
|
|
318
|
+
var adrDir = resolvedAdrDir;
|
|
311
319
|
fs.mkdirSync(adrDir, { recursive: true });
|
|
312
320
|
var adrNum = (fs.readdirSync(adrDir).filter(function(f) { return f.endsWith('.md'); }).length + 1)
|
|
313
321
|
.toString().padStart(4, '0');
|
|
@@ -20,9 +20,13 @@ function ensureDir() {
|
|
|
20
20
|
try { fs.mkdirSync(INTEL_DIR, { recursive: true }); } catch (_) {}
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
+
var MAX_PATTERNS_SIZE = 10 * 1024 * 1024; // 10 MiB guard
|
|
24
|
+
|
|
23
25
|
function loadPatterns() {
|
|
24
26
|
try {
|
|
25
27
|
if (fs.existsSync(PATTERNS_FILE)) {
|
|
28
|
+
var st = fs.statSync(PATTERNS_FILE);
|
|
29
|
+
if (st.size > MAX_PATTERNS_SIZE) { _patterns = []; return; }
|
|
26
30
|
_patterns = JSON.parse(fs.readFileSync(PATTERNS_FILE, 'utf-8'));
|
|
27
31
|
}
|
|
28
32
|
} catch (_) { _patterns = []; }
|
|
@@ -77,8 +81,9 @@ function feedback(success) {
|
|
|
77
81
|
function storePattern(pattern) {
|
|
78
82
|
ensureDir();
|
|
79
83
|
loadPatterns();
|
|
80
|
-
|
|
81
|
-
_patterns.
|
|
84
|
+
var safeId = String(pattern.id || '').slice(0, 256);
|
|
85
|
+
_patterns = _patterns.filter(function(p) { return p.id !== safeId; });
|
|
86
|
+
_patterns.push(Object.assign({ storedAt: new Date().toISOString() }, pattern, { id: safeId }));
|
|
82
87
|
try {
|
|
83
88
|
fs.writeFileSync(PATTERNS_FILE, JSON.stringify(_patterns.slice(-500), null, 2), 'utf-8');
|
|
84
89
|
} catch (_) {}
|
|
@@ -15,13 +15,20 @@ const path = require('path');
|
|
|
15
15
|
const CWD = process.env.CLAUDE_PROJECT_DIR || process.cwd();
|
|
16
16
|
const LOOPS_DIR = path.join(CWD, '.monomind', 'loops');
|
|
17
17
|
|
|
18
|
+
const STDIN_MAX_BYTES = 1 * 1024 * 1024; // 1 MiB cap to prevent OOM
|
|
19
|
+
|
|
18
20
|
async function readStdin() {
|
|
19
21
|
if (process.stdin.isTTY) return '';
|
|
20
22
|
return new Promise((resolve) => {
|
|
21
23
|
let data = '';
|
|
24
|
+
let bytesRead = 0;
|
|
22
25
|
const timer = setTimeout(() => { process.stdin.removeAllListeners(); resolve(data); }, 3000);
|
|
23
26
|
process.stdin.setEncoding('utf8');
|
|
24
|
-
process.stdin.on('data', chunk => {
|
|
27
|
+
process.stdin.on('data', chunk => {
|
|
28
|
+
bytesRead += Buffer.byteLength(chunk, 'utf8');
|
|
29
|
+
if (bytesRead > STDIN_MAX_BYTES) { clearTimeout(timer); resolve(''); return; }
|
|
30
|
+
data += chunk;
|
|
31
|
+
});
|
|
25
32
|
process.stdin.on('end', () => { clearTimeout(timer); resolve(data); });
|
|
26
33
|
process.stdin.on('error', () => { clearTimeout(timer); resolve(data); });
|
|
27
34
|
process.stdin.resume();
|
|
@@ -60,7 +67,9 @@ async function main() {
|
|
|
60
67
|
try { hookInput = JSON.parse(raw); } catch { process.exit(0); }
|
|
61
68
|
|
|
62
69
|
const toolInput = hookInput.tool_input || hookInput.toolInput || {};
|
|
63
|
-
const
|
|
70
|
+
const rawSessionId = hookInput.session_id || hookInput.sessionId || hookInput.id || '';
|
|
71
|
+
// Sanitize sessionId to prevent path traversal — allow only alphanumeric, dash, underscore, dot
|
|
72
|
+
const sessionId = String(rawSessionId).replace(/[^a-zA-Z0-9_.\-]/g, '').slice(0, 128);
|
|
64
73
|
|
|
65
74
|
if (!sessionId) { process.exit(0); }
|
|
66
75
|
|
|
@@ -75,7 +84,10 @@ async function main() {
|
|
|
75
84
|
let existing = {};
|
|
76
85
|
try {
|
|
77
86
|
if (fs.existsSync(loopFile)) {
|
|
78
|
-
|
|
87
|
+
const stat = fs.statSync(loopFile);
|
|
88
|
+
if (stat.size <= 512 * 1024) { // 512 KiB guard to prevent OOM
|
|
89
|
+
existing = JSON.parse(fs.readFileSync(loopFile, 'utf-8'));
|
|
90
|
+
}
|
|
79
91
|
}
|
|
80
92
|
} catch { /* start fresh */ }
|
|
81
93
|
|
|
@@ -16,9 +16,13 @@ function ensureDir() {
|
|
|
16
16
|
try { fs.mkdirSync(MEMORY_DIR, { recursive: true }); } catch (_) {}
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
+
var MAX_INDEX_SIZE = 50 * 1024 * 1024; // 50 MiB guard
|
|
20
|
+
|
|
19
21
|
function loadIndex() {
|
|
20
22
|
try {
|
|
21
23
|
if (!fs.existsSync(MEMORY_INDEX)) return [];
|
|
24
|
+
var st = fs.statSync(MEMORY_INDEX);
|
|
25
|
+
if (st.size > MAX_INDEX_SIZE) return [];
|
|
22
26
|
return JSON.parse(fs.readFileSync(MEMORY_INDEX, 'utf-8'));
|
|
23
27
|
} catch (_) {
|
|
24
28
|
return [];
|
|
@@ -36,7 +40,8 @@ function saveIndex(entries) {
|
|
|
36
40
|
|
|
37
41
|
function store(key, value, namespace) {
|
|
38
42
|
var entries = loadIndex();
|
|
39
|
-
var ns = namespace || 'default';
|
|
43
|
+
var ns = String(namespace || 'default').slice(0, 128);
|
|
44
|
+
key = String(key || '').slice(0, 512);
|
|
40
45
|
// Remove existing entry with same key+namespace
|
|
41
46
|
entries = entries.filter(function(e) { return !(e.key === key && e.namespace === ns); });
|
|
42
47
|
entries.push({ key: key, value: value, namespace: ns, storedAt: new Date().toISOString() });
|
|
@@ -35,13 +35,16 @@ const DEFAULT_RESULT = {
|
|
|
35
35
|
extrasMatches: [],
|
|
36
36
|
};
|
|
37
37
|
|
|
38
|
+
var MAX_PROMPT = 2000;
|
|
39
|
+
|
|
38
40
|
function routeTask(prompt) {
|
|
39
41
|
if (!prompt || typeof prompt !== 'string') return DEFAULT_RESULT;
|
|
42
|
+
var safePrompt = prompt.slice(0, MAX_PROMPT);
|
|
40
43
|
|
|
41
44
|
var best = null;
|
|
42
45
|
for (var i = 0; i < KEYWORD_ROUTES.length; i++) {
|
|
43
46
|
var rule = KEYWORD_ROUTES[i];
|
|
44
|
-
if (rule.pattern.test(
|
|
47
|
+
if (rule.pattern.test(safePrompt)) {
|
|
45
48
|
if (!best || rule.confidence > best.confidence) {
|
|
46
49
|
best = rule;
|
|
47
50
|
}
|
|
@@ -54,7 +57,7 @@ function routeTask(prompt) {
|
|
|
54
57
|
agent: best.agent,
|
|
55
58
|
agentSlug: best.agent.toLowerCase().replace(/\s+/g, '-'),
|
|
56
59
|
confidence: best.confidence,
|
|
57
|
-
reason: 'Keyword match: ' + best.pattern.toString().slice(
|
|
60
|
+
reason: ('Keyword match: ' + best.pattern.toString()).slice(0, 80),
|
|
58
61
|
semanticRouting: false,
|
|
59
62
|
specificAgents: [],
|
|
60
63
|
skillMatches: [],
|
|
@@ -17,6 +17,8 @@ function ensureDir() {
|
|
|
17
17
|
function restore() {
|
|
18
18
|
try {
|
|
19
19
|
if (!fs.existsSync(SESSION_FILE)) return null;
|
|
20
|
+
var st = fs.statSync(SESSION_FILE);
|
|
21
|
+
if (st.size > 1 * 1024 * 1024) return null; // 1 MiB guard
|
|
20
22
|
var raw = fs.readFileSync(SESSION_FILE, 'utf-8');
|
|
21
23
|
var data = JSON.parse(raw);
|
|
22
24
|
if (!data || !data.sessionId) return null;
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
/* eslint-disable @typescript-eslint/no-var-requires */
|
|
17
17
|
const fs = require('fs');
|
|
18
18
|
const path = require('path');
|
|
19
|
-
const { execSync } = require('child_process');
|
|
19
|
+
const { execSync, spawnSync } = require('child_process');
|
|
20
20
|
const os = require('os');
|
|
21
21
|
|
|
22
22
|
// Configuration
|
|
@@ -204,6 +204,8 @@ function getModelFromSessionJSONL() {
|
|
|
204
204
|
if (files.length === 0) return null;
|
|
205
205
|
|
|
206
206
|
const sessionFile = path.join(projectsDir, files[0].f);
|
|
207
|
+
// Guard against OOM: skip session files larger than 10 MB
|
|
208
|
+
try { if (fs.statSync(sessionFile).size > 10 * 1024 * 1024) return null; } catch { return null; }
|
|
207
209
|
const raw = fs.readFileSync(sessionFile, 'utf-8');
|
|
208
210
|
const lines = raw.split('\n').filter(Boolean);
|
|
209
211
|
|
|
@@ -922,7 +924,13 @@ function getGraphifyStats() {
|
|
|
922
924
|
|
|
923
925
|
try {
|
|
924
926
|
if (fs.existsSync(dbPath)) {
|
|
925
|
-
|
|
927
|
+
// Use spawnSync array args to prevent shell injection via dbPath (CWD-derived)
|
|
928
|
+
const result = spawnSync(
|
|
929
|
+
'sqlite3',
|
|
930
|
+
[dbPath, 'SELECT (SELECT COUNT(*) FROM nodes), (SELECT COUNT(*) FROM edges);'],
|
|
931
|
+
{ encoding: 'utf-8', timeout: 1000 }
|
|
932
|
+
);
|
|
933
|
+
const out = (result.stdout || '').trim();
|
|
926
934
|
if (out) {
|
|
927
935
|
const [n, e] = out.split('|').map(v => parseInt(v, 10) || 0);
|
|
928
936
|
if (n > 0) return { nodes: n, edges: e, exists: true };
|
|
@@ -77,15 +77,18 @@ function _triggerExtractFromFrontmatter(content, agentSlug) {
|
|
|
77
77
|
return triggers;
|
|
78
78
|
}
|
|
79
79
|
|
|
80
|
-
function _triggerCollectMdFiles(dir) {
|
|
80
|
+
function _triggerCollectMdFiles(dir, _depth) {
|
|
81
|
+
var depth = (_depth === undefined) ? 0 : _depth;
|
|
82
|
+
if (depth > 5) return []; // cap recursion depth to prevent stack overflow DoS
|
|
81
83
|
var results = [];
|
|
82
84
|
try {
|
|
83
85
|
var entries = fs.readdirSync(dir);
|
|
84
86
|
for (var i = 0; i < entries.length; i++) {
|
|
87
|
+
if (results.length >= 200) break; // cap total file count to prevent DoS
|
|
85
88
|
var full = path.join(dir, entries[i]);
|
|
86
89
|
try {
|
|
87
90
|
var st = fs.lstatSync(full);
|
|
88
|
-
if (st.isDirectory()) results = results.concat(_triggerCollectMdFiles(full));
|
|
91
|
+
if (st.isDirectory()) results = results.concat(_triggerCollectMdFiles(full, depth + 1));
|
|
89
92
|
else if (entries[i].endsWith('.md')) results.push(full);
|
|
90
93
|
} catch (e) {}
|
|
91
94
|
}
|
|
@@ -98,7 +101,11 @@ function _triggerBuildIndex(agentDir) {
|
|
|
98
101
|
var files = _triggerCollectMdFiles(agentDir);
|
|
99
102
|
for (var i = 0; i < files.length; i++) {
|
|
100
103
|
var content;
|
|
101
|
-
try {
|
|
104
|
+
try {
|
|
105
|
+
var _fst = fs.statSync(files[i]);
|
|
106
|
+
if (_fst.size > 256 * 1024) continue; // skip files > 256 KiB to prevent OOM
|
|
107
|
+
content = fs.readFileSync(files[i], 'utf-8');
|
|
108
|
+
} catch (e) { continue; }
|
|
102
109
|
var slug = files[i].split('/').pop().replace(/\.md$/i, '').toLowerCase().replace(/[^a-z0-9-]/g, '-');
|
|
103
110
|
patterns = patterns.concat(_triggerExtractFromFrontmatter(content, slug));
|
|
104
111
|
}
|
|
@@ -114,6 +121,8 @@ function scanMicroAgentTriggers(prompt) {
|
|
|
114
121
|
|
|
115
122
|
try {
|
|
116
123
|
if (fs.existsSync(indexPath)) {
|
|
124
|
+
var _idxSt = fs.statSync(indexPath);
|
|
125
|
+
if (_idxSt.size > 512 * 1024) { throw new Error('trigger-index.json exceeds 512 KiB'); }
|
|
117
126
|
var idx = JSON.parse(fs.readFileSync(indexPath, 'utf-8'));
|
|
118
127
|
var age = Date.now() - new Date(idx.builtAt || 0).getTime();
|
|
119
128
|
if (age < 3600000 && Array.isArray(idx.patterns)) {
|
|
@@ -140,6 +149,7 @@ function scanMicroAgentTriggers(prompt) {
|
|
|
140
149
|
if (p.mode !== 'inject' && p.mode !== 'takeover') continue;
|
|
141
150
|
if (seen[p.agentSlug]) continue;
|
|
142
151
|
try {
|
|
152
|
+
if (typeof p.pattern !== 'string' || p.pattern.length > 500) continue; // cap pattern length to prevent ReDoS
|
|
143
153
|
var re = new RegExp(p.pattern, 'i');
|
|
144
154
|
var m = re.exec(prompt);
|
|
145
155
|
if (m) {
|
|
@@ -164,6 +174,8 @@ function _buildKnowledgeSearchFn(knowledgeDir) {
|
|
|
164
174
|
if (!fs.existsSync(chunksFile)) return [];
|
|
165
175
|
var lines;
|
|
166
176
|
try {
|
|
177
|
+
var _cSt = fs.statSync(chunksFile);
|
|
178
|
+
if (_cSt.size > 4 * 1024 * 1024) return []; // skip > 4 MiB to prevent OOM
|
|
167
179
|
lines = fs.readFileSync(chunksFile, 'utf-8').trim().split('\n').filter(Boolean);
|
|
168
180
|
} catch (e) { return []; }
|
|
169
181
|
|
|
@@ -209,6 +221,8 @@ function _autoIndexKnowledge(knowledgeDir) {
|
|
|
209
221
|
} catch (e) {}
|
|
210
222
|
}
|
|
211
223
|
try {
|
|
224
|
+
var _sSt = fs.statSync(path.join(CWD, '.monomind', 'graph', 'stats.json'));
|
|
225
|
+
if (_sSt.size > 256 * 1024) { throw new Error('stats.json exceeds 256 KiB'); }
|
|
212
226
|
var statsForHash = JSON.parse(fs.readFileSync(path.join(CWD, '.monomind', 'graph', 'stats.json'), 'utf-8'));
|
|
213
227
|
hashInput += 'monograph:' + (statsForHash.builtAt || 0) + ';';
|
|
214
228
|
} catch(e) {}
|
|
@@ -220,7 +234,7 @@ function _autoIndexKnowledge(knowledgeDir) {
|
|
|
220
234
|
try { existingHash = fs.readFileSync(hashFile, 'utf-8').trim(); } catch (e) {}
|
|
221
235
|
|
|
222
236
|
var existingChunkCount = 0;
|
|
223
|
-
try { if (fs.existsSync(chunksFile)) { existingChunkCount = fs.readFileSync(chunksFile, 'utf-8').trim().split('\n').filter(Boolean).length; } } catch (e) {}
|
|
237
|
+
try { if (fs.existsSync(chunksFile)) { var _ecSt = fs.statSync(chunksFile); if (_ecSt.size <= 4 * 1024 * 1024) { existingChunkCount = fs.readFileSync(chunksFile, 'utf-8').trim().split('\n').filter(Boolean).length; } } } catch (e) {}
|
|
224
238
|
if (existingHash === contentHash && existingChunkCount > 0) return 0;
|
|
225
239
|
|
|
226
240
|
var newLines = [];
|
|
@@ -228,6 +242,8 @@ function _autoIndexKnowledge(knowledgeDir) {
|
|
|
228
242
|
var src = sources[si];
|
|
229
243
|
try {
|
|
230
244
|
if (!fs.existsSync(src.filePath)) continue;
|
|
245
|
+
var _srcSt = fs.statSync(src.filePath);
|
|
246
|
+
if (_srcSt.size > 512 * 1024) continue; // skip > 512 KiB to prevent OOM
|
|
231
247
|
var content = fs.readFileSync(src.filePath, 'utf-8');
|
|
232
248
|
var sections = content.split(/\n{2,}|\n(?=#{1,3} )/);
|
|
233
249
|
for (var ci = 0; ci < sections.length; ci++) {
|
|
@@ -289,14 +289,16 @@ If the user is running across multiple repos for the same project, they MUST use
|
|
|
289
289
|
# Compatible with macOS bash 3.2
|
|
290
290
|
project_name="${project_name:-$(basename "$PWD")}"
|
|
291
291
|
canonical="${project_name}-<domain>"
|
|
292
|
+
board_tracking=true
|
|
292
293
|
|
|
293
294
|
# Step 1 — Resolve space
|
|
294
295
|
space_id=$(monotask space list 2>/dev/null | awk -F'|' '{gsub(/^ +| +$/,"",$1);gsub(/^ +| +$/,"",$2);if($2==n)print $1}' n="$project_name" | head -1)
|
|
295
296
|
[ -z "$space_id" ] && space_id=$(monotask space create "$project_name" 2>/dev/null | grep -oE '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}')
|
|
296
|
-
[ -z "$space_id" ] && { echo "
|
|
297
|
+
[ -z "$space_id" ] && { echo "[mastermind] monotask board unavailable — board tracking skipped."; board_tracking=false; }
|
|
297
298
|
|
|
298
299
|
# Step 2 — Find existing board by canonical name or create
|
|
299
300
|
# board list format is "uuid: name" (colon-space separator, NOT pipe)
|
|
301
|
+
if [ "$board_tracking" = "true" ]; then
|
|
300
302
|
board_id=$(monotask board list 2>/dev/null | awk -F': ' '{gsub(/^ +| +$/,"",$1);gsub(/^ +| +$/,"",$2);if($2==n)print $1}' n="$canonical" | head -1)
|
|
301
303
|
if [ -n "$board_id" ]; then
|
|
302
304
|
# Step 3a — Fetch column IDs from existing board
|
|
@@ -306,13 +308,16 @@ if [ -n "$board_id" ]; then
|
|
|
306
308
|
done_col=$(echo "$cols_json" | jq -r '[.[] | select(.title=="Done")] | .[0].id // empty')
|
|
307
309
|
else
|
|
308
310
|
# Step 3b — Create board and columns
|
|
309
|
-
board_id=$(monotask board create --space "$space_id" "$canonical" --json | jq -r '.id // empty')
|
|
310
|
-
[ -z "$board_id" ] && { echo "
|
|
311
|
+
board_id=$(monotask board create --space "$space_id" "$canonical" --json 2>/dev/null | jq -r '.id // empty')
|
|
312
|
+
[ -z "$board_id" ] && { echo "[mastermind] monotask board unavailable — board tracking skipped."; board_tracking=false; }
|
|
313
|
+
if [ "$board_tracking" = "true" ]; then
|
|
311
314
|
monotask space boards add "$space_id" "$board_id" >/dev/null 2>&1 || true
|
|
312
|
-
todo_col=$(monotask column create "$board_id" "Todo" --json | jq -r '.id // empty')
|
|
313
|
-
doing_col=$(monotask column create "$board_id" "Doing" --json | jq -r '.id // empty')
|
|
314
|
-
done_col=$(monotask column create "$board_id" "Done" --json | jq -r '.id // empty')
|
|
315
|
-
[ -z "$todo_col" ] && { echo "
|
|
315
|
+
todo_col=$(monotask column create "$board_id" "Todo" --json 2>/dev/null | jq -r '.id // empty')
|
|
316
|
+
doing_col=$(monotask column create "$board_id" "Doing" --json 2>/dev/null | jq -r '.id // empty')
|
|
317
|
+
done_col=$(monotask column create "$board_id" "Done" --json 2>/dev/null | jq -r '.id // empty')
|
|
318
|
+
[ -z "$todo_col" ] && { echo "[mastermind] monotask board unavailable — board tracking skipped."; board_tracking=false; }
|
|
319
|
+
fi
|
|
320
|
+
fi
|
|
316
321
|
fi
|
|
317
322
|
```
|
|
318
323
|
|
|
@@ -321,28 +326,33 @@ When master.md runs multiple domains, resolve the space **once** before the loop
|
|
|
321
326
|
```bash
|
|
322
327
|
# Compatible with macOS bash 3.2 — jq accumulation instead of declare -A
|
|
323
328
|
project_name="<resolved project_name>"
|
|
329
|
+
board_tracking=true
|
|
324
330
|
space_id=$(monotask space list 2>/dev/null | awk -F'|' '{gsub(/^ +| +$/,"",$1);gsub(/^ +| +$/,"",$2);if($2==n)print $1}' n="$project_name" | head -1)
|
|
325
331
|
[ -z "$space_id" ] && space_id=$(monotask space create "$project_name" 2>/dev/null | grep -oE '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}')
|
|
326
|
-
[ -z "$space_id" ] && { echo "
|
|
332
|
+
[ -z "$space_id" ] && { echo "[mastermind] monotask board unavailable — board tracking skipped."; board_tracking=false; }
|
|
327
333
|
|
|
328
334
|
state_patch='{}'
|
|
329
335
|
for domain in build marketing ops; do # substitute actual domain list
|
|
330
336
|
canonical="${project_name}-${domain}"
|
|
337
|
+
if [ "$board_tracking" = "true" ]; then
|
|
331
338
|
# board list format is "uuid: name" (colon-space separator, NOT pipe)
|
|
332
|
-
board_id=$(monotask board list 2>/dev/null | awk -F': ' '{gsub(/^ +| +$/,"",$1);gsub(/^ +| +$/,"",$2);if($2==n)print $1}' n="$canonical" | head -1)
|
|
339
|
+
board_id=$(monotask board list 2>/dev/null | awk -F': ' '{gsub(/^ +| +$/,"",$1);gsub(/^ +| +$/,"",$2);if($2==n)print $1}' n="$canonical" | head -1)
|
|
333
340
|
if [ -n "$board_id" ]; then
|
|
334
341
|
cols_json=$(monotask column list "$board_id" --json 2>/dev/null || echo '[]')
|
|
335
342
|
todo_col=$(echo "$cols_json" | jq -r '[.[] | select(.title=="Todo" or .title=="Backlog")] | .[0].id // empty')
|
|
336
343
|
doing_col=$(echo "$cols_json" | jq -r '[.[] | select(.title=="Doing" or .title=="In Progress")] | .[0].id // empty')
|
|
337
344
|
done_col=$(echo "$cols_json" | jq -r '[.[] | select(.title=="Done")] | .[0].id // empty')
|
|
338
345
|
else
|
|
339
|
-
board_id=$(monotask board create --space "$space_id" "$canonical" --json | jq -r '.id // empty')
|
|
340
|
-
[ -z "$board_id" ] && { echo "
|
|
346
|
+
board_id=$(monotask board create --space "$space_id" "$canonical" --json 2>/dev/null | jq -r '.id // empty')
|
|
347
|
+
[ -z "$board_id" ] && { echo "[mastermind] monotask board unavailable — board tracking skipped."; board_tracking=false; }
|
|
348
|
+
if [ "$board_tracking" = "true" ]; then
|
|
341
349
|
monotask space boards add "$space_id" "$board_id" >/dev/null 2>&1 || true
|
|
342
|
-
todo_col=$(monotask column create "$board_id" "Todo" --json | jq -r '.id // empty')
|
|
343
|
-
doing_col=$(monotask column create "$board_id" "Doing" --json | jq -r '.id // empty')
|
|
344
|
-
done_col=$(monotask column create "$board_id" "Done" --json | jq -r '.id // empty')
|
|
345
|
-
[ -z "$todo_col" ] && { echo "
|
|
350
|
+
todo_col=$(monotask column create "$board_id" "Todo" --json 2>/dev/null | jq -r '.id // empty')
|
|
351
|
+
doing_col=$(monotask column create "$board_id" "Doing" --json 2>/dev/null | jq -r '.id // empty')
|
|
352
|
+
done_col=$(monotask column create "$board_id" "Done" --json 2>/dev/null | jq -r '.id // empty')
|
|
353
|
+
[ -z "$todo_col" ] && { echo "[mastermind] monotask board unavailable — board tracking skipped."; board_tracking=false; }
|
|
354
|
+
fi
|
|
355
|
+
fi
|
|
346
356
|
fi
|
|
347
357
|
state_patch=$(echo "$state_patch" | jq \
|
|
348
358
|
--arg d "$domain" --arg b "$board_id" \
|
|
@@ -95,10 +95,10 @@ If this skill is invoked directly (not by master):
|
|
|
95
95
|
result=$(monotask board create "architect" --json 2>/dev/null)
|
|
96
96
|
board_id=$(echo "$result" | jq -r '.id // empty')
|
|
97
97
|
[ -n "$board_id" ] && [ -n "$space_id" ] && monotask space boards add "$space_id" "$board_id" >/dev/null 2>&1 || true
|
|
98
|
-
[ -z "$board_id" ] && { echo "
|
|
99
|
-
echo "$board_id"
|
|
98
|
+
[ -z "$board_id" ] && { echo "[mastermind] monotask board unavailable — board tracking skipped."; board_tracking=false; }
|
|
99
|
+
echo "${board_id:-}"
|
|
100
100
|
```
|
|
101
|
-
If
|
|
101
|
+
If board_id is empty after this block, set `board_tracking=false` and continue — do not abort. Card creation steps later are skipped when `board_tracking=false`.
|
|
102
102
|
6. Proceed with complexity assessment below
|
|
103
103
|
7. At end: emit `session:complete` (if `caller` is `standalone`). Before executing the curl below, substitute the resolved sessionId for `<sessionId>`:
|
|
104
104
|
```bash
|
|
@@ -432,7 +432,7 @@ Invoke `Skill("mastermind:build")` with:
|
|
|
432
432
|
- `brain_context`: the loaded brain context
|
|
433
433
|
- `project_name`: `$(basename "$PWD")`
|
|
434
434
|
- `mode`: `auto`
|
|
435
|
-
- `board_id`: the autodev board (
|
|
435
|
+
- `board_id`: the autodev board (only if non-empty; omit if monotask was unavailable)
|
|
436
436
|
|
|
437
437
|
The brief passed to build MUST include:
|
|
438
438
|
- What to build (concrete spec, not vague)
|
|
@@ -490,11 +490,13 @@ If `N < count`: log `[autodev] Moving to improvement <N+1>/<count>...` and repea
|
|
|
490
490
|
|
|
491
491
|
1. Extract flags (leading integer for count, --newfeature N, --focus, --auto/--confirm)
|
|
492
492
|
2. Load brain context via _protocol.md Brain Load Procedure (namespace: `autodev`)
|
|
493
|
-
3. Create monotask board:
|
|
493
|
+
3. Create monotask board (optional — skip gracefully if monotask is not installed):
|
|
494
494
|
```bash
|
|
495
495
|
project_name="${project_name:-$(basename "$PWD")}"
|
|
496
496
|
board_id=$(monotask board create "autodev" --json 2>/dev/null | jq -r '.id // empty')
|
|
497
|
+
[ -z "$board_id" ] && echo "[autodev] monotask board unavailable — board tracking skipped."
|
|
497
498
|
```
|
|
499
|
+
Pass `board_id` to `mastermind:build` only if non-empty; omit the parameter otherwise.
|
|
498
500
|
4. **If `--newfeature` was parsed:** run the Feature Pipeline (FP-0 through FP-End) and skip the improvement loop entirely.
|
|
499
501
|
**Otherwise:** run the Loop section above for each improvement.
|
|
500
502
|
5. At end: follow _protocol.md Brain Write Procedure (namespace: `autodev`)
|
|
@@ -9,6 +9,16 @@ default_mode: confirm
|
|
|
9
9
|
|
|
10
10
|
This skill is invoked by `mastermind:master` or directly via `/mastermind:idea`.
|
|
11
11
|
|
|
12
|
+
**Extract `--monotask` flag:** If present in `$ARGUMENTS`, set `USE_MONOTASK=true` and remove it from `$ARGUMENTS`. Default: `USE_MONOTASK=false`.
|
|
13
|
+
|
|
14
|
+
**File mode (default, `USE_MONOTASK=false`):**
|
|
15
|
+
|
|
16
|
+
Invoke `Skill("mastermind:ideate", $ARGUMENTS)` immediately — it provides the same research, evaluation, elaboration, and task-decomposition pipeline with file-first storage (`docs/ideas/` and `docs/tasks/`). The rest of this skill is skipped in file mode.
|
|
17
|
+
|
|
18
|
+
**Board mode (`USE_MONOTASK=true`):**
|
|
19
|
+
|
|
20
|
+
Continue with the full monotask board pipeline below (Steps 3-6).
|
|
21
|
+
|
|
12
22
|
---
|
|
13
23
|
|
|
14
24
|
## Inputs
|
|
@@ -51,8 +51,8 @@ If this skill is invoked directly (not by master):
|
|
|
51
51
|
space_id=$(monotask space list 2>/dev/null | awk -F' \| ' -v n="$project_name" '$2==n{print $1}' | head -1)
|
|
52
52
|
[ -z "$space_id" ] && space_id=$(monotask space create "$project_name" 2>&1 | grep -oE '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}')
|
|
53
53
|
[ -z "$space_id" ] && { echo "ERROR: Could not find or create space '$project_name'"; exit 1; }
|
|
54
|
-
board_id=$(monotask board create "ops" --json | jq -r '.id // empty')
|
|
55
|
-
[ -z "$board_id" ] &&
|
|
54
|
+
board_id=$(monotask board create "ops" --json 2>/dev/null | jq -r '.id // empty')
|
|
55
|
+
[ -z "$board_id" ] && echo "[ops] monotask board unavailable — board tracking skipped."
|
|
56
56
|
monotask space boards add "$space_id" "$board_id" >/dev/null 2>&1 || true
|
|
57
57
|
todo_col=$(monotask column create "$board_id" "Todo" --json | jq -r '.id')
|
|
58
58
|
doing_col=$(monotask column create "$board_id" "Doing" --json | jq -r '.id')
|
|
@@ -118,7 +118,7 @@ Spawn one Task agent per workstream (star topology — hub aggregates independen
|
|
|
118
118
|
- Infrastructure automation: subagent_type "DevOps Automator"
|
|
119
119
|
- CI/CD pipelines: subagent_type "cicd-engineer"
|
|
120
120
|
|
|
121
|
-
|
|
121
|
+
Tasks are saved to `docs/tasks/` by default. To execute: `/mastermind:do --file <TASK_FILE>`. With monotask: `/mastermind:do --monotask --space $SPACE_ID --board $TASK_BOARD_ID`.
|
|
122
122
|
|
|
123
123
|
STEP 4 — COLLECT AND RETURN
|
|
124
124
|
Collect all agent outputs. Return to caller:
|