nexus-agents 2.26.1 → 2.27.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 (47) hide show
  1. package/README.md +7 -7
  2. package/dist/{chunk-LCHCASB7.js → chunk-4LM3YGJF.js} +2 -2
  3. package/dist/{chunk-X33QNBGA.js → chunk-6QLUXEA6.js} +3 -5
  4. package/dist/{chunk-X33QNBGA.js.map → chunk-6QLUXEA6.js.map} +1 -1
  5. package/dist/{chunk-ARNVVQ5W.js → chunk-RNQRE45M.js} +1212 -117
  6. package/dist/chunk-RNQRE45M.js.map +1 -0
  7. package/dist/{chunk-UVQ7R4C4.js → chunk-VL7L56MU.js} +137 -717
  8. package/dist/chunk-VL7L56MU.js.map +1 -0
  9. package/dist/{chunk-BOWNZMPH.js → chunk-WF5CWL2N.js} +3012 -1295
  10. package/dist/chunk-WF5CWL2N.js.map +1 -0
  11. package/dist/{chunk-L3LQ3RP5.js → chunk-WZACXZGT.js} +10370 -6328
  12. package/dist/chunk-WZACXZGT.js.map +1 -0
  13. package/dist/cli.d.ts +8 -1
  14. package/dist/cli.js +631 -203
  15. package/dist/cli.js.map +1 -1
  16. package/dist/doctor-deep-EN3V4PXO.js +11 -0
  17. package/dist/index.d.ts +3040 -409
  18. package/dist/index.js +575 -129
  19. package/dist/index.js.map +1 -1
  20. package/dist/{setup-command-VNF3KTCJ.js → setup-command-ZN7DSP53.js} +5 -6
  21. package/dist/setup-config-ZOJUDXNP.js +9 -0
  22. package/dist/workflows/templates/code-review.yaml +1 -1
  23. package/dist/workflows/templates/refactoring.yaml +1 -1
  24. package/dist/workflows/templates/research-review.yaml +19 -4
  25. package/dist/workflows/templates/security-audit.yaml +1 -1
  26. package/dist/workflows/templates/standards-review.yaml +1 -1
  27. package/package.json +18 -17
  28. package/src/workflows/templates/code-review.yaml +1 -1
  29. package/src/workflows/templates/refactoring.yaml +1 -1
  30. package/src/workflows/templates/research-review.yaml +19 -4
  31. package/src/workflows/templates/security-audit.yaml +1 -1
  32. package/src/workflows/templates/standards-review.yaml +1 -1
  33. package/LICENSE +0 -27
  34. package/dist/chunk-ARNVVQ5W.js.map +0 -1
  35. package/dist/chunk-BOWNZMPH.js.map +0 -1
  36. package/dist/chunk-L3LQ3RP5.js.map +0 -1
  37. package/dist/chunk-LCDOP543.js +0 -365
  38. package/dist/chunk-LCDOP543.js.map +0 -1
  39. package/dist/chunk-PGNRXCYY.js +0 -776
  40. package/dist/chunk-PGNRXCYY.js.map +0 -1
  41. package/dist/chunk-UVQ7R4C4.js.map +0 -1
  42. package/dist/doctor-deep-I2J5CRFG.js +0 -13
  43. package/dist/setup-config-VQSWWJ5O.js +0 -9
  44. /package/dist/{chunk-LCHCASB7.js.map → chunk-4LM3YGJF.js.map} +0 -0
  45. /package/dist/{doctor-deep-I2J5CRFG.js.map → doctor-deep-EN3V4PXO.js.map} +0 -0
  46. /package/dist/{setup-command-VNF3KTCJ.js.map → setup-command-ZN7DSP53.js.map} +0 -0
  47. /package/dist/{setup-config-VQSWWJ5O.js.map → setup-config-ZOJUDXNP.js.map} +0 -0
