nexus-prime 7.9.27 → 7.9.28

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.
package/README.md CHANGED
@@ -38,9 +38,9 @@
38
38
  <a href="https://www.producthunt.com/products/nexus-prime?embed=true&utm_source=badge-featured&utm_medium=badge&utm_campaign=badge-nexus-prime" target="_blank" rel="noopener noreferrer"><img alt="Nexus-Prime — Product Hunt" width="250" height="54" src="https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=1096831&theme=dark&t=1773345508816"></a>
39
39
  </div>
40
40
 
41
- > **Coding agents were never built to remember. Nexus Prime gives them a memory.**
41
+ > **Stop restarting your coding agents from zero.**
42
42
  >
43
- > Install once. Every coding agent on your machine gets smarter together.
43
+ > Nexus Prime gives Claude Code, Codex, Cursor, Windsurf, OpenCode, Aider, and the rest of your local agent stack one shared memory, one proof trail, and one dashboard for what actually happened.
44
44
 
45
45
  ---
46
46
 
@@ -74,14 +74,15 @@ Agents should start with `nexus_session_bootstrap`, then route the raw request t
74
74
 
75
75
  ---
76
76
 
77
- ## Provenance and social proof
77
+ ## Why teams install it
78
78
 
79
- Nexus Prime now treats provenance as a product surface, not a footer afterthought.
79
+ Nexus Prime is the local-first control plane for serious AI-assisted coding.
80
80
 
81
- - Every Nexus-enabled PR can carry a **Nexus Prime Presence** block that links back to https://nexus-prime.cfd/ and states whether Nexus observed, verified, assisted, authored, or published the change.
82
- - Nexus-generated commits use the repo-local Git-native `Co-Authored-By` trailer for the Nexus Prime GitHub identity; human-only commits are not falsely claimed.
83
- - Generated artifacts can include a Nexus Prime signature with run ID, verification state, human-review state, and website proof.
84
- - Opt-in telemetry can send privacy-safe PLG events such as `pr_presence_added`, `commit_attributed`, `document_signed`, `release_verified`, and `proof_badge_viewed` to the configured Supabase endpoint. Raw prompts, code, repo names, branch names, file paths, secrets, and tokens are redacted by default.
81
+ - **Shared memory for every agent.** Your tools stop acting like strangers and start carrying useful context across sessions.
82
+ - **Lower token waste.** Nexus routes agents toward the files and facts that matter instead of rereading the repo every turn.
83
+ - **Runtime truth you can inspect.** The dashboard shows runs, memory, token savings, and agent activity instead of hiding the messy parts.
84
+ - **Safer multi-file work.** Planning, verification, and handoff state stay attached to the repo, so interrupted work is easier to resume and review.
85
+ - **Local by default.** Your code and agent memory stay on your machine unless you explicitly opt into something else.
85
86
 
86
87
  ---
87
88
 
@@ -95,7 +96,7 @@ One tracked session was measured at **100,000,000 tokens**. Ninety-nine point fo
95
96
 
96
97
  This is **agent amnesia** — and it's the quiet tax on every hour you spend with AI-assisted coding.
97
98
 
98
- **Nexus Prime ends it.**
99
+ **Nexus Prime turns that cold start into a remembered workspace.**
99
100
 
100
101
  ---
101
102
 
@@ -458,7 +459,8 @@ Nexus Prime was designed privacy-first, because the code on your machine is your
458
459
  |---------|-------------------|
