monomind 1.12.0 → 1.14.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 (43) hide show
  1. package/.claude/agents/generated/churn-analyst.md +53 -0
  2. package/.claude/agents/generated/code-reviewer.md +55 -0
  3. package/.claude/agents/generated/code-validator.md +57 -0
  4. package/.claude/agents/generated/complexity-scanner.md +56 -0
  5. package/.claude/agents/generated/devbot-orchestrator.md +58 -0
  6. package/.claude/agents/generated/devbot-planner.md +63 -0
  7. package/.claude/agents/generated/impact-assessor.md +54 -0
  8. package/.claude/commands/mastermind/master.md +88 -24
  9. package/.claude/helpers/control-start.cjs +60 -1
  10. package/.claude/helpers/event-logger.cjs +43 -2
  11. package/.claude/helpers/handlers/capture-handler.cjs +336 -0
  12. package/.claude/helpers/handlers/route-handler.cjs +20 -13
  13. package/.claude/helpers/handlers/session-restore-handler.cjs +14 -8
  14. package/.claude/helpers/hook-handler.cjs +57 -1
  15. package/.claude/helpers/intelligence.cjs +129 -57
  16. package/.claude/helpers/memory-palace.cjs +461 -0
  17. package/.claude/helpers/memory.cjs +134 -15
  18. package/.claude/helpers/metrics-db.mjs +87 -0
  19. package/.claude/helpers/router.cjs +296 -41
  20. package/.claude/helpers/session.cjs +107 -32
  21. package/.claude/helpers/statusline.cjs +138 -2
  22. package/.claude/helpers/toggle-statusline.cjs +73 -0
  23. package/.claude/helpers/token-tracker.cjs +934 -0
  24. package/.claude/helpers/utils/monograph.cjs +39 -4
  25. package/.claude/helpers/utils/telemetry.cjs +3 -3
  26. package/.claude/settings.json +10 -0
  27. package/.claude/skills/mastermind/createorg.md +227 -16
  28. package/.claude/skills/mastermind/idea.md +15 -3
  29. package/.claude/skills/mastermind/runorg.md +2 -1
  30. package/package.json +1 -1
  31. package/packages/@monomind/cli/dist/src/commands/doctor.js +96 -4
  32. package/packages/@monomind/cli/dist/src/commands/index.js +2 -0
  33. package/packages/@monomind/cli/dist/src/commands/org.d.ts +4 -0
  34. package/packages/@monomind/cli/dist/src/commands/org.js +93 -0
  35. package/packages/@monomind/cli/dist/src/mcp-tools/memory-tools.js +6 -6
  36. package/packages/@monomind/cli/dist/src/mcp-tools/monograph-tools.js +329 -37
  37. package/packages/@monomind/cli/dist/src/mcp-tools/session-tools.js +9 -10
  38. package/packages/@monomind/cli/dist/src/mcp-tools/task-tools.js +7 -8
  39. package/packages/@monomind/cli/dist/src/mcp-tools/types.d.ts +1 -0
  40. package/packages/@monomind/cli/dist/src/mcp-tools/types.js +49 -0
  41. package/packages/@monomind/cli/dist/src/services/worker-daemon.js +295 -5
  42. package/packages/@monomind/cli/dist/src/transfer/serialization/cfp.js +1 -1
  43. package/packages/@monomind/cli/package.json +1 -1
