nexus-agents 2.79.3 → 2.80.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 (127) hide show
  1. package/README.md +2 -2
  2. package/dist/{child-mcp-config-CTO2MBRM.js → child-mcp-config-SM5I7USN.js} +3 -3
  3. package/dist/{chunk-YXWGEIQR.js → chunk-2DBPZQLO.js} +8 -5
  4. package/dist/chunk-2DBPZQLO.js.map +1 -0
  5. package/dist/chunk-2JQXC3CK.js +317 -0
  6. package/dist/chunk-2JQXC3CK.js.map +1 -0
  7. package/dist/{chunk-6E3NMMEY.js → chunk-3RZWLQSC.js} +2 -2
  8. package/dist/{chunk-6E3NMMEY.js.map → chunk-3RZWLQSC.js.map} +1 -1
  9. package/dist/{chunk-2UYTFLMO.js → chunk-4XGKCVJL.js} +2 -2
  10. package/dist/{chunk-SWFJU3W2.js → chunk-6CJIKX6I.js} +63 -51
  11. package/dist/chunk-6CJIKX6I.js.map +1 -0
  12. package/dist/{chunk-3NIPH6UP.js → chunk-AYZ6P7CK.js} +2 -2
  13. package/dist/{chunk-HYU4GZY6.js → chunk-BSIGP5XF.js} +2 -2
  14. package/dist/{chunk-GONMG4NM.js → chunk-CTSESEFA.js} +2 -2
  15. package/dist/{chunk-FVPYP5DD.js → chunk-EKRMWVAH.js} +4 -4
  16. package/dist/{chunk-7XCUZI4G.js → chunk-EVZ7YR7H.js} +4 -4
  17. package/dist/{chunk-L6SCKLGO.js → chunk-FAJAWO42.js} +3 -3
  18. package/dist/{chunk-5O6XLBPP.js → chunk-FJHZW7CR.js} +2 -2
  19. package/dist/{chunk-HB4MIDHJ.js → chunk-GNRANMQ3.js} +122 -72
  20. package/dist/chunk-GNRANMQ3.js.map +1 -0
  21. package/dist/{chunk-KT5FIBWS.js → chunk-HBKZ2DJK.js} +2 -2
  22. package/dist/{chunk-2YPG6PDG.js → chunk-J5XEJHIQ.js} +3 -3
  23. package/dist/{chunk-ZVCED4Z4.js → chunk-JLWKHYIU.js} +2 -2
  24. package/dist/{chunk-DLXT23AC.js → chunk-JXDDSNEK.js} +2 -2
  25. package/dist/{chunk-Q5CFPIJ5.js → chunk-OO6MTUDS.js} +4 -4
  26. package/dist/chunk-Q2U6SFN2.js +136 -0
  27. package/dist/chunk-Q2U6SFN2.js.map +1 -0
  28. package/dist/{chunk-6TFTVW77.js → chunk-QVHXEQFM.js} +3 -3
  29. package/dist/{chunk-FJWWSVWB.js → chunk-RIUUFBX4.js} +2 -2
  30. package/dist/{chunk-DNO2INX5.js → chunk-SHVGZK4A.js} +4 -4
  31. package/dist/{chunk-VIQOVK4E.js → chunk-SJUSQGKH.js} +82 -186
  32. package/dist/chunk-SJUSQGKH.js.map +1 -0
  33. package/dist/{chunk-JI7S55R3.js → chunk-UGXR4PAY.js} +35 -9
  34. package/dist/chunk-UGXR4PAY.js.map +1 -0
  35. package/dist/{chunk-SD76JZBG.js → chunk-UVALD724.js} +2 -2
  36. package/dist/{chunk-K2QILJG4.js → chunk-VS4KB3AX.js} +33 -9
  37. package/dist/chunk-VS4KB3AX.js.map +1 -0
  38. package/dist/{chunk-PLX6FCFC.js → chunk-YGKPWUJ6.js} +2 -2
  39. package/dist/{chunk-WDYCIJWN.js → chunk-YMT6H2HQ.js} +13 -14
  40. package/dist/chunk-YMT6H2HQ.js.map +1 -0
  41. package/dist/{chunk-D6TM2VHX.js → chunk-ZU2Q3DWE.js} +49 -24
  42. package/dist/chunk-ZU2Q3DWE.js.map +1 -0
  43. package/dist/{cli-circuit-breaker-I74ZQ44Q.js → cli-circuit-breaker-JGX54DAD.js} +5 -5
  44. package/dist/cli.d.ts +1 -1
  45. package/dist/cli.js +574 -531
  46. package/dist/cli.js.map +1 -1
  47. package/dist/{composite-router-V3OC57IE.js → composite-router-UYFYSMBT.js} +3 -3
  48. package/dist/{consensus-vote-ESFPGEJE.js → consensus-vote-BZ6JSN67.js} +12 -12
  49. package/dist/{context-retriever-MB3D7KS6.js → context-retriever-G23VVJ5S.js} +6 -6
  50. package/dist/{doctor-deep-KQ765XZA.js → doctor-deep-OF2LXZ6A.js} +4 -4
  51. package/dist/expert-bridge-6ZLD2NWD.js +11 -0
  52. package/dist/{factory-LHHYDVZX.js → factory-I54TX7OY.js} +5 -5
  53. package/dist/factory-UHDCLEUE.js +14 -0
  54. package/dist/index.d.ts +31 -7
  55. package/dist/index.js +31 -29
  56. package/dist/index.js.map +1 -1
  57. package/dist/{init-opencode-GXZN2W5S.js → init-opencode-FE7HVWQL.js} +6 -6
  58. package/dist/issue-triage-7NR5NQUY.js +15 -0
  59. package/dist/{learning-persistence-Q3HTOGTU.js → learning-persistence-TGOBRUUU.js} +2 -2
  60. package/dist/{pr-reviewer-helpers-XCY7HOPE.js → pr-reviewer-helpers-L4L324FQ.js} +2 -2
  61. package/dist/{registry-command-6E4YKAMT.js → registry-command-NZLX7ZFV.js} +3 -3
  62. package/dist/{repo-security-plan-AGRU72DL.js → repo-security-plan-74GJWJSV.js} +4 -4
  63. package/dist/{research-helpers-synthesize-K2UCJQQG.js → research-helpers-synthesize-LFPEXRIV.js} +4 -4
  64. package/dist/{routing-memory-3B6DDZ76.js → routing-memory-Y2LSEQVS.js} +3 -3
  65. package/dist/{session-memory-L7EQIY2O.js → session-memory-RCNQJDJR.js} +4 -4
  66. package/dist/{setup-command-QSAGFMGN.js → setup-command-ZPLPOJF2.js} +13 -10
  67. package/dist/setup-config-F7VRWXY3.js +10 -0
  68. package/dist/{setup-custom-api-IBDV654K.js → setup-custom-api-XTJ6YZM6.js} +5 -5
  69. package/dist/{tool-memory-6HCHQLAN.js → tool-memory-COZK6SR7.js} +5 -5
  70. package/dist/{weather-report-ER3WUZ7S.js → weather-report-O4XOYGPK.js} +3 -3
  71. package/package.json +4 -4
  72. package/scripts/postinstall.js +1 -1
  73. package/dist/chunk-7BMOZJYS.js +0 -83
  74. package/dist/chunk-7BMOZJYS.js.map +0 -1
  75. package/dist/chunk-D6TM2VHX.js.map +0 -1
  76. package/dist/chunk-HB4MIDHJ.js.map +0 -1
  77. package/dist/chunk-JI7S55R3.js.map +0 -1
  78. package/dist/chunk-K2QILJG4.js.map +0 -1
  79. package/dist/chunk-SWFJU3W2.js.map +0 -1
  80. package/dist/chunk-VIQOVK4E.js.map +0 -1
  81. package/dist/chunk-WDYCIJWN.js.map +0 -1
  82. package/dist/chunk-YXWGEIQR.js.map +0 -1
  83. package/dist/expert-bridge-JKLC57IC.js +0 -10
  84. package/dist/factory-BUUXNGIB.js +0 -14
  85. package/dist/issue-triage-RMXPDZ2K.js +0 -15
  86. package/dist/setup-config-EQT24DD4.js +0 -10
  87. /package/dist/{child-mcp-config-CTO2MBRM.js.map → child-mcp-config-SM5I7USN.js.map} +0 -0
  88. /package/dist/{chunk-2UYTFLMO.js.map → chunk-4XGKCVJL.js.map} +0 -0
  89. /package/dist/{chunk-3NIPH6UP.js.map → chunk-AYZ6P7CK.js.map} +0 -0
  90. /package/dist/{chunk-HYU4GZY6.js.map → chunk-BSIGP5XF.js.map} +0 -0
  91. /package/dist/{chunk-GONMG4NM.js.map → chunk-CTSESEFA.js.map} +0 -0
  92. /package/dist/{chunk-FVPYP5DD.js.map → chunk-EKRMWVAH.js.map} +0 -0
  93. /package/dist/{chunk-7XCUZI4G.js.map → chunk-EVZ7YR7H.js.map} +0 -0
  94. /package/dist/{chunk-L6SCKLGO.js.map → chunk-FAJAWO42.js.map} +0 -0
  95. /package/dist/{chunk-5O6XLBPP.js.map → chunk-FJHZW7CR.js.map} +0 -0
  96. /package/dist/{chunk-KT5FIBWS.js.map → chunk-HBKZ2DJK.js.map} +0 -0
  97. /package/dist/{chunk-2YPG6PDG.js.map → chunk-J5XEJHIQ.js.map} +0 -0
  98. /package/dist/{chunk-ZVCED4Z4.js.map → chunk-JLWKHYIU.js.map} +0 -0
  99. /package/dist/{chunk-DLXT23AC.js.map → chunk-JXDDSNEK.js.map} +0 -0
  100. /package/dist/{chunk-Q5CFPIJ5.js.map → chunk-OO6MTUDS.js.map} +0 -0
  101. /package/dist/{chunk-6TFTVW77.js.map → chunk-QVHXEQFM.js.map} +0 -0
  102. /package/dist/{chunk-FJWWSVWB.js.map → chunk-RIUUFBX4.js.map} +0 -0
  103. /package/dist/{chunk-DNO2INX5.js.map → chunk-SHVGZK4A.js.map} +0 -0
  104. /package/dist/{chunk-SD76JZBG.js.map → chunk-UVALD724.js.map} +0 -0
  105. /package/dist/{chunk-PLX6FCFC.js.map → chunk-YGKPWUJ6.js.map} +0 -0
  106. /package/dist/{cli-circuit-breaker-I74ZQ44Q.js.map → cli-circuit-breaker-JGX54DAD.js.map} +0 -0
  107. /package/dist/{composite-router-V3OC57IE.js.map → composite-router-UYFYSMBT.js.map} +0 -0
  108. /package/dist/{consensus-vote-ESFPGEJE.js.map → consensus-vote-BZ6JSN67.js.map} +0 -0
  109. /package/dist/{context-retriever-MB3D7KS6.js.map → context-retriever-G23VVJ5S.js.map} +0 -0
  110. /package/dist/{doctor-deep-KQ765XZA.js.map → doctor-deep-OF2LXZ6A.js.map} +0 -0
  111. /package/dist/{expert-bridge-JKLC57IC.js.map → expert-bridge-6ZLD2NWD.js.map} +0 -0
  112. /package/dist/{factory-BUUXNGIB.js.map → factory-I54TX7OY.js.map} +0 -0
  113. /package/dist/{factory-LHHYDVZX.js.map → factory-UHDCLEUE.js.map} +0 -0
  114. /package/dist/{init-opencode-GXZN2W5S.js.map → init-opencode-FE7HVWQL.js.map} +0 -0
  115. /package/dist/{issue-triage-RMXPDZ2K.js.map → issue-triage-7NR5NQUY.js.map} +0 -0
  116. /package/dist/{learning-persistence-Q3HTOGTU.js.map → learning-persistence-TGOBRUUU.js.map} +0 -0
  117. /package/dist/{pr-reviewer-helpers-XCY7HOPE.js.map → pr-reviewer-helpers-L4L324FQ.js.map} +0 -0
  118. /package/dist/{registry-command-6E4YKAMT.js.map → registry-command-NZLX7ZFV.js.map} +0 -0
  119. /package/dist/{repo-security-plan-AGRU72DL.js.map → repo-security-plan-74GJWJSV.js.map} +0 -0
  120. /package/dist/{research-helpers-synthesize-K2UCJQQG.js.map → research-helpers-synthesize-LFPEXRIV.js.map} +0 -0
  121. /package/dist/{routing-memory-3B6DDZ76.js.map → routing-memory-Y2LSEQVS.js.map} +0 -0
  122. /package/dist/{session-memory-L7EQIY2O.js.map → session-memory-RCNQJDJR.js.map} +0 -0
  123. /package/dist/{setup-command-QSAGFMGN.js.map → setup-command-ZPLPOJF2.js.map} +0 -0
  124. /package/dist/{setup-config-EQT24DD4.js.map → setup-config-F7VRWXY3.js.map} +0 -0
  125. /package/dist/{setup-custom-api-IBDV654K.js.map → setup-custom-api-XTJ6YZM6.js.map} +0 -0
  126. /package/dist/{tool-memory-6HCHQLAN.js.map → tool-memory-COZK6SR7.js.map} +0 -0
  127. /package/dist/{weather-report-ER3WUZ7S.js.map → weather-report-O4XOYGPK.js.map} +0 -0