459
460
  | 💬 [**Discord**](https://discord.gg/tByGZgk5gS) | Real-time help, show-and-tell, feature ideas |
460
461
  | 🔴 [**Reddit — r/Nexus_Prime**](https://www.reddit.com/r/Nexus_Prime/) | Long-form posts, releases, community wins |
461
- | 🐦 [**X / Twitter**](https://x.com/nexusprime_ai) | Launch announcements, tips, updates |
462
+ | 🐦 [**X / Twitter**](https://x.com/getnexusprime) | Launch announcements, tips, updates |
463
+ | 📸 [**Instagram**](https://www.instagram.com/nexus_prime.cfd/) | Product clips, launch updates, behind-the-scenes |
462
464
  | 📧 [**adarsh@nexus-prime.cfd**](mailto:adarsh@nexus-prime.cfd) | License requests, upgrades, pilots, enterprise |
463
465
  | 📧 [**hello@nexus-prime.cfd**](mailto:hello@nexus-prime.cfd) | General support, press, community |
464
466
  | 🌐 [**nexus-prime.cfd**](https://nexus-prime.cfd) | Product site, demos, pricing, setup guides |
@@ -238,7 +238,7 @@ export function buildMcpToolDefinitions() {
238
238
  properties: {
239
239
  goal: { type: 'string', description: 'Raw goal or task description for this session' },
240
240
  files: { type: 'array', items: { type: 'string' }, description: 'Optional candidate file constraints' },
241
- detailLevel: { type: 'string', enum: ['compact', 'standard', 'debug'], description: 'Response verbosity; defaults to compact for MCP callers' },
241
+ detailLevel: { type: 'string', enum: ['compact', 'standard', 'debug', 'full'], description: 'Response verbosity; defaults to compact for MCP callers' },
242
242
  depth: { type: 'string', enum: ['fast', 'deep'], description: 'Optional bootstrap depth override; defaults to fast unless debug mode is requested' },
243
243
  include: { type: 'array', items: { type: 'string' }, description: 'Optional rich payload sections to include for advanced clients' },
244
244
  intent: { type: 'string', enum: ['inspect', 'plan', 'mutate'], description: 'Requested orchestration stance for the bootstrap summary' },
@@ -268,7 +268,7 @@ export function buildMcpToolDefinitions() {
268
268
  properties: {
269
269
  prompt: { type: 'string', description: 'Raw prompt or objective to orchestrate end-to-end' },
270
270
  files: { type: 'array', items: { type: 'string' }, description: 'Optional hard constraints for candidate files' },
271
- detailLevel: { type: 'string', enum: ['compact', 'standard', 'debug'], description: 'Response verbosity; defaults to compact for MCP callers' },
271
+ detailLevel: { type: 'string', enum: ['compact', 'standard', 'debug', 'full'], description: 'Response verbosity; defaults to compact for MCP callers' },
272
272
  intent: { type: 'string', enum: ['inspect', 'plan', 'mutate'], description: 'Requested orchestration stance; inspect/plan should stay read-only' },
273
273
  topology: { type: 'string', enum: ['auto', 'manager-tools', 'handoff', 'dag-pool', 'worktree-swarm'], description: 'Requested orchestration topology hint' },
274
274
  workers: { type: 'number', description: 'Optional worker override' },
@@ -282,6 +282,7 @@ export function buildMcpToolDefinitions() {
282
282
  executionPreset: { type: 'string', enum: ['fast', 'balanced', 'deep', 'release'], description: 'Optional execution preset that maps orchestration depth, verification strictness, and backend routing' },
283
283
  background: { type: 'boolean', description: 'Compatibility flag; nexus_orchestrate already returns a queued hiring preflight by default and continues in the async gate.' },
284
284
  async: { type: 'boolean', description: 'Alias for background; useful for clients that prefer explicit async orchestration.' },
285
+ wait: { type: 'boolean', description: 'Alias for inline/sync execution. Waits up to the MCP-safe bounded window and returns the final result when it completes in time.' },
285
286
  waitMs: { type: 'number', description: 'Advanced/debug bounded wait for inline execution. Clamped to 45 seconds; normal orchestrate calls return a queued preflight immediately.' },
286
287
  inline: { type: 'boolean', description: 'Advanced/debug only: wait for inline orchestrate output instead of the default fast queued preflight.' }
287
288
  },
@@ -101,7 +101,10 @@ function shouldReturnQueuedReceipt(toolName, args) {
101
101
  if (!SLOW_TOOLS.has(toolName))
102
102
  return false;
103
103
  if (toolName === 'nexus_orchestrate') {
104
- return !isTruthyFlag(args.inline) && !isTruthyFlag(args.sync) && !isTruthyFlag(args.blocking);
104
+ return !isTruthyFlag(args.inline)
105
+ && !isTruthyFlag(args.sync)
106
+ && !isTruthyFlag(args.blocking)
107
+ && !isTruthyFlag(args.wait);
105
108
  }
106
109
  return isTruthyFlag(args.background)
107
110
  || isTruthyFlag(args.async)
@@ -109,8 +112,13 @@ function shouldReturnQueuedReceipt(toolName, args) {
109
112
  || isTruthyFlag(args.detach);
110
113
  }
111
114
  function resolveMaxSyncMs(toolName, args) {
115
+ const explicitWait = isTruthyFlag(args.wait)
116
+ || isTruthyFlag(args.inline)
117
+ || isTruthyFlag(args.sync)
118
+ || isTruthyFlag(args.blocking);
112
119
  return coerceBoundedWaitMs(args.waitMs)
113
120
  ?? coerceBoundedWaitMs(args.maxSyncMs)
121
+ ?? (toolName === 'nexus_orchestrate' && explicitWait ? MAX_CLIENT_SYNC_WAIT_MS : undefined)
114
122
  ?? (toolName === 'nexus_orchestrate' ? ORCHESTRATE_DEFAULT_MAX_SYNC_MS : DEFAULT_MAX_SYNC_MS);
115
123
  }
116
124
  function asStringList(value) {
@@ -22,6 +22,8 @@ function renderTable(rows, maxRows = 20) {
22
22
  }
23
23
  /** Build a compact timing + savings footer line for tool responses. */
24
24
  function buildMcpFooter(meta) {
25
+ if (process.env.NEXUS_MCP_RESPONSE_FOOTER !== '1')
26
+ return '';
25
27
  const ms = meta.durationMs;
26
28
  const timing = ms < 1000 ? `${ms}ms` : `${(ms / 1000).toFixed(1)}s`;
27
29
  return `\n\n─── nexus-prime · ${meta.toolName} · ${timing} · dashboard: http://localhost:${DASH_PORT}/#runtime ───`;
@@ -275,7 +275,8 @@ export async function handleOrchestrationGroup(toolName, hctx, request, args, ct
275
275
  const timings = {
276
276
  totalMs: Date.now() - callStartedAt,
277
277
  };
278
- const payload = detailLevel === 'debug'
278
+ const fullBootstrapDetails = detailLevel === 'debug' || detailLevel === 'full';
279
+ const payload = fullBootstrapDetails
279
280
  ? {
280
281
  depth: bootstrap.depth,
281
282
  workspace,
@@ -390,7 +391,7 @@ export async function handleOrchestrationGroup(toolName, hctx, request, args, ct
390
391
  return '';
391
392
  }
392
393
  })(),
393
- ...(detailLevel === 'debug' ? [
394
+ ...(fullBootstrapDetails ? [
394
395
  `Bootstrap depth: ${bootstrap.depth || bootstrapDepth}`,
395
396
  `Execution mode: ${bootstrap.recommendedExecutionMode || 'autonomous'}`,
396
397
  `Shortlist: ${bootstrap.shortlist?.skills?.slice(0, 3).join(', ') || 'none'} (skills), ${bootstrap.shortlist?.specialists?.slice(0, 3).join(', ') || 'none'} (specialists)`,
@@ -410,7 +411,7 @@ export async function handleOrchestrationGroup(toolName, hctx, request, args, ct
410
411
  `Bootstrap status: ${bootstrap.clientBootstrapStatus?.clients?.length || 0} client manifests tracked`,
411
412
  ] : []),
412
413
  ]),
413
- detailLevel === 'debug' && bootstrap.tokenOptimization?.autoApplied && bootstrap.tokenOptimization?.plan
414
+ fullBootstrapDetails && bootstrap.tokenOptimization?.autoApplied && bootstrap.tokenOptimization?.plan
414
415
  ? `Auto token plan\n\`\`\`txt\n${bootstrap.tokenOptimization.plan}\n\`\`\``
415
416
  : '',
416
417
  formatJsonDetails('Structured details', payload),
@@ -547,7 +548,36 @@ export async function handleOrchestrationGroup(toolName, hctx, request, args, ct
547
548
  intent: requestedIntent,
548
549
  topology: requestedTopology,
549
550
  };
551
+ const verboseDetails = detailLevel === 'debug' || detailLevel === 'full';
550
552
  const compactPayload = {
553
+ workspace,
554
+ runId: execution.runId,
555
+ state: execution.state,
556
+ summary: summarizeExecution(execution),
557
+ resultPreview: truncateText(execution.result || summarizeExecution(execution), 700),
558
+ artifactsPath: execution.artifactsPath,
559
+ planner: execution.plannerState
560
+ ? {
561
+ selectedCrew: execution.plannerState.selectedCrew?.name,
562
+ selectedSpecialists: execution.plannerState.selectedSpecialists.slice(0, 4).map((specialist) => specialist.name),
563
+ selectedWorkflows: execution.plannerState.selectedWorkflows.slice(0, 4),
564
+ }
565
+ : undefined,
566
+ worktreeHealth: runtimeUsage.worktreeHealth
567
+ ? {
568
+ repoRoot: runtimeUsage.worktreeHealth.repoRoot,
569
+ overall: runtimeUsage.worktreeHealth.overall,
570
+ brokenEntries: runtimeUsage.worktreeHealth.brokenEntries,
571
+ repairedEntries: runtimeUsage.worktreeHealth.repairedEntries,
572
+ issues: runtimeUsage.worktreeHealth.issues,
573
+ }
574
+ : undefined,
575
+ modelRoute: selectionSummary.modelRoute,
576
+ verifiedWorkers,
577
+ continuationChildren: execution.continuationChildren.length,
578
+ timings,
579
+ };
580
+ const standardPayload = {
551
581
  workspace,
552
582
  runId: execution.runId,
553
583
  state: execution.state,
@@ -616,31 +646,43 @@ export async function handleOrchestrationGroup(toolName, hctx, request, args, ct
616
646
  timings,
617
647
  payloadRef,
618
648
  };
619
- const payload = detailLevel === 'debug' ? debugPayload : compactPayload;
649
+ const payload = verboseDetails
650
+ ? debugPayload
651
+ : detailLevel === 'standard'
652
+ ? standardPayload
653
+ : compactPayload;
654
+ const verboseResponse = detailLevel !== 'compact';
655
+ const stateLine = execution.state === 'inspected'
656
+ ? 'Orchestrated run inspected (read-only advisory; no diff expected).'
657
+ : `Orchestrated run ${execution.state}.`;
620
658
  return {
621
659
  content: [{
622
660
  type: 'text',
623
661
  text: [
624
662
  upfrontTokenNote ? `[Token plan] ${upfrontTokenNote}` : '',
625
- `Orchestrated run ${execution.state}.`,
663
+ stateLine,
626
664
  formatBullets([
627
665
  `Workspace: ${workspace.repoName} (${workspace.workspaceSource})`,
628
666
  `Run ID: ${execution.runId}`,
629
667
  `Summary: ${summarizeExecution(execution)}`,
630
668
  `Crew: ${execution.plannerState?.selectedCrew?.name || 'baseline path'}`,
631
- `Decomposition: ${selectionSummary.phaseCount} phase(s), ${selectionSummary.workerLaneCount} worker lane(s), ${selectionSummary.mode}`,
632
669
  `Hired/selected: crew ${selectionSummary.crew}; specialists ${formatSelectionList(selectionSummary.specialists)}; workflows ${formatSelectionList(selectionSummary.workflows)}; skills ${formatSelectionList(selectionSummary.skills)}`,
633
- `Model route: ${formatModelRoute(selectionSummary.modelRoute)}`,
634
- `Budget route: ${selectionSummary.budgetRoute || 'budget pending'}`,
635
- selectionSummary.agentFlow?.stages?.length
636
- ? `AgentFlow gates: ${selectionSummary.agentFlow.stages.map((stage) => `${stage.stage}:${stage.ownerRole}`).join(' -> ')}`
637
- : null,
638
- `Selection audit: ${selectionSummary.auditSelected} selected, ${selectionSummary.auditRejected} rejected`,
670
+ ...(verboseResponse ? [
671
+ `Decomposition: ${selectionSummary.phaseCount} phase(s), ${selectionSummary.workerLaneCount} worker lane(s), ${selectionSummary.mode}`,
672
+ `Model route: ${formatModelRoute(selectionSummary.modelRoute)}`,
673
+ `Budget route: ${selectionSummary.budgetRoute || 'budget pending'}`,
674
+ selectionSummary.agentFlow?.stages?.length
675
+ ? `AgentFlow gates: ${selectionSummary.agentFlow.stages.map((stage) => `${stage.stage}:${stage.ownerRole}`).join(' -> ')}`
676
+ : null,
677
+ `Selection audit: ${selectionSummary.auditSelected} selected, ${selectionSummary.auditRejected} rejected`,
678
+ ] : [
679
+ `Model route: ${formatModelRoute(selectionSummary.modelRoute)}`,
680
+ ]),
639
681
  `Verification: ${verifiedWorkers}/${execution.workerResults.length} worker(s) verified`,
640
- `Tokens: saved ${Number(execution.tokenTelemetry?.savedTokens || 0).toLocaleString()} · compression ${Number(execution.tokenTelemetry?.compressionPct || 0)}%`,
682
+ verboseResponse ? `Tokens: saved ${Number(execution.tokenTelemetry?.savedTokens || 0).toLocaleString()} · compression ${Number(execution.tokenTelemetry?.compressionPct || 0)}%` : null,
641
683
  autoTokenApplyNote || null,
642
- `Payload ref: ${workspace.stateKey} · ${detailLevel}`,
643
- ...(detailLevel === 'debug' ? [
684
+ verboseResponse ? `Payload ref: ${workspace.stateKey} · ${detailLevel}` : null,
685
+ ...(verboseDetails ? [
644
686
  `Specialists: ${execution.plannerState?.selectedSpecialists.map((specialist) => specialist.name).slice(0, 4).join(', ') || 'none selected'}`,
645
687
  `Assets: ${(execution.activeSkills || []).length} skills · ${(execution.activeWorkflows || []).length} workflows · ${(runtimeUsage.artifactSelectionAudit?.selected?.length || 0)} audited selections`,
646
688
  `Task graph: ${runtimeUsage.taskGraph?.phases?.length || execution.taskGraph?.phases?.length || 0} phases · ${runtimeUsage.workerPlan?.totalWorkers || execution.workerPlan?.totalWorkers || 0} workers`,
@@ -652,9 +694,9 @@ export async function handleOrchestrationGroup(toolName, hctx, request, args, ct
652
694
  `Payload ref: ${workspace.stateKey} · ${detailLevel}`,
653
695
  ] : []),
654
696
  ]),
655
- detailLevel === 'debug' && execution.result ? `Result\n\`\`\`\n${execution.result}\n\`\`\`` : `Result preview\n\`\`\`\n${truncateText(execution.result || summarizeExecution(execution), 900)}\n\`\`\``,
697
+ verboseDetails && execution.result ? `Result\n\`\`\`\n${execution.result}\n\`\`\`` : `Result preview\n\`\`\`\n${truncateText(execution.result || summarizeExecution(execution), 900)}\n\`\`\``,
656
698
  formatJsonDetails('Structured details', payload),
657
- hctx.formatRemainingProtocolSteps(),
699
+ verboseResponse ? hctx.formatRemainingProtocolSteps() : '',
658
700
  ].filter(Boolean).join('\n\n'),
659
701
  }],
660
702
  };
@@ -684,7 +726,7 @@ export async function handleOrchestrationGroup(toolName, hctx, request, args, ct
684
726
  runtimeUsage?.skipReasons?.length ? `Skipped stages: ${runtimeUsage.skipReasons.join(' · ')}` : 'Skipped stages: not recorded',
685
727
  ]),
686
728
  formatJsonDetails('Structured details', payload),
687
- hctx.formatRemainingProtocolSteps(),
729
+ detailLevel !== 'compact' ? hctx.formatRemainingProtocolSteps() : '',
688
730
  ].join('\n\n'),
689
731
  }],
690
732
  };
@@ -90,7 +90,7 @@ export function formatJsonDetails(label, value) {
90
90
  }
91
91
  export function normalizeDetailLevel(value) {
92
92
  const normalized = String(value ?? 'compact').toLowerCase();
93
- if (normalized === 'standard' || normalized === 'debug')
93
+ if (normalized === 'standard' || normalized === 'debug' || normalized === 'full')
94
94
  return normalized;
95
95
  return 'compact';
96
96
  }
@@ -100,7 +100,7 @@ export function normalizeBootstrapDepth(value, detailLevel) {
100
100
  return 'deep';
101
101
  if (normalized === 'fast')
102
102
  return 'fast';
103
- return detailLevel === 'debug' ? 'deep' : 'fast';
103
+ return detailLevel === 'debug' || detailLevel === 'full' ? 'deep' : 'fast';
104
104
  }
105
105
  export function normalizeResponseIntent(value) {
106
106
  const normalized = String(value ?? 'inspect').toLowerCase();
@@ -14,7 +14,7 @@ import type { SessionDNAManager } from '../../../engines/session-dna.js';
14
14
  import type { NgramIndex } from '../../../engines/ngram-index.js';
15
15
  export type McpToolProfile = 'autonomous' | 'full';
16
16
  export type LifecyclePhase = 'pre-bootstrap' | 'bootstrapped' | 'orchestrated' | 'working' | 'closing';
17
- export type ResponseDetailLevel = 'compact' | 'standard' | 'debug';
17
+ export type ResponseDetailLevel = 'compact' | 'standard' | 'debug' | 'full';
18
18
  export type ResponseIntent = 'inspect' | 'plan' | 'mutate';
19
19
  export type ResponseTopology = 'auto' | 'manager-tools' | 'handoff' | 'dag-pool' | 'worktree-swarm';
20
20
  /** Session-level telemetry tracker. Moved to types.ts so handler files can
package/dist/index.js CHANGED
@@ -103,7 +103,9 @@ export class NexusPrime {
103
103
  workspaceRoot: config?.runtime?.workspaceRoot,
104
104
  });
105
105
  markStartup('workspace:resolve:done');
106
- process.env.NEXUS_WORKSPACE_ROOT = this.workspaceContext.workspaceRoot;
106
+ if (this.workspaceContext.workspaceSource !== 'package') {
107
+ process.env.NEXUS_WORKSPACE_ROOT = this.workspaceContext.workspaceRoot;
108
+ }
107
109
  const memoryDbPath = config?.memory?.cortex?.path ?? process.env.NEXUS_MEMORY_DB_PATH;
108
110
  this.config = {
109
111
  network: {
@@ -12,12 +12,29 @@
12
12
  import { getSharedLicenseManager } from './license-manager.js';
13
13
  import { getToolTier, isToolAllowed } from './tool-tiers.js';
14
14
  import { toolGateMessage, capWarningMessage, capExceededMessage, noLicenseMessage, trialActiveMessage, trialExpiredMessage, } from './upgrade-prompts.js';
15
+ const MCP_RESPONSE_ADAPTERS = new Set([
16
+ 'mcp',
17
+ 'claude-code',
18
+ 'codex',
19
+ 'cursor',
20
+ 'opencode',
21
+ 'windsurf',
22
+ 'hermes',
23
+ 'nanoclaw',
24
+ 'picoclaw',
25
+ 'openclaw',
26
+ ]);
15
27
  function getMode() {
16
28
  const val = (process.env.NEXUS_ENFORCEMENT_MODE ?? 'soft').toLowerCase();
17
29
  if (val === 'audit' || val === 'hard')
18
30
  return val;
19
31
  return 'soft';
20
32
  }
33
+ function shouldAppendUpgradeHint(ctx) {
34
+ if (process.env.NEXUS_LICENSE_MCP_HINTS === '1')
35
+ return true;
36
+ return !MCP_RESPONSE_ADAPTERS.has(String(ctx.adapterName ?? '').toLowerCase());
37
+ }
21
38
  // Tools that create resources subject to quantity caps
22
39
  const MEMORY_CREATION_TOOLS = new Set(['nexus_store_memory']);
23
40
  const OPERATIVE_CREATION_TOOLS = new Set(['nexus_synapse_hire', 'nexus_synapse_mandate']);
@@ -122,7 +139,7 @@ export const LicenseEnforcementMiddleware = {
122
139
  },
123
140
  after(ctx, result) {
124
141
  const hint = ctx.meta.licenseUpgradeHint;
125
- if (hint && result.content) {
142
+ if (hint && result.content && shouldAppendUpgradeHint(ctx)) {
126
143
  result.content.push({ type: 'text', text: `\n---\n${hint}` });
127
144
  }
128
145
  },
@@ -385,7 +385,7 @@ export declare class SubAgentRuntime {
385
385
  tokenAutoApplied?: boolean;
386
386
  toolProfile?: 'autonomous' | 'full';
387
387
  instructionFiles?: string[];
388
- detailLevel?: 'compact' | 'standard' | 'debug';
388
+ detailLevel?: 'compact' | 'standard' | 'debug' | 'full';
389
389
  intent?: 'inspect' | 'plan' | 'mutate';
390
390
  topology?: 'auto' | 'manager-tools' | 'handoff' | 'dag-pool' | 'worktree-swarm';
391
391
  }): RuntimeRegistrySnapshot;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nexus-prime",
3
- "version": "7.9.27",
3
+ "version": "7.9.28",
4
4
  "description": "Local-first MCP control plane for coding agents with bootstrap-orchestrate execution, memory fabric, token budgeting, and worktree-backed swarms",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",