@@ -0,0 +1,4 @@
1
+ import type { Command } from '../types.js';
2
+ declare const orgCommand: Command;
3
+ export default orgCommand;
4
+ //# sourceMappingURL=org.d.ts.map
@@ -0,0 +1,93 @@
1
+ import { output } from '../output.js';
2
+ import { existsSync, unlinkSync, rmSync, readdirSync } from 'fs';
3
+ import { join, resolve } from 'path';
4
+
5
+ const orgCommand = {
6
+ name: 'org',
7
+ description: 'Manage monomind organisations',
8
+ subcommands: ['delete', 'list'],
9
+ usage: 'monomind org <subcommand> [options]',
10
+ examples: [
11
+ 'monomind org list',
12
+ 'monomind org delete my-org',
13
+ 'monomind org delete my-org --yes',
14
+ ],
15
+
16
+ async execute(args, context) {
17
+ const sub = args[0];
18
+
19
+ if (!sub || sub === 'help') {
20
+ output.info('Usage: monomind org <subcommand>');
21
+ output.info('');
22
+ output.info('Subcommands:');
23
+ output.info(' list List all orgs in the current project');
24
+ output.info(' delete <name> Delete an org and all its data');
25
+ return { success: true };
26
+ }
27
+
28
+ if (sub === 'list') {
29
+ const cwd = context?.projectPath || process.cwd();
30
+ const orgsDir = join(cwd, '.monomind', 'orgs');
31
+ if (!existsSync(orgsDir)) {
32
+ output.info('No orgs directory found. Create an org first with /mastermind:createorg');
33
+ return { success: true };
34
+ }
35
+ const ignore = ['-state','-goals','-threads','-activity','-approvals','-members','-secrets','-budgets','-routines','-issues','-projects','-workspaces','-worktrees','-environments','-plugins','-adapters','-join-requests','-bootstrap','-project-workspaces','-approval-comments','-skills'];
36
+ const configs = readdirSync(orgsDir)
37
+ .filter(f => f.endsWith('.json') && !ignore.some(s => f.includes(s)));
38
+ if (!configs.length) { output.info('No orgs found.'); return { success: true }; }
39
+ output.info(`Found ${configs.length} org(s):`);
40
+ for (const f of configs) output.info(` • ${f.replace('.json', '')}`);
41
+ return { success: true };
42
+ }
43
+
44
+ if (sub === 'delete') {
45
+ const orgName = args[1];
46
+ if (!orgName) {
47
+ output.error('Usage: monomind org delete <name>');
48
+ return { success: false, error: 'org name required' };
49
+ }
50
+ if (!/^[a-z0-9][a-z0-9_-]*$/i.test(orgName)) {
51
+ output.error(`Invalid org name: ${orgName}`);
52
+ return { success: false, error: 'invalid org name' };
53
+ }
54
+
55
+ const confirmed = args.includes('--yes') || args.includes('-y');
56
+ if (!confirmed) {
57
+ output.warn(`This will permanently delete org "${orgName}" and all its data.`);
58
+ output.warn('Pass --yes to confirm.');
59
+ return { success: false, error: 'confirmation required' };
60
+ }
61
+
62
+ const cwd = resolve(context?.projectPath || process.cwd());
63
+ const orgsDir = join(cwd, '.monomind', 'orgs');
64
+ const configFile = join(orgsDir, `${orgName}.json`);
65
+ if (!existsSync(configFile)) {
66
+ output.error(`Org not found: ${orgName}`);
67
+ return { success: false, error: 'org not found' };
68
+ }
69
+
70
+ const suffixes = ['','-state','-goals','-routines','-approvals','-activity','-issues','-members','-projects','-workspaces','-worktrees','-environments','-plugins','-adapters','-budgets','-threads','-secrets','-join-requests','-bootstrap','-project-workspaces','-approval-comments','-skills'];
71
+ let removed = 0;
72
+ for (const suf of suffixes) {
73
+ for (const ext of ['.json', '.jsonl']) {
74
+ const f = join(orgsDir, `${orgName}${suf}${ext}`);
75
+ try { if (existsSync(f)) { unlinkSync(f); removed++; } } catch (_) {}
76
+ }
77
+ }
78
+ try { unlinkSync(join(orgsDir, '.stops', `${orgName}.stop`)); } catch (_) {}
79
+ const orgSubDir = join(orgsDir, orgName);
80
+ try { if (existsSync(orgSubDir)) rmSync(orgSubDir, { recursive: true, force: true }); } catch (_) {}
81
+ try { unlinkSync(join(cwd, '.monomind', 'loops', `${orgName}.md`)); } catch (_) {}
82
+ try { unlinkSync(join(cwd, '.monomind', 'orgs', `${orgName}-run.md`)); } catch (_) {}
83
+
84
+ output.success(`Org "${orgName}" deleted (${removed} file(s) removed).`);
85
+ return { success: true };
86
+ }
87
+
88
+ output.error(`Unknown subcommand: ${sub}. Run "monomind org help" for usage.`);
89
+ return { success: false, error: `unknown subcommand: ${sub}` };
90
+ },
91
+ };
92
+
93
+ export default orgCommand;
@@ -11,19 +11,19 @@
11
11
  */
12
12
  import { existsSync, mkdirSync, readFileSync, renameSync, statSync, unlinkSync, writeFileSync } from 'fs';
13
13
  import { join } from 'path';
14
- import { getProjectCwd } from './types.js';
15
- // Paths
16
- const MEMORY_DIR = '.monomind/memory';
14
+ import { getMonomindDataRoot } from './types.js';
15
+ // Paths — relative to the git-safe data root
16
+ const MEMORY_SUBDIR = 'memory';
17
17
  const LEGACY_MEMORY_FILE = 'store.json';
18
18
  const MIGRATION_MARKER = '.migrated-to-sqlite';
19
19
  function getMemoryDir() {
20
- return join(getProjectCwd(), MEMORY_DIR);
20
+ return join(getMonomindDataRoot(), MEMORY_SUBDIR);
21
21
  }
22
22
  function getLegacyPath() {
23
- return join(getProjectCwd(), MEMORY_DIR, LEGACY_MEMORY_FILE);
23
+ return join(getMonomindDataRoot(), MEMORY_SUBDIR, LEGACY_MEMORY_FILE);
24
24
  }
25
25
  function getMigrationMarkerPath() {
26
- return join(getProjectCwd(), MEMORY_DIR, MIGRATION_MARKER);
26
+ return join(getMonomindDataRoot(), MEMORY_SUBDIR, MIGRATION_MARKER);
27
27
  }
28
28
  function ensureMemoryDir() {
29
29
  const dir = getMemoryDir();