nexus-agents 2.79.1 → 2.79.4

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 (113) hide show
  1. package/README.md +2 -2
  2. package/dist/{child-mcp-config-CTO2MBRM.js → child-mcp-config-DFRYTRBK.js} +2 -2
  3. package/dist/{chunk-MGYNV3EX.js → chunk-3ENBGGYA.js} +104 -61
  4. package/dist/{chunk-MGYNV3EX.js.map → chunk-3ENBGGYA.js.map} +1 -1
  5. package/dist/{chunk-6E3NMMEY.js → chunk-3RZWLQSC.js} +2 -2
  6. package/dist/{chunk-6E3NMMEY.js.map → chunk-3RZWLQSC.js.map} +1 -1
  7. package/dist/{chunk-KT5FIBWS.js → chunk-42MM7GKW.js} +2 -2
  8. package/dist/{chunk-3NIPH6UP.js → chunk-45NUO4FE.js} +2 -2
  9. package/dist/{chunk-2YPG6PDG.js → chunk-ACP4YARI.js} +3 -3
  10. package/dist/{chunk-D6TM2VHX.js → chunk-BIH2CBC5.js} +44 -21
  11. package/dist/chunk-BIH2CBC5.js.map +1 -0
  12. package/dist/{chunk-SD76JZBG.js → chunk-BSQ4KTY4.js} +2 -2
  13. package/dist/{chunk-6TFTVW77.js → chunk-BXI6DKBU.js} +3 -3
  14. package/dist/{chunk-PLX6FCFC.js → chunk-DOI7RE3X.js} +2 -2
  15. package/dist/{chunk-SWFJU3W2.js → chunk-DW3UTO43.js} +56 -46
  16. package/dist/{chunk-SWFJU3W2.js.map → chunk-DW3UTO43.js.map} +1 -1
  17. package/dist/{chunk-7XCUZI4G.js → chunk-IPDUZJPH.js} +3 -3
  18. package/dist/{chunk-2UYTFLMO.js → chunk-JMRCMMZ5.js} +2 -2
  19. package/dist/{chunk-GONMG4NM.js → chunk-LFTK5ZQG.js} +2 -2
  20. package/dist/{chunk-DLXT23AC.js → chunk-NJPFN75N.js} +2 -2
  21. package/dist/{chunk-YXWGEIQR.js → chunk-NVSJXN4S.js} +2 -2
  22. package/dist/{chunk-Q5CFPIJ5.js → chunk-NXNNT5XW.js} +3 -3
  23. package/dist/chunk-OFRDE7MK.js +136 -0
  24. package/dist/chunk-OFRDE7MK.js.map +1 -0
  25. package/dist/{chunk-L6SCKLGO.js → chunk-OGV7J5WG.js} +3 -3
  26. package/dist/{chunk-ZVCED4Z4.js → chunk-PAKVXGS2.js} +2 -2
  27. package/dist/{chunk-DNO2INX5.js → chunk-PDCLBWH5.js} +3 -3
  28. package/dist/{chunk-K2QILJG4.js → chunk-PHBRELUK.js} +33 -9
  29. package/dist/chunk-PHBRELUK.js.map +1 -0
  30. package/dist/{chunk-4UKWUINF.js → chunk-SU3Y6LU2.js} +8 -8
  31. package/dist/chunk-SU3Y6LU2.js.map +1 -0
  32. package/dist/{chunk-FJWWSVWB.js → chunk-TN5ZKSGC.js} +2 -2
  33. package/dist/{chunk-5O6XLBPP.js → chunk-UNFS6YBY.js} +2 -2
  34. package/dist/{chunk-HYU4GZY6.js → chunk-UNRTM43V.js} +2 -2
  35. package/dist/{chunk-XLGI7QGQ.js → chunk-UOR2JWFH.js} +7 -136
  36. package/dist/chunk-UOR2JWFH.js.map +1 -0
  37. package/dist/{chunk-WDYCIJWN.js → chunk-UQOSVOEU.js} +4 -3
  38. package/dist/{chunk-WDYCIJWN.js.map → chunk-UQOSVOEU.js.map} +1 -1
  39. package/dist/{chunk-FVPYP5DD.js → chunk-UWDVEMYZ.js} +4 -4
  40. package/dist/{cli-circuit-breaker-I74ZQ44Q.js → cli-circuit-breaker-T75HOLZK.js} +4 -4
  41. package/dist/cli.js +46 -45
  42. package/dist/cli.js.map +1 -1
  43. package/dist/{composite-router-V3OC57IE.js → composite-router-OPSK5FCQ.js} +2 -2
  44. package/dist/{consensus-vote-ESFPGEJE.js → consensus-vote-CYUPIJXR.js} +11 -11
  45. package/dist/{context-retriever-MB3D7KS6.js → context-retriever-6AWHCHRP.js} +5 -5
  46. package/dist/{doctor-deep-KQ765XZA.js → doctor-deep-XBPRQ6ZP.js} +3 -3
  47. package/dist/expert-bridge-5YOPK5IT.js +11 -0
  48. package/dist/{factory-BUUXNGIB.js → factory-DN7SJZ5Z.js} +5 -5
  49. package/dist/{factory-LHHYDVZX.js → factory-Y3TMP4OQ.js} +4 -4
  50. package/dist/index.d.ts +24 -2
  51. package/dist/index.js +30 -28
  52. package/dist/index.js.map +1 -1
  53. package/dist/{init-opencode-GXZN2W5S.js → init-opencode-RV6IQEMS.js} +5 -5
  54. package/dist/{issue-triage-RMXPDZ2K.js → issue-triage-UTWKXLKC.js} +4 -4
  55. package/dist/{pr-reviewer-helpers-XCY7HOPE.js → pr-reviewer-helpers-L4L324FQ.js} +2 -2
  56. package/dist/{registry-command-6E4YKAMT.js → registry-command-6KJWW3W7.js} +2 -2
  57. package/dist/{repo-security-plan-AGRU72DL.js → repo-security-plan-HNLMF7J7.js} +3 -3
  58. package/dist/{research-helpers-synthesize-K2UCJQQG.js → research-helpers-synthesize-77TLYSW4.js} +3 -3
  59. package/dist/{routing-memory-3B6DDZ76.js → routing-memory-6DV6ZPAH.js} +2 -2
  60. package/dist/{session-memory-L7EQIY2O.js → session-memory-XZ3NJIR4.js} +3 -3
  61. package/dist/{setup-command-WZ4ZVDGS.js → setup-command-QOXG36UV.js} +10 -9
  62. package/dist/{setup-config-EQT24DD4.js → setup-config-B4V4QHDP.js} +3 -3
  63. package/dist/{setup-custom-api-IBDV654K.js → setup-custom-api-PJ6TGHJH.js} +4 -4
  64. package/dist/{tool-memory-6HCHQLAN.js → tool-memory-K2QPTPKV.js} +4 -4
  65. package/dist/{weather-report-ER3WUZ7S.js → weather-report-ZB4AKOIA.js} +2 -2
  66. package/package.json +4 -4
  67. package/scripts/postinstall.js +1 -1
  68. package/dist/chunk-4UKWUINF.js.map +0 -1
  69. package/dist/chunk-D6TM2VHX.js.map +0 -1
  70. package/dist/chunk-K2QILJG4.js.map +0 -1
  71. package/dist/chunk-XLGI7QGQ.js.map +0 -1
  72. package/dist/expert-bridge-JKLC57IC.js +0 -10
  73. /package/dist/{child-mcp-config-CTO2MBRM.js.map → child-mcp-config-DFRYTRBK.js.map} +0 -0
  74. /package/dist/{chunk-KT5FIBWS.js.map → chunk-42MM7GKW.js.map} +0 -0
  75. /package/dist/{chunk-3NIPH6UP.js.map → chunk-45NUO4FE.js.map} +0 -0
  76. /package/dist/{chunk-2YPG6PDG.js.map → chunk-ACP4YARI.js.map} +0 -0
  77. /package/dist/{chunk-SD76JZBG.js.map → chunk-BSQ4KTY4.js.map} +0 -0
  78. /package/dist/{chunk-6TFTVW77.js.map → chunk-BXI6DKBU.js.map} +0 -0
  79. /package/dist/{chunk-PLX6FCFC.js.map → chunk-DOI7RE3X.js.map} +0 -0
  80. /package/dist/{chunk-7XCUZI4G.js.map → chunk-IPDUZJPH.js.map} +0 -0
  81. /package/dist/{chunk-2UYTFLMO.js.map → chunk-JMRCMMZ5.js.map} +0 -0
  82. /package/dist/{chunk-GONMG4NM.js.map → chunk-LFTK5ZQG.js.map} +0 -0
  83. /package/dist/{chunk-DLXT23AC.js.map → chunk-NJPFN75N.js.map} +0 -0
  84. /package/dist/{chunk-YXWGEIQR.js.map → chunk-NVSJXN4S.js.map} +0 -0
  85. /package/dist/{chunk-Q5CFPIJ5.js.map → chunk-NXNNT5XW.js.map} +0 -0
  86. /package/dist/{chunk-L6SCKLGO.js.map → chunk-OGV7J5WG.js.map} +0 -0
  87. /package/dist/{chunk-ZVCED4Z4.js.map → chunk-PAKVXGS2.js.map} +0 -0
  88. /package/dist/{chunk-DNO2INX5.js.map → chunk-PDCLBWH5.js.map} +0 -0
  89. /package/dist/{chunk-FJWWSVWB.js.map → chunk-TN5ZKSGC.js.map} +0 -0
  90. /package/dist/{chunk-5O6XLBPP.js.map → chunk-UNFS6YBY.js.map} +0 -0
  91. /package/dist/{chunk-HYU4GZY6.js.map → chunk-UNRTM43V.js.map} +0 -0
  92. /package/dist/{chunk-FVPYP5DD.js.map → chunk-UWDVEMYZ.js.map} +0 -0
  93. /package/dist/{cli-circuit-breaker-I74ZQ44Q.js.map → cli-circuit-breaker-T75HOLZK.js.map} +0 -0
  94. /package/dist/{composite-router-V3OC57IE.js.map → composite-router-OPSK5FCQ.js.map} +0 -0
  95. /package/dist/{consensus-vote-ESFPGEJE.js.map → consensus-vote-CYUPIJXR.js.map} +0 -0
  96. /package/dist/{context-retriever-MB3D7KS6.js.map → context-retriever-6AWHCHRP.js.map} +0 -0
  97. /package/dist/{doctor-deep-KQ765XZA.js.map → doctor-deep-XBPRQ6ZP.js.map} +0 -0
  98. /package/dist/{expert-bridge-JKLC57IC.js.map → expert-bridge-5YOPK5IT.js.map} +0 -0
  99. /package/dist/{factory-BUUXNGIB.js.map → factory-DN7SJZ5Z.js.map} +0 -0
  100. /package/dist/{factory-LHHYDVZX.js.map → factory-Y3TMP4OQ.js.map} +0 -0
  101. /package/dist/{init-opencode-GXZN2W5S.js.map → init-opencode-RV6IQEMS.js.map} +0 -0
  102. /package/dist/{issue-triage-RMXPDZ2K.js.map → issue-triage-UTWKXLKC.js.map} +0 -0
  103. /package/dist/{pr-reviewer-helpers-XCY7HOPE.js.map → pr-reviewer-helpers-L4L324FQ.js.map} +0 -0
  104. /package/dist/{registry-command-6E4YKAMT.js.map → registry-command-6KJWW3W7.js.map} +0 -0
  105. /package/dist/{repo-security-plan-AGRU72DL.js.map → repo-security-plan-HNLMF7J7.js.map} +0 -0
  106. /package/dist/{research-helpers-synthesize-K2UCJQQG.js.map → research-helpers-synthesize-77TLYSW4.js.map} +0 -0
  107. /package/dist/{routing-memory-3B6DDZ76.js.map → routing-memory-6DV6ZPAH.js.map} +0 -0
  108. /package/dist/{session-memory-L7EQIY2O.js.map → session-memory-XZ3NJIR4.js.map} +0 -0
  109. /package/dist/{setup-command-WZ4ZVDGS.js.map → setup-command-QOXG36UV.js.map} +0 -0
  110. /package/dist/{setup-config-EQT24DD4.js.map → setup-config-B4V4QHDP.js.map} +0 -0
  111. /package/dist/{setup-custom-api-IBDV654K.js.map → setup-custom-api-PJ6TGHJH.js.map} +0 -0
  112. /package/dist/{tool-memory-6HCHQLAN.js.map → tool-memory-K2QPTPKV.js.map} +0 -0
  113. /package/dist/{weather-report-ER3WUZ7S.js.map → weather-report-ZB4AKOIA.js.map} +0 -0