@@ -4,7 +4,7 @@ import {
4
4
  getErrorMessage,
5
5
  getTimeProvider,
6
6
  ok
7
- } from "./chunk-WDYCIJWN.js";
7
+ } from "./chunk-YMT6H2HQ.js";
8
8
 
9
9
  // src/context/session-memory.ts
10
10
  import * as fs from "fs";
@@ -351,4 +351,4 @@ export {
351
351
  SessionMemory,
352
352
  createSessionMemory
353
353
  };
354
- //# sourceMappingURL=chunk-3NIPH6UP.js.map
354
+ //# sourceMappingURL=chunk-AYZ6P7CK.js.map
@@ -5,7 +5,7 @@ import {
5
5
  MCP_TIMEOUTS,
6
6
  TEST_TIMEOUTS,
7
7
  WORKFLOW_TIMEOUTS
8
- } from "./chunk-WDYCIJWN.js";
8
+ } from "./chunk-YMT6H2HQ.js";
9
9
 
10
10
  // src/config/defaults-env.ts
11
11
  function parseIntEnv(envKey, fallback) {
@@ -399,4 +399,4 @@ export {
399
399
  CUSTOM_API_DEFAULT_MODEL,
400
400
  DEFAULTS
401
401
  };
402
- //# sourceMappingURL=chunk-HYU4GZY6.js.map
402
+ //# sourceMappingURL=chunk-BSIGP5XF.js.map
@@ -2,7 +2,7 @@ import {
2
2
  createLogger,
3
3
  err,
4
4
  ok
5
- } from "./chunk-WDYCIJWN.js";
5
+ } from "./chunk-YMT6H2HQ.js";
6
6
 
