agent-nuvira 2.7.3 → 3.0.1

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 (369) hide show
  1. package/dist/agents/agents/writer-tool-calling.d.ts +14 -0
  2. package/dist/agents/agents/writer-tool-calling.d.ts.map +1 -1
  3. package/dist/agents/agents/writer-tool-calling.js +20 -0
  4. package/dist/agents/agents/writer-tool-calling.js.map +1 -1
  5. package/dist/agents/agents/writer.d.ts.map +1 -1
  6. package/dist/agents/agents/writer.js +15 -4
  7. package/dist/agents/agents/writer.js.map +1 -1
  8. package/dist/agents/edit-module.d.ts +7 -0
  9. package/dist/agents/edit-module.d.ts.map +1 -1
  10. package/dist/agents/edit-module.js +21 -6
  11. package/dist/agents/edit-module.js.map +1 -1
  12. package/dist/agents/orchestrator.d.ts +40 -0
  13. package/dist/agents/orchestrator.d.ts.map +1 -1
  14. package/dist/agents/orchestrator.js +116 -27
  15. package/dist/agents/orchestrator.js.map +1 -1
  16. package/dist/agents/tool-calling-agent.d.ts +19 -0
  17. package/dist/agents/tool-calling-agent.d.ts.map +1 -1
  18. package/dist/agents/tool-calling-agent.js +42 -2
  19. package/dist/agents/tool-calling-agent.js.map +1 -1
  20. package/dist/cli/chat.d.ts +55 -1
  21. package/dist/cli/chat.d.ts.map +1 -1
  22. package/dist/cli/chat.js +278 -72
  23. package/dist/cli/chat.js.map +1 -1
  24. package/dist/cli/cli-program.d.ts +6 -0
  25. package/dist/cli/cli-program.d.ts.map +1 -0
  26. package/dist/cli/cli-program.js +242 -0
  27. package/dist/cli/cli-program.js.map +1 -0
  28. package/dist/cli/edit.d.ts.map +1 -1
  29. package/dist/cli/edit.js +18 -3
  30. package/dist/cli/edit.js.map +1 -1
  31. package/dist/cli/execute.d.ts.map +1 -1
  32. package/dist/cli/execute.js +29 -5
  33. package/dist/cli/execute.js.map +1 -1
  34. package/dist/cli/failover-runner.d.ts +13 -0
  35. package/dist/cli/failover-runner.d.ts.map +1 -1
  36. package/dist/cli/failover-runner.js +11 -0
  37. package/dist/cli/failover-runner.js.map +1 -1
  38. package/dist/cli/gateway.d.ts +16 -0
  39. package/dist/cli/gateway.d.ts.map +1 -1
  40. package/dist/cli/gateway.js +108 -2
  41. package/dist/cli/gateway.js.map +1 -1
  42. package/dist/cli/loop-executor.d.ts.map +1 -1
  43. package/dist/cli/loop-executor.js +245 -12
  44. package/dist/cli/loop-executor.js.map +1 -1
  45. package/dist/cli/plan.d.ts.map +1 -1
  46. package/dist/cli/plan.js +20 -6
  47. package/dist/cli/plan.js.map +1 -1
  48. package/dist/cli/process-control.d.ts +10 -0
  49. package/dist/cli/process-control.d.ts.map +1 -1
  50. package/dist/cli/process-control.js +73 -7
  51. package/dist/cli/process-control.js.map +1 -1
  52. package/dist/cli/router.d.ts +16 -5
  53. package/dist/cli/router.d.ts.map +1 -1
  54. package/dist/cli/router.js +31 -206
  55. package/dist/cli/router.js.map +1 -1
  56. package/dist/config/paths.d.ts +23 -0
  57. package/dist/config/paths.d.ts.map +1 -1
  58. package/dist/config/paths.js +30 -0
  59. package/dist/config/paths.js.map +1 -1
  60. package/dist/config/provider-env.d.ts +37 -0
  61. package/dist/config/provider-env.d.ts.map +1 -0
  62. package/dist/config/provider-env.js +86 -0
  63. package/dist/config/provider-env.js.map +1 -0
  64. package/dist/context/history.d.ts.map +1 -1
  65. package/dist/context/history.js +24 -8
  66. package/dist/context/history.js.map +1 -1
  67. package/dist/context/session-recall.d.ts +30 -0
  68. package/dist/context/session-recall.d.ts.map +1 -1
  69. package/dist/context/session-recall.js +61 -0
  70. package/dist/context/session-recall.js.map +1 -1
  71. package/dist/file.js +0 -1
  72. package/dist/file.js.map +1 -1
  73. package/dist/gateway/adapters.d.ts +10 -0
  74. package/dist/gateway/adapters.d.ts.map +1 -1
  75. package/dist/gateway/adapters.js +4 -1
  76. package/dist/gateway/adapters.js.map +1 -1
  77. package/dist/gateway/dedup.d.ts +105 -0
  78. package/dist/gateway/dedup.d.ts.map +1 -0
  79. package/dist/gateway/dedup.js +160 -0
  80. package/dist/gateway/dedup.js.map +1 -0
  81. package/dist/gateway/heartbeat.d.ts +99 -0
  82. package/dist/gateway/heartbeat.d.ts.map +1 -0
  83. package/dist/gateway/heartbeat.js +122 -0
  84. package/dist/gateway/heartbeat.js.map +1 -0
  85. package/dist/gateway/inbox.d.ts +14 -1
  86. package/dist/gateway/inbox.d.ts.map +1 -1
  87. package/dist/gateway/inbox.js.map +1 -1
  88. package/dist/gateway/platform-config.d.ts +5 -0
  89. package/dist/gateway/platform-config.d.ts.map +1 -1
  90. package/dist/gateway/platform-config.js +8 -13
  91. package/dist/gateway/platform-config.js.map +1 -1
  92. package/dist/gateway/registry.d.ts +47 -0
  93. package/dist/gateway/registry.d.ts.map +1 -1
  94. package/dist/gateway/registry.js +227 -21
  95. package/dist/gateway/registry.js.map +1 -1
  96. package/dist/gateway/whatsapp/baileys-bridge.d.ts +11 -1
  97. package/dist/gateway/whatsapp/baileys-bridge.d.ts.map +1 -1
  98. package/dist/gateway/whatsapp/baileys-bridge.js +64 -1
  99. package/dist/gateway/whatsapp/baileys-bridge.js.map +1 -1
  100. package/dist/gateway/whatsapp/bridge.d.ts +4 -2
  101. package/dist/gateway/whatsapp/bridge.d.ts.map +1 -1
  102. package/dist/gateway/whatsapp/bridge.js.map +1 -1
  103. package/dist/index.js +1 -1
  104. package/dist/index.js.map +1 -1
  105. package/dist/inference/factory.d.ts +16 -0
  106. package/dist/inference/factory.d.ts.map +1 -1
  107. package/dist/inference/factory.js +42 -0
  108. package/dist/inference/factory.js.map +1 -1
  109. package/dist/inference/gemini-adapter.d.ts.map +1 -1
  110. package/dist/inference/gemini-adapter.js +3 -0
  111. package/dist/inference/gemini-adapter.js.map +1 -1
  112. package/dist/inference/interface.d.ts +12 -0
  113. package/dist/inference/interface.d.ts.map +1 -1
  114. package/dist/inference/local-adapter.d.ts +2 -0
  115. package/dist/inference/local-adapter.d.ts.map +1 -1
  116. package/dist/inference/local-adapter.js +36 -5
  117. package/dist/inference/local-adapter.js.map +1 -1
  118. package/dist/inference/native-tools.d.ts +8 -0
  119. package/dist/inference/native-tools.d.ts.map +1 -1
  120. package/dist/inference/native-tools.js +14 -3
  121. package/dist/inference/native-tools.js.map +1 -1
  122. package/dist/inference/tool-call-utils.d.ts +92 -7
  123. package/dist/inference/tool-call-utils.d.ts.map +1 -1
  124. package/dist/inference/tool-call-utils.js +203 -13
  125. package/dist/inference/tool-call-utils.js.map +1 -1
  126. package/dist/learning/auto-router.d.ts.map +1 -1
  127. package/dist/learning/auto-router.js +90 -5
  128. package/dist/learning/auto-router.js.map +1 -1
  129. package/dist/learning/context-budget.d.ts +133 -0
  130. package/dist/learning/context-budget.d.ts.map +1 -0
  131. package/dist/learning/context-budget.js +196 -0
  132. package/dist/learning/context-budget.js.map +1 -0
  133. package/dist/learning/cost-tracker.d.ts.map +1 -1
  134. package/dist/learning/cost-tracker.js +20 -8
  135. package/dist/learning/cost-tracker.js.map +1 -1
  136. package/dist/learning/eval-framework.d.ts.map +1 -1
  137. package/dist/learning/eval-framework.js +6 -2
  138. package/dist/learning/eval-framework.js.map +1 -1
  139. package/dist/learning/failure-bookkeeping.d.ts +19 -0
  140. package/dist/learning/failure-bookkeeping.d.ts.map +1 -1
  141. package/dist/learning/failure-bookkeeping.js +67 -2
  142. package/dist/learning/failure-bookkeeping.js.map +1 -1
  143. package/dist/learning/feedback.d.ts.map +1 -1
  144. package/dist/learning/feedback.js +19 -8
  145. package/dist/learning/feedback.js.map +1 -1
  146. package/dist/learning/model-harness.d.ts +76 -0
  147. package/dist/learning/model-harness.d.ts.map +1 -0
  148. package/dist/learning/model-harness.js +119 -0
  149. package/dist/learning/model-harness.js.map +1 -0
  150. package/dist/learning/model-selection.d.ts +15 -0
  151. package/dist/learning/model-selection.d.ts.map +1 -1
  152. package/dist/learning/model-selection.js +27 -1
  153. package/dist/learning/model-selection.js.map +1 -1
  154. package/dist/learning/provider-fallback.d.ts +12 -0
  155. package/dist/learning/provider-fallback.d.ts.map +1 -1
  156. package/dist/learning/provider-fallback.js +74 -0
  157. package/dist/learning/provider-fallback.js.map +1 -1
  158. package/dist/learning/provider-revival.d.ts +106 -0
  159. package/dist/learning/provider-revival.d.ts.map +1 -0
  160. package/dist/learning/provider-revival.js +154 -0
  161. package/dist/learning/provider-revival.js.map +1 -0
  162. package/dist/learning/resilient-call.d.ts.map +1 -1
  163. package/dist/learning/resilient-call.js +48 -3
  164. package/dist/learning/resilient-call.js.map +1 -1
  165. package/dist/nlu/conversation-gate.d.ts +37 -0
  166. package/dist/nlu/conversation-gate.d.ts.map +1 -1
  167. package/dist/nlu/conversation-gate.js +49 -0
  168. package/dist/nlu/conversation-gate.js.map +1 -1
  169. package/dist/nlu/schema.d.ts +2 -2
  170. package/dist/observability/dag-bridge.d.ts +69 -0
  171. package/dist/observability/dag-bridge.d.ts.map +1 -0
  172. package/dist/observability/dag-bridge.js +56 -0
  173. package/dist/observability/dag-bridge.js.map +1 -0
  174. package/dist/observability/event-bus.d.ts +5 -10
  175. package/dist/observability/event-bus.d.ts.map +1 -1
  176. package/dist/observability/event-bus.js +10 -42
  177. package/dist/observability/event-bus.js.map +1 -1
  178. package/dist/skills/execution-audit.d.ts.map +1 -1
  179. package/dist/skills/execution-audit.js +17 -5
  180. package/dist/skills/execution-audit.js.map +1 -1
  181. package/dist/skills/sandbox-executor.d.ts +12 -1
  182. package/dist/skills/sandbox-executor.d.ts.map +1 -1
  183. package/dist/skills/sandbox-executor.js +28 -6
  184. package/dist/skills/sandbox-executor.js.map +1 -1
  185. package/dist/skills/secret-capture.d.ts +45 -1
  186. package/dist/skills/secret-capture.d.ts.map +1 -1
  187. package/dist/skills/secret-capture.js +82 -19
  188. package/dist/skills/secret-capture.js.map +1 -1
  189. package/dist/skills/skill-env-inventory.d.ts +79 -0
  190. package/dist/skills/skill-env-inventory.d.ts.map +1 -0
  191. package/dist/skills/skill-env-inventory.js +167 -0
  192. package/dist/skills/skill-env-inventory.js.map +1 -0
  193. package/dist/skills/skill-executor.d.ts +2 -0
  194. package/dist/skills/skill-executor.d.ts.map +1 -1
  195. package/dist/skills/skill-executor.js +19 -24
  196. package/dist/skills/skill-executor.js.map +1 -1
  197. package/dist/tools/ask-user.d.ts +14 -1
  198. package/dist/tools/ask-user.d.ts.map +1 -1
  199. package/dist/tools/ask-user.js +25 -1
  200. package/dist/tools/ask-user.js.map +1 -1
  201. package/dist/tools/followup-utils.d.ts +64 -0
  202. package/dist/tools/followup-utils.d.ts.map +1 -0
  203. package/dist/tools/followup-utils.js +158 -0
  204. package/dist/tools/followup-utils.js.map +1 -0
  205. package/dist/tools/loop-skill-hint.d.ts.map +1 -1
  206. package/dist/tools/loop-skill-hint.js +22 -1
  207. package/dist/tools/loop-skill-hint.js.map +1 -1
  208. package/dist/tools/memory-tools.d.ts +35 -0
  209. package/dist/tools/memory-tools.d.ts.map +1 -1
  210. package/dist/tools/memory-tools.js +76 -0
  211. package/dist/tools/memory-tools.js.map +1 -1
  212. package/dist/tools/pipeline-tool.d.ts.map +1 -1
  213. package/dist/tools/pipeline-tool.js +8 -3
  214. package/dist/tools/pipeline-tool.js.map +1 -1
  215. package/dist/tools/registry.d.ts +25 -12
  216. package/dist/tools/registry.d.ts.map +1 -1
  217. package/dist/tools/registry.js +31 -6
  218. package/dist/tools/registry.js.map +1 -1
  219. package/dist/tools/skill-tool.d.ts.map +1 -1
  220. package/dist/tools/skill-tool.js +52 -5
  221. package/dist/tools/skill-tool.js.map +1 -1
  222. package/dist/tools/tool-loop.d.ts +63 -1
  223. package/dist/tools/tool-loop.d.ts.map +1 -1
  224. package/dist/tools/tool-loop.js +305 -66
  225. package/dist/tools/tool-loop.js.map +1 -1
  226. package/dist/tools/toolsets.d.ts +19 -3
  227. package/dist/tools/toolsets.d.ts.map +1 -1
  228. package/dist/tools/toolsets.js +21 -5
  229. package/dist/tools/toolsets.js.map +1 -1
  230. package/dist/utils/env.d.ts.map +1 -1
  231. package/dist/utils/env.js +9 -13
  232. package/dist/utils/env.js.map +1 -1
  233. package/dist/web-dashboard/chat-console.d.ts +13 -1
  234. package/dist/web-dashboard/chat-console.d.ts.map +1 -1
  235. package/dist/web-dashboard/chat-console.js +16 -2
  236. package/dist/web-dashboard/chat-console.js.map +1 -1
  237. package/dist/web-dashboard/hub-data.d.ts +2 -0
  238. package/dist/web-dashboard/hub-data.d.ts.map +1 -1
  239. package/dist/web-dashboard/hub-data.js +4 -0
  240. package/dist/web-dashboard/hub-data.js.map +1 -1
  241. package/dist/web-dashboard/server.d.ts +6 -0
  242. package/dist/web-dashboard/server.d.ts.map +1 -1
  243. package/dist/web-dashboard/server.js +192 -3
  244. package/dist/web-dashboard/server.js.map +1 -1
  245. package/dist/web-dashboard/src/types.d.ts +31 -1
  246. package/dist/web-dashboard/src/types.d.ts.map +1 -1
  247. package/package.json +11 -1
  248. package/src/web-dashboard/public/assets/index-56yPnN_m.js +207 -0
  249. package/src/web-dashboard/public/assets/index-56yPnN_m.js.map +1 -0
  250. package/src/web-dashboard/public/assets/{index-C507EUWf.css → index-Cyd6tIew.css} +1 -1
  251. package/src/web-dashboard/public/index.html +2 -2
  252. package/dist/example.d.ts +0 -1
  253. package/dist/example.d.ts.map +0 -1
  254. package/dist/example.js +0 -3
  255. package/dist/example.js.map +0 -1
  256. package/dist/fresh.d.ts +0 -2
  257. package/dist/fresh.d.ts.map +0 -1
  258. package/dist/fresh.js +0 -2
  259. package/dist/fresh.js.map +0 -1
  260. package/dist/mcp/mcp-dashboard-oauth.d.ts +0 -94
  261. package/dist/mcp/mcp-dashboard-oauth.d.ts.map +0 -1
  262. package/dist/mcp/mcp-dashboard-oauth.js +0 -140
  263. package/dist/mcp/mcp-dashboard-oauth.js.map +0 -1
  264. package/dist/memory/background-sync.d.ts +0 -107
  265. package/dist/memory/background-sync.d.ts.map +0 -1
  266. package/dist/memory/background-sync.js +0 -242
  267. package/dist/memory/background-sync.js.map +0 -1
  268. package/dist/memory/cross-session.d.ts +0 -68
  269. package/dist/memory/cross-session.d.ts.map +0 -1
  270. package/dist/memory/cross-session.js +0 -153
  271. package/dist/memory/cross-session.js.map +0 -1
  272. package/dist/memory/drift-detector.d.ts +0 -76
  273. package/dist/memory/drift-detector.d.ts.map +0 -1
  274. package/dist/memory/drift-detector.js +0 -216
  275. package/dist/memory/drift-detector.js.map +0 -1
  276. package/dist/memory/enhanced-manager.d.ts +0 -105
  277. package/dist/memory/enhanced-manager.d.ts.map +0 -1
  278. package/dist/memory/enhanced-manager.js +0 -280
  279. package/dist/memory/enhanced-manager.js.map +0 -1
  280. package/dist/memory/session-extraction.d.ts +0 -93
  281. package/dist/memory/session-extraction.d.ts.map +0 -1
  282. package/dist/memory/session-extraction.js +0 -290
  283. package/dist/memory/session-extraction.js.map +0 -1
  284. package/dist/memory/sqlite-store.d.ts +0 -208
  285. package/dist/memory/sqlite-store.d.ts.map +0 -1
  286. package/dist/memory/sqlite-store.js +0 -556
  287. package/dist/memory/sqlite-store.js.map +0 -1
  288. package/dist/skills/daytona-executor.d.ts +0 -78
  289. package/dist/skills/daytona-executor.d.ts.map +0 -1
  290. package/dist/skills/daytona-executor.js +0 -256
  291. package/dist/skills/daytona-executor.js.map +0 -1
  292. package/dist/skills/modal-executor.d.ts +0 -81
  293. package/dist/skills/modal-executor.d.ts.map +0 -1
  294. package/dist/skills/modal-executor.js +0 -285
  295. package/dist/skills/modal-executor.js.map +0 -1
  296. package/dist/sync/inventory.d.ts +0 -1
  297. package/dist/sync/inventory.d.ts.map +0 -1
  298. package/dist/sync/inventory.js +0 -3
  299. package/dist/sync/inventory.js.map +0 -1
  300. package/dist/sync/validate.d.ts +0 -1
  301. package/dist/sync/validate.d.ts.map +0 -1
  302. package/dist/sync/validate.js +0 -3
  303. package/dist/sync/validate.js.map +0 -1
  304. package/dist/test.d.ts +0 -2
  305. package/dist/test.d.ts.map +0 -1
  306. package/dist/test.js +0 -3
  307. package/dist/test.js.map +0 -1
  308. package/dist/tools/browser-tool.d.ts +0 -206
  309. package/dist/tools/browser-tool.d.ts.map +0 -1
  310. package/dist/tools/browser-tool.js +0 -726
  311. package/dist/tools/browser-tool.js.map +0 -1
  312. package/dist/tools/delegate-tool.d.ts +0 -109
  313. package/dist/tools/delegate-tool.d.ts.map +0 -1
  314. package/dist/tools/delegate-tool.js +0 -185
  315. package/dist/tools/delegate-tool.js.map +0 -1
  316. package/dist/tools/delegation-state.d.ts +0 -87
  317. package/dist/tools/delegation-state.d.ts.map +0 -1
  318. package/dist/tools/delegation-state.js +0 -278
  319. package/dist/tools/delegation-state.js.map +0 -1
  320. package/dist/tools/desktop-ui.d.ts +0 -148
  321. package/dist/tools/desktop-ui.d.ts.map +0 -1
  322. package/dist/tools/desktop-ui.js +0 -486
  323. package/dist/tools/desktop-ui.js.map +0 -1
  324. package/dist/tools/image-video-tool.d.ts +0 -88
  325. package/dist/tools/image-video-tool.d.ts.map +0 -1
  326. package/dist/tools/image-video-tool.js +0 -276
  327. package/dist/tools/image-video-tool.js.map +0 -1
  328. package/dist/tools/kanban-cron-tools.d.ts +0 -92
  329. package/dist/tools/kanban-cron-tools.d.ts.map +0 -1
  330. package/dist/tools/kanban-cron-tools.js +0 -197
  331. package/dist/tools/kanban-cron-tools.js.map +0 -1
  332. package/dist/tools/messaging-tool.d.ts +0 -127
  333. package/dist/tools/messaging-tool.d.ts.map +0 -1
  334. package/dist/tools/messaging-tool.js +0 -314
  335. package/dist/tools/messaging-tool.js.map +0 -1
  336. package/dist/tools/modality/generic-caller.d.ts +0 -43
  337. package/dist/tools/modality/generic-caller.d.ts.map +0 -1
  338. package/dist/tools/modality/generic-caller.js +0 -254
  339. package/dist/tools/modality/generic-caller.js.map +0 -1
  340. package/dist/tools/modality/modality-catalog.d.ts +0 -134
  341. package/dist/tools/modality/modality-catalog.d.ts.map +0 -1
  342. package/dist/tools/modality/modality-catalog.js +0 -445
  343. package/dist/tools/modality/modality-catalog.js.map +0 -1
  344. package/dist/tools/modality/tool-router.d.ts +0 -81
  345. package/dist/tools/modality/tool-router.d.ts.map +0 -1
  346. package/dist/tools/modality/tool-router.js +0 -84
  347. package/dist/tools/modality/tool-router.js.map +0 -1
  348. package/dist/tools/security-tools.d.ts +0 -107
  349. package/dist/tools/security-tools.d.ts.map +0 -1
  350. package/dist/tools/security-tools.js +0 -264
  351. package/dist/tools/security-tools.js.map +0 -1
  352. package/dist/tools/ssh-tool.d.ts +0 -130
  353. package/dist/tools/ssh-tool.d.ts.map +0 -1
  354. package/dist/tools/ssh-tool.js +0 -328
  355. package/dist/tools/ssh-tool.js.map +0 -1
  356. package/dist/tools/tts-tool.d.ts +0 -91
  357. package/dist/tools/tts-tool.d.ts.map +0 -1
  358. package/dist/tools/tts-tool.js +0 -406
  359. package/dist/tools/tts-tool.js.map +0 -1
  360. package/dist/utils/shell-detection.d.ts +0 -124
  361. package/dist/utils/shell-detection.d.ts.map +0 -1
  362. package/dist/utils/shell-detection.js +0 -305
  363. package/dist/utils/shell-detection.js.map +0 -1
  364. package/dist/utils/windows-paths.d.ts +0 -185
  365. package/dist/utils/windows-paths.d.ts.map +0 -1
  366. package/dist/utils/windows-paths.js +0 -472
  367. package/dist/utils/windows-paths.js.map +0 -1
  368. package/src/web-dashboard/public/assets/index-C4frng1Q.js +0 -207
  369. package/src/web-dashboard/public/assets/index-C4frng1Q.js.map +0 -1
