@monoes/monomindcli 2.7.12 → 2.7.14

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 (144) hide show
  1. package/.claude/commands/mastermind/createorg.md +2 -0
  2. package/.claude/commands/mastermind/okf-import.md +6 -1
  3. package/.claude/helpers/handlers/route-handler.cjs +40 -7
  4. package/.claude/helpers/handlers/session-restore-handler.cjs +24 -6
  5. package/.claude/skills/mastermind-createorg/SKILL.md +11 -4
  6. package/README.md +12 -6
  7. package/dist/src/capabilities/index.d.ts.map +1 -1
  8. package/dist/src/capabilities/index.js +17 -0
  9. package/dist/src/capabilities/index.js.map +1 -1
  10. package/dist/src/capabilities/types.d.ts +0 -11
  11. package/dist/src/capabilities/types.d.ts.map +1 -1
  12. package/dist/src/commands/doc.d.ts.map +1 -1
  13. package/dist/src/commands/doc.js +251 -8
  14. package/dist/src/commands/doc.js.map +1 -1
  15. package/dist/src/commands/doctor-project-checks.d.ts +25 -3
  16. package/dist/src/commands/doctor-project-checks.d.ts.map +1 -1
  17. package/dist/src/commands/doctor-project-checks.js +111 -8
  18. package/dist/src/commands/doctor-project-checks.js.map +1 -1
  19. package/dist/src/commands/doctor.d.ts.map +1 -1
  20. package/dist/src/commands/doctor.js +18 -2
  21. package/dist/src/commands/doctor.js.map +1 -1
  22. package/dist/src/commands/init.d.ts.map +1 -1
  23. package/dist/src/commands/init.js +32 -3
  24. package/dist/src/commands/init.js.map +1 -1
  25. package/dist/src/commands/monograph.d.ts.map +1 -1
  26. package/dist/src/commands/monograph.js +26 -3
  27. package/dist/src/commands/monograph.js.map +1 -1
  28. package/dist/src/commands/org.d.ts +15 -0
  29. package/dist/src/commands/org.d.ts.map +1 -1
  30. package/dist/src/commands/org.js +251 -6
  31. package/dist/src/commands/org.js.map +1 -1
  32. package/dist/src/init/claudemd-generator.d.ts.map +1 -1
  33. package/dist/src/init/claudemd-generator.js +4 -1
  34. package/dist/src/init/claudemd-generator.js.map +1 -1
  35. package/dist/src/knowledge/document-pipeline.d.ts +77 -4
  36. package/dist/src/knowledge/document-pipeline.d.ts.map +1 -1
  37. package/dist/src/knowledge/document-pipeline.js +261 -15
  38. package/dist/src/knowledge/document-pipeline.js.map +1 -1
  39. package/dist/src/knowledge/eval/corpus.d.ts +56 -0
  40. package/dist/src/knowledge/eval/corpus.d.ts.map +1 -0
  41. package/dist/src/knowledge/eval/corpus.js +126 -0
  42. package/dist/src/knowledge/eval/corpus.js.map +1 -0
  43. package/dist/src/knowledge/eval/golden-set.d.ts +62 -0
  44. package/dist/src/knowledge/eval/golden-set.d.ts.map +1 -0
  45. package/dist/src/knowledge/eval/golden-set.js +331 -0
  46. package/dist/src/knowledge/eval/golden-set.js.map +1 -0
  47. package/dist/src/knowledge/eval/harness.d.ts +221 -0
  48. package/dist/src/knowledge/eval/harness.d.ts.map +1 -0
  49. package/dist/src/knowledge/eval/harness.js +610 -0
  50. package/dist/src/knowledge/eval/harness.js.map +1 -0
  51. package/dist/src/knowledge/eval/metrics.d.ts +120 -0
  52. package/dist/src/knowledge/eval/metrics.d.ts.map +1 -0
  53. package/dist/src/knowledge/eval/metrics.js +243 -0
  54. package/dist/src/knowledge/eval/metrics.js.map +1 -0
  55. package/dist/src/knowledge/eval/model-presence.d.ts +48 -0
  56. package/dist/src/knowledge/eval/model-presence.d.ts.map +1 -0
  57. package/dist/src/knowledge/eval/model-presence.js +128 -0
  58. package/dist/src/knowledge/eval/model-presence.js.map +1 -0
  59. package/dist/src/knowledge/eval/network-guard.d.ts +46 -0
  60. package/dist/src/knowledge/eval/network-guard.d.ts.map +1 -0
  61. package/dist/src/knowledge/eval/network-guard.js +112 -0
  62. package/dist/src/knowledge/eval/network-guard.js.map +1 -0
  63. package/dist/src/knowledge/eval/retrievers.d.ts +65 -0
  64. package/dist/src/knowledge/eval/retrievers.d.ts.map +1 -0
  65. package/dist/src/knowledge/eval/retrievers.js +180 -0
  66. package/dist/src/knowledge/eval/retrievers.js.map +1 -0
  67. package/dist/src/knowledge/eval/signals.d.ts +111 -0
  68. package/dist/src/knowledge/eval/signals.d.ts.map +1 -0
  69. package/dist/src/knowledge/eval/signals.js +232 -0
  70. package/dist/src/knowledge/eval/signals.js.map +1 -0
  71. package/dist/src/mcp-tools/agent-tools.d.ts.map +1 -1
  72. package/dist/src/mcp-tools/agent-tools.js +7 -34
  73. package/dist/src/mcp-tools/agent-tools.js.map +1 -1
  74. package/dist/src/mcp-tools/knowledge-tools.d.ts.map +1 -1
  75. package/dist/src/mcp-tools/knowledge-tools.js +88 -6
  76. package/dist/src/mcp-tools/knowledge-tools.js.map +1 -1
  77. package/dist/src/mcp-tools/quality/coverage-analysis/prioritize-gaps.d.ts +44 -144
  78. package/dist/src/mcp-tools/quality/coverage-analysis/prioritize-gaps.d.ts.map +1 -1
  79. package/dist/src/mcp-tools/quality/security-compliance/detect-secrets.d.ts +30 -38
  80. package/dist/src/mcp-tools/quality/security-compliance/detect-secrets.d.ts.map +1 -1
  81. package/dist/src/mcp-tools/task-tools.d.ts +1 -0
  82. package/dist/src/mcp-tools/task-tools.d.ts.map +1 -1
  83. package/dist/src/mcp-tools/task-tools.js +76 -111
  84. package/dist/src/mcp-tools/task-tools.js.map +1 -1
  85. package/dist/src/mcp-tools/terminal-tools.d.ts.map +1 -1
  86. package/dist/src/mcp-tools/terminal-tools.js +3 -28
  87. package/dist/src/mcp-tools/terminal-tools.js.map +1 -1
  88. package/dist/src/memory/bm25-index.d.ts +137 -0
  89. package/dist/src/memory/bm25-index.d.ts.map +1 -0
  90. package/dist/src/memory/bm25-index.js +219 -0
  91. package/dist/src/memory/bm25-index.js.map +1 -0
  92. package/dist/src/memory/embedding-operations.d.ts.map +1 -1
  93. package/dist/src/memory/embedding-operations.js +8 -7
  94. package/dist/src/memory/embedding-operations.js.map +1 -1
  95. package/dist/src/memory/ewc-consolidation.d.ts.map +1 -1
  96. package/dist/src/memory/ewc-consolidation.js +2 -1
  97. package/dist/src/memory/ewc-consolidation.js.map +1 -1
  98. package/dist/src/memory/hnsw-operations.d.ts.map +1 -1
  99. package/dist/src/memory/hnsw-operations.js +4 -3
  100. package/dist/src/memory/hnsw-operations.js.map +1 -1
  101. package/dist/src/memory/intelligence.d.ts.map +1 -1
  102. package/dist/src/memory/intelligence.js +2 -1
  103. package/dist/src/memory/intelligence.js.map +1 -1
  104. package/dist/src/memory/memory-bridge.d.ts +34 -0
  105. package/dist/src/memory/memory-bridge.d.ts.map +1 -1
  106. package/dist/src/memory/memory-bridge.js +184 -26
  107. package/dist/src/memory/memory-bridge.js.map +1 -1
  108. package/dist/src/memory/memory-initializer.d.ts.map +1 -1
  109. package/dist/src/memory/memory-initializer.js +4 -3
  110. package/dist/src/memory/memory-initializer.js.map +1 -1
  111. package/dist/src/memory/memory-schema.d.ts +1 -1
  112. package/dist/src/memory/memory-schema.js +1 -1
  113. package/dist/src/memory/text-tokens.d.ts +10 -0
  114. package/dist/src/memory/text-tokens.d.ts.map +1 -0
  115. package/dist/src/memory/text-tokens.js +37 -0
  116. package/dist/src/memory/text-tokens.js.map +1 -0
  117. package/dist/src/orgrt/daemon.d.ts +16 -1
  118. package/dist/src/orgrt/daemon.d.ts.map +1 -1
  119. package/dist/src/orgrt/daemon.js +65 -9
  120. package/dist/src/orgrt/daemon.js.map +1 -1
  121. package/dist/src/orgrt/scheduler.d.ts +14 -1
  122. package/dist/src/orgrt/scheduler.d.ts.map +1 -1
  123. package/dist/src/orgrt/scheduler.js +51 -5
  124. package/dist/src/orgrt/scheduler.js.map +1 -1
  125. package/dist/src/orgrt/session.js +12 -0
  126. package/dist/src/orgrt/session.js.map +1 -1
  127. package/dist/src/orgrt/types.d.ts +61 -831
  128. package/dist/src/orgrt/types.d.ts.map +1 -1
  129. package/dist/src/orgrt/types.js +7 -1
  130. package/dist/src/orgrt/types.js.map +1 -1
  131. package/dist/src/services/crash-reporter.d.ts.map +1 -1
  132. package/dist/src/services/crash-reporter.js +7 -0
  133. package/dist/src/services/crash-reporter.js.map +1 -1
  134. package/dist/src/ui/dashboard.html +57 -25
  135. package/dist/src/ui/orgs.html +30 -13
  136. package/dist/src/ui/routes-monograph.mjs +929 -0
  137. package/dist/src/ui/routes-org.mjs +2513 -0
  138. package/dist/src/ui/server.mjs +726 -4117
  139. package/dist/src/utils/json-file.d.ts +11 -0
  140. package/dist/src/utils/json-file.d.ts.map +1 -1
  141. package/dist/src/utils/json-file.js +27 -0
  142. package/dist/src/utils/json-file.js.map +1 -1
  143. package/dist/tsconfig.tsbuildinfo +1 -1
  144. package/package.json +8 -6
