monomind 2.0.2 → 2.1.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.
Files changed (90) hide show
  1. package/package.json +9 -5
  2. package/packages/@monomind/cli/.claude/commands/mastermind/runorg.md +4 -0
  3. package/packages/@monomind/cli/.claude/helpers/control-start.cjs +50 -5
  4. package/packages/@monomind/cli/.claude/helpers/event-logger.cjs +109 -6
  5. package/packages/@monomind/cli/.claude/helpers/graphify-freshen.cjs +19 -17
  6. package/packages/@monomind/cli/.claude/helpers/handlers/agent-start-handler.cjs +60 -28
  7. package/packages/@monomind/cli/.claude/helpers/handlers/capture-handler.cjs +75 -18
  8. package/packages/@monomind/cli/.claude/helpers/handlers/edit-handler.cjs +27 -9
  9. package/packages/@monomind/cli/.claude/helpers/handlers/gates-handler.cjs +16 -7
  10. package/packages/@monomind/cli/.claude/helpers/handlers/loops-status-handler.cjs +1 -1
  11. package/packages/@monomind/cli/.claude/helpers/handlers/route-handler.cjs +4 -4
  12. package/packages/@monomind/cli/.claude/helpers/handlers/session-handler.cjs +40 -22
  13. package/packages/@monomind/cli/.claude/helpers/handlers/session-restore-handler.cjs +0 -12
  14. package/packages/@monomind/cli/.claude/helpers/handlers/task-handler.cjs +53 -22
  15. package/packages/@monomind/cli/.claude/helpers/hook-handler.cjs +54 -4
  16. package/packages/@monomind/cli/.claude/helpers/intelligence.cjs +94 -15
  17. package/packages/@monomind/cli/.claude/helpers/session.cjs +6 -1
  18. package/packages/@monomind/cli/.claude/helpers/statusline.cjs +10 -10
  19. package/packages/@monomind/cli/.claude/helpers/token-tracker.cjs +3 -3
  20. package/packages/@monomind/cli/.claude/helpers/utils/agent-registrations.cjs +41 -0
  21. package/packages/@monomind/cli/.claude/helpers/utils/fs-helpers.cjs +183 -0
  22. package/packages/@monomind/cli/.claude/helpers/utils/micro-agents.cjs +10 -6
  23. package/packages/@monomind/cli/.claude/helpers/utils/telemetry.cjs +35 -19
  24. package/packages/@monomind/cli/bin/cli.js +10 -1
  25. package/packages/@monomind/cli/dist/src/commands/agent-ops.js +9 -15
  26. package/packages/@monomind/cli/dist/src/commands/cleanup.js +20 -4
  27. package/packages/@monomind/cli/dist/src/commands/completions.js +66 -261
  28. package/packages/@monomind/cli/dist/src/commands/doctor.js +7 -2
  29. package/packages/@monomind/cli/dist/src/commands/hooks-workers.js +7 -0
  30. package/packages/@monomind/cli/dist/src/commands/index.js +3 -0
  31. package/packages/@monomind/cli/dist/src/commands/mcp.js +11 -6
  32. package/packages/@monomind/cli/dist/src/commands/memory-admin.js +12 -6
  33. package/packages/@monomind/cli/dist/src/commands/memory-transfer.js +6 -13
  34. package/packages/@monomind/cli/dist/src/commands/monograph.js +3 -3
  35. package/packages/@monomind/cli/dist/src/commands/org.d.ts +3 -1
  36. package/packages/@monomind/cli/dist/src/commands/org.js +306 -129
  37. package/packages/@monomind/cli/dist/src/commands/start.js +142 -37
  38. package/packages/@monomind/cli/dist/src/commands/tokens.js +21 -3
  39. package/packages/@monomind/cli/dist/src/config-adapter.js +37 -17
  40. package/packages/@monomind/cli/dist/src/index.js +64 -28
  41. package/packages/@monomind/cli/dist/src/init/claudemd-generator.js +44 -11
  42. package/packages/@monomind/cli/dist/src/init/executor.js +63 -49
  43. package/packages/@monomind/cli/dist/src/mcp-client.d.ts +8 -3
  44. package/packages/@monomind/cli/dist/src/mcp-client.js +37 -3
  45. package/packages/@monomind/cli/dist/src/mcp-server.js +8 -2
  46. package/packages/@monomind/cli/dist/src/mcp-tools/agent-tools.d.ts +20 -0
  47. package/packages/@monomind/cli/dist/src/mcp-tools/agent-tools.js +10 -5
  48. package/packages/@monomind/cli/dist/src/mcp-tools/github-tools.js +30 -8
  49. package/packages/@monomind/cli/dist/src/mcp-tools/graphify-tools.js +11 -2
  50. package/packages/@monomind/cli/dist/src/mcp-tools/hive-mind-tools.js +51 -34
  51. package/packages/@monomind/cli/dist/src/mcp-tools/knowledge-tools.js +9 -1
  52. package/packages/@monomind/cli/dist/src/mcp-tools/monograph-compat.js +56 -14
  53. package/packages/@monomind/cli/dist/src/mcp-tools/monograph-tools.js +65 -43
  54. package/packages/@monomind/cli/dist/src/mcp-tools/swarm-tools.js +6 -4
  55. package/packages/@monomind/cli/dist/src/mcp-tools/system-tools.js +4 -4
  56. package/packages/@monomind/cli/dist/src/mcp-tools/types.d.ts +20 -0
  57. package/packages/@monomind/cli/dist/src/mcp-tools/types.js +36 -1
  58. package/packages/@monomind/cli/dist/src/memory/hnsw-operations.d.ts +13 -1
  59. package/packages/@monomind/cli/dist/src/memory/hnsw-operations.js +66 -14
  60. package/packages/@monomind/cli/dist/src/memory/intelligence.js +99 -3
  61. package/packages/@monomind/cli/dist/src/memory/memory-bridge.d.ts +7 -0
  62. package/packages/@monomind/cli/dist/src/memory/memory-bridge.js +20 -0
  63. package/packages/@monomind/cli/dist/src/orgrt/broker.d.ts +24 -0
  64. package/packages/@monomind/cli/dist/src/orgrt/broker.js +68 -0
  65. package/packages/@monomind/cli/dist/src/orgrt/daemon.d.ts +30 -0
  66. package/packages/@monomind/cli/dist/src/orgrt/daemon.js +96 -7
  67. package/packages/@monomind/cli/dist/src/orgrt/forwarder.d.ts +10 -5
  68. package/packages/@monomind/cli/dist/src/orgrt/forwarder.js +105 -8
  69. package/packages/@monomind/cli/dist/src/orgrt/live.html +56 -0
  70. package/packages/@monomind/cli/dist/src/orgrt/provider.js +1 -0
  71. package/packages/@monomind/cli/dist/src/orgrt/scheduler.d.ts +13 -0
  72. package/packages/@monomind/cli/dist/src/orgrt/scheduler.js +48 -0
  73. package/packages/@monomind/cli/dist/src/orgrt/server.d.ts +8 -0
  74. package/packages/@monomind/cli/dist/src/orgrt/server.js +72 -0
  75. package/packages/@monomind/cli/dist/src/orgrt/test-loop.d.ts +12 -0
  76. package/packages/@monomind/cli/dist/src/orgrt/test-loop.js +108 -0
  77. package/packages/@monomind/cli/dist/src/output.js +12 -5
  78. package/packages/@monomind/cli/dist/src/parser.d.ts +32 -0
  79. package/packages/@monomind/cli/dist/src/parser.js +130 -5
  80. package/packages/@monomind/cli/dist/src/routing/embed-worker.js +13 -1
  81. package/packages/@monomind/cli/dist/src/routing/route-layer-factory.js +31 -0
  82. package/packages/@monomind/cli/dist/src/services/config-file-manager.d.ts +21 -0
  83. package/packages/@monomind/cli/dist/src/services/config-file-manager.js +60 -7
  84. package/packages/@monomind/cli/dist/src/services/crash-reporter.js +2 -1
  85. package/packages/@monomind/cli/dist/src/ui/dashboard.html +40 -40
  86. package/packages/@monomind/cli/dist/src/ui/orgs.html +110 -11
  87. package/packages/@monomind/cli/dist/src/ui/server.mjs +304 -133
  88. package/packages/@monomind/cli/dist/src/utils/input-guards.d.ts +9 -0
  89. package/packages/@monomind/cli/dist/src/utils/input-guards.js +39 -5
  90. package/packages/@monomind/cli/package.json +6 -2