@@ -19,6 +19,7 @@
19
19
  import { existsSync, readFileSync, writeFileSync, mkdirSync, readdirSync, statSync } from 'node:fs';
20
20
  import { dirname, isAbsolute, join, relative, resolve } from 'node:path';
21
21
  import { spawnSync } from 'node:child_process';
22
+ import { pushDAGUpdate, updateDAGNode, resetDAG } from '../observability/dag-bridge.js';
22
23
  import inquirer from 'inquirer';
23
24
  import { ProviderFactory } from '../inference/factory.js';
24
25
  import { ConfigManager } from '../config/manager.js';
@@ -59,6 +60,8 @@ import { getModelRegistry } from '../learning/model-registry.js';
59
60
  import { buildAutoResolveOptions } from '../learning/resolve-options.js';
60
61
  import { classifyFallbackError, getProviderFallback, recordRegistrySuccess } from '../learning/provider-fallback.js';
61
62
  import { recordActionFailure } from '../learning/failure-bookkeeping.js';
63
+ import { sweepTransientFailures, sessionRevivalStore } from '../learning/provider-revival.js';
64
+ import { resolveContextBudget, resolveContextFileBudget, resolveMaxOutputTokens } from '../learning/context-budget.js';
62
65
  import { resolveWorkingModel } from '../inference/model-validator.js';