7
7
  // src/scm/token-resolver.ts
8
8
  import { execFile } from "child_process";
@@ -87,4 +87,4 @@ export {
87
87
  hasToken,
88
88
  getTokenEnvVars
89
89
  };
90
- //# sourceMappingURL=chunk-GONMG4NM.js.map
90
+ //# sourceMappingURL=chunk-CTSESEFA.js.map
@@ -1,14 +1,14 @@
1
1
  import {
2
2
  resolveToken
3
- } from "./chunk-GONMG4NM.js";
3
+ } from "./chunk-CTSESEFA.js";
4
4
  import {
5
5
  GitHubProvider,
6
6
  ScmError
7
- } from "./chunk-SD76JZBG.js";
7
+ } from "./chunk-UVALD724.js";
8
8
  import {
9
9
  err,
10
10
  ok
11
- } from "./chunk-WDYCIJWN.js";
11
+ } from "./chunk-YMT6H2HQ.js";
12
12
 
13
13
  // src/scm/factory.ts
14
14
  async function createScmProvider(config) {
@@ -41,4 +41,4 @@ export {
41
41
  createScmProvider,
42
42
  createGitHubProvider
43
43
  };
44
- //# sourceMappingURL=chunk-FVPYP5DD.js.map
44
+ //# sourceMappingURL=chunk-EKRMWVAH.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  OpenAIAdapter
3
- } from "./chunk-L6SCKLGO.js";
3
+ } from "./chunk-FAJAWO42.js";
4
4
  import {
5
5
  ConfigError,
6
6
  createLogger,
@@ -9,10 +9,10 @@ import {
9
9
  getTimeProvider,
10
10
  lookupInTreeCapability,
11
11
  ok
12
- } from "./chunk-WDYCIJWN.js";
12
+ } from "./chunk-YMT6H2HQ.js";
13
13
  import {
14
14
  getNexusDataDir
15
- } from "./chunk-7BMOZJYS.js";
15
+ } from "./chunk-2JQXC3CK.js";
16
16
 
