@monoes/monomindcli 1.10.47 → 1.10.54

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (139) hide show
  1. package/.claude/commands/monomind/do.md +52 -0
  2. package/.claude/commands/monomind/improve.md +2 -0
  3. package/.claude/helpers/handlers/route-handler.cjs +61 -11
  4. package/.claude/helpers/skill-registry.json +99 -51
  5. package/.claude/skills/agent-browser-testing/SKILL.md +522 -152
  6. package/.claude/skills/github-issue-triage/SKILL.md +354 -0
  7. package/.claude/skills/github-repo-recap/SKILL.md +207 -0
  8. package/.claude/skills/mastermind/_delegation.md +83 -0
  9. package/.claude/skills/mastermind/_protocol.md +14 -0
  10. package/dist/src/ui/dashboard-v2.html +782 -42
  11. package/dist/src/ui/dashboard.html +1 -0
  12. package/dist/src/ui/data/agent-avatars.html +763 -0
  13. package/dist/src/ui/data/agent-avatars.json +966 -0
  14. package/dist/src/ui/data/avatars/account-strategist.svg +58 -0
  15. package/dist/src/ui/data/avatars/accounts-payable.svg +54 -0
  16. package/dist/src/ui/data/avatars/adaptive-coordinator.svg +55 -0
  17. package/dist/src/ui/data/avatars/adaptive-coordinator2.svg +54 -0
  18. package/dist/src/ui/data/avatars/ai-citation.svg +57 -0
  19. package/dist/src/ui/data/avatars/ai-engineer.svg +61 -0
  20. package/dist/src/ui/data/avatars/analytics-reporter.svg +53 -0
  21. package/dist/src/ui/data/avatars/api-tester.svg +53 -0
  22. package/dist/src/ui/data/avatars/architecture.svg +54 -0
  23. package/dist/src/ui/data/avatars/automation-governance.svg +55 -0
  24. package/dist/src/ui/data/avatars/backend-dev.svg +53 -0
  25. package/dist/src/ui/data/avatars/benchmarker.svg +54 -0
  26. package/dist/src/ui/data/avatars/blockchain-auditor.svg +53 -0
  27. package/dist/src/ui/data/avatars/byzantine-coord.svg +57 -0
  28. package/dist/src/ui/data/avatars/case-analyst.svg +57 -0
  29. package/dist/src/ui/data/avatars/cicd-engineer.svg +55 -0
  30. package/dist/src/ui/data/avatars/cloud-architect.svg +54 -0
  31. package/dist/src/ui/data/avatars/code-review-swarm.svg +57 -0
  32. package/dist/src/ui/data/avatars/coder-v119.svg +57 -0
  33. package/dist/src/ui/data/avatars/coder.svg +58 -0
  34. package/dist/src/ui/data/avatars/collective-coord.svg +54 -0
  35. package/dist/src/ui/data/avatars/compliance-auditor.svg +58 -0
  36. package/dist/src/ui/data/avatars/consensus-coordinator.svg +54 -0
  37. package/dist/src/ui/data/avatars/content-creator.svg +54 -0
  38. package/dist/src/ui/data/avatars/crdt-synchronizer.svg +53 -0
  39. package/dist/src/ui/data/avatars/cro-specialist.svg +58 -0
  40. package/dist/src/ui/data/avatars/data-consolidator.svg +54 -0
  41. package/dist/src/ui/data/avatars/data-engineer.svg +53 -0
  42. package/dist/src/ui/data/avatars/database-optimizer.svg +61 -0
  43. package/dist/src/ui/data/avatars/deal-strategist.svg +54 -0
  44. package/dist/src/ui/data/avatars/defender.svg +53 -0
  45. package/dist/src/ui/data/avatars/devops-automator.svg +56 -0
  46. package/dist/src/ui/data/avatars/discovery-coach.svg +54 -0
  47. package/dist/src/ui/data/avatars/email-marketing.svg +57 -0
  48. package/dist/src/ui/data/avatars/embedded-firmware.svg +61 -0
  49. package/dist/src/ui/data/avatars/evidence-collector.svg +57 -0
  50. package/dist/src/ui/data/avatars/experiment-tracker.svg +53 -0
  51. package/dist/src/ui/data/avatars/feedback-synthesizer.svg +54 -0
  52. package/dist/src/ui/data/avatars/finance-tracker.svg +54 -0
  53. package/dist/src/ui/data/avatars/frontend-developer.svg +54 -0
  54. package/dist/src/ui/data/avatars/game-audio-engineer.svg +59 -0
  55. package/dist/src/ui/data/avatars/game-designer.svg +54 -0
  56. package/dist/src/ui/data/avatars/gossip-coordinator.svg +54 -0
  57. package/dist/src/ui/data/avatars/hierarchical-coord.svg +54 -0
  58. package/dist/src/ui/data/avatars/incident-commander.svg +57 -0
  59. package/dist/src/ui/data/avatars/infrastructure.svg +54 -0
  60. package/dist/src/ui/data/avatars/input-validator.svg +53 -0
  61. package/dist/src/ui/data/avatars/ios-developer.svg +54 -0
  62. package/dist/src/ui/data/avatars/issue-tracker.svg +53 -0
  63. package/dist/src/ui/data/avatars/judge.svg +55 -0
  64. package/dist/src/ui/data/avatars/launch-strategist.svg +54 -0
  65. package/dist/src/ui/data/avatars/legal-compliance.svg +53 -0
  66. package/dist/src/ui/data/avatars/level-designer.svg +53 -0
  67. package/dist/src/ui/data/avatars/load-balancer.svg +57 -0
  68. package/dist/src/ui/data/avatars/mcp-builder.svg +53 -0
  69. package/dist/src/ui/data/avatars/memory-coordinator.svg +55 -0
  70. package/dist/src/ui/data/avatars/mesh-coordinator.svg +55 -0
  71. package/dist/src/ui/data/avatars/ml-developer.svg +58 -0
  72. package/dist/src/ui/data/avatars/mobile-app-builder.svg +53 -0
  73. package/dist/src/ui/data/avatars/mobile-dev.svg +54 -0
  74. package/dist/src/ui/data/avatars/model-qa.svg +58 -0
  75. package/dist/src/ui/data/avatars/narrative-designer.svg +58 -0
  76. package/dist/src/ui/data/avatars/outbound-strategist.svg +55 -0
  77. package/dist/src/ui/data/avatars/path-validator.svg +54 -0
  78. package/dist/src/ui/data/avatars/payment-agent.svg +53 -0
  79. package/dist/src/ui/data/avatars/perf-analyzer.svg +58 -0
  80. package/dist/src/ui/data/avatars/pipeline-analyst.svg +54 -0
  81. package/dist/src/ui/data/avatars/planner.svg +55 -0
  82. package/dist/src/ui/data/avatars/pr-manager.svg +54 -0
  83. package/dist/src/ui/data/avatars/pricing-strategist.svg +54 -0
  84. package/dist/src/ui/data/avatars/product-manager.svg +54 -0
  85. package/dist/src/ui/data/avatars/production-validator.svg +54 -0
  86. package/dist/src/ui/data/avatars/project-shepherd.svg +54 -0
  87. package/dist/src/ui/data/avatars/proposal-strategist.svg +54 -0
  88. package/dist/src/ui/data/avatars/prosecutor.svg +57 -0
  89. package/dist/src/ui/data/avatars/pseudocode.svg +53 -0
  90. package/dist/src/ui/data/avatars/queen-coordinator.svg +55 -0
  91. package/dist/src/ui/data/avatars/quorum-manager.svg +53 -0
  92. package/dist/src/ui/data/avatars/raft-manager.svg +53 -0
  93. package/dist/src/ui/data/avatars/reality-checker.svg +58 -0
  94. package/dist/src/ui/data/avatars/recruitment.svg +58 -0
  95. package/dist/src/ui/data/avatars/refinement.svg +53 -0
  96. package/dist/src/ui/data/avatars/release-manager.svg +54 -0
  97. package/dist/src/ui/data/avatars/repo-architect.svg +54 -0
  98. package/dist/src/ui/data/avatars/researcher.svg +58 -0
  99. package/dist/src/ui/data/avatars/resource-allocator.svg +53 -0
  100. package/dist/src/ui/data/avatars/reviewer.svg +53 -0
  101. package/dist/src/ui/data/avatars/safe-executor.svg +53 -0
  102. package/dist/src/ui/data/avatars/sales-coach.svg +53 -0
  103. package/dist/src/ui/data/avatars/sales-engineer.svg +58 -0
  104. package/dist/src/ui/data/avatars/scout-explorer.svg +58 -0
  105. package/dist/src/ui/data/avatars/security-architect.svg +54 -0
  106. package/dist/src/ui/data/avatars/security-auditor.svg +55 -0
  107. package/dist/src/ui/data/avatars/senior-developer.svg +58 -0
  108. package/dist/src/ui/data/avatars/senior-pm.svg +58 -0
  109. package/dist/src/ui/data/avatars/seo-specialist.svg +57 -0
  110. package/dist/src/ui/data/avatars/social-media.svg +54 -0
  111. package/dist/src/ui/data/avatars/solidity-engineer.svg +58 -0
  112. package/dist/src/ui/data/avatars/sparc-coder.svg +58 -0
  113. package/dist/src/ui/data/avatars/sparc-coord.svg +56 -0
  114. package/dist/src/ui/data/avatars/specification.svg +57 -0
  115. package/dist/src/ui/data/avatars/sprint-prioritizer.svg +53 -0
  116. package/dist/src/ui/data/avatars/sre.svg +54 -0
  117. package/dist/src/ui/data/avatars/studio-operations.svg +53 -0
  118. package/dist/src/ui/data/avatars/studio-producer.svg +55 -0
  119. package/dist/src/ui/data/avatars/support-responder.svg +56 -0
  120. package/dist/src/ui/data/avatars/system-architect.svg +54 -0
  121. package/dist/src/ui/data/avatars/task-orchestrator.svg +56 -0
  122. package/dist/src/ui/data/avatars/technical-artist.svg +53 -0
  123. package/dist/src/ui/data/avatars/technical-writer.svg +59 -0
  124. package/dist/src/ui/data/avatars/tester.svg +53 -0
  125. package/dist/src/ui/data/avatars/threat-detection.svg +61 -0
  126. package/dist/src/ui/data/avatars/trend-researcher.svg +54 -0
  127. package/dist/src/ui/data/avatars/trial-director.svg +55 -0
  128. package/dist/src/ui/data/avatars/unity-architect.svg +54 -0
  129. package/dist/src/ui/data/avatars/visionos-engineer.svg +57 -0
  130. package/dist/src/ui/data/avatars/worker-specialist.svg +55 -0
  131. package/dist/src/ui/data/avatars/workflow-architect.svg +57 -0
  132. package/dist/src/ui/data/avatars/workflow-automation.svg +54 -0
  133. package/dist/src/ui/data/avatars/zk-steward.svg +54 -0
  134. package/dist/src/ui/data/known-projects.json +1 -1
  135. package/dist/src/ui/data/mastermind-events.jsonl +28 -0
  136. package/dist/src/ui/orgs.html +1171 -0
  137. package/dist/src/ui/server.mjs +25 -8
  138. package/dist/tsconfig.tsbuildinfo +1 -1
  139. package/package.json +1 -1