63
66
  import { refreshModelRegistry } from '../inference/model-probe.js';
64
67
  import { recordRoutingDecision } from '../learning/routing-history.js';
@@ -69,35 +72,28 @@ import { createReviewFromResult } from '../team/review.js';
69
72
  import { indexFiles, retrieve, recordRetrievalStats, retrievalOptionsFromConfig, estimateTokens as retrievalEstimateTokens } from '../learning/retrieval.js';
70
73
  // ─── DAG Integration (optional — dashboard may not be built) ─────────────────
71
74
  /**
72
- * Push a DAG update to the live dashboard, if the server is running.
73
- * Uses dynamic import so the orchestrator doesn't crash if the dashboard
74
- * module hasn't been built or isn't available.
75
+ * Push a DAG update to the live dashboard, if one is running.
76
+ *
77
+ * These helpers used to `await import('../web-dashboard/server.js')` on first
78
+ * use, which dragged the entire 270 KB dashboard module into every CLI pipeline
79
+ * run just to mutate in-process graph state nothing could read (no dashboard =
80
+ * no SSE clients), and added an upward edge to the import graph. The dashboard
81
+ * now REGISTERS its implementation with `observability/dag-bridge.ts` when it
82
+ * loads, so these are cheap no-ops without a dashboard — same observable
83
+ * behaviour, no web module in the agent's dependency closure.
84
+ *
85
+ * Deliberately still `async`: every call site awaits them, and the ordering
86
+ * contract (the update lands before the step it describes completes) is what
87
+ * the DAG view depends on.
75
88
  */