@@ -28,6 +28,7 @@ Use orgs when the work is ongoing, not single-shot. A content team that ships 10
28
28
  `--name <slug>` — org identifier used with `monomind org run <name>` (derived from goal if omitted)
29
29
  `--roles <list>` — explicit role list (e.g. "boss, writer, reviewer, marketer")
30
30
  `--schedule <interval>` — daemon schedule for `monomind org serve` to pick up, e.g. `"30m"`, `"2h"`, `"1440m"` for daily (omit for a manual, one-shot org)
31
+ `--max-run <interval>` — wall-clock bound on ONE scheduled cycle, same format (e.g. `"90m"`). Defaults to the schedule interval. A cycle hitting this bound is force-stopped with a 60s drain, so size it to how long the work takes, not how often you want it run.
31
32
  `--auto` — skip confirmation, create immediately
32
33
  `--confirm` — always ask before saving (default)
33
34
  `--delete <name>` — delete a saved org and all associated data files (`monomind org delete <name> --yes`)
@@ -46,6 +47,7 @@ Parse `$ARGUMENTS` for:
46
47
  - `--confirm` flag → mode = confirm
47
48
  - `--name <name>` → org_name = <name> (must match `^[a-z0-9][a-z0-9-]{0,63}$`; if omitted, derived from goal)