@@ -2590,14 +2590,15 @@ export async function startServer({ port = 4242, projectDir, openBrowser = true
2590
2590
  // GET /api/orgs — list all saved org configs
2591
2591
  if (req.method === 'GET' && url === '/api/orgs') {
2592
2592
  try {
2593
- const orgsDir = path.join(projectDir || process.cwd(), '.monomind', 'orgs');
2593
+ const _orgsQs = new URL(req.url, 'http://localhost').searchParams;
2594
+ const orgsDir = path.join(path.resolve(_orgsQs.get('dir') || projectDir || process.cwd()), '.monomind', 'orgs');
2594
2595
  let orgs = [];
2595
2596
  if (fs.existsSync(orgsDir)) {
2596
2597
  const files = fs.readdirSync(orgsDir).filter(f => f.endsWith('.json'));
2597
2598
  // Read events file once, outside the per-org loop
2598
2599
  let recentLines = [];
2599
2600
  try {
2600
- const evFile = path.join(projectDir || process.cwd(), 'data', 'mastermind-events.jsonl');
2601
+ const evFile = path.join(path.resolve(_orgsQs.get('dir') || projectDir || process.cwd()), 'data', 'mastermind-events.jsonl');
2601
2602
  if (fs.existsSync(evFile)) {
2602
2603
  // Read only the last 64 KB to bound cost on large files
2603
2604
  const stat = fs.statSync(evFile);
@@ -2651,7 +2652,8 @@ export async function startServer({ port = 4242, projectDir, openBrowser = true
2651
2652
  try {
2652
2653
  const orgName = decodeURIComponent(url.slice('/api/org/'.length));
2653
2654
  if (orgName.length > 64 || !/^[a-z0-9][a-z0-9_-]*$/i.test(orgName)) { res.writeHead(400); res.end('Invalid org name'); return; }
2654
- const d = projectDir || process.cwd();
2655
+ const _orgQs = new URL(req.url, 'http://localhost').searchParams;
2656
+ const d = path.resolve(_orgQs.get('dir') || projectDir || process.cwd());
2655
2657
  const orgsDir = path.join(d, '.monomind', 'orgs');
2656
2658
 
2657
2659
  const readJsonSafe = (f) => { try { return JSON.parse(fs.readFileSync(f, 'utf8')); } catch(_) { return null; } };
@@ -2684,14 +2686,14 @@ export async function startServer({ port = 4242, projectDir, openBrowser = true
2684
2686
  const parts = url.split('/');
2685
2687
  const orgName = decodeURIComponent(parts[3]);
2686
2688
  if (orgName.length > 64 || !/^[a-z0-9][a-z0-9_-]*$/i.test(orgName)) { res.writeHead(400); res.end('[]'); return; }
2687
- const d = projectDir || process.cwd();
2689
+ const _actQs = new URL(req.url, 'http://localhost').searchParams;
2690
+ const d = path.resolve(_actQs.get('dir') || projectDir || process.cwd());
2688
2691
  const eventsFile = path.join(d, 'data', 'mastermind-events.jsonl');
2689
2692
  let events = [];
2690
2693
  if (fs.existsSync(eventsFile)) {
2691
2694
  const lines = fs.readFileSync(eventsFile, 'utf8').split('\n').filter(Boolean);
2692
- events = lines.slice(-200).map(l => { try { return JSON.parse(l); } catch { return null; } }).filter(Boolean)
2693
- .filter(e => e.org === orgName || e.session && typeof e.org === 'undefined')
2694
- .filter(e => e.org === orgName)
2695
+ events = lines.slice(-500).map(l => { try { return JSON.parse(l); } catch { return null; } }).filter(Boolean)
2696
+ .filter(e => e.org === orgName || !e.org)
2695
2697
  .reverse().slice(0, 100);
2696
2698
  }
2697
2699
  res.writeHead(200, { 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*' });
@@ -2922,7 +2924,8 @@ export async function startServer({ port = 4242, projectDir, openBrowser = true
2922
2924
  try {
2923
2925
  const orgName = decodeURIComponent(url.split('/')[3]);
2924
2926
  if (orgName.length > 64 || !/^[a-z0-9][a-z0-9_-]*$/i.test(orgName)) { res.writeHead(400); res.end('Invalid org name'); return; }
2925
- const base = path.join(projectDir || process.cwd(), '.monomind', 'orgs');
2927
+ const _healthQs = new URL(req.url, 'http://localhost').searchParams;
2928
+ const base = path.join(path.resolve(_healthQs.get('dir') || projectDir || process.cwd()), '.monomind', 'orgs');
2926
2929
 
2927
2930
  let agentsRunning = 0, agentsIdle = 0, openIssues = 0, inProgressIssues = 0;
2928
2931
  let budgetUsedTokens = 0, budgetMaxTokens = 0;
@@ -3506,6 +3509,20 @@ export async function startServer({ port = 4242, projectDir, openBrowser = true
3506
3509
  return;
3507
3510
  }
3508
3511
 
3512
+ // ----------------------------------------------------------- GET /orgs
3513
+ if (req.method === 'GET' && url === '/orgs') {
3514
+ try {
3515
+ const htmlPath = path.join(__dirname, 'orgs.html');
3516
+ const html = fs.readFileSync(htmlPath, 'utf8');
3517
+ res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
3518
+ res.end(html);
3519
+ } catch (err) {
3520
+ res.writeHead(404);
3521
+ res.end(`orgs.html not found: ${err.message}`);
3522
+ }
3523
+ return;
3524
+ }
3525
+
3509
3526
  // GET /api/mastermind/loops — list all active loop state files
3510
3527
  if (req.method === 'GET' && url === '/api/mastermind/loops') {
3511
3528
  try {