76
- let dagModule = undefined;
77
- async function ensureDAGModule() {
78
- if (dagModule !== undefined)
79
- return; // already attempted (null = failed, object = loaded)
80
- try {
81
- dagModule = await import('../web-dashboard/server.js');
82
- }
83
- catch {
84
- dagModule = null; // dashboard module not available — mark as failed
85
- }
86
- }
87
89
  async function tryPushDAG(update) {
88
- await ensureDAGModule();
89
- if (dagModule)
90
- dagModule.pushDAGUpdate(update);
90
+ pushDAGUpdate(update);
91
91
  }
92
92
  async function tryUpdateDAGNode(nodeId, update) {
93
- await ensureDAGModule();
94
- if (dagModule)
95
- dagModule.updateDAGNode(nodeId, update);
93
+ updateDAGNode(nodeId, update);
96
94
  }
97
95
  async function tryResetDAG() {
98
- await ensureDAGModule();
99
- if (dagModule)
100
- dagModule.resetDAG();
96
+ resetDAG();
101
97
  }
102
98
  // ─── Constants ──────────────────────────────────────────────────────────────
103
99
  /** Valid per-subtask complexity labels (mirrors ComplexityLevel). */
@@ -119,6 +115,28 @@ function createAgent(agentType, registry) {
119
115
  return null;
120
116
  }