48
49
  - `--roles <desc>` → roles_desc = <desc> (explicit role list, e.g. "boss, writer, reviewer, marketer")
50
+ - `--max-run <interval>` → max_run = <interval>, same daemon format as `--schedule`
49
51
  - `--schedule <interval>` → schedule = <interval>, daemon format only: `"<N>s"`, `"<N>m"`, or `"<N>h"` (e.g. `"30m"`, `"2h"`) — this is passed straight into `parseSchedule()` in `orgrt/scheduler.ts`, whose regex `^(\d+)\s*(s|m|h)$` rejects anything else (e.g. `"every 30 minutes"`, `"daily"`) and silently leaves the org unscheduled
50
52
  - `--delete <name>` → delete_mode = true, delete_name = <name>
51
53
  - `--list` flag → list_mode = true
@@ -2,6 +2,7 @@
2
2
 
3
3
  Parse `$ARGUMENTS` for:
4
4
  - `--scope <name>` or `-s <name>` → knowledge scope (default: `shared`)
5
+ - `--global` or `-g` → import into the personal cross-project global brain
5
6
  - Remaining positional arg → bundle directory path (REQUIRED)
6
7
 
7
8
  If no bundle directory provided, ask: "Which directory contains the OKF bundle to import?"
@@ -9,7 +10,11 @@ If no bundle directory provided, ask: "Which directory contains the OKF bundle t
9
10
  Run the import:
10
11
 
11
12
  ```bash
12
- npx monomind doc ingest "<bundle_dir>" -s "<scope>"
13
+ npx monomind doc import "<bundle_dir>" -s "<scope>"
13
14
  ```
14
15
 
16
+ Use `doc import`, never `doc ingest` — plain ingest would index the bundle's own
17
+ `index.md` manifest as if it were knowledge. Add `--global` when restoring a personal
18
+ brain exported with `doc export --global`.
19
+
15
20
  After completion, report files processed, chunks indexed, and any errors. If the bundle directory doesn't exist or contains no `.md` files, say so.
@@ -343,8 +343,28 @@ module.exports = {
343
343
  return t.length >= 3 && !_SB_FILLER.has(t);
344
344
  });