17
17
  // src/config/opencode-bridge.ts
18
18
  import { readFileSync } from "fs";
@@ -307,4 +307,4 @@ export {
307
307
  discoverModels,
308
308
  buildOpenAICompatAdapters
309
309
  };
310
- //# sourceMappingURL=chunk-7XCUZI4G.js.map
310
+ //# sourceMappingURL=chunk-EVZ7YR7H.js.map
@@ -3,14 +3,14 @@ import {
3
3
  createStream,
4
4
  requireApiKey,
5
5
  validateApiKeyPresence
6
- } from "./chunk-PLX6FCFC.js";
6
+ } from "./chunk-YGKPWUJ6.js";
7
7
  import {
8
8
  ModelCapability,
9
9
  err,
10
10
  getCliModelName,
11
11
  getTokenEstimator,
12
12
  ok
13
- } from "./chunk-WDYCIJWN.js";
13
+ } from "./chunk-YMT6H2HQ.js";
14
14
 
15
15
  // src/adapters/openai-types.ts
16
16
  var OPENAI_MODELS = {
@@ -553,4 +553,4 @@ export {
553
553
  OpenAIAdapter,
554
554
  createOpenAIAdapter
555
555
  };
556
- //# sourceMappingURL=chunk-L6SCKLGO.js.map
556
+ //# sourceMappingURL=chunk-FAJAWO42.js.map
@@ -7,7 +7,7 @@ import {
7
7
  err,
8
8
  getErrorMessage,
9
9
  ok
10
- } from "./chunk-WDYCIJWN.js";
10
+ } from "./chunk-YMT6H2HQ.js";
11
11
 
12
12
  // src/cli/research-helpers-synthesize.ts
13
13
  import { z } from "zod";
@@ -1015,4 +1015,4 @@ export {
1015
1015
  AttributedInsightSchema,
1016
1016
  synthesizeResearch
1017
1017
  };
1018
- //# sourceMappingURL=chunk-5O6XLBPP.js.map
1018
+ //# sourceMappingURL=chunk-FJHZW7CR.js.map
@@ -7,10 +7,10 @@ import {
7
7
  import {
8
8
  getTokenEnvVars,
9
9
  resolveToken
10
- } from "./chunk-GONMG4NM.js";
10
+ } from "./chunk-CTSESEFA.js";
11
11
  import {
12
12
  executeExpert
13
- } from "./chunk-K2QILJG4.js";
13
+ } from "./chunk-VS4KB3AX.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-6CJIKX6I.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-FJHZW7CR.js";
49
49
  import {
50
50
  IssueTriage,
51
51
  sanitizeInput
52
- } from "./chunk-6TFTVW77.js";
52
+ } from "./chunk-QVHXEQFM.js";
53
53
  import {
54
54
  generateSecurityPlan
55
- } from "./chunk-FJWWSVWB.js";
55
+ } from "./chunk-RIUUFBX4.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-SHVGZK4A.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-OO6MTUDS.js";
76
76
  import {
77
77
  DEFAULT_TASK_TTL_MS,
78
78
  DEFAULT_TOOL_RATE_LIMITS,
79
- clampTaskTtl,
79
+ clampTaskTtl
80
+ } from "./chunk-SJUSQGKH.js";
81
+ import {
80
82
  getAvailabilityCache,
81
83
  resolveFallback
82
- } from "./chunk-VIQOVK4E.js";
84
+ } from "./chunk-Q2U6SFN2.js";
83
85
  import {
84
86
  DEFAULTS
85
- } from "./chunk-HYU4GZY6.js";
87
+ } from "./chunk-BSIGP5XF.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-ZU2Q3DWE.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-AYZ6P7CK.js";
114
116
  import {
115
117
  AGENT_ROUTER_TIMEOUTS,
116
118
  API_TIMEOUTS,
@@ -180,11 +182,11 @@ import {
180
182
  resolveModelIdentitySync,
181
183
  toExpertTaskAnalysisResult,
182
184
  withStep
183
- } from "./chunk-WDYCIJWN.js";
185
+ } from "./chunk-YMT6H2HQ.js";
184
186
  import {
185
187
  getNexusDataDir,
186
188
  nexusDataPath
187
- } from "./chunk-7BMOZJYS.js";
189
+ } from "./chunk-2JQXC3CK.js";
188
190
 
189
191
  // src/agents/state-machine-types.ts
