monomind 1.11.10 → 1.11.12

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.
@@ -88,14 +88,14 @@ If this skill is invoked directly (not by master):
88
88
  ```
89
89
  After the bash above completes, apply the 60% classification rule: sum the total file count across all extensions. If any single extension group exceeds 60% of the total, set `<stack>` to that stack's name (e.g. `typescript`, `python`, `go`); otherwise set `<stack>` to `multi-stack`. Use this value for `Stack: <stack>` in all subsequent briefings.
90
90
  If `scope` was not provided by the caller, infer it from the prompt: "review"/"audit"/"check"/"assess" → `review`; "deduplicate"/"dedup"/"consolidate" → `deduplicate`; "design"/"architect"/"model"/"bounded context" → `design`; "migrate"/"migration"/"port to"/"convert" → `migrate`; no keyword match or multiple keyword matches → `all`. Use the resolved scope for all subsequent steps.
91
- 5. If `board_id` was not provided by the caller: find or create monotask space `<project_name>`, then create board `architect` within it. Before executing the bash block below, substitute the resolved `project_name` (or `basename "$PWD"` if not provided) for every `<project_name>` occurrence:
91
+ 5. If `board_id` was not provided by the caller: find or create monotask space `<project_name>`, then create board `architect` within it (optional — proceed without a board if monotask is not installed). Before executing the bash block below, substitute the resolved `project_name` (or `basename "$PWD"` if not provided) for every `<project_name>` occurrence:
92
92
  ```bash
93
93
  space_id=$(monotask space list 2>/dev/null | awk -F' \| ' -v n="<project_name>" '$2==n{print $1}' | head -1)
94
94
  [ -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}')
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 "ERROR: Failed to create monotask board — verify monotask is installed (run: monotask --version)"; exit 1; }
98
+ [ -z "$board_id" ] && echo "[architect] monotask board unavailable board tracking skipped. Install monotask to enable progress tracking."
99
99
  echo "$board_id"
