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.
- package/README.md +7 -7
- package/dist/{chunk-LCHCASB7.js → chunk-4LM3YGJF.js} +2 -2
- package/dist/{chunk-X33QNBGA.js → chunk-6QLUXEA6.js} +3 -5
- package/dist/{chunk-X33QNBGA.js.map → chunk-6QLUXEA6.js.map} +1 -1
- package/dist/{chunk-ARNVVQ5W.js → chunk-RNQRE45M.js} +1212 -117
- package/dist/chunk-RNQRE45M.js.map +1 -0
- package/dist/{chunk-UVQ7R4C4.js → chunk-VL7L56MU.js} +137 -717
- package/dist/chunk-VL7L56MU.js.map +1 -0
- package/dist/{chunk-BOWNZMPH.js → chunk-WF5CWL2N.js} +3012 -1295
- package/dist/chunk-WF5CWL2N.js.map +1 -0
- package/dist/{chunk-L3LQ3RP5.js → chunk-WZACXZGT.js} +10370 -6328
- package/dist/chunk-WZACXZGT.js.map +1 -0
- package/dist/cli.d.ts +8 -1
- package/dist/cli.js +631 -203
- package/dist/cli.js.map +1 -1
- package/dist/doctor-deep-EN3V4PXO.js +11 -0
- package/dist/index.d.ts +3040 -409
- package/dist/index.js +575 -129
- package/dist/index.js.map +1 -1
- package/dist/{setup-command-VNF3KTCJ.js → setup-command-ZN7DSP53.js} +5 -6
- package/dist/setup-config-ZOJUDXNP.js +9 -0
- package/dist/workflows/templates/code-review.yaml +1 -1
- package/dist/workflows/templates/refactoring.yaml +1 -1
- package/dist/workflows/templates/research-review.yaml +19 -4
- package/dist/workflows/templates/security-audit.yaml +1 -1
- package/dist/workflows/templates/standards-review.yaml +1 -1
- package/package.json +18 -17
- package/src/workflows/templates/code-review.yaml +1 -1
- package/src/workflows/templates/refactoring.yaml +1 -1
- package/src/workflows/templates/research-review.yaml +19 -4
- package/src/workflows/templates/security-audit.yaml +1 -1
- package/src/workflows/templates/standards-review.yaml +1 -1
- package/LICENSE +0 -27
- package/dist/chunk-ARNVVQ5W.js.map +0 -1
- package/dist/chunk-BOWNZMPH.js.map +0 -1
- package/dist/chunk-L3LQ3RP5.js.map +0 -1
- package/dist/chunk-LCDOP543.js +0 -365
- package/dist/chunk-LCDOP543.js.map +0 -1
- package/dist/chunk-PGNRXCYY.js +0 -776
- package/dist/chunk-PGNRXCYY.js.map +0 -1
- package/dist/chunk-UVQ7R4C4.js.map +0 -1
- package/dist/doctor-deep-I2J5CRFG.js +0 -13
- package/dist/setup-config-VQSWWJ5O.js +0 -9
- /package/dist/{chunk-LCHCASB7.js.map → chunk-4LM3YGJF.js.map} +0 -0
- /package/dist/{doctor-deep-I2J5CRFG.js.map → doctor-deep-EN3V4PXO.js.map} +0 -0
- /package/dist/{setup-command-VNF3KTCJ.js.map → setup-command-ZN7DSP53.js.map} +0 -0
- /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-
|
|
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
|
|
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
|
|
189
|
-
│ │ ├── mcp/ # MCP server and
|
|
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
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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":"
|
|
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":[]}
|