190
192
  var VALID_TRANSITIONS = /* @__PURE__ */ new Map([
@@ -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-G23VVJ5S.js");
26678
26680
  const ctx = await getContextForTask2({
26679
26681
  task: taskCandidate,
26680
26682
  category: inferTaskCategory2(taskCandidate),
@@ -28002,7 +28004,9 @@ function extractWaveAttribution(event) {
28002
28004
 
28003
28005
  // src/pipeline/pipeline-runner.ts
28004
28006
  var pipelineLogger = createLogger({ component: "PipelineRunner" });
28005
- var DEFAULT_RUNS_DIR = "./runs";
28007
+ function getDefaultRunsDir() {
28008
+ return nexusDataPath("runs");
28009
+ }
28006
28010
  var PipelineRunner = class {
28007
28011
  /** Compiles a PlanContract into a CompiledPipeline. */
28008
28012
  compile(plan, options) {
@@ -28121,7 +28125,7 @@ function mapNodeStatus(status) {
28121
28125
  function createTraceContext(task, options) {
28122
28126
  const bus = options?.eventBus;
28123
28127
  const writer = bus !== void 0 ? new TraceWriter(bus, {
28124
- runsDir: options?.runsDir ?? DEFAULT_RUNS_DIR,
28128
+ runsDir: options?.runsDir ?? getDefaultRunsDir(),
28125
28129
  runId: task.id
28126
28130
  }) : void 0;
28127
28131
  return { bus, writer };
@@ -28227,7 +28231,8 @@ var trustTierRule = {
28227
28231
  evaluate(context) {
28228
28232
  const state = context.pipelineState;
28229
28233
  const tierVal = state["trustTier"];
28230
- const tier = typeof tierVal === "number" ? tierVal : void 0;
28234
+ const numericTier = typeof tierVal === "number" ? tierVal : typeof tierVal === "string" ? Number(tierVal) : Number.NaN;
28235
+ const tier = Number.isFinite(numericTier) ? numericTier : void 0;
28231
28236
  if (tier !== void 0 && tier >= 3 && context.stageType === "execute") {
28232
28237
  return {
28233
28238
  allow: false,
@@ -29412,10 +29417,14 @@ function createMockOrchestrator() {
29412
29417
  async function raceAgainstDeadline(promise, deadlineMs, onTimeout) {
29413
29418
  const startedAt = Date.now();
29414
29419
  let timer;
29415
- const timeoutP = new Promise((resolve19) => {
29420
+ const timeoutP = new Promise((resolve19, reject) => {
29416
29421
  timer = setTimeout(
29417
29422
  () => {
29418
- resolve19(onTimeout(Date.now() - startedAt));
29423
+ try {
29424
+ resolve19(onTimeout(Date.now() - startedAt));
29425
+ } catch (err2) {
29426
+ reject(err2 instanceof Error ? err2 : new Error(String(err2)));
29427
+ }
29419
29428
  },
29420
29429
  Math.max(0, deadlineMs)
29421
29430
  );
@@ -35473,7 +35482,7 @@ function handleExpertFailure(task, expert, errorMsg, durationMs) {
35473
35482
  });
35474
35483
  const durationSec = Math.round(durationMs / 1e3);
35475
35484
  const model = expert.modelId ?? "default";
35476
- const timeoutHint = errorMsg.includes("timed out") ? " Hint: omit timeoutMs to use auto-detected timeout (300-600s)." : "";
35485
+ const timeoutHint = errorMsg.includes("timed out") ? ` Hint: client MCP timed out at ${String(durationSec)}s (typically the 60s SDK default). Server budget can be 300-900s but most clients don't honor progress extensions \u2014 see #2631. Workaround: use a client with longer default (Claude Desktop, mcp-inspector --timeout) or shorten the task.` : "";
35477
35486
  return {
35478
35487
  ok: false,
35479
35488
  error: `Expert execution failed after ${String(durationSec)}s (role=${expert.role}, model=${model}): ${errorMsg}${timeoutHint}`
@@ -40704,7 +40713,7 @@ var EMPTY_RESPONSE = {
40704
40713
  source: "not_found"
40705
40714
  };
40706
40715
  async function queryTraceFromDisk(input, runsDir) {
40707
- const dir = runsDir ?? DEFAULT_RUNS_DIR;
40716
+ const dir = runsDir ?? getDefaultRunsDir();
40708
40717
  const tracePath = join8(dir, input.runId, "trace.jsonl");
40709
40718
  const resolvedDir = resolve11(dir);
40710
40719
  const resolvedTrace = resolve11(tracePath);
@@ -41898,7 +41907,7 @@ async function tryIssueTriage(task) {
41898
41907
  try {
41899
41908
  const issueMatch = task.match(/github\.com\/([^/]+\/[^/]+)\/issues\/(\d+)/);
41900
41909
  if (issueMatch === null) return null;
41901
- const { createIssueTriage } = await import("./issue-triage-RMXPDZ2K.js");
41910
+ const { createIssueTriage } = await import("./issue-triage-7NR5NQUY.js");
41902
41911
  const triage = createIssueTriage();
41903
41912
  const owner = issueMatch[1] ?? "";
41904
41913
  const num = issueMatch[2] ?? "";
@@ -41926,7 +41935,7 @@ var VALID_TEMPLATES = /* @__PURE__ */ new Set([
41926
41935
  ]);
41927
41936
  async function classifyWithLLM(task) {
41928
41937
  try {
41929
- const { executeExpert: executeExpert2 } = await import("./expert-bridge-JKLC57IC.js");
41938
+ const { executeExpert: executeExpert2 } = await import("./expert-bridge-6ZLD2NWD.js");
41930
41939
  const prompt = [
41931
41940
  "Classify this task into exactly one pipeline template.",
41932
41941
  "Templates: dev (implementation/bug fix/refactor), research (investigate/evaluate/compare),",
@@ -41994,7 +42003,6 @@ async function runAdaptiveOrchestrator(task, options) {
41994
42003
  confidence: classification.confidence
41995
42004
  });
41996
42005
  const result = await runGraphPipeline(cleanTask, template, options.stages, options);
41997
- recordPipelineOutcome(template.id, classification, result.success);
41998
42006
  return { ...result, selectionMethod, taskClassification: classification };
41999
42007
  }
42000
42008
  function resolveTemplate(templateId) {
@@ -42005,21 +42013,6 @@ function resolveTemplate(templateId) {
42005
42013
  if (fallback !== void 0) return fallback;
42006
42014
  return { id: "dev", name: "Development", stages: [] };
42007
42015
  }
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
42016
 
42024
42017
  // src/security/sarif-types.ts
42025
42018
  import { z as z86 } from "zod";
@@ -42695,22 +42688,30 @@ var logger37 = createLogger({ component: "agent-executor" });
42695
42688
  function emitStageEvent2(stage, status, details) {
42696
42689
  emitPipelineStageEvent("dev-pipeline", stage, status, details);
42697
42690
  }
42698
- function recordOutcome(taskId, category, success, durationMs, extra) {
42691
+ function recordOutcome(args) {
42692
+ if (args.cli === void 0) {
42693
+ logger37.debug("Skipping outcome record \u2014 no cli (bridge failed or non-CLI stage)", {
42694
+ taskId: args.taskId,
42695
+ category: args.category,
42696
+ success: args.success
42697
+ });
42698
+ return;
42699
+ }
42699
42700
  try {
42700
42701
  getOutcomeStore().append({
42701
- id: `pipeline-${taskId}-${String(Date.now())}`,
42702
- cli: "claude",
42703
- category,
42702
+ id: `pipeline-${args.taskId}-${String(Date.now())}`,
42703
+ cli: args.cli,
42704
+ category: args.category,
42704
42705
  model: "pipeline",
42705
- success,
42706
- durationMs,
42706
+ success: args.success,
42707
+ durationMs: args.durationMs,
42707
42708
  timestamp: (/* @__PURE__ */ new Date()).toISOString(),
42708
42709
  source: "delegate",
42709
- routingStage: extra?.routingStage,
42710
- retryCount: extra?.retryCount
42710
+ routingStage: args.routingStage,
42711
+ retryCount: args.retryCount
42711
42712
  });
42712
42713
  } catch (error) {
42713
- logger37.debug("Failed to record outcome", { taskId, error: String(error) });
42714
+ logger37.debug("Failed to record outcome", { taskId: args.taskId, error: String(error) });
42714
42715
  }
42715
42716
  }
42716
42717
  var cachedMemory = null;
@@ -42718,8 +42719,8 @@ var memoryInitPromise = null;
42718
42719
  async function initPipelineMemory() {
42719
42720
  if (cachedMemory !== null) return cachedMemory;
42720
42721
  try {
42721
- const { createSessionMemory: createSessionMemory2 } = await import("./session-memory-L7EQIY2O.js");
42722
- const { getLearningDir } = await import("./learning-persistence-Q3HTOGTU.js");
42722
+ const { createSessionMemory: createSessionMemory2 } = await import("./session-memory-RCNQJDJR.js");
42723
+ const { getLearningDir } = await import("./learning-persistence-TGOBRUUU.js");
42723
42724
  const mem = createSessionMemory2(getLearningDir());
42724
42725
  mem.startSession(`pipeline-${String(Date.now())}`);
42725
42726
  cachedMemory = {
@@ -42774,7 +42775,7 @@ function recordRoutingExperience(category, success, durationMs) {
42774
42775
  callRecord(routingMemoryCache);
42775
42776
  return;
42776
42777
  }
42777
- void import("./routing-memory-3B6DDZ76.js").then(({ createRoutingMemory }) => {
42778
+ void import("./routing-memory-Y2LSEQVS.js").then(({ createRoutingMemory }) => {
42778
42779
  routingMemoryCache = createRoutingMemory();
42779
42780
  callRecord(routingMemoryCache);
42780
42781
  }).catch((error) => {
@@ -42803,7 +42804,7 @@ ${text}` : "";
42803
42804
  }
42804
42805
  async function getWeatherContext() {
42805
42806
  try {
42806
- const { generateWeatherReport: generateWeatherReport2 } = await import("./weather-report-ER3WUZ7S.js");
42807
+ const { generateWeatherReport: generateWeatherReport2 } = await import("./weather-report-O4XOYGPK.js");
42807
42808
  const report = generateWeatherReport2({ includeAdaptive: true });
42808
42809
  const mappings = "recommendedMappings" in report ? report.recommendedMappings : [];
42809
42810
  if (!Array.isArray(mappings) || mappings.length === 0) return "";
@@ -42821,8 +42822,8 @@ ${lines}
42821
42822
  }
42822
42823
  async function getMemoryContext(task) {
42823
42824
  try {
42824
- const { createSessionMemory: createSessionMemory2 } = await import("./session-memory-L7EQIY2O.js");
42825
- const { getLearningDir } = await import("./learning-persistence-Q3HTOGTU.js");
42825
+ const { createSessionMemory: createSessionMemory2 } = await import("./session-memory-RCNQJDJR.js");
42826
+ const { getLearningDir } = await import("./learning-persistence-TGOBRUUU.js");
42826
42827
  const memory = createSessionMemory2(getLearningDir(), { maxLearningsInContext: 10 });
42827
42828
  const learnings = memory.searchLearnings(task.slice(0, 200));
42828
42829
  if (learnings.length === 0) return "";
@@ -42872,8 +42873,15 @@ ${task}`
42872
42873
  const combined = [discover.text, analyze.text].filter(Boolean).join("\n\n");
42873
42874
  const totalMs = discover.durationMs + analyze.durationMs;
42874
42875
  const success = discover.success || analyze.success;
42876
+ const researchCli = discover.cli ?? analyze.cli;
42875
42877
  emitStageEvent2("research", success ? "completed" : "failed", { durationMs: totalMs });
42876
- recordOutcome("research", "research", success, totalMs);
42878
+ recordOutcome({
42879
+ taskId: "research",
42880
+ category: "research",
42881
+ cli: researchCli,
42882
+ success,
42883
+ durationMs: totalMs
42884
+ });
42877
42885
  if (success && combined.length > 50) {
42878
42886
  recordLearning(
42879
42887
  `Research for "${task.slice(0, 80)}": ${combined.slice(0, 200)}`,
@@ -42904,7 +42912,13 @@ ${contextBlock}`;
42904
42912
  await postProgress(config, "Plan", feedback !== void 0 ? "Revising..." : "Planning...");
42905
42913
  const r = await executeExpert("architecture", prompt);
42906
42914
  emitStageEvent2("plan", r.success ? "completed" : "failed", { durationMs: r.durationMs });
42907
- recordOutcome("plan", "architecture", r.success, r.durationMs);
42915
+ recordOutcome({
42916
+ taskId: "plan",
42917
+ category: "architecture",
42918
+ cli: r.cli,
42919
+ success: r.success,
42920
+ durationMs: r.durationMs
42921
+ });
42908
42922
  await postProgress(config, "Plan", `Done (${r.text.length} chars, ${r.durationMs}ms)`);
42909
42923
  return r.text || prompt;
42910
42924
  },
@@ -42914,7 +42928,7 @@ ${contextBlock}`;
42914
42928
  const strategy = config.votingStrategy ?? "higher_order";
42915
42929
  await postProgress(config, "Vote", `Running consensus with ${strategy} strategy...`);
42916
42930
  try {
42917
- const { executeVoting } = await import("./consensus-vote-ESFPGEJE.js");
42931
+ const { executeVoting } = await import("./consensus-vote-BZ6JSN67.js");
42918
42932
  const votingResult = await executeVoting(
42919
42933
  {
42920
42934
  proposal: plan.slice(0, 4e3),
@@ -42932,7 +42946,13 @@ ${contextBlock}`;
42932
42946
  const feedback = votingResult.votes.filter((v) => v.vote.decision !== "approve").map((v) => v.vote.reasoning).join("\n");
42933
42947
  const ms = getTimeProvider().now() - start;
42934
42948
  emitStageEvent2("vote", "completed", { durationMs: ms });
42935
- recordOutcome("vote", "planning", approved, ms);
42949
+ recordOutcome({
42950
+ taskId: "vote",
42951
+ category: "planning",
42952
+ cli: void 0,
42953
+ success: approved,
42954
+ durationMs: ms
42955
+ });
42936
42956
  await postProgress(
42937
42957
  config,
42938
42958
  "Vote",
@@ -42945,7 +42965,13 @@ ${contextBlock}`;
42945
42965
  } catch (error) {
42946
42966
  const msg = error instanceof Error ? error.message : String(error);
42947
42967
  emitStageEvent2("vote", "failed", { error: msg });
42948
- recordOutcome("vote", "planning", false, getTimeProvider().now() - start);
42968
+ recordOutcome({
42969
+ taskId: "vote",
42970
+ category: "planning",
42971
+ cli: void 0,
42972
+ success: false,
42973
+ durationMs: getTimeProvider().now() - start
42974
+ });
42949
42975
  await postProgress(config, "Vote", `Error (auto-approved): ${msg.slice(0, 200)}`);
42950
42976
  return { kind: "approved", approvalPercentage: 0 };
42951
42977
  }
@@ -42962,7 +42988,13 @@ ${plan}`
42962
42988
  );
42963
42989
  const tasks = parseTasksFromResponse(r.text, plan);
42964
42990
  emitStageEvent2("decompose", "completed", { durationMs: r.durationMs });
42965
- recordOutcome("decompose", "planning", r.success, r.durationMs);
42991
+ recordOutcome({
42992
+ taskId: "decompose",
42993
+ category: "planning",
42994
+ cli: r.cli,
42995
+ success: r.success,
42996
+ durationMs: r.durationMs
42997
+ });
42966
42998
  await postProgress(config, "PM", `${tasks.length} task(s)`);
42967
42999
  return tasks;
42968
43000
  },
@@ -42982,7 +43014,13 @@ ${task.description}${fb}`
42982
43014
  emitStageEvent2(`impl-${task.id}`, r.success ? "completed" : "failed", {
42983
43015
  durationMs: r.durationMs
42984
43016
  });
42985
- recordOutcome(task.id, "code_generation", r.success, r.durationMs);
43017
+ recordOutcome({
43018
+ taskId: task.id,
43019
+ category: "code_generation",
43020
+ cli: r.cli,
43021
+ success: r.success,
43022
+ durationMs: r.durationMs
43023
+ });
42986
43024
  recordRoutingExperience("code_generation", r.success, r.durationMs);
42987
43025
  await postProgress(config, `Code [${task.id}]`, `Done (${r.durationMs}ms)`);
42988
43026
  return r.text || `[Implementation failed: ${r.error}]`;
@@ -43005,7 +43043,13 @@ Verdict: PASS/NEEDS_WORK/REJECT`
43005
43043
  emitStageEvent2(`qa-${task.id}`, review.verdict === "pass" ? "completed" : "failed", {
43006
43044
  durationMs: r.durationMs
43007
43045
  });
43008
- recordOutcome(task.id, "code_review", review.verdict === "pass", r.durationMs);
43046
+ recordOutcome({
43047
+ taskId: task.id,
43048
+ category: "code_review",
43049
+ cli: r.cli,
43050
+ success: review.verdict === "pass",
43051
+ durationMs: r.durationMs
43052
+ });
43009
43053
  if (review.verdict === "pass") {
43010
43054
  recordLearning(`Task "${task.title}" passed QA`, 0.8, "pipeline-qa");
43011
43055
  } else {
@@ -43027,7 +43071,13 @@ Verdict: PASS/NEEDS_WORK/REJECT`
43027
43071
  const passed = result.verdict !== "fail";
43028
43072
  const ms = getTimeProvider().now() - start;
43029
43073
  emitStageEvent2("security", passed ? "completed" : "failed", { durationMs: ms });
43030
- recordOutcome("security", "security_review", passed, ms);
43074
+ recordOutcome({
43075
+ taskId: "security",
43076
+ category: "security_review",
43077
+ cli: void 0,
43078
+ success: passed,
43079
+ durationMs: ms
43080
+ });
43031
43081
  await postProgress(config, "Security", passed ? "Passed" : `BLOCKED: ${result.details}`);
43032
43082
  flushPipelineMemory();
43033
43083
  return { passed, feedback: result.details };
@@ -43772,7 +43822,7 @@ async function extractSymbolsForTask(task) {
43772
43822
  }
43773
43823
  async function queryResearchRegistry(task) {
43774
43824
  try {
43775
- const { synthesizeResearch: synthesizeResearch2 } = await import("./research-helpers-synthesize-K2UCJQQG.js");
43825
+ const { synthesizeResearch: synthesizeResearch2 } = await import("./research-helpers-synthesize-LFPEXRIV.js");
43776
43826
  const topic = task.split(/[.!?\n]/).filter((s) => s.trim().length > 10)[0]?.trim();
43777
43827
  if (topic === void 0) return null;
43778
43828
  const result = await synthesizeResearch2(topic.slice(0, 50));
@@ -43857,7 +43907,7 @@ function createScanStageWrapper() {
43857
43907
  try {
43858
43908
  const slug = ctx.task.match(/([a-zA-Z0-9._-]+\/[a-zA-Z0-9._-]+)/)?.[1];
43859
43909
  if (slug !== void 0) {
43860
- const { generateSecurityPlan: generateSecurityPlan2 } = await import("./repo-security-plan-AGRU72DL.js");
43910
+ const { generateSecurityPlan: generateSecurityPlan2 } = await import("./repo-security-plan-74GJWJSV.js");
43861
43911
  const plan = await generateSecurityPlan2({ repo: slug, maxScanners: 10 });
43862
43912
  const recs = plan.recommendations.slice(0, 5).map((r) => `${r.priority}: ${r.displayName} (${r.category})`).join("; ");
43863
43913
  ctx.sharedMemory.write("scan", "decision", { recommendations: recs });
@@ -49260,7 +49310,7 @@ function createDeprecatedModeFallback(requestedMode, policyConfig) {
49260
49310
  logger46.warn(`Sandbox mode "${requestedMode}" is no longer supported; using "policy" mode`, {
49261
49311
  requestedMode,
49262
49312
  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)."
49313
+ 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
49314
  });
49265
49315
  const executor = new PolicySandboxExecutor(policyConfig);
49266
49316
  return {
@@ -49424,7 +49474,7 @@ var GitHubTaskTracker = class {
49424
49474
  cachedProvider = null;
49425
49475
  async getProvider() {
49426
49476
  if (this.cachedProvider !== null) return this.cachedProvider;
49427
- const { createScmProvider } = await import("./factory-BUUXNGIB.js");
49477
+ const { createScmProvider } = await import("./factory-UHDCLEUE.js");
49428
49478
  const result = await createScmProvider({ repo: this.config.repo ?? "" });
49429
49479
  if (!result.ok) throw new Error(`SCM provider error: ${result.error.message}`);
49430
49480
  this.cachedProvider = result.value;
@@ -49485,7 +49535,7 @@ var JsonTaskTracker = class {
49485
49535
  comments = /* @__PURE__ */ new Map();
49486
49536
  outputPath;
49487
49537
  constructor(config) {
49488
- const dir = config.outputDir ?? ".nexus-pipeline";
49538
+ const dir = config.outputDir ?? nexusDataPath("pipeline");
49489
49539
  this.outputPath = path13.resolve(dir, "tasks.json");
49490
49540
  fs14.mkdirSync(path13.dirname(this.outputPath), { recursive: true });
49491
49541
  }
@@ -50129,4 +50179,4 @@ export {
50129
50179
  detectBackend,
50130
50180
  createTaskTracker
50131
50181
  };
50132
- //# sourceMappingURL=chunk-HB4MIDHJ.js.map
50182
+ //# sourceMappingURL=chunk-GNRANMQ3.js.map