@@ -18,6 +18,15 @@ export interface ValidateInputOpts {
18
18
  maxLength?: number;
19
19
  required?: boolean;
20
20
  }
21
+ /** Resolve symlinks so the containment check below can't be bypassed by a
22
+ * link that lexically resolves inside cwd but physically points outside it
23
+ * (e.g. `./link -> /etc`). `realpathSync` requires the full path to exist,
24
+ * which a not-yet-created file (or a symlinked *directory* holding a
25
+ * not-yet-created file) would fail — so walk up to the longest existing
26
+ * ancestor, realpath *that* (resolving any symlink components in it), and
27
+ * re-append the non-existent tail. Falls back to the lexical path only when
28
+ * no ancestor at all can be resolved. */
29
+ export declare function realOrResolved(p: string): string;
21
30
  /**
22
31
  * Validate and sanitize an input value.
23
32
  *
@@ -8,8 +8,9 @@
8
8
  *
9
9
  * @module @monomind/cli/utils/input-guards
10
10
  */
11
- import { resolve, isAbsolute } from 'node:path';
11
+ import { resolve, isAbsolute, relative, dirname, basename } from 'node:path';
12
12
  import { cwd } from 'node:process';
13
+ import { realpathSync } from 'node:fs';
13
14
  /**
14
15
  * Strip C0 and C1 control characters (U+0000–U+001F, U+007F–U+009F)
15
16
  * but preserve printable ASCII and extended Unicode.
@@ -52,6 +53,33 @@ function validateNumber(value, opts) {
52
53
  }
53
54
  return { valid: true, sanitized: String(parsed) };
54
55
  }
56
+ /** Resolve symlinks so the containment check below can't be bypassed by a
57
+ * link that lexically resolves inside cwd but physically points outside it
58
+ * (e.g. `./link -> /etc`). `realpathSync` requires the full path to exist,
59
+ * which a not-yet-created file (or a symlinked *directory* holding a
60
+ * not-yet-created file) would fail — so walk up to the longest existing
61
+ * ancestor, realpath *that* (resolving any symlink components in it), and
62
+ * re-append the non-existent tail. Falls back to the lexical path only when
63
+ * no ancestor at all can be resolved. */
64
+ export function realOrResolved(p) {
65
+ let cur = p;
66
+ const tail = [];
67
+ // eslint-disable-next-line no-constant-condition
68
+ for (let i = 0; i < 64; i++) {
69
+ try {
70
+ const real = realpathSync(cur);
71
+ return tail.length ? resolve(real, ...tail.reverse()) : real;
72
+ }
73
+ catch {
74
+ const parent = dirname(cur);
75
+ if (parent === cur)
76
+ return p; // reached filesystem root, nothing resolvable
77
+ tail.push(basename(cur));
78
+ cur = parent;
79
+ }
80
+ }
81
+ return p;
82
+ }
55
83
  function validatePath(value, opts) {
56
84
  if (typeof value !== 'string') {
57
85
  return { valid: false, error: 'Path must be a string' };
@@ -63,11 +91,17 @@ function validatePath(value, opts) {
63
91
  if (/(^|[\\/])\.\.($|[\\/])/.test(value)) {
64
92
  return { valid: false, error: 'Path must not contain directory traversal (..)' };
65
93
  }
66
- // Reject absolute paths that escape cwd
94
+ // Reject absolute paths that escape cwd. Uses path.relative (platform-correct
95
+ // separator handling — the previous `startsWith(cwd + '/')` hardcoded POSIX
96
+ // '/' and rejected every legitimate path on Windows) plus realpathSync on
97
+ // both sides so a symlink that's lexically inside cwd but physically points
98
+ // outside it is caught too. Mirrors the pattern in
99
+ // src/memory/memory-bridge.ts's getDbPath().
67
100
  if (isAbsolute(value)) {
68
- const cwdPath = cwd();
69
- const resolved = resolve(value);
70
- if (!resolved.startsWith(cwdPath + '/') && resolved !== cwdPath) {
101
+ const cwdPath = realOrResolved(cwd());
102
+ const resolved = realOrResolved(resolve(value));
103
+ const rel = relative(cwdPath, resolved);
104
+ if (rel.startsWith('..') || isAbsolute(rel)) {
71
105
  return { valid: false, error: 'Absolute path must not escape the current working directory' };
72
106
  }
73
107
  }
@@ -1,11 +1,14 @@
1
1
  {
2
2
  "name": "@monoes/monomindcli",
3
- "version": "2.0.2",
3
+ "version": "2.1.0",
4
4
  "type": "module",
5
5
  "description": "Monomind CLI - Enterprise AI agent orchestration with 60+ specialized agents, swarm coordination, MCP server, self-learning hooks, and vector memory for Claude Code",
6
6
  "main": "dist/src/index.js",
7
7
  "types": "dist/src/index.d.ts",
8
8
  "sideEffects": false,
9
+ "engines": {
10
+ "node": ">=20.0.0"
11
+ },
9
12
  "bin": {
10
13
  "cli": "./bin/cli.js",
11
14
  "monomind": "./bin/cli.js",
@@ -80,7 +83,8 @@
80
83
  "README.md"
81
84
  ],
82
85
  "scripts": {
83
- "build": "tsc --noEmitOnError false || true && mkdir -p dist/src/browser/dashboard && cp src/browser/dashboard/ui.html dist/src/browser/dashboard/ui.html",
86
+ "build": "tsc && mkdir -p dist/src/browser/dashboard && cp src/browser/dashboard/ui.html dist/src/browser/dashboard/ui.html && mkdir -p dist/src/orgrt && cp src/orgrt/live.html dist/src/orgrt/",
87
+ "build:loose": "tsc --noEmitOnError false || true && mkdir -p dist/src/browser/dashboard && cp src/browser/dashboard/ui.html dist/src/browser/dashboard/ui.html && mkdir -p dist/src/orgrt && cp src/orgrt/live.html dist/src/orgrt/",
84
88
  "test": "vitest run",
85
89
  "test:pattern-store": "npx tsx src/transfer/store/tests/standalone-test.ts",
86
90
  "prepublishOnly": "cp ../../../README.md ./README.md",