345
345
  if (_sbSubstantive.length >= 2 && sbPrompt.charAt(0) !== '/') {
346
- var sbKnowledgeDir = path.join(CWD, '.monomind', 'knowledge');
347
- if (fs.existsSync(path.join(sbKnowledgeDir, 'chunks.jsonl'))) {
346
+ // Gate on ANY knowledge, resolved from the nearest enclosing project.
347
+ //
348
+ // This used to require CWD/.monomind/knowledge/chunks.jsonl, which is
349
+ // written ONLY by the monograph god-node injector — so a user who ran
350
+ // `doc ingest ./docs` and populated the real document store (the
351
+ // corpus the warm endpoint below actually serves) got zero injection
352
+ // unless they also happened to have a monograph DB. doc-metadata.jsonl
353
+ // is the marker for that store; either one means there is knowledge
354
+ // worth searching. The upward walk matches the CLI, which keys the
355
+ // store to the project root, so a session started in a package
356
+ // subdirectory still finds its brain.
357
+ var sbRoot = null;
358
+ var sbProbe = CWD;
359
+ for (var _sbUp = 0; _sbUp < 8; _sbUp++) {
360
+ var _sbK = path.join(sbProbe, '.monomind', 'knowledge');
361
+ if (fs.existsSync(path.join(_sbK, 'chunks.jsonl')) || fs.existsSync(path.join(_sbK, 'doc-metadata.jsonl'))) { sbRoot = sbProbe; break; }
362
+ var _sbParent = path.dirname(sbProbe);
363
+ if (_sbParent === sbProbe) break;
364
+ sbProbe = _sbParent;
365
+ }
366
+ var sbKnowledgeDir = sbRoot && path.join(sbRoot, '.monomind', 'knowledge');
367
+ if (sbRoot) {
348
368
  var sbHits = null;
349
369
  var sbMethod = 'keyword';
350
370
  // Which corpus answered. The two paths are NOT the same corpus and
@@ -368,13 +388,26 @@ module.exports = {
368
388
  // sbAuth is the local dashboard session value from .monomind, same one
369
389
  // every other hook event POST attaches — not a checked-in secret).
370
390
  try {
391
+ // CWD first, then the resolved project root. CWD-first keeps an
392
+ // existing working pairing byte-identical; the root fallback is
393
+ // what stops a subdirectory session from reading no token at all,
394
+ // silently failing auth and reporting keyword where the warm
395
+ // server would have answered semantic.
371
396
  var sbCtrlUrl = 'http://localhost:4242';
372
- try {
373
- var sbCtl = JSON.parse(fs.readFileSync(path.join(CWD, '.monomind', 'control.json'), 'utf-8'));
374
- if (sbCtl.url) sbCtrlUrl = sbCtl.url;
375
- } catch (_) {}
397
+ var _sbCfgDirs = sbRoot && sbRoot !== CWD ? [CWD, sbRoot] : [CWD];
398
+ for (var _sbCi = 0; _sbCi < _sbCfgDirs.length; _sbCi++) {
399
+ try {
400
+ var sbCtl = JSON.parse(fs.readFileSync(path.join(_sbCfgDirs[_sbCi], '.monomind', 'control.json'), 'utf-8'));
401
+ if (sbCtl.url) { sbCtrlUrl = sbCtl.url; break; }
402
+ } catch (_) {}
403
+ }
376
404
  var sbAuth = '';
377
- try { sbAuth = fs.readFileSync(path.join(CWD, '.monomind', 'dashboard-token'), 'utf-8').trim(); } catch (_) {}
405
+ for (var _sbAi = 0; _sbAi < _sbCfgDirs.length; _sbAi++) {
406
+ try {
407
+ sbAuth = fs.readFileSync(path.join(_sbCfgDirs[_sbAi], '.monomind', 'dashboard-token'), 'utf-8').trim();
408
+ if (sbAuth) break;
409
+ } catch (_) {}
410
+ }
378
411
  var sbResp = await fetch(sbCtrlUrl + '/api/knowledge/search', {
379
412
  method: 'POST',
380
413
  headers: { 'Content-Type': 'application/json', 'x-monomind-token': sbAuth },
@@ -284,7 +284,6 @@ module.exports = {
284
284
  { factory: 'createDDDWorker', file: 'worker-ddd.js', out: 'ddd-progress.json', always: true },
285
285
  { factory: 'createMapWorker', file: 'worker-map.js', out: 'codebase-map.json' },
286
286
  { factory: 'createAuditWorker', file: 'worker-audit.js', out: 'security-audit.json' },
287
- { factory: 'createOptimizeWorker', file: 'worker-optimize.js', out: 'performance.json' },
288
287
  { factory: 'createConsolidateWorker', file: 'worker-consolidate.js', out: 'consolidation.json' },
289
288
  ];
290
289
  var _hooksDistDir = path.join(CWD, 'packages', '@monomind', 'hooks', 'dist', 'workers');
@@ -351,10 +350,29 @@ module.exports = {
351
350
  // (c) a 30-min rate limit. Detached+unref spawn (same pattern as the
352
351
  // helper-heal block below) — session start never waits on model loading.
353
352
  try {
354
- var _kbMetaPath = path.join(CWD, '.monomind', 'knowledge', 'doc-metadata.jsonl');
355
- if (fs.existsSync(_kbMetaPath)) {
353
+ // Nearest enclosing knowledge base, CWD first. The CLI keys the store to
354
+ // the PROJECT ROOT, so a session started in a package subdirectory finds
355
+ // no doc-metadata.jsonl under CWD and would silently stop re-ingesting
356
+ // forever. Everything below (mtime gate, marker, document scan, spawn
357
+ // cwd) uses this one resolved root, so the check and the ingest can never
358
+ // disagree about which brain they mean.
359
+ //
360
+ // A stat walk, not `git rev-parse` (monograph.cjs's pattern): this runs on
361
+ // EVERY session start, including the majority with no knowledge base at
362
+ // all, and spawning git there costs a subprocess per session and writes
363
+ // "not a git repository" to stderr.
364
+ var _kbRoot = null;
365
+ var _kbProbe = CWD;
366
+ for (var _kbUp = 0; _kbUp < 8; _kbUp++) {
367
+ if (fs.existsSync(path.join(_kbProbe, '.monomind', 'knowledge', 'doc-metadata.jsonl'))) { _kbRoot = _kbProbe; break; }
368
+ var _kbParent = path.dirname(_kbProbe);
369
+ if (_kbParent === _kbProbe) break;
370
+ _kbProbe = _kbParent;
371
+ }
372
+ var _kbMetaPath = _kbRoot && path.join(_kbRoot, '.monomind', 'knowledge', 'doc-metadata.jsonl');
373
+ if (_kbMetaPath && fs.existsSync(_kbMetaPath)) {
356
374
  var _kbMetaMtime = fs.statSync(_kbMetaPath).mtimeMs;
357
- var _kbMarkerPath = path.join(CWD, '.monomind', 'knowledge', 'reindex-check.json');
375
+ var _kbMarkerPath = path.join(_kbRoot, '.monomind', 'knowledge', 'reindex-check.json');
358
376
  var _kbLastCheck = 0;
359
377
  try { _kbLastCheck = JSON.parse(fs.readFileSync(_kbMarkerPath, 'utf-8')).ts || 0; } catch (_) {}
360
378
  if (Date.now() - _kbLastCheck > 30 * 60 * 1000) {
@@ -389,11 +407,11 @@ module.exports = {
389
407
  if (_DOC_EXT[ext] && st.mtimeMs > _kbMetaMtime) _kbDirty = true;
390
408
  }
391
409
  };
392
- _kbWalk(CWD, 0);
410
+ _kbWalk(_kbRoot, 0);
393
411
  if (_kbDirty) {
394
412
  var _kbSpawn = require('child_process').spawn;
395
413
  var _kbChild = _kbSpawn('npx', ['-y', 'monomind@latest', 'doc', 'ingest', '.'], {
396
- cwd: CWD,
414
+ cwd: _kbRoot,
397
415
  detached: true,
398
416
  stdio: 'ignore',
399
417
  env: process.env,
@@ -20,7 +20,9 @@ Org Runtime v2 (`packages/@monomind/cli/src/orgrt/`) is a Node daemon, not a Tas
20
20
  - `org_name`: desired name for the org (slug, e.g. `content-team`); constrained to `[a-z0-9-]`
21
21
  - `roles_desc`: optional explicit role list from user (e.g. "boss, content writer, reviewer, marketer, designer")
22
22
  - `schedule`: optional schedule string in daemon format — `"<N>s"`, `"<N>m"`, or `"<N>h"` (e.g. `"30m"`, `"2h"`). When provided, the org is picked up by `monomind org serve` on its own interval; omit for a one-shot `monomind org run`.
23
+ - `max_run`: optional, same format as `schedule`. See the run_config note below — always set it for a scheduled org.
23
24
  - `budget_tokens`: optional total token budget for the org run (default 1,000,000 — split evenly across roles by the daemon)
25
+ - `max_run`: optional wall-clock bound on ONE scheduled cycle, same format as `schedule` (`"90m"`, `"3h"`). Defaults to the schedule interval. Set it whenever the org is scheduled: a cycle that hits this bound is force-stopped with only a 60s drain, so it should exceed how long the work actually takes, not how often you want it to run. Overrunning the interval is safe — the missed tick fires the moment the run ends rather than waiting for the next boundary.
24
26
  - `mode`: auto | confirm
25
27
  - `session_id`: session ID passed by command wrapper (snake_case input)
26
28
  - `caller`: command | master
@@ -99,7 +101,8 @@ Produce an org config object matching `OrgDefSchema` exactly:
99
101
  "max_concurrent_agents": 4,
100
102
  "budget_tokens": "<budget_tokens input, or 1000000 default>",
101
103
  "memory_namespace": "org:<org_name>",
102
- "max_turns_per_message": 30
104
+ "max_turns_per_message": 30,
105
+ "max_run": "<how long ONE scheduled cycle may run, e.g. '90m'. Omit only for a one-shot org (no schedule).>"
103
106
  },
104
107
  "roles": [
105
108
  {
@@ -142,6 +145,7 @@ ROLES (N roles — exactly one boss, every reports_to resolves to a real role i
142
145
  SETTINGS
143
146
  ────────
144
147
  Budget: <run_config.budget_tokens> tokens (split evenly across N roles)
148
+ Max run: <run_config.max_run, or "schedule interval" when unset>
145
149
  Memory namespace: org:<org_name>
146
150
  Schedule: <"every <N> <unit>" if schedule set; otherwise "manual — run with `monomind org run <org_name>`">
147
151
 
@@ -166,17 +170,20 @@ Write the confirmed org config as JSON using `jq` to guarantee valid encoding:
166
170
 
167
171
  ```bash
168
172
  # Set shell variables from the confirmed plan before running this block:
169
- # goal, schedule_val ("" if none), budget_tokens_val, roles_json (JSON array matching the role shape above)
173
+ # goal, schedule_val ("" if none), budget_tokens_val, max_run_val ("" if none),
174
+ # roles_json (JSON array matching the role shape above)
170
175
  jq -n \
171
176
  --arg name "$org_name" \
172
177
  --arg goal "$goal" \
173
178
  --arg schedule "${schedule_val:-}" \
174
179
  --argjson budget_tokens "${budget_tokens_val:-1000000}" \
180
+ --arg max_run "${max_run_val:-}" \
175
181
  --argjson roles "$roles_json" \
176
182
  '{name:$name,goal:$goal,status:"stopped",
177
183
  schedule:(if $schedule=="" then null else $schedule end),
178
- run_config:{max_concurrent_agents:4,budget_tokens:$budget_tokens,
179
- memory_namespace:("org:"+$name),max_turns_per_message:30},
184
+ run_config:({max_concurrent_agents:4,budget_tokens:$budget_tokens,
185
+ memory_namespace:("org:"+$name),max_turns_per_message:30}
186
+ + (if $max_run=="" then {} else {max_run:$max_run} end)),
180
187
  roles:$roles}' \
181
188
  > "${orgJson}.tmp" && mv "${orgJson}.tmp" "$orgJson"
182
189
  ```
package/README.md CHANGED
@@ -294,7 +294,7 @@ flowchart LR
294
294
  DB -->|next session| CE
295
295
  ```
296
296
 
297
- **15 background workers** run at session start (staleness-gated, refreshed when older than 6 hours): `security` · `health` · `swarm` · `learning` · `patterns` · `git` · `performance` and more.
297
+ **8 on-demand workers** run at session start (staleness-gated, refreshed when older than 6 hours): `health` · `ddd` · `security` · `cache` · `progress` · `map` · `audit` · `consolidate`.
298
298
 
299
299
  ---
300
300
 
@@ -357,10 +357,16 @@ Everything runs from inside Claude Code via slash commands. Here's the highlight
357
357
 
358
358
  | Package | npm | Purpose |
359
359
  |---|---|---|
360
- | `monomind` | [![npm](https://img.shields.io/npm/v/monomind?style=flat-square&color=00D2AA)](https://www.npmjs.com/package/monomind) | Umbrella — **install this one** |
361
- | `@monoes/monomindcli` | [![npm](https://img.shields.io/npm/v/@monoes/monomindcli?style=flat-square&color=4F46E5)](https://www.npmjs.com/package/@monoes/monomindcli) | CLI engine (32 commands) |
360
+ | `monomind` | [![npm](https://img.shields.io/npm/v/monomind?style=flat-square&color=00D2AA)](https://www.npmjs.com/package/monomind) | Umbrella shim — **install this one** |
361
+ | `@monoes/monomindcli` | [![npm](https://img.shields.io/npm/v/@monoes/monomindcli?style=flat-square&color=4F46E5)](https://www.npmjs.com/package/@monoes/monomindcli) | CLI engine (32 commands, MCP server) |
362
+ | `@monoes/monograph` | [![npm](https://img.shields.io/npm/v/@monoes/monograph?style=flat-square&color=F59E0B)](https://www.npmjs.com/package/@monoes/monograph) | Code knowledge graph (tree-sitter + SQLite) |
363
+ | `@monoes/memory` | [![npm](https://img.shields.io/npm/v/@monoes/memory?style=flat-square&color=8B5CF6)](https://www.npmjs.com/package/@monoes/memory) | Persistent memory backends (SQLite + vectors) |
364
+ | `@monoes/hooks` | [![npm](https://img.shields.io/npm/v/@monoes/hooks?style=flat-square&color=10B981)](https://www.npmjs.com/package/@monoes/hooks) | Hook registry + 8 on-demand workers |
365
+ | `@monoes/mcp` | [![npm](https://img.shields.io/npm/v/@monoes/mcp?style=flat-square&color=3B82F6)](https://www.npmjs.com/package/@monoes/mcp) | MCP server framework (stdio/HTTP/WebSocket) |
366
+ | `@monoes/routing` | [![npm](https://img.shields.io/npm/v/@monoes/routing?style=flat-square&color=F97316)](https://www.npmjs.com/package/@monoes/routing) | Semantic task-to-agent routing |
367
+ | `@monoes/monobrowse` | [![npm](https://img.shields.io/npm/v/@monoes/monobrowse?style=flat-square&color=06B6D4)](https://www.npmjs.com/package/@monoes/monobrowse) | Browser automation via CDP |
368
+ | `@monoes/monodesign` | [![npm](https://img.shields.io/npm/v/@monoes/monodesign?style=flat-square&color=EC4899)](https://www.npmjs.com/package/@monoes/monodesign) | Frontend design intelligence |
362
369
  | `monofence-ai` | [![npm](https://img.shields.io/npm/v/monofence-ai?style=flat-square&color=EF4444)](https://www.npmjs.com/package/monofence-ai) | AI manipulation defence |
363
- | `@monoes/monograph` | [![npm](https://img.shields.io/npm/v/@monoes/monograph?style=flat-square&color=F59E0B)](https://www.npmjs.com/package/@monoes/monograph) | Code knowledge graph |
364
370
 
365
371
  ---
366
372
 
@@ -398,8 +404,8 @@ graph TD
398
404
  ## Resources
399
405
 
400
406
  - 📖 [Full Documentation](https://monoes.github.io/monomind/)
401
- - 🖥️ [CLI Command Reference](https://github.com/monoes/monomind/blob/main/docs/commands/cli-reference.md)
402
- - 🏢 [Org Runtime v2 Architecture](https://github.com/monoes/monomind/blob/main/docs/concepts/org-runtime.md)
407
+ - 🖥️ [CLI Command Reference](https://github.com/monoes/monomind/blob/main/doc/commands/cli-reference.md)
408
+ - 🏢 [Org Runtime v2 Architecture](https://github.com/monoes/monomind/blob/main/doc/concepts/org-runtime.md)
403
409
  - 🏢 [Autonomous Orgs](https://monoes.github.io/monomind/#orgs)
404
410
  - ⚡ [Mastermind Reference](https://monoes.github.io/monomind/#mastermind)
405
411
  - 📋 [All Slash Commands](https://monoes.github.io/monomind/#slash)
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/capabilities/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AASjD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/capabilities/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AA0BjD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC"}
@@ -9,6 +9,23 @@ export { CapabilityManager } from './manager.js';
9
9
  // capabilities/ is not in package.json's `exports` map and src/index.ts never
10
10
  // re-exported it. If incremental re-scanning is wanted later, wire it to the
11
11
  // scanner at the same time rather than landing an unused class again.
12
+ //
13
+ // `EnrichmentPipeline` (./enrichment.ts) and the `enrich` command were never
14
+ // merged, for the same reason plus one worse one. Its only public entry point
15
+ // was `commands/enrich.ts`, which called loadState/pause/resume/getSummary but
16
+ // never `runTier()` — the one method that does the actual enriching had zero
17
+ // callers, so `enrich --status` would have reported progress on a pipeline
18
+ // nothing ever ran. On top of that, the branch tip did not compile: the final
19
+ // review-fix commit redeclared `const raw` in `loadState()` (TS2451). The
20
+ // T0/T1/T2 vocabulary it defined (`EnrichmentTier`/`EnrichmentStatus`/
21
+ // `EnrichmentState`/`EnrichResult` and the optional `enrich()` hook on
22
+ // `CapabilityModule`) was removed from types.ts at the same time as this note:
23
+ // no capability module implemented the hook and nothing constructed the state,
24
+ // so the types described a runtime that did not exist. Reintroduce them
25
+ // together with a caller, not ahead of one.
26
+ // Branch of record: feat/universal-second-brain (orphaned — shares no history
27
+ // with main after the rewrite, so it can never be merged; read it with
28
+ // `git show feat/universal-second-brain:<path>`).
12
29
  export { codeCapability } from './cap-code.js';
13
30
  export { documentsCapability } from './cap-documents.js';
14
31
  export { mediaCapability } from './cap-media.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/capabilities/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,+EAA+E;AAC/E,4EAA4E;AAC5E,gFAAgF;AAChF,gFAAgF;AAChF,2EAA2E;AAC3E,8EAA8E;AAC9E,6EAA6E;AAC7E,sEAAsE;AACtE,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/capabilities/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,+EAA+E;AAC/E,4EAA4E;AAC5E,gFAAgF;AAChF,gFAAgF;AAChF,2EAA2E;AAC3E,8EAA8E;AAC9E,6EAA6E;AAC7E,sEAAsE;AACtE,EAAE;AACF,6EAA6E;AAC7E,8EAA8E;AAC9E,+EAA+E;AAC/E,6EAA6E;AAC7E,2EAA2E;AAC3E,8EAA8E;AAC9E,0EAA0E;AAC1E,uEAAuE;AACvE,uEAAuE;AACvE,+EAA+E;AAC/E,+EAA+E;AAC/E,wEAAwE;AACxE,4CAA4C;AAC5C,8EAA8E;AAC9E,uEAAuE;AACvE,kDAAkD;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC"}
@@ -1,5 +1,3 @@
1
- export type EnrichmentTier = 't0' | 't1' | 't2';
2
- export type EnrichmentStatus = 'pending' | 'queued' | 'done' | 'skipped' | 'failed';
3
1
  export type CapabilityName = 'code' | 'documents' | 'media' | 'data' | 'graph' | 'timeline';
4
2
  export interface FileEntry {
5
3
  path: string;
@@ -30,11 +28,6 @@ export interface IndexResult {
30
28
  skipped: number;
31
29
  errors: string[];
32
30
  }
33
- export interface EnrichResult {
34
- enriched: number;
35
- skipped: number;
36
- errors: string[];
37
- }
38
31
  export interface SearchResult {
39
32
  path: string;
40
33
  score: number;
@@ -49,15 +42,11 @@ export interface HealthCheck {
49
42
  hint?: string;
50
43
  fix?: string;
51
44
  }
52
- export interface EnrichmentState {
53
- [relativePath: string]: Record<EnrichmentTier, EnrichmentStatus>;
54
- }
55
45
  export interface CapabilityModule {
56
46
  name: CapabilityName;
57
47
  detect(scan: DirectoryScan): number;
58
48
  activate(rootDir: string): Promise<void>;
59
49
  index(files: FileEntry[]): Promise<IndexResult>;
60
- enrich?(files: FileEntry[]): Promise<EnrichResult>;
61
50
  search?(query: string, limit?: number): Promise<SearchResult[]>;
62
51
  healthChecks?(): Promise<HealthCheck[]>;
63
52
  }
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/capabilities/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAChD,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;AACpF,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,WAAW,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,CAAC;AAE5F,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,IAAI,CAAC;IACf,OAAO,EAAE,IAAI,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,OAAO,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC;IACtD,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,WAAY,SAAQ,aAAa;IAChD,OAAO,EAAE,CAAC,CAAC;CACZ;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,cAAc,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,eAAe;IAC9B,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAAC,cAAc,EAAE,gBAAgB,CAAC,CAAC;CAClE;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,cAAc,CAAC;IACrB,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,KAAK,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAChD,MAAM,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACnD,MAAM,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAChE,YAAY,CAAC,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;CACzC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/capabilities/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,WAAW,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,UAAU,CAAC;AAE5F,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,IAAI,CAAC;IACf,OAAO,EAAE,IAAI,CAAC;CACf;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,GAAG,EAAE,OAAO,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC,cAAc,EAAE,eAAe,CAAC,CAAC;IACtD,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC1C;AAED,MAAM,WAAW,WAAY,SAAQ,aAAa;IAChD,OAAO,EAAE,CAAC,CAAC;CACZ;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,cAAc,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,cAAc,CAAC;IACrB,MAAM,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACzC,KAAK,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAChD,MAAM,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAAC;IAChE,YAAY,CAAC,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;CACzC"}
@@ -1 +1 @@
1
- {"version":3,"file":"doc.d.ts","sourceRoot":"","sources":["../../../src/commands/doc.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAiC,MAAM,aAAa,CAAC;AA4P1E,eAAO,MAAM,UAAU,EAAE,OA2BxB,CAAC;eAEa,UAAU"}
1
+ {"version":3,"file":"doc.d.ts","sourceRoot":"","sources":["../../../src/commands/doc.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,OAAO,EAAiC,MAAM,aAAa,CAAC;AAqf1E,eAAO,MAAM,UAAU,EAAE,OAiCxB,CAAC;eAEa,UAAU"}