package/README.md CHANGED
@@ -63,7 +63,7 @@ const result = await startStdioServer({
63
63
 
64
64
  // Or use programmatically with model adapters
65
65
  const adapter = createClaudeAdapter({
66
- model: 'claude-sonnet-4-20250514',
66
+ model: 'claude-sonnet-4-6',
67
67
  });
68
68
 
69
69
  // Create experts dynamically
@@ -170,7 +170,7 @@ The server exposes 24 MCP tools for integration. Key tools include:
170
170
  | `repo_analyze` | Analyze GitHub repository structure |
171
171
  | `repo_security_plan` | Generate security scanning pipeline for a repo |
172
172
 
173
- See the root [README](../../README.md) for the complete list of all 24 tools.
173
+ See the root [README](../../README.md) for the complete tool list.
174
174
 
175
175
  ---
176
176
 
@@ -185,8 +185,8 @@ nexus-agents/
185
185
  │ │ ├── config/ # Configuration, model registry, timeouts
186
186
  │ │ ├── adapters/ # Model adapters (Claude, OpenAI, Gemini, Ollama)
187
187
  │ │ ├── agents/ # Agent framework (Orchestrator, Experts)
188
- │ │ ├── workflows/ # Workflow engine and 11 YAML templates
189
- │ │ ├── mcp/ # MCP server and 24 tool definitions
188
+ │ │ ├── workflows/ # Workflow engine and YAML templates
189
+ │ │ ├── mcp/ # MCP server and tool definitions
190
190
  │ │ ├── cli-adapters/ # External CLI integration (Claude/Gemini/Codex/OpenCode)
191
191
  │ │ ├── context/ # Token counting, work balancing
192
192
  │ │ ├── consensus/ # Multi-agent voting with higher-order aggregation
@@ -208,7 +208,7 @@ See [docs/architecture/README.md](../../docs/architecture/README.md) for detaile
208
208
  ### Dependency Flow
209
209
 
210
210
  ```
211
- MCP Server (external boundary, 24 tools)
211
+ MCP Server (external boundary)
212
212
 
213
213
  Orchestration Layer (workflows, graph execution, worker dispatch)
214
214
 
@@ -277,14 +277,14 @@ import {
277
277
  } from 'nexus-agents';
278
278
 
279
279
  // Create individual adapters
280
- const claude = createClaudeAdapter({ model: 'claude-sonnet-4-20250514' });
280
+ const claude = createClaudeAdapter({ model: 'claude-sonnet-4-6' });
281
281
  const openai = createOpenAIAdapter({ model: 'gpt-4o' });
282
282
  const gemini = createGeminiAdapter({ model: 'gemini-1.5-pro' });
283
283
  const ollama = createOllamaAdapter({ model: 'llama3:8b' });
284
284
 
285
285
  // Or use the factory
286
286
  const factory = new AdapterFactory();
287
- const adapter = factory.create({ provider: 'anthropic', model: 'claude-sonnet-4-20250514' });
287
+ const adapter = factory.create({ provider: 'anthropic', model: 'claude-sonnet-4-6' });
288
288
  ```
289
289
 
290
290
  ### Agents
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  getErrorMessage
3
- } from "./chunk-BOWNZMPH.js";
3
+ } from "./chunk-WF5CWL2N.js";
4
4
 
5
5
  // src/cli/setup-config.ts
6
6
  import { existsSync, writeFileSync } from "fs";
@@ -59,4 +59,4 @@ function runConfigInitSync(projectRoot, force, dryRun) {
59
59
  export {
60
60
  runConfigInitSync
61
61
  };
62
- //# sourceMappingURL=chunk-LCHCASB7.js.map
62
+ //# sourceMappingURL=chunk-4LM3YGJF.js.map
@@ -1,10 +1,8 @@
1
- import {
2
- getAdaptiveBonus
3
- } from "./chunk-PGNRXCYY.js";
4
1
  import {
5
2
  TASK_CATEGORIES,
3
+ getAdaptiveBonus,
6
4
  getOutcomeStore
7
- } from "./chunk-BOWNZMPH.js";
5
+ } from "./chunk-WF5CWL2N.js";
8
6
 
9
7
  // src/cli/doctor-deep.ts
10
8
  var CLI_NAMES = ["claude", "gemini", "codex", "opencode"];
@@ -108,4 +106,4 @@ export {
108
106
  runDeepDiagnostics,
109
107
  formatDeepDiagnostics
110
108
  };