package/README.md CHANGED
@@ -21,7 +21,7 @@ Nexus Agents makes your AI coding tools work together intelligently. It coordina
21
21
  - **Consensus Voting** — Six aggregation strategies: simple/super-majority, unanimous, higher-order Bayesian, opinion-wise, proof-of-learning.
22
22
  - **Development Pipeline** — Research → Plan → Vote → Decompose → Implement → QA → Security. Autonomous, harness, and dry-run modes.
23
23
  - **Memory & Learning** — Multiple backends (session, belief, adaptive, routing, graph, hybrid, agentic, typed) with cross-session persistence.
24
- - **MCP Tools** — Agent management, workflow execution, research, memory, codebase intelligence, repo analysis, consensus, operations. See [docs/ENTRYPOINTS.md](https://github.com/williamzujkowski/nexus-agents/blob/main/docs/ENTRYPOINTS.md) for the canonical list.
24
+ - **MCP Tools** — Agent management, workflow execution, research, memory, codebase intelligence, repo analysis, consensus, operations. See [docs/ENTRYPOINTS.md](https://github.com/nexus-substrate/nexus-agents/blob/main/docs/ENTRYPOINTS.md) for the canonical list.
25
25
  - **Research System** — Discovery across arXiv, GitHub, Semantic Scholar, and other sources with auto-catalog and synthesis.
26
26
  - **Security** — Sandboxing, trust classification, SARIF parsing, input sanitization, red team pipeline.
27
27
 
@@ -331,7 +331,7 @@ if (result.ok) {
331
331
 
332
332
  ```bash
333
333
  # Clone the repository
334
- git clone https://github.com/williamzujkowski/nexus-agents.git
334
+ git clone https://github.com/nexus-substrate/nexus-agents.git
335
335
  cd nexus-agents
336
336
 
337
337
  # Install dependencies
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  createLogger
3
- } from "./chunk-WDYCIJWN.js";
3
+ } from "./chunk-UQOSVOEU.js";
4
4
  import "./chunk-7BMOZJYS.js";
5
5
  import "./chunk-UP2VWCW5.js";
6
6
 
@@ -59,4 +59,4 @@ export {
59
59
  generateMcpConfig,
60
60
  getDefaultAllowedTools
61
61
  };
62
- //# sourceMappingURL=child-mcp-config-CTO2MBRM.js.map
62
+ //# sourceMappingURL=child-mcp-config-DFRYTRBK.js.map
@@ -7,10 +7,10 @@ import {
7
7
  import {
8
8
  getTokenEnvVars,
9
9
  resolveToken
10
- } from "./chunk-GONMG4NM.js";
10
+ } from "./chunk-LFTK5ZQG.js";
11
11
  import {
12
12
  executeExpert
13
- } from "./chunk-K2QILJG4.js";
13
+ } from "./chunk-PHBRELUK.js";
14
14
  import {
15
15
  EventTopics,
16
16
  NOOP_NOTIFIER,
@@ -36,7 +36,7 @@ import {
36
36
  withAccessPolicy,
37
37
  withProgressHeartbeat,
38
38
  wrapToolWithTimeout
39
- } from "./chunk-SWFJU3W2.js";
39
+ } from "./chunk-DW3UTO43.js";
40
40
  import {
41
41
  REGISTRY_PATH,
42
42
  getProjectRoot,
@@ -45,14 +45,14 @@ import {
45
45
  normalizeTopicToCanonical,
46
46
  savePapersRegistry,
47
47
  synthesizeResearch
48
- } from "./chunk-5O6XLBPP.js";
48
+ } from "./chunk-UNFS6YBY.js";
49
49
  import {
50
50
  IssueTriage,
51
51
  sanitizeInput
52
- } from "./chunk-6TFTVW77.js";
52
+ } from "./chunk-BXI6DKBU.js";
53
53
  import {
54
54
  generateSecurityPlan
55
- } from "./chunk-FJWWSVWB.js";
55
+ } from "./chunk-TN5ZKSGC.js";
56
56
  import {
57
57
  analyzeGitHubRepo
58
58
  } from "./chunk-7J7PNOJQ.js";
@@ -64,7 +64,7 @@ import {
64
64
  getContextForTask,
65
65
  inferTaskCategory,
66
66
  summarizeContextForPrompt
67
- } from "./chunk-DNO2INX5.js";
67
+ } from "./chunk-PDCLBWH5.js";
68
68
  import {
69
69
  DEFAULT_RELEVANCE_CONFIG,
70
70
  MemoryImportance,
@@ -72,17 +72,19 @@ import {
72
72
  generateHyphenId,
73
73
  generateUUID,
74
74
  getToolMemory
75
- } from "./chunk-Q5CFPIJ5.js";
75
+ } from "./chunk-NXNNT5XW.js";
76
76
  import {
77
77
  DEFAULT_TASK_TTL_MS,
78
78
  DEFAULT_TOOL_RATE_LIMITS,
79
- clampTaskTtl,
79
+ clampTaskTtl
80
+ } from "./chunk-UOR2JWFH.js";
81
+ import {
80
82
  getAvailabilityCache,
81
83
  resolveFallback
82
- } from "./chunk-XLGI7QGQ.js";
84
+ } from "./chunk-OFRDE7MK.js";
83
85
  import {
84
86
  DEFAULTS
85
- } from "./chunk-HYU4GZY6.js";
87
+ } from "./chunk-UNRTM43V.js";
86
88
  import {
87
89
  resolveInsideRoot
88
90
  } from "./chunk-NUBSJGQZ.js";
@@ -98,7 +100,7 @@ import {
98
100
  getAvailableClis,
99
101
  sleep,
100
102
  withTimeout
101
- } from "./chunk-D6TM2VHX.js";
103
+ } from "./chunk-BIH2CBC5.js";
102
104
  import {
103
105
  BUILT_IN_EXPERTS,
104
106
  BuiltInExpertTypeSchema,
@@ -110,7 +112,7 @@ import {
110
112
  } from "./chunk-PQHVC4BD.js";
111
113
  import {
112
114
  createSessionMemory
113
- } from "./chunk-3NIPH6UP.js";
115
+ } from "./chunk-45NUO4FE.js";
114
116
  import {
115
117
  AGENT_ROUTER_TIMEOUTS,
116
118
  API_TIMEOUTS,
@@ -180,7 +182,7 @@ import {
180
182
  resolveModelIdentitySync,
181
183
  toExpertTaskAnalysisResult,
182
184
  withStep
183
- } from "./chunk-WDYCIJWN.js";
185
+ } from "./chunk-UQOSVOEU.js";
184
186
  import {
185
187
  getNexusDataDir,
186
188
  nexusDataPath
@@ -25534,7 +25536,7 @@ function getAvailableApiKeys() {
25534
25536
  }
25535
25537
  function buildErrorMessage() {
25536
25538
  const keyList = API_KEYS.map((k) => ` - ${k.name} (${k.provider})`).join("\n");
25537
- return "No model adapter available. This operation requires either:\n\n" + CLI_AUTH_INSTRUCTIONS + "\n\n2. An API key environment variable:\n" + keyList + "\n\nSee: https://github.com/williamzujkowski/nexus-agents#prerequisites--environment";
25539
+ return "No model adapter available. This operation requires either:\n\n" + CLI_AUTH_INSTRUCTIONS + "\n\n2. An API key environment variable:\n" + keyList + "\n\nSee: https://github.com/nexus-substrate/nexus-agents#prerequisites--environment";
25538
25540
  }
25539
25541
  async function detectAvailableClis(cache, log) {
25540
25542
  try {
@@ -26674,7 +26676,7 @@ async function populateUnifiedContextOnState(state) {
26674
26676
  try {
26675
26677
  const taskCandidate = state["task"];
26676
26678
  if (typeof taskCandidate !== "string" || taskCandidate === "") return;
26677
- const { getContextForTask: getContextForTask2, inferTaskCategory: inferTaskCategory2 } = await import("./context-retriever-MB3D7KS6.js");
26679
+ const { getContextForTask: getContextForTask2, inferTaskCategory: inferTaskCategory2 } = await import("./context-retriever-6AWHCHRP.js");
26678
26680
  const ctx = await getContextForTask2({
26679
26681
  task: taskCandidate,
26680
26682
  category: inferTaskCategory2(taskCandidate),
@@ -41898,7 +41900,7 @@ async function tryIssueTriage(task) {
41898
41900
  try {
41899
41901
  const issueMatch = task.match(/github\.com\/([^/]+\/[^/]+)\/issues\/(\d+)/);
41900
41902
  if (issueMatch === null) return null;
41901
- const { createIssueTriage } = await import("./issue-triage-RMXPDZ2K.js");
41903
+ const { createIssueTriage } = await import("./issue-triage-UTWKXLKC.js");
41902
41904
  const triage = createIssueTriage();
41903
41905
  const owner = issueMatch[1] ?? "";
41904
41906
  const num = issueMatch[2] ?? "";
@@ -41926,7 +41928,7 @@ var VALID_TEMPLATES = /* @__PURE__ */ new Set([
41926
41928
  ]);
41927
41929
  async function classifyWithLLM(task) {
41928
41930
  try {
41929
- const { executeExpert: executeExpert2 } = await import("./expert-bridge-JKLC57IC.js");
41931
+ const { executeExpert: executeExpert2 } = await import("./expert-bridge-5YOPK5IT.js");
41930
41932
  const prompt = [
41931
41933
  "Classify this task into exactly one pipeline template.",
41932
41934
  "Templates: dev (implementation/bug fix/refactor), research (investigate/evaluate/compare),",
@@ -41994,7 +41996,6 @@ async function runAdaptiveOrchestrator(task, options) {
41994
41996
  confidence: classification.confidence
41995
41997
  });
41996
41998
  const result = await runGraphPipeline(cleanTask, template, options.stages, options);
41997
- recordPipelineOutcome(template.id, classification, result.success);
41998
41999
  return { ...result, selectionMethod, taskClassification: classification };
41999
42000
  }
42000
42001
  function resolveTemplate(templateId) {
@@ -42005,21 +42006,6 @@ function resolveTemplate(templateId) {
42005
42006
  if (fallback !== void 0) return fallback;
42006
42007
  return { id: "dev", name: "Development", stages: [] };
42007
42008
  }
42008
- function recordPipelineOutcome(templateId, classification, success) {
42009
- try {
42010
- getOutcomeStore().append({
42011
- id: `pipeline-${templateId}-${String(Date.now())}`,
42012
- cli: "claude",
42013
- category: "code_generation",
42014
- model: `pipeline-${templateId}`,
42015
- success,
42016
- durationMs: 0,
42017
- timestamp: (/* @__PURE__ */ new Date()).toISOString(),
42018
- source: "delegate"
42019
- });
42020
- } catch {
42021
- }
42022
- }
42023
42009
 
42024
42010
  // src/security/sarif-types.ts
42025
42011
  import { z as z86 } from "zod";
@@ -42695,22 +42681,30 @@ var logger37 = createLogger({ component: "agent-executor" });
42695
42681
  function emitStageEvent2(stage, status, details) {
42696
42682
  emitPipelineStageEvent("dev-pipeline", stage, status, details);
42697
42683
  }
42698
- function recordOutcome(taskId, category, success, durationMs, extra) {
42684
+ function recordOutcome(args) {
42685
+ if (args.cli === void 0) {
42686
+ logger37.debug("Skipping outcome record \u2014 no cli (bridge failed or non-CLI stage)", {
42687
+ taskId: args.taskId,
42688
+ category: args.category,
42689
+ success: args.success
42690
+ });
42691
+ return;
42692
+ }
42699
42693
  try {
42700
42694
  getOutcomeStore().append({
42701
- id: `pipeline-${taskId}-${String(Date.now())}`,
42702
- cli: "claude",
42703
- category,
42695
+ id: `pipeline-${args.taskId}-${String(Date.now())}`,
42696
+ cli: args.cli,
42697
+ category: args.category,
42704
42698
  model: "pipeline",
42705
- success,
42706
- durationMs,
42699
+ success: args.success,
42700
+ durationMs: args.durationMs,
42707
42701
  timestamp: (/* @__PURE__ */ new Date()).toISOString(),
42708
42702
  source: "delegate",
42709
- routingStage: extra?.routingStage,
42710
- retryCount: extra?.retryCount
42703
+ routingStage: args.routingStage,
42704
+ retryCount: args.retryCount
42711
42705
  });
42712
42706
  } catch (error) {
42713
- logger37.debug("Failed to record outcome", { taskId, error: String(error) });
42707
+ logger37.debug("Failed to record outcome", { taskId: args.taskId, error: String(error) });
42714
42708
  }
42715
42709
  }
42716
42710
  var cachedMemory = null;
@@ -42718,7 +42712,7 @@ var memoryInitPromise = null;
42718
42712
  async function initPipelineMemory() {
42719
42713
  if (cachedMemory !== null) return cachedMemory;
42720
42714
  try {
42721
- const { createSessionMemory: createSessionMemory2 } = await import("./session-memory-L7EQIY2O.js");
42715
+ const { createSessionMemory: createSessionMemory2 } = await import("./session-memory-XZ3NJIR4.js");
42722
42716
  const { getLearningDir } = await import("./learning-persistence-Q3HTOGTU.js");
42723
42717
  const mem = createSessionMemory2(getLearningDir());
42724
42718
  mem.startSession(`pipeline-${String(Date.now())}`);
@@ -42774,7 +42768,7 @@ function recordRoutingExperience(category, success, durationMs) {
42774
42768
  callRecord(routingMemoryCache);
42775
42769
  return;
42776
42770
  }
42777
- void import("./routing-memory-3B6DDZ76.js").then(({ createRoutingMemory }) => {
42771
+ void import("./routing-memory-6DV6ZPAH.js").then(({ createRoutingMemory }) => {
42778
42772
  routingMemoryCache = createRoutingMemory();
42779
42773
  callRecord(routingMemoryCache);
42780
42774
  }).catch((error) => {
@@ -42803,7 +42797,7 @@ ${text}` : "";
42803
42797
  }
42804
42798
  async function getWeatherContext() {
42805
42799
  try {
42806
- const { generateWeatherReport: generateWeatherReport2 } = await import("./weather-report-ER3WUZ7S.js");
42800
+ const { generateWeatherReport: generateWeatherReport2 } = await import("./weather-report-ZB4AKOIA.js");
42807
42801
  const report = generateWeatherReport2({ includeAdaptive: true });
42808
42802
  const mappings = "recommendedMappings" in report ? report.recommendedMappings : [];
42809
42803
  if (!Array.isArray(mappings) || mappings.length === 0) return "";
@@ -42821,7 +42815,7 @@ ${lines}
42821
42815
  }
42822
42816
  async function getMemoryContext(task) {
42823
42817
  try {
42824
- const { createSessionMemory: createSessionMemory2 } = await import("./session-memory-L7EQIY2O.js");
42818
+ const { createSessionMemory: createSessionMemory2 } = await import("./session-memory-XZ3NJIR4.js");
42825
42819
  const { getLearningDir } = await import("./learning-persistence-Q3HTOGTU.js");
42826
42820
  const memory = createSessionMemory2(getLearningDir(), { maxLearningsInContext: 10 });
42827
42821
  const learnings = memory.searchLearnings(task.slice(0, 200));
@@ -42872,8 +42866,15 @@ ${task}`
42872
42866
  const combined = [discover.text, analyze.text].filter(Boolean).join("\n\n");
42873
42867
  const totalMs = discover.durationMs + analyze.durationMs;
42874
42868
  const success = discover.success || analyze.success;
42869
+ const researchCli = discover.cli ?? analyze.cli;
42875
42870
  emitStageEvent2("research", success ? "completed" : "failed", { durationMs: totalMs });
42876
- recordOutcome("research", "research", success, totalMs);
42871
+ recordOutcome({
42872
+ taskId: "research",
42873
+ category: "research",
42874
+ cli: researchCli,
42875
+ success,
42876
+ durationMs: totalMs
42877
+ });
42877
42878
  if (success && combined.length > 50) {
42878
42879
  recordLearning(
42879
42880
  `Research for "${task.slice(0, 80)}": ${combined.slice(0, 200)}`,
@@ -42904,7 +42905,13 @@ ${contextBlock}`;
42904
42905
  await postProgress(config, "Plan", feedback !== void 0 ? "Revising..." : "Planning...");
42905
42906
  const r = await executeExpert("architecture", prompt);
42906
42907
  emitStageEvent2("plan", r.success ? "completed" : "failed", { durationMs: r.durationMs });
42907
- recordOutcome("plan", "architecture", r.success, r.durationMs);
42908
+ recordOutcome({
42909
+ taskId: "plan",
42910
+ category: "architecture",
42911
+ cli: r.cli,
42912
+ success: r.success,
42913
+ durationMs: r.durationMs
42914
+ });
42908
42915
  await postProgress(config, "Plan", `Done (${r.text.length} chars, ${r.durationMs}ms)`);
42909
42916
  return r.text || prompt;
42910
42917
  },
@@ -42914,7 +42921,7 @@ ${contextBlock}`;
42914
42921
  const strategy = config.votingStrategy ?? "higher_order";
42915
42922
  await postProgress(config, "Vote", `Running consensus with ${strategy} strategy...`);
42916
42923
  try {
42917
- const { executeVoting } = await import("./consensus-vote-ESFPGEJE.js");
42924
+ const { executeVoting } = await import("./consensus-vote-CYUPIJXR.js");
42918
42925
  const votingResult = await executeVoting(
42919
42926
  {
42920
42927
  proposal: plan.slice(0, 4e3),
@@ -42932,7 +42939,13 @@ ${contextBlock}`;
42932
42939
  const feedback = votingResult.votes.filter((v) => v.vote.decision !== "approve").map((v) => v.vote.reasoning).join("\n");
42933
42940
  const ms = getTimeProvider().now() - start;
42934
42941
  emitStageEvent2("vote", "completed", { durationMs: ms });
42935
- recordOutcome("vote", "planning", approved, ms);
42942
+ recordOutcome({
42943
+ taskId: "vote",
42944
+ category: "planning",
42945
+ cli: void 0,
42946
+ success: approved,
42947
+ durationMs: ms
42948
+ });
42936
42949
  await postProgress(
42937
42950
  config,
42938
42951
  "Vote",
@@ -42945,7 +42958,13 @@ ${contextBlock}`;
42945
42958
  } catch (error) {
42946
42959
  const msg = error instanceof Error ? error.message : String(error);
42947
42960
  emitStageEvent2("vote", "failed", { error: msg });
42948
- recordOutcome("vote", "planning", false, getTimeProvider().now() - start);
42961
+ recordOutcome({
42962
+ taskId: "vote",
42963
+ category: "planning",
42964
+ cli: void 0,
42965
+ success: false,
42966
+ durationMs: getTimeProvider().now() - start
42967
+ });
42949
42968
  await postProgress(config, "Vote", `Error (auto-approved): ${msg.slice(0, 200)}`);
42950
42969
  return { kind: "approved", approvalPercentage: 0 };
42951
42970
  }
@@ -42962,7 +42981,13 @@ ${plan}`
42962
42981
  );
42963
42982
  const tasks = parseTasksFromResponse(r.text, plan);
42964
42983
  emitStageEvent2("decompose", "completed", { durationMs: r.durationMs });
42965
- recordOutcome("decompose", "planning", r.success, r.durationMs);
42984
+ recordOutcome({
42985
+ taskId: "decompose",
42986
+ category: "planning",
42987
+ cli: r.cli,
42988
+ success: r.success,
42989
+ durationMs: r.durationMs
42990
+ });
42966
42991
  await postProgress(config, "PM", `${tasks.length} task(s)`);
42967
42992
  return tasks;
42968
42993
  },
@@ -42982,7 +43007,13 @@ ${task.description}${fb}`
42982
43007
  emitStageEvent2(`impl-${task.id}`, r.success ? "completed" : "failed", {
42983
43008
  durationMs: r.durationMs
42984
43009
  });
42985
- recordOutcome(task.id, "code_generation", r.success, r.durationMs);
43010
+ recordOutcome({
43011
+ taskId: task.id,
43012
+ category: "code_generation",
43013
+ cli: r.cli,
43014
+ success: r.success,
43015
+ durationMs: r.durationMs
43016
+ });
42986
43017
  recordRoutingExperience("code_generation", r.success, r.durationMs);
42987
43018
  await postProgress(config, `Code [${task.id}]`, `Done (${r.durationMs}ms)`);
42988
43019
  return r.text || `[Implementation failed: ${r.error}]`;
@@ -43005,7 +43036,13 @@ Verdict: PASS/NEEDS_WORK/REJECT`
43005
43036
  emitStageEvent2(`qa-${task.id}`, review.verdict === "pass" ? "completed" : "failed", {
43006
43037
  durationMs: r.durationMs
43007
43038
  });
43008
- recordOutcome(task.id, "code_review", review.verdict === "pass", r.durationMs);
43039
+ recordOutcome({
43040
+ taskId: task.id,
43041
+ category: "code_review",
43042
+ cli: r.cli,
43043
+ success: review.verdict === "pass",
43044
+ durationMs: r.durationMs
43045
+ });
43009
43046
  if (review.verdict === "pass") {
43010
43047
  recordLearning(`Task "${task.title}" passed QA`, 0.8, "pipeline-qa");
43011
43048
  } else {
@@ -43027,7 +43064,13 @@ Verdict: PASS/NEEDS_WORK/REJECT`
43027
43064
  const passed = result.verdict !== "fail";
43028
43065
  const ms = getTimeProvider().now() - start;
43029
43066
  emitStageEvent2("security", passed ? "completed" : "failed", { durationMs: ms });
43030
- recordOutcome("security", "security_review", passed, ms);
43067
+ recordOutcome({
43068
+ taskId: "security",
43069
+ category: "security_review",
43070
+ cli: void 0,
43071
+ success: passed,
43072
+ durationMs: ms
43073
+ });
43031
43074
  await postProgress(config, "Security", passed ? "Passed" : `BLOCKED: ${result.details}`);
43032
43075
  flushPipelineMemory();
43033
43076
  return { passed, feedback: result.details };
@@ -43772,7 +43815,7 @@ async function extractSymbolsForTask(task) {
43772
43815
  }
43773
43816
  async function queryResearchRegistry(task) {
43774
43817
  try {
43775
- const { synthesizeResearch: synthesizeResearch2 } = await import("./research-helpers-synthesize-K2UCJQQG.js");
43818
+ const { synthesizeResearch: synthesizeResearch2 } = await import("./research-helpers-synthesize-77TLYSW4.js");
43776
43819
  const topic = task.split(/[.!?\n]/).filter((s) => s.trim().length > 10)[0]?.trim();
43777
43820
  if (topic === void 0) return null;
43778
43821
  const result = await synthesizeResearch2(topic.slice(0, 50));
@@ -43857,7 +43900,7 @@ function createScanStageWrapper() {
43857
43900
  try {
43858
43901
  const slug = ctx.task.match(/([a-zA-Z0-9._-]+\/[a-zA-Z0-9._-]+)/)?.[1];
43859
43902
  if (slug !== void 0) {
43860
- const { generateSecurityPlan: generateSecurityPlan2 } = await import("./repo-security-plan-AGRU72DL.js");
43903
+ const { generateSecurityPlan: generateSecurityPlan2 } = await import("./repo-security-plan-HNLMF7J7.js");
43861
43904
  const plan = await generateSecurityPlan2({ repo: slug, maxScanners: 10 });
43862
43905
  const recs = plan.recommendations.slice(0, 5).map((r) => `${r.priority}: ${r.displayName} (${r.category})`).join("; ");
43863
43906
  ctx.sharedMemory.write("scan", "decision", { recommendations: recs });
@@ -49260,7 +49303,7 @@ function createDeprecatedModeFallback(requestedMode, policyConfig) {
49260
49303
  logger46.warn(`Sandbox mode "${requestedMode}" is no longer supported; using "policy" mode`, {
49261
49304
  requestedMode,
49262
49305
  actualMode: "policy",
49263
- reason: "In-process Docker/Deno executors were deleted in #2551. Use the OpenCode sandbox bootstrap for real isolation (NEXUS_SANDBOX environment variable, see docs/getting-started/SANDBOXED-USAGE.md)."
49306
+ reason: "In-process Docker/Deno executors were deleted in #2551. Use the OpenCode sandbox bootstrap for real isolation (NEXUS_SANDBOX environment variable, see docs/guides/SANDBOXED-USAGE.md)."
49264
49307
  });
49265
49308
  const executor = new PolicySandboxExecutor(policyConfig);
49266
49309
  return {
@@ -49424,7 +49467,7 @@ var GitHubTaskTracker = class {
49424
49467
  cachedProvider = null;
49425
49468
  async getProvider() {
49426
49469
  if (this.cachedProvider !== null) return this.cachedProvider;
49427
- const { createScmProvider } = await import("./factory-BUUXNGIB.js");
49470
+ const { createScmProvider } = await import("./factory-DN7SJZ5Z.js");
49428
49471
  const result = await createScmProvider({ repo: this.config.repo ?? "" });
49429
49472
  if (!result.ok) throw new Error(`SCM provider error: ${result.error.message}`);
49430
49473
  this.cachedProvider = result.value;
@@ -50129,4 +50172,4 @@ export {
50129
50172
  detectBackend,
50130
50173
  createTaskTracker
50131
50174
  };
50132
- //# sourceMappingURL=chunk-MGYNV3EX.js.map
50175
+ //# sourceMappingURL=chunk-3ENBGGYA.js.map