100
100
  ```
101
101
  If this block exits with an error (board_id is still empty), stop execution and return an error to the caller — do not proceed to complexity assessment.
@@ -363,10 +363,13 @@ For each stream, identify:
363
363
  - Dependencies between streams (e.g. coupling analysis before deduplication plan)
364
364
 
365
365
  STEP 3 — CREATE TASKS
366
- For each architecture stream, create a monotask card on the project board. First resolve column IDs (slash commands are not available inside background Task agentsuse bash directly):
366
+ For each architecture stream, create a monotask card on the project board if a board is available. If BOARD_ID is empty (monotask not installed), skip all monotask card operations in this step proceed directly to STEP 4 with an in-memory task list instead.
367
+
368
+ If BOARD_ID is non-empty: First resolve column IDs (slash commands are not available inside background Task agents — use bash directly):
367
369
 
368
370
  \`\`\`bash
369
- columns=$(monotask column list "$BOARD_ID" --json)
371
+ [ -z "$BOARD_ID" ] && { echo "[architect] No board — skipping card creation, proceeding with in-memory tasks."; }
372
+ columns=$([ -n "$BOARD_ID" ] && monotask column list "$BOARD_ID" --json || echo '[]')
370
373
  COL_TODO_ID=$(echo "$columns" | jq -r '.[] | select(.title == "Todo" or .title == "Backlog") | .id' | head -1)
371
374
  COL_DONE_ID=$(echo "$columns" | jq -r '.[] | select(.title == "Done") | .id' | head -1)
372
375
  \`\`\`
@@ -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 (create once at startup, reuse)
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,14 @@ 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. 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 only runs in monotask mode.
17
+
18
+ **Monotask mode (`USE_MONOTASK=true` only):** Continue with the steps below.
19
+
12
20
  ---
13
21
 
14
22
  ## Inputs
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "monomind",
3
- "version": "1.11.10",
3
+ "version": "1.11.12",
4
4
  "description": "Monomind - Enterprise AI agent orchestration for Claude Code. Deploy 60+ specialized agents in coordinated swarms with self-learning, fault-tolerant consensus, vector memory, and MCP integration",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",
@@ -11,7 +11,7 @@ import { commandParser } from './parser.js';
11
11
  import { output } from './output.js';
12
12
  import { commands, commandsByCategory, getCommand, getCommandAsync, getCommandNames, hasCommand } from './commands/index.js';
13
13
  import { suggestCommand } from './suggest.js';
14
- import { runStartupUpdateCheck } from './update/index.js';
14
+ import { runStartupUpdateCheck, getUpdateTagline } from './update/index.js';
15
15
  // Read version from package.json at runtime
16
16
  function getPackageVersion() {
17
17
  try {
@@ -223,7 +223,8 @@ export class CLI {
223
223
  */
224
224
  showHelp() {
225
225
  this.output.writeln();
226
- this.output.writeln(this.output.bold(`${this.name} v${this.version}`));
226
+ const tagline = getUpdateTagline(this.version);
227
+ this.output.writeln(this.output.bold(`${this.name} v${this.version}`) + this.output.dim(tagline));
227
228
  this.output.writeln(this.output.dim(this.description));
228
229
  this.output.writeln();
229
230
  this.output.writeln(this.output.bold('USAGE:'));
@@ -355,7 +356,8 @@ export class CLI {
355
356
  * Show version
356
357
  */
357
358
  showVersion() {
358
- this.output.writeln(`${this.name} v${this.version}`);
359
+ const tagline = getUpdateTagline(this.version);
360
+ this.output.writeln(`${this.name} v${this.version}${tagline}`);
359
361
  }
360
362
  /**
361
363
  * Check for updates on startup (non-blocking)
@@ -363,17 +365,20 @@ export class CLI {
363
365
  */
364
366
  async checkForUpdatesOnStartup() {
365
367
  try {
366
- const result = await runStartupUpdateCheck({ autoUpdate: true });
367
- // Show notifications for available updates that weren't auto-applied
368
- if (result.checked && result.updatesAvailable.length > 0) {
369
- const nonAutoUpdates = result.updatesAvailable.filter(u => !u.shouldAutoUpdate);
370
- if (result.updatesApplied.length > 0) {
371
- this.output.writeln(this.output.dim(`Auto-updated: ${result.updatesApplied.join(', ')}`));
372
- }
373
- if (nonAutoUpdates.length > 0) {
374
- this.output.writeln(this.output.dim(`Updates available: ${nonAutoUpdates.map(u => `${u.package}@${u.latestVersion}`).join(', ')}`));
375
- this.output.writeln(this.output.dim(`Run '${this.name} update check' for details`));
376
- }
368
+ const result = await runStartupUpdateCheck({
369
+ autoUpdate: true,
370
+ onInstalling: (pkgs) => {
371
+ this.output.writeln(this.output.dim(` ↑ installing ${pkgs.join(', ')}...`));
372
+ },
373
+ });
374
+ if (!result.checked)
375
+ return;
376
+ if (result.updatesApplied.length > 0) {
377
+ this.output.writeln(this.output.dim(` updated ${result.updatesApplied.join(', ')}`));
378
+ }
379
+ const manual = result.updatesAvailable.filter(u => !u.shouldAutoUpdate);
380
+ if (manual.length > 0) {
381
+ this.output.writeln(this.output.dim(` ↑ ${manual.map(u => `${u.package} v${u.latestVersion}`).join(', ')} available → run: ${this.name} update all`));
377
382
  }
378
383
  }
379
384
  catch {
@@ -11,19 +11,32 @@ const DEFAULT_CONFIG = {
11
11
  checkIntervalHours: 24,
12
12
  autoUpdate: {
13
13
  patch: true,
14
- minor: false,
14
+ minor: true,
15
15
  major: false,
16
16
  },
17
17
  priority: {
18
- '@monomind/security': 'critical',
19
- '@monomind/cli': 'high',
18
+ 'monofence-ai': 'critical',
19
+ '@monoes/monomindcli': 'high',
20
+ 'monomind': 'high',
21
+ '@monoes/monograph': 'normal',
22
+ '@monoes/memory': 'normal',
23
+ '@monoes/monodesign': 'low',
20
24
  },
21
25
  exclude: [],
22
26
  };
23
- // Packages to check for updates
27
+ // All monomind-ecosystem packages to check for updates.
28
+ // getInstalledVersion() returns null for uninstalled packages — they are silently skipped.
24
29
  const MONOMIND_PACKAGES = [
25
30
  'monomind',
26
- '@monomind/cli',
31
+ '@monoes/monomindcli',
32
+ 'monofence-ai',
33
+ '@monoes/monograph',
34
+ '@monoes/memory',
35
+ '@monoes/monodesign',
36
+ '@monomind/guidance',
37
+ '@monomind/hooks',
38
+ '@monomind/mcp',
39
+ '@monomind/routing',
27
40
  ];
28
41
  // npm package name regex — covers plain names and @scope/name forms.
29
42
  // Validates before using the name in URLs or filesystem paths.
@@ -17,6 +17,15 @@ export type { ValidationResult } from './validator.js';
17
17
  export { executeUpdate, executeMultipleUpdates, rollbackUpdate, getUpdateHistory, clearHistory, loadHistory, } from './executor.js';
18
18
  export type { UpdateHistoryEntry, UpdateExecutionResult } from './executor.js';
19
19
  import type { UpdateCheckResult } from './checker.js';
20
+ /**
21
+ * Synchronous — reads cached state from last check.
22
+ * Returns a short inline string for the CLI version tagline, e.g.
23
+ * " ↑ v1.11.12 available"
24
+ * " ↑ v1.11.12 installing..."
25
+ * " ✓ up to date"
26
+ * "" (no cache yet)
27
+ */
28
+ export declare function getUpdateTagline(currentVersion: string): string;
20
29
  /**
21
30
  * Run auto-update check on startup
22
31
  * This is the main entry point for the auto-update system
@@ -24,6 +33,7 @@ import type { UpdateCheckResult } from './checker.js';
24
33
  export declare function runStartupUpdateCheck(options: {
25
34
  verbose?: boolean;
26
35
  autoUpdate?: boolean;
36
+ onInstalling?: (packages: string[]) => void;
27
37
  }): Promise<{
28
38
  checked: boolean;
29
39
  updatesAvailable: UpdateCheckResult[];
@@ -13,9 +13,37 @@ export { shouldCheckForUpdates, recordCheck, getCachedVersions, clearCache, load
13
13
  export { validateUpdate, validateBulkUpdate } from './validator.js';
14
14
  export { executeUpdate, executeMultipleUpdates, rollbackUpdate, getUpdateHistory, clearHistory, loadHistory, } from './executor.js';
15
15
  // Re-export a convenience function for startup
16
- import { checkForUpdates, DEFAULT_CONFIG } from './checker.js';
16
+ import { checkForUpdates, DEFAULT_CONFIG, getInstalledVersion } from './checker.js';
17
17
  import { executeMultipleUpdates } from './executor.js';
18
- import { getInstalledVersion } from './checker.js';
18
+ import { getCachedVersions } from './rate-limiter.js';
19
+ import * as semver from 'semver';
20
+ /**
21
+ * Synchronous — reads cached state from last check.
22
+ * Returns a short inline string for the CLI version tagline, e.g.
23
+ * " ↑ v1.11.12 available"
24
+ * " ↑ v1.11.12 installing..."
25
+ * " ✓ up to date"
26
+ * "" (no cache yet)
27
+ */
28
+ export function getUpdateTagline(currentVersion) {
29
+ try {
30
+ const cached = getCachedVersions();
31
+ // Use the umbrella package as the canonical version signal
32
+ const latest = cached['monomind'] || cached['@monoes/monomindcli'];
33
+ if (!latest || !semver.valid(latest) || !semver.valid(currentVersion))
34
+ return '';
35
+ if (semver.lte(latest, currentVersion))
36
+ return ' ✓ up to date';
37
+ const type = semver.diff(currentVersion, latest);
38
+ if (type === 'patch' || type === 'minor') {
39
+ return ` ↑ v${latest} installing...`;
40
+ }
41
+ return ` ↑ v${latest} available`;
42
+ }
43
+ catch {
44
+ return '';
45
+ }
46
+ }
19
47
  /**
20
48
  * Run auto-update check on startup
21
49
  * This is the main entry point for the auto-update system
@@ -39,6 +67,8 @@ export async function runStartupUpdateCheck(options) {
39
67
  if (options.autoUpdate !== false) {
40
68
  const autoUpdateable = results.filter((r) => r.shouldAutoUpdate);
41
69
  if (autoUpdateable.length > 0) {
70
+ // Notify caller before installation begins
71
+ options.onInstalling?.(autoUpdateable.map(u => `${u.package}@${u.latestVersion}`));
42
72
  // Get current installed packages
43
73
  const installedPackages = {};
44
74
  for (const update of autoUpdateable) {
@@ -3,19 +3,28 @@
3
3
  * Ensures updates don't break the ecosystem
4
4
  */
5
5
  import * as semver from 'semver';
6
- // Known compatibility matrix between @monomind packages
6
+ // Known compatibility matrix between monomind packages
7
7
  const COMPATIBILITY_MATRIX = {
8
- '@monomind/cli': {
9
- '@monomind/security': { minVersion: '3.0.0-alpha.1' },
8
+ '@monoes/monomindcli': {
9
+ 'monofence-ai': { minVersion: '1.0.0' },
10
+ },
11
+ 'monomind': {
12
+ '@monoes/monomindcli': { minVersion: '1.11.0' },
10
13
  },
11
14
  };
12
15
  // Known breaking changes by version
13
16
  const BREAKING_CHANGES = {
14
- '@monomind/cli': {
15
- '3.0.0': [
17
+ 'monomind': {
18
+ '2.0.0': [
19
+ 'CLI commands renamed from monomind:* to mastermind:*',
16
20
  'Memory API changed from key-value to vector-based',
17
- 'Hooks system completely redesigned',
21
+ 'Hooks system redesigned with 17 hook types',
22
+ ],
23
+ },
24
+ '@monoes/monomindcli': {
25
+ '2.0.0': [
18
26
  'Agent spawning now requires type parameter',
27
+ 'Swarm topology options changed',
19
28
  ],
20
29
  },
21
30
  };
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@monoes/monomindcli",
3
- "version": "1.11.9",
3
+ "version": "1.11.11",
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",