111
- //# sourceMappingURL=chunk-X33QNBGA.js.map
109
+ //# sourceMappingURL=chunk-6QLUXEA6.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/cli/doctor-deep.ts"],"sourcesContent":["/**\n * Deep diagnostics for the doctor command.\n *\n * Surfaces learning loop health, data sufficiency, routing convergence,\n * and memory system status. Opt-in via `--deep` flag.\n *\n * @module cli/doctor-deep\n * (Source: Issue #1031 — Enhanced doctor --deep diagnostics)\n */\n\nimport { getOutcomeStore } from '../orchestration/outcomes/outcome-store.js';\nimport { TASK_CATEGORIES, type TaskCategory } from '../config/task-specialization-types.js';\nimport { getAdaptiveBonus } from '../mcp/tools/weather-report.js';\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/** Per-CLI data sufficiency snapshot. */\nexport interface CliDataStatus {\n readonly cli: string;\n readonly taskCount: number;\n readonly aboveThreshold: boolean;\n}\n\n/** Deep diagnostics result. */\nexport interface DeepDiagnostics {\n readonly learningLoop: LearningLoopHealth;\n readonly dataSufficiency: DataSufficiency;\n readonly routingConvergence: RoutingConvergence;\n}\n\nexport interface LearningLoopHealth {\n readonly totalOutcomes: number;\n readonly latestTimestamp: string | null;\n readonly activeBonuses: number;\n readonly totalBonusPairs: number;\n}\n\nexport interface DataSufficiency {\n readonly cliStatus: readonly CliDataStatus[];\n readonly missingCategories: readonly string[];\n readonly coldStartThreshold: number;\n}\n\nexport interface RoutingConvergence {\n readonly avgSuccessRate: number;\n readonly cliSuccessRates: ReadonlyMap<string, number>;\n readonly converged: boolean;\n}\n\n// ============================================================================\n// Constants\n// ============================================================================\n\nconst CLI_NAMES = ['claude', 'gemini', 'codex', 'opencode'] as const;\nconst COLD_START_THRESHOLD = 3;\n\n// ============================================================================\n// Diagnostics\n// ============================================================================\n\n/** Check learning loop health: outcome count, latest timestamp, bonuses. */\nfunction checkLearningLoop(): LearningLoopHealth {\n const store = getOutcomeStore();\n const outcomes = store.query();\n const latestTimestamp =\n outcomes.length > 0 ? (outcomes[outcomes.length - 1]?.timestamp ?? null) : null;\n\n let activeBonuses = 0;\n const totalPairs = CLI_NAMES.length * TASK_CATEGORIES.length;\n for (const cli of CLI_NAMES) {\n for (const cat of TASK_CATEGORIES) {\n if (getAdaptiveBonus(cli, cat) !== 0) activeBonuses++;\n }\n }\n\n return {\n totalOutcomes: outcomes.length,\n latestTimestamp,\n activeBonuses,\n totalBonusPairs: totalPairs,\n };\n}\n\n/** Check per-CLI data sufficiency against cold-start threshold. */\nfunction checkDataSufficiency(): DataSufficiency {\n const store = getOutcomeStore();\n const cliStatus: CliDataStatus[] = [];\n\n for (const cli of CLI_NAMES) {\n const outcomes = store.query({ cli });\n cliStatus.push({\n cli,\n taskCount: outcomes.length,\n aboveThreshold: outcomes.length >= COLD_START_THRESHOLD,\n });\n }\n\n const categoriesWithData = new Set<TaskCategory>();\n const allOutcomes = store.query();\n for (const o of allOutcomes) {\n categoriesWithData.add(o.category);\n }\n const missing = TASK_CATEGORIES.filter((c) => !categoriesWithData.has(c));\n\n return { cliStatus, missingCategories: missing, coldStartThreshold: COLD_START_THRESHOLD };\n}\n\n/** Check routing convergence from outcome success rates. */\nfunction checkConvergence(): RoutingConvergence {\n const store = getOutcomeStore();\n const rates = new Map<string, number>();\n let totalRate = 0;\n\n for (const cli of CLI_NAMES) {\n const outcomes = store.query({ cli });\n if (outcomes.length > 0) {\n const rate = outcomes.filter((o) => o.success).length / outcomes.length;\n rates.set(cli, Math.round(rate * 1000) / 1000);\n totalRate += rate;\n } else {\n rates.set(cli, 0);\n }\n }\n\n const avgRate = totalRate / CLI_NAMES.length;\n const allAboveThreshold = CLI_NAMES.every((cli) => {\n const outcomes = store.query({ cli });\n return outcomes.length >= COLD_START_THRESHOLD;\n });\n\n return {\n avgSuccessRate: Math.round(avgRate * 1000) / 1000,\n cliSuccessRates: rates,\n converged: allAboveThreshold,\n };\n}\n\n// ============================================================================\n// Public API\n// ============================================================================\n\n/** Run all deep diagnostics. */\nexport function runDeepDiagnostics(): DeepDiagnostics {\n return {\n learningLoop: checkLearningLoop(),\n dataSufficiency: checkDataSufficiency(),\n routingConvergence: checkConvergence(),\n };\n}\n\n/** Format deep diagnostics for CLI output. */\nexport function formatDeepDiagnostics(diag: DeepDiagnostics): string {\n const lines: string[] = ['\\n=== Deep Diagnostics ===\\n'];\n\n // Learning Loop\n const ll = diag.learningLoop;\n lines.push('Learning Loop:');\n const outcomeIcon = ll.totalOutcomes > 0 ? '+' : '-';\n lines.push(` ${outcomeIcon} OutcomeStore: ${String(ll.totalOutcomes)} entries`);\n const bonusIcon = ll.activeBonuses > 0 ? '+' : '-';\n lines.push(\n ` ${bonusIcon} Adaptive bonuses: ${String(ll.activeBonuses)}/${String(ll.totalBonusPairs)} active`\n );\n\n // Data Sufficiency\n lines.push('\\nData Sufficiency:');\n for (const cs of diag.dataSufficiency.cliStatus) {\n const icon = cs.aboveThreshold ? '+' : '!';\n const label = cs.aboveThreshold ? 'above threshold' : 'below threshold';\n lines.push(` ${icon} ${cs.cli}: ${String(cs.taskCount)} tasks (${label})`);\n }\n if (diag.dataSufficiency.missingCategories.length > 0) {\n lines.push(` Missing categories: ${diag.dataSufficiency.missingCategories.join(', ')}`);\n }\n\n // Routing Convergence\n const rc = diag.routingConvergence;\n lines.push('\\nRouting Convergence:');\n lines.push(` Avg success rate: ${(rc.avgSuccessRate * 100).toFixed(1)}%`);\n lines.push(` Converged: ${rc.converged ? 'yes' : 'no (still below cold-start threshold)'}`);\n\n return lines.join('\\n');\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/cli/doctor-deep.ts"],"sourcesContent":["/**\n * Deep diagnostics for the doctor command.\n *\n * Surfaces learning loop health, data sufficiency, routing convergence,\n * and memory system status. Opt-in via `--deep` flag.\n *\n * @module cli/doctor-deep\n * (Source: Issue #1031 — Enhanced doctor --deep diagnostics)\n */\n\nimport { getOutcomeStore } from '../orchestration/outcomes/outcome-store.js';\nimport { TASK_CATEGORIES, type TaskCategory } from '../config/task-specialization-types.js';\nimport { getAdaptiveBonus } from '../mcp/tools/weather-report.js';\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/** Per-CLI data sufficiency snapshot. */\nexport interface CliDataStatus {\n readonly cli: string;\n readonly taskCount: number;\n readonly aboveThreshold: boolean;\n}\n\n/** Deep diagnostics result. */\nexport interface DeepDiagnostics {\n readonly learningLoop: LearningLoopHealth;\n readonly dataSufficiency: DataSufficiency;\n readonly routingConvergence: RoutingConvergence;\n}\n\nexport interface LearningLoopHealth {\n readonly totalOutcomes: number;\n readonly latestTimestamp: string | null;\n readonly activeBonuses: number;\n readonly totalBonusPairs: number;\n}\n\nexport interface DataSufficiency {\n readonly cliStatus: readonly CliDataStatus[];\n readonly missingCategories: readonly string[];\n readonly coldStartThreshold: number;\n}\n\nexport interface RoutingConvergence {\n readonly avgSuccessRate: number;\n readonly cliSuccessRates: ReadonlyMap<string, number>;\n readonly converged: boolean;\n}\n\n// ============================================================================\n// Constants\n// ============================================================================\n\nconst CLI_NAMES = ['claude', 'gemini', 'codex', 'opencode'] as const;\nconst COLD_START_THRESHOLD = 3;\n\n// ============================================================================\n// Diagnostics\n// ============================================================================\n\n/** Check learning loop health: outcome count, latest timestamp, bonuses. */\nfunction checkLearningLoop(): LearningLoopHealth {\n const store = getOutcomeStore();\n const outcomes = store.query();\n const latestTimestamp =\n outcomes.length > 0 ? (outcomes[outcomes.length - 1]?.timestamp ?? null) : null;\n\n let activeBonuses = 0;\n const totalPairs = CLI_NAMES.length * TASK_CATEGORIES.length;\n for (const cli of CLI_NAMES) {\n for (const cat of TASK_CATEGORIES) {\n if (getAdaptiveBonus(cli, cat) !== 0) activeBonuses++;\n }\n }\n\n return {\n totalOutcomes: outcomes.length,\n latestTimestamp,\n activeBonuses,\n totalBonusPairs: totalPairs,\n };\n}\n\n/** Check per-CLI data sufficiency against cold-start threshold. */\nfunction checkDataSufficiency(): DataSufficiency {\n const store = getOutcomeStore();\n const cliStatus: CliDataStatus[] = [];\n\n for (const cli of CLI_NAMES) {\n const outcomes = store.query({ cli });\n cliStatus.push({\n cli,\n taskCount: outcomes.length,\n aboveThreshold: outcomes.length >= COLD_START_THRESHOLD,\n });\n }\n\n const categoriesWithData = new Set<TaskCategory>();\n const allOutcomes = store.query();\n for (const o of allOutcomes) {\n categoriesWithData.add(o.category);\n }\n const missing = TASK_CATEGORIES.filter((c) => !categoriesWithData.has(c));\n\n return { cliStatus, missingCategories: missing, coldStartThreshold: COLD_START_THRESHOLD };\n}\n\n/** Check routing convergence from outcome success rates. */\nfunction checkConvergence(): RoutingConvergence {\n const store = getOutcomeStore();\n const rates = new Map<string, number>();\n let totalRate = 0;\n\n for (const cli of CLI_NAMES) {\n const outcomes = store.query({ cli });\n if (outcomes.length > 0) {\n const rate = outcomes.filter((o) => o.success).length / outcomes.length;\n rates.set(cli, Math.round(rate * 1000) / 1000);\n totalRate += rate;\n } else {\n rates.set(cli, 0);\n }\n }\n\n const avgRate = totalRate / CLI_NAMES.length;\n const allAboveThreshold = CLI_NAMES.every((cli) => {\n const outcomes = store.query({ cli });\n return outcomes.length >= COLD_START_THRESHOLD;\n });\n\n return {\n avgSuccessRate: Math.round(avgRate * 1000) / 1000,\n cliSuccessRates: rates,\n converged: allAboveThreshold,\n };\n}\n\n// ============================================================================\n// Public API\n// ============================================================================\n\n/** Run all deep diagnostics. */\nexport function runDeepDiagnostics(): DeepDiagnostics {\n return {\n learningLoop: checkLearningLoop(),\n dataSufficiency: checkDataSufficiency(),\n routingConvergence: checkConvergence(),\n };\n}\n\n/** Format deep diagnostics for CLI output. */\nexport function formatDeepDiagnostics(diag: DeepDiagnostics): string {\n const lines: string[] = ['\\n=== Deep Diagnostics ===\\n'];\n\n // Learning Loop\n const ll = diag.learningLoop;\n lines.push('Learning Loop:');\n const outcomeIcon = ll.totalOutcomes > 0 ? '+' : '-';\n lines.push(` ${outcomeIcon} OutcomeStore: ${String(ll.totalOutcomes)} entries`);\n const bonusIcon = ll.activeBonuses > 0 ? '+' : '-';\n lines.push(\n ` ${bonusIcon} Adaptive bonuses: ${String(ll.activeBonuses)}/${String(ll.totalBonusPairs)} active`\n );\n\n // Data Sufficiency\n lines.push('\\nData Sufficiency:');\n for (const cs of diag.dataSufficiency.cliStatus) {\n const icon = cs.aboveThreshold ? '+' : '!';\n const label = cs.aboveThreshold ? 'above threshold' : 'below threshold';\n lines.push(` ${icon} ${cs.cli}: ${String(cs.taskCount)} tasks (${label})`);\n }\n if (diag.dataSufficiency.missingCategories.length > 0) {\n lines.push(` Missing categories: ${diag.dataSufficiency.missingCategories.join(', ')}`);\n }\n\n // Routing Convergence\n const rc = diag.routingConvergence;\n lines.push('\\nRouting Convergence:');\n lines.push(` Avg success rate: ${(rc.avgSuccessRate * 100).toFixed(1)}%`);\n lines.push(` Converged: ${rc.converged ? 'yes' : 'no (still below cold-start threshold)'}`);\n\n return lines.join('\\n');\n}\n"],"mappings":"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","names":[]}