121
117
  }
118
+ /**
119
+ * Default for the iterative tool-calling writer/reviewer (audit W3).
120
+ *
121
+ * The one-shot writer receives the plan + gathered context and must emit the
122
+ * COMPLETE content of every file in a single response — it cannot read the
123
+ * file it is editing, so it rewrites code it has never seen, and a single
124
+ * malformed code fence loses the whole task. `writer-tc`/`reviewer-tc` run a
125
+ * prompt-based read→edit→verify loop instead, which is provider-agnostic (no
126
+ * native function calling required) and is the single largest capability gap
127
+ * between this harness and Freebuff's for every model, weak ones most of all.
128
+ *
129
+ * It is therefore ON by default; `--no-tool-calling` (CLI) or
130
+ * `useToolCalling: false` (API) restores the one-shot writer.
131
+ */
132
+ export const DEFAULT_USE_TOOL_CALLING = true;
133
+ /**
134
+ * Resolve the tool-calling writer/reviewer setting from options.
135
+ * Exported so the default is testable without booting an orchestrator.
136
+ */
137
+ export function resolveUseToolCalling(options) {
138
+ return options.useToolCalling ?? DEFAULT_USE_TOOL_CALLING;
139
+ }
122
140
  export class Orchestrator {
123
141
  configManager;
124
142
  /** The module registry used for agent lookups */
@@ -189,6 +207,30 @@ export class Orchestrator {
189
207
  sessionFailedProviders: new Map(),
190
208
  sessionTransientFailedProviders: new Set(),
191
209
  };
210
+ /**
211
+ * Re-verify transiently-failed providers and re-admit the ones that recovered.
212
+ *
213
+ * The pipeline allocated `failureSession.sessionTransientFailedProviders` and
214
+ * never read it, so the documented round-trip — "fail → cool down → prove
215
+ * recovery with a 1-token spot-check → route again" — only ever went ONE way
216
+ * here. A provider that recovered mid-run stayed excluded for the rest of the
217
+ * pipeline, which is how a transient 503 ended up degrading a whole run.
218
+ *
219
+ * Called once per task batch (and at pipeline entry), so recovery is discovered
220
+ * between tasks rather than by failing again. Cheap when nothing is pending:
221
+ * the sweep returns immediately on an empty transient set, and a still-active
222
+ * exclusion is skipped without a network call.
223
+ */
224
+ async sweepTransientProviders(agentType = 'orchestrator') {
225
+ try {
226
+ const result = await sweepTransientFailures(sessionRevivalStore(this.failureSession), this.configManager, { agentType });
227
+ return result.revived;
228
+ }
229
+ catch {
230
+ // Best-effort — revival must never break the pipeline.
231
+ return [];
232
+ }
233
+ }
192
234
  /** Execution telemetry accumulator for the current pipeline */
193
235
  stats = {
194
236
  llmCalls: 0,
@@ -222,6 +264,11 @@ export class Orchestrator {
222
264
  }
223
265
  /** The actual pipeline body — wrapped by execute() with a K1 runId. */
224
266
  async executeCorrelated(goal, options = {}) {
267
+ // Re-admit any provider that recovered since the LAST run before the planner
268
+ // routes: the transient marker is session-scoped, but the registry block it
269
+ // pairs with persists, so a provider proven healthy in a prior run must not
270
+ // stay hidden from this one.
271
+ await this.sweepTransientProviders('planner');
225
272
  // P0 reasoning trace: begin the per-pipeline trace so every planner,
226
273
  // memory, and task LLM call lands in ~/.nuvira/memory/reasoning-traces.json
227
274
  // (best-effort — a trace failure must never break the pipeline).
@@ -962,6 +1009,12 @@ export class Orchestrator {
962
1009
  parallelGroup.push({ task, strategy });
963
1010
  }
964
1011
  }
1012
+ // ── Re-verify before re-admit, once per BATCH ────────────────────────
1013
+ // A provider that failed transiently earlier in this pipeline is only
1014
+ // re-admitted once a spot-check proves it is back. Re-checking per batch
1015
+ // (not per task) bounds the cost: a batch is already the fan-out unit, and
1016
+ // the sweep no-ops when no exclusion has expired.
1017
+ await this.sweepTransientProviders();
965
1018
  // Mark every runnable task as running up front so the live board shows
966
1019
  // the whole batch (and its parallel lanes) at once.
967
1020
  for (const { task } of taskStrategies) {
@@ -1470,11 +1523,17 @@ export class Orchestrator {
1470
1523
  // Best-effort — fall through to the original value if resolution fails
1471
1524
  }
1472
1525
  }
1526
+ const servedModel = isAutoModel(requestedModel) ? (config.model || requestedModel) : requestedModel;
1473
1527
  const mergedOptions = {
1474
1528
  ...inferenceOptions,
1475
- model: isAutoModel(requestedModel) ? (config.model || requestedModel) : requestedModel,
1529
+ model: servedModel,
1476
1530
  temperature: inferenceOptions?.temperature ?? config.temperature ?? 0.7,
1477
- maxTokens: inferenceOptions?.maxTokens ?? config.maxTokens ?? 4096,
1531
+ // Output cap: explicit option → configured value → the model's real
1532
+ // capability. The old flat `4096` held a 200K+ model to a small-model
1533
+ // ceiling, so the better the model, the more of it the constant wasted.
1534
+ maxTokens: inferenceOptions?.maxTokens ??
1535
+ config.maxTokens ??
1536
+ resolveMaxOutputTokens({ provider: providerType, model: servedModel }),
1478
1537
  };
1479
1538
  // The strongest signal the provider×model is NOT usable: a real call
1480
1539
  // failed. Feed the SHARED registry telemetry path (the same one chat
@@ -1915,7 +1974,7 @@ export class Orchestrator {
1915
1974
  // This gives the LLM iterative read→edit→verify capability instead
1916
1975
  // of a single-shot LLM call (adopted from Freebuff/Hermes pattern).
1917
1976
  let actualAgentType = effectiveAgentType;
1918
- if (options.useToolCalling) {
1977
+ if (resolveUseToolCalling(options)) {
1919
1978
  if (effectiveAgentType === 'writer') {
1920
1979
  actualAgentType = 'writer-tc';
1921
1980
  }
@@ -2976,7 +3035,37 @@ export class Orchestrator {
2976
3035
  * Logs details in verbose mode.
2977
3036
  */
2978
3037
  pruneContext(vault, options) {
2979
- const maxTokens = options.contextLimit || 128_000;
3038
+ // Budget from the SERVED model's real window when it is known (the registry
3039
+ // records each provider's advertised `context_length`), falling back to the
3040
+ // historical 128K default when it is not — so nothing regresses for a model
3041
+ // we cannot discover, while a large-window model stops being pruned as if it
3042
+ // had 128K. An explicit `contextLimit` still wins outright.
3043
+ //
3044
+ // NOTE: this uses the pipeline's configured provider/model. In auto mode the
3045
+ // CONCRETE model is chosen per task, so a per-task budget would be more
3046
+ // precise still — that requires threading the routed decision into pruning.
3047
+ const maxTokens = resolveContextBudget({
3048
+ provider: options.provider,
3049
+ model: options.model,
3050
+ override: options.contextLimit,
3051
+ }).budget;
3052
+ // T2 — model-window-aware FILE-context budget for the writer/edit agents,
3053
+ // derived from the same window the pruner uses. Unknown windows resolve to
3054
+ // the historical caps (10 files / 16K chars), so nothing regresses; a known
3055
+ // large window lets the writer read more of the project instead of a fixed
3056
+ // keyhole. Best-effort — budget metadata must never break a run.
3057
+ try {
3058
+ const fileBudget = resolveContextFileBudget({
3059
+ provider: options.provider,
3060
+ model: options.model,
3061
+ override: options.contextLimit,
3062
+ });
3063
+ vault.setMeta('contextFileBudgetChars', fileBudget.maxChars);
3064
+ vault.setMeta('contextFileBudgetFiles', fileBudget.maxFiles);
3065
+ }
3066
+ catch {
3067
+ // Best-effort.
3068
+ }
2980
3069
  const pruner = new ContextPruner({
2981
3070
  maxTokens,
2982
3071
  conversationMode: options.contextPruneMode || 'soft',