@pellux/goodvibes-tui 0.18.8 → 0.18.10

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 (555) hide show
  1. package/CHANGELOG.md +65 -0
  2. package/README.md +1 -1
  3. package/docs/foundation-artifacts/operator-contract.json +1 -1
  4. package/package.json +2 -2
  5. package/src/acp/connection.ts +5 -5
  6. package/src/acp/index.ts +1 -1
  7. package/src/acp/manager.ts +1 -133
  8. package/src/adapters/bluebubbles/index.ts +1 -1
  9. package/src/adapters/discord/index.ts +2 -2
  10. package/src/adapters/github/index.ts +1 -1
  11. package/src/adapters/google-chat/index.ts +1 -1
  12. package/src/adapters/imessage/index.ts +1 -1
  13. package/src/adapters/index.ts +15 -15
  14. package/src/adapters/matrix/index.ts +1 -1
  15. package/src/adapters/mattermost/index.ts +1 -1
  16. package/src/adapters/msteams/index.ts +2 -2
  17. package/src/adapters/ntfy/index.ts +1 -1
  18. package/src/adapters/signal/index.ts +1 -1
  19. package/src/adapters/slack/index.ts +2 -2
  20. package/src/adapters/telegram/index.ts +1 -1
  21. package/src/adapters/types.ts +4 -4
  22. package/src/adapters/webhook/index.ts +1 -1
  23. package/src/adapters/whatsapp/index.ts +1 -1
  24. package/src/agents/message-bus-core.ts +2 -2
  25. package/src/agents/message-bus.ts +2 -2
  26. package/src/agents/orchestrator-prompts.ts +4 -4
  27. package/src/agents/orchestrator-runner.ts +11 -11
  28. package/src/agents/orchestrator.ts +14 -13
  29. package/src/agents/session.ts +1 -1
  30. package/src/agents/worktree.ts +1 -1
  31. package/src/agents/wrfc-config.ts +2 -2
  32. package/src/agents/wrfc-controller.ts +12 -12
  33. package/src/agents/wrfc-gate-runtime.ts +5 -5
  34. package/src/agents/wrfc-reporting.ts +1 -1
  35. package/src/agents/wrfc-runtime-events.ts +3 -3
  36. package/src/agents/wrfc-types.ts +1 -1
  37. package/src/automation/delivery-manager.ts +4 -4
  38. package/src/automation/index.ts +4 -4
  39. package/src/automation/manager-runtime-delivery.ts +1 -1
  40. package/src/automation/manager-runtime-events.ts +3 -3
  41. package/src/automation/manager-runtime-execution.ts +5 -5
  42. package/src/automation/manager-runtime-helpers.ts +2 -2
  43. package/src/automation/manager-runtime-job-mutations.ts +3 -3
  44. package/src/automation/manager-runtime-reconcile.ts +4 -4
  45. package/src/automation/manager-runtime-scheduling.ts +2 -2
  46. package/src/automation/manager-runtime.ts +18 -18
  47. package/src/automation/manager.ts +2 -2
  48. package/src/automation/service.ts +2 -2
  49. package/src/channels/builtin/account-actions.ts +5 -5
  50. package/src/channels/builtin/accounts.ts +2 -2
  51. package/src/channels/builtin/contracts.ts +3 -3
  52. package/src/channels/builtin/plugins.ts +5 -5
  53. package/src/channels/builtin/rendering.ts +4 -4
  54. package/src/channels/builtin/setup-schema.ts +1 -1
  55. package/src/channels/builtin/shared.ts +7 -7
  56. package/src/channels/builtin/surfaces.ts +2 -2
  57. package/src/channels/builtin/targets.ts +3 -3
  58. package/src/channels/builtin-runtime.ts +11 -11
  59. package/src/channels/delivery/shared.ts +2 -2
  60. package/src/channels/delivery/strategies-bridge.ts +3 -3
  61. package/src/channels/delivery/strategies-core.ts +5 -5
  62. package/src/channels/delivery/strategies-enterprise.ts +3 -3
  63. package/src/channels/delivery/types.ts +2 -2
  64. package/src/channels/delivery-router.ts +9 -9
  65. package/src/channels/index.ts +12 -12
  66. package/src/channels/plugin-registry.ts +1 -1
  67. package/src/channels/provider-runtime.ts +3 -3
  68. package/src/channels/reply-pipeline.ts +3 -3
  69. package/src/channels/route-manager.ts +2 -2
  70. package/src/channels/surface-registry.ts +2 -2
  71. package/src/config/helper-model.ts +1 -233
  72. package/src/config/index.ts +3 -3
  73. package/src/config/manager.ts +8 -404
  74. package/src/config/secrets.ts +21 -542
  75. package/src/config/service-registry.ts +1 -329
  76. package/src/config/tool-llm.ts +3 -3
  77. package/src/control-plane/approval-broker.ts +1 -1
  78. package/src/control-plane/gateway.ts +1 -713
  79. package/src/control-plane/index.ts +7 -7
  80. package/src/control-plane/media-contract-schemas.ts +1 -208
  81. package/src/control-plane/method-catalog-admin.ts +1 -136
  82. package/src/control-plane/method-catalog-channels.ts +1 -591
  83. package/src/control-plane/method-catalog-control-automation.ts +1 -475
  84. package/src/control-plane/method-catalog-control-core.ts +1 -594
  85. package/src/control-plane/method-catalog-control.ts +1 -8
  86. package/src/control-plane/method-catalog-events.ts +1 -74
  87. package/src/control-plane/method-catalog-knowledge.ts +1 -531
  88. package/src/control-plane/method-catalog-media.ts +1 -279
  89. package/src/control-plane/method-catalog-runtime.ts +1 -304
  90. package/src/control-plane/method-catalog-shared.ts +1 -223
  91. package/src/control-plane/method-catalog.ts +1 -242
  92. package/src/control-plane/operator-contract-schemas-admin.ts +1 -639
  93. package/src/control-plane/operator-contract-schemas-channels.ts +1 -375
  94. package/src/control-plane/operator-contract-schemas-control.ts +1 -226
  95. package/src/control-plane/operator-contract-schemas-domains.ts +1 -4
  96. package/src/control-plane/operator-contract-schemas-knowledge.ts +1 -582
  97. package/src/control-plane/operator-contract-schemas-media.ts +1 -297
  98. package/src/control-plane/operator-contract-schemas-permissions.ts +1 -100
  99. package/src/control-plane/operator-contract-schemas-remote.ts +1 -38
  100. package/src/control-plane/operator-contract-schemas-runtime.ts +1 -563
  101. package/src/control-plane/operator-contract-schemas-shared.ts +1 -85
  102. package/src/control-plane/operator-contract-schemas-telemetry.ts +1 -349
  103. package/src/control-plane/operator-contract-schemas.ts +1 -6
  104. package/src/control-plane/operator-contract.ts +5 -3
  105. package/src/control-plane/session-broker.ts +1 -1
  106. package/src/core/compaction-sections.ts +5 -5
  107. package/src/core/compaction-types.ts +3 -3
  108. package/src/core/composer-state.ts +1 -1
  109. package/src/core/context-compaction.ts +7 -7
  110. package/src/core/conversation-compaction.ts +4 -4
  111. package/src/core/conversation-diff.ts +1 -1
  112. package/src/core/conversation-rendering.ts +5 -5
  113. package/src/core/conversation-utils.ts +2 -2
  114. package/src/core/conversation.ts +10 -10
  115. package/src/core/event-replay.ts +1 -1
  116. package/src/core/orchestrator-context-runtime.ts +8 -8
  117. package/src/core/orchestrator-follow-up-runtime.ts +2 -2
  118. package/src/core/orchestrator-runtime.ts +4 -4
  119. package/src/core/orchestrator-tool-runtime.ts +7 -7
  120. package/src/core/orchestrator-turn-helpers.ts +7 -7
  121. package/src/core/orchestrator-turn-loop.ts +10 -10
  122. package/src/core/orchestrator.ts +17 -17
  123. package/src/core/plan-command-handler.ts +2 -2
  124. package/src/core/system-message-router.ts +2 -2
  125. package/src/core/transcript-events/classify.ts +1 -1
  126. package/src/core/transcript-events/index.ts +3 -3
  127. package/src/daemon/cli.ts +6 -6
  128. package/src/daemon/control-plane.ts +7 -7
  129. package/src/daemon/facade-composition.ts +16 -15
  130. package/src/daemon/facade.ts +17 -17
  131. package/src/daemon/helpers.ts +2 -2
  132. package/src/daemon/http/router-route-contexts.ts +11 -11
  133. package/src/daemon/http/router.ts +25 -25
  134. package/src/daemon/http-listener.ts +3 -3
  135. package/src/daemon/index.ts +1 -3
  136. package/src/daemon/service-manager.ts +1 -1
  137. package/src/daemon/surface-actions.ts +8 -8
  138. package/src/daemon/surface-delivery.ts +7 -7
  139. package/src/daemon/surface-policy.ts +1 -1
  140. package/src/daemon/transport-events.ts +4 -4
  141. package/src/daemon/types.ts +24 -24
  142. package/src/export/markdown.ts +1 -1
  143. package/src/export/session-export.ts +1 -633
  144. package/src/git/index.ts +1 -1
  145. package/src/git/service.ts +1 -1
  146. package/src/hooks/chain-engine.ts +1 -1
  147. package/src/hooks/dispatcher.ts +4 -4
  148. package/src/hooks/hook-api.ts +1 -1
  149. package/src/hooks/index.ts +8 -8
  150. package/src/hooks/runners/agent.ts +1 -1
  151. package/src/hooks/runners/prompt.ts +1 -1
  152. package/src/hooks/workbench.ts +2 -2
  153. package/src/input/command-registry.ts +24 -17
  154. package/src/input/commands/config.ts +1 -1
  155. package/src/input/commands/control-room-runtime.ts +2 -2
  156. package/src/input/commands/conversation-runtime.ts +1 -1
  157. package/src/input/commands/eval.ts +2 -2
  158. package/src/input/commands/git-runtime.ts +1 -1
  159. package/src/input/commands/guidance-runtime.ts +3 -3
  160. package/src/input/commands/health-runtime.ts +7 -7
  161. package/src/input/commands/incident-runtime.ts +1 -1
  162. package/src/input/commands/integration-runtime.ts +3 -3
  163. package/src/input/commands/local-provider-runtime.ts +1 -1
  164. package/src/input/commands/local-runtime.ts +1 -1
  165. package/src/input/commands/local-setup-review.ts +1 -1
  166. package/src/input/commands/local-setup.ts +1 -1
  167. package/src/input/commands/managed-runtime.ts +2 -2
  168. package/src/input/commands/marketplace-runtime.ts +1 -1
  169. package/src/input/commands/platform-access-runtime.ts +1 -1
  170. package/src/input/commands/policy-dispatch.ts +2 -2
  171. package/src/input/commands/product-runtime.ts +2 -2
  172. package/src/input/commands/profile-sync-runtime.ts +1 -1
  173. package/src/input/commands/provider-accounts-runtime.ts +1 -1
  174. package/src/input/commands/provider.ts +3 -3
  175. package/src/input/commands/quit-shared.ts +1 -1
  176. package/src/input/commands/recall-bundle.ts +1 -1
  177. package/src/input/commands/recall-capture.ts +2 -2
  178. package/src/input/commands/recall-query.ts +2 -2
  179. package/src/input/commands/recall-shared.ts +1 -1
  180. package/src/input/commands/remote-runtime-setup.ts +1 -1
  181. package/src/input/commands/remote-runtime.ts +1 -1
  182. package/src/input/commands/runtime-services.ts +13 -11
  183. package/src/input/commands/schedule-runtime.ts +2 -2
  184. package/src/input/commands/session-content.ts +1 -1
  185. package/src/input/commands/session-workflow.ts +4 -4
  186. package/src/input/commands/settings-sync-runtime.ts +1 -1
  187. package/src/input/commands/share-runtime.ts +9 -4
  188. package/src/input/commands/shell-core.ts +1 -1
  189. package/src/input/commands/skills-runtime.ts +1 -1
  190. package/src/input/commands/subscription-runtime.ts +1 -1
  191. package/src/input/commands/tasks-runtime.ts +1 -1
  192. package/src/input/commands/teamwork-runtime.ts +1 -1
  193. package/src/input/commands/worktree-runtime.ts +1 -1
  194. package/src/input/handler-command-route.ts +1 -1
  195. package/src/input/handler-content-actions.ts +3 -3
  196. package/src/input/handler-feed-routes.ts +2 -2
  197. package/src/input/handler-feed.ts +1 -1
  198. package/src/input/handler-shortcuts.ts +1 -1
  199. package/src/input/handler.ts +1 -1
  200. package/src/input/keybindings.ts +5 -0
  201. package/src/input/model-picker.ts +2 -2
  202. package/src/input/profile-picker-modal.ts +1 -1
  203. package/src/input/session-picker-modal.ts +1 -1
  204. package/src/input/settings-modal.ts +4 -4
  205. package/src/integrations/index.ts +1 -1
  206. package/src/integrations/notifier.ts +1 -1
  207. package/src/integrations/webhooks.ts +1 -177
  208. package/src/knowledge/consolidation.ts +2 -2
  209. package/src/knowledge/graphql.ts +1 -1
  210. package/src/knowledge/index.ts +5 -5
  211. package/src/knowledge/ingest-compile.ts +3 -3
  212. package/src/knowledge/ingest-context.ts +1 -1
  213. package/src/knowledge/ingest-inputs.ts +4 -4
  214. package/src/knowledge/ingest.ts +1 -20
  215. package/src/knowledge/internal.ts +1 -1
  216. package/src/knowledge/knowledge-api.ts +7 -7
  217. package/src/knowledge/lint.ts +3 -3
  218. package/src/knowledge/memory-sync.ts +2 -2
  219. package/src/knowledge/packet.ts +3 -3
  220. package/src/knowledge/scheduling.ts +2 -2
  221. package/src/knowledge/service.ts +10 -10
  222. package/src/main.ts +11 -10
  223. package/src/mcp/index.ts +4 -4
  224. package/src/mcp/mcp-api.ts +1 -1
  225. package/src/mcp/registry.ts +1 -506
  226. package/src/media/builtin-image-understanding.ts +2 -2
  227. package/src/media/builtin-providers.ts +2 -2
  228. package/src/media/index.ts +1 -1
  229. package/src/multimodal/index.ts +1 -1
  230. package/src/multimodal/service.ts +2 -2
  231. package/src/panels/agent-inspector-panel.ts +2 -2
  232. package/src/panels/agent-logs-panel.ts +3 -3
  233. package/src/panels/approval-panel.ts +2 -2
  234. package/src/panels/builtin/operations.ts +3 -1
  235. package/src/panels/builtin/shared.ts +13 -13
  236. package/src/panels/context-visualizer-panel.ts +2 -2
  237. package/src/panels/cost-tracker-panel.ts +2 -2
  238. package/src/panels/debug-panel.ts +3 -3
  239. package/src/panels/git-panel.ts +1 -1
  240. package/src/panels/hooks-panel.ts +4 -4
  241. package/src/panels/knowledge-panel.ts +1 -1
  242. package/src/panels/marketplace-panel.ts +1 -1
  243. package/src/panels/mcp-panel.ts +1 -1
  244. package/src/panels/memory-panel.ts +2 -2
  245. package/src/panels/ops-control-panel.ts +2 -2
  246. package/src/panels/ops-strategy-panel.ts +2 -2
  247. package/src/panels/plugins-panel.ts +1 -1
  248. package/src/panels/policy-panel.ts +1 -1
  249. package/src/panels/provider-health-panel.ts +3 -3
  250. package/src/panels/provider-stats-panel.ts +2 -2
  251. package/src/panels/sandbox-panel.ts +1 -1
  252. package/src/panels/schedule-panel.ts +1 -1
  253. package/src/panels/settings-sync-panel.ts +1 -1
  254. package/src/panels/system-messages-panel.ts +1 -1
  255. package/src/panels/tasks-panel.ts +1 -1
  256. package/src/panels/thinking-panel.ts +2 -2
  257. package/src/panels/token-budget-panel.ts +1 -1
  258. package/src/panels/tool-inspector-panel.ts +2 -2
  259. package/src/panels/worktree-panel.ts +1 -1
  260. package/src/panels/wrfc-panel.ts +4 -4
  261. package/src/permissions/briefs/build.ts +1 -1
  262. package/src/permissions/manager.ts +1 -356
  263. package/src/permissions/prompt.ts +1 -1
  264. package/src/plugins/api.ts +9 -9
  265. package/src/plugins/loader.ts +8 -8
  266. package/src/plugins/manager.ts +5 -5
  267. package/src/providers/amazon-bedrock-mantle.ts +1 -1
  268. package/src/providers/amazon-bedrock.ts +1 -1
  269. package/src/providers/anthropic-compat.ts +4 -4
  270. package/src/providers/anthropic-sdk-provider.ts +5 -5
  271. package/src/providers/anthropic-vertex.ts +1 -1
  272. package/src/providers/anthropic.ts +4 -4
  273. package/src/providers/auto-register.ts +6 -6
  274. package/src/providers/builtin-catalog.ts +2 -2
  275. package/src/providers/builtin-registry.ts +15 -15
  276. package/src/providers/cache-planner.ts +2 -2
  277. package/src/providers/capabilities.ts +1 -601
  278. package/src/providers/custom-loader.ts +6 -6
  279. package/src/providers/discovered-compat.ts +7 -18
  280. package/src/providers/discovered-factory.ts +7 -7
  281. package/src/providers/discovered-traits.ts +1 -1
  282. package/src/providers/gemini.ts +4 -4
  283. package/src/providers/github-copilot.ts +4 -4
  284. package/src/providers/index.ts +1 -47
  285. package/src/providers/interface.ts +1 -1
  286. package/src/providers/llama-cpp.ts +4 -4
  287. package/src/providers/lm-studio-helpers.ts +1 -1
  288. package/src/providers/lm-studio.ts +4 -4
  289. package/src/providers/model-catalog-cache.ts +1 -1
  290. package/src/providers/model-catalog-notifications.ts +1 -1
  291. package/src/providers/model-catalog-synthetic.ts +2 -2
  292. package/src/providers/model-catalog.ts +7 -7
  293. package/src/providers/model-limits.ts +1 -280
  294. package/src/providers/ollama.ts +4 -4
  295. package/src/providers/openai-codex.ts +2 -2
  296. package/src/providers/openai-compat.ts +4 -4
  297. package/src/providers/openai.ts +3 -3
  298. package/src/providers/optimizer.ts +1 -381
  299. package/src/providers/provider-api.ts +1 -553
  300. package/src/providers/registry-helpers.ts +1 -1
  301. package/src/providers/registry-models.ts +2 -2
  302. package/src/providers/registry-types.ts +5 -5
  303. package/src/providers/registry.ts +1 -729
  304. package/src/providers/runtime-metadata.ts +1 -1
  305. package/src/providers/runtime-snapshot.ts +3 -3
  306. package/src/providers/synthetic.ts +3 -3
  307. package/src/providers/tier-prompts.ts +1 -1
  308. package/src/providers/tool-formats.ts +1 -1
  309. package/src/renderer/agent-detail-modal.ts +2 -2
  310. package/src/renderer/block-actions.ts +1 -1
  311. package/src/renderer/context-inspector.ts +1 -1
  312. package/src/renderer/conversation-layout.ts +1 -1
  313. package/src/renderer/conversation-overlays.ts +1 -1
  314. package/src/renderer/git-status.ts +1 -1
  315. package/src/renderer/live-tail-modal.ts +1 -1
  316. package/src/renderer/process-modal.ts +2 -2
  317. package/src/runtime/bootstrap-background.ts +4 -4
  318. package/src/runtime/bootstrap-command-context.ts +23 -23
  319. package/src/runtime/bootstrap-command-parts.ts +23 -23
  320. package/src/runtime/bootstrap-core.ts +12 -10
  321. package/src/runtime/bootstrap-helpers.ts +2 -2
  322. package/src/runtime/bootstrap-hook-bridge.ts +9 -9
  323. package/src/runtime/bootstrap-runtime-events.ts +4 -4
  324. package/src/runtime/bootstrap-services.ts +4 -4
  325. package/src/runtime/bootstrap-shell.ts +11 -11
  326. package/src/runtime/bootstrap.ts +28 -10
  327. package/src/runtime/compaction/index.ts +1 -90
  328. package/src/runtime/compaction/lifecycle.ts +1 -167
  329. package/src/runtime/compaction/manager.ts +11 -11
  330. package/src/runtime/compaction/quality-score.ts +1 -279
  331. package/src/runtime/compaction/resume-repair.ts +1 -183
  332. package/src/runtime/compaction/strategies/autocompact.ts +1 -65
  333. package/src/runtime/compaction/strategies/boundary-commit.ts +1 -106
  334. package/src/runtime/compaction/strategies/collapse.ts +1 -90
  335. package/src/runtime/compaction/strategies/index.ts +1 -23
  336. package/src/runtime/compaction/strategies/microcompact.ts +1 -74
  337. package/src/runtime/compaction/strategies/reactive.ts +1 -89
  338. package/src/runtime/compaction/types.ts +1 -221
  339. package/src/runtime/context.ts +9 -9
  340. package/src/runtime/diagnostics/actions.ts +1 -1
  341. package/src/runtime/diagnostics/index.ts +5 -5
  342. package/src/runtime/diagnostics/panels/agents.ts +2 -2
  343. package/src/runtime/diagnostics/panels/events.ts +2 -2
  344. package/src/runtime/diagnostics/panels/health.ts +2 -2
  345. package/src/runtime/diagnostics/panels/ops.ts +2 -2
  346. package/src/runtime/diagnostics/panels/policy.ts +2 -2
  347. package/src/runtime/diagnostics/panels/tasks.ts +2 -2
  348. package/src/runtime/diagnostics/panels/tool-calls.ts +2 -2
  349. package/src/runtime/diagnostics/provider.ts +1 -1
  350. package/src/runtime/ecosystem/recommendations.ts +1 -1
  351. package/src/runtime/emitters/agents.ts +2 -2
  352. package/src/runtime/emitters/automation.ts +2 -2
  353. package/src/runtime/emitters/communication.ts +2 -2
  354. package/src/runtime/emitters/compaction.ts +2 -2
  355. package/src/runtime/emitters/control-plane.ts +2 -2
  356. package/src/runtime/emitters/deliveries.ts +2 -2
  357. package/src/runtime/emitters/forensics.ts +2 -2
  358. package/src/runtime/emitters/index.ts +27 -27
  359. package/src/runtime/emitters/knowledge.ts +2 -2
  360. package/src/runtime/emitters/mcp.ts +2 -2
  361. package/src/runtime/emitters/ops.ts +2 -2
  362. package/src/runtime/emitters/orchestration.ts +2 -2
  363. package/src/runtime/emitters/permissions.ts +2 -2
  364. package/src/runtime/emitters/planner.ts +2 -2
  365. package/src/runtime/emitters/plugins.ts +2 -2
  366. package/src/runtime/emitters/providers.ts +2 -2
  367. package/src/runtime/emitters/routes.ts +2 -2
  368. package/src/runtime/emitters/security.ts +2 -2
  369. package/src/runtime/emitters/session.ts +2 -2
  370. package/src/runtime/emitters/surfaces.ts +2 -2
  371. package/src/runtime/emitters/tasks.ts +2 -2
  372. package/src/runtime/emitters/tools.ts +2 -2
  373. package/src/runtime/emitters/transport.ts +2 -2
  374. package/src/runtime/emitters/turn.ts +3 -3
  375. package/src/runtime/emitters/ui.ts +2 -2
  376. package/src/runtime/emitters/watchers.ts +2 -2
  377. package/src/runtime/emitters/workflows.ts +3 -3
  378. package/src/runtime/eval/index.ts +3 -3
  379. package/src/runtime/eval/runner.ts +1 -1
  380. package/src/runtime/eval/suites.ts +1 -1
  381. package/src/runtime/events/domain-map.ts +2 -2
  382. package/src/runtime/events/index.ts +1 -194
  383. package/src/runtime/events/turn.ts +1 -60
  384. package/src/runtime/events/workflows.ts +1 -17
  385. package/src/runtime/forensics/collector.ts +4 -4
  386. package/src/runtime/forensics/index.ts +1 -1
  387. package/src/runtime/foundation-clients.ts +14 -14
  388. package/src/runtime/foundation-services.ts +8 -8
  389. package/src/runtime/guidance.ts +3 -3
  390. package/src/runtime/health/effect-handlers.ts +3 -3
  391. package/src/runtime/health/index.ts +4 -4
  392. package/src/runtime/health/wiring.ts +2 -2
  393. package/src/runtime/index.ts +29 -29
  394. package/src/runtime/integration/helpers.ts +12 -12
  395. package/src/runtime/lifecycle.ts +4 -4
  396. package/src/runtime/mcp/index.ts +3 -3
  397. package/src/runtime/mcp/manager.ts +1 -1
  398. package/src/runtime/network/inbound.ts +2 -2
  399. package/src/runtime/network/index.ts +5 -5
  400. package/src/runtime/network/outbound.ts +2 -2
  401. package/src/runtime/network/shared.ts +1 -1
  402. package/src/runtime/operator-client.ts +9 -9
  403. package/src/runtime/ops/control-plane.ts +2 -2
  404. package/src/runtime/ops/index.ts +3 -3
  405. package/src/runtime/ops/playbooks/index.ts +2 -2
  406. package/src/runtime/ops/playbooks/session-unrecoverable.ts +2 -2
  407. package/src/runtime/ops/playbooks/stuck-turn.ts +1 -1
  408. package/src/runtime/ops/runtime-context.ts +1 -1
  409. package/src/runtime/orchestration/spawn-policy.ts +1 -1
  410. package/src/runtime/peer-client.ts +3 -3
  411. package/src/runtime/perf/index.ts +1 -1
  412. package/src/runtime/perf/slo-collector.ts +1 -1
  413. package/src/runtime/permissions/index.ts +5 -5
  414. package/src/runtime/permissions/policy-runtime.ts +1 -175
  415. package/src/runtime/permissions/rule-suggestions.ts +1 -1
  416. package/src/runtime/plugins/hot-reload.ts +4 -4
  417. package/src/runtime/plugins/index.ts +13 -13
  418. package/src/runtime/plugins/lifecycle.ts +1 -1
  419. package/src/runtime/plugins/manager.ts +10 -10
  420. package/src/runtime/plugins/manifest.ts +2 -2
  421. package/src/runtime/plugins/quarantine.ts +2 -2
  422. package/src/runtime/plugins/trust.ts +2 -2
  423. package/src/runtime/plugins/types.ts +1 -1
  424. package/src/runtime/provider-accounts/registry.ts +2 -2
  425. package/src/runtime/remote/distributed-runtime-contract-schemas.ts +3 -3
  426. package/src/runtime/remote/index.ts +3 -3
  427. package/src/runtime/remote/runner-registry.ts +2 -2
  428. package/src/runtime/remote/supervisor.ts +1 -1
  429. package/src/runtime/runtime-hook-api.ts +1 -1
  430. package/src/runtime/runtime-knowledge-api.ts +1 -1
  431. package/src/runtime/runtime-mcp-api.ts +1 -1
  432. package/src/runtime/runtime-ops-api.ts +2 -2
  433. package/src/runtime/runtime-provider-api.ts +1 -1
  434. package/src/runtime/services.ts +35 -32
  435. package/src/runtime/session-maintenance.ts +1 -1
  436. package/src/runtime/session-persistence.ts +2 -2
  437. package/src/runtime/session-return-context.ts +3 -3
  438. package/src/runtime/settings/control-plane-store.ts +1 -1
  439. package/src/runtime/settings/control-plane.ts +2 -2
  440. package/src/runtime/shell-command-extensions.ts +7 -7
  441. package/src/runtime/shell-command-ops.ts +6 -6
  442. package/src/runtime/shell-command-platform.ts +1 -1
  443. package/src/runtime/shell-command-services.ts +17 -17
  444. package/src/runtime/shell-command-workspace.ts +1 -1
  445. package/src/runtime/store/domains/conversation.ts +1 -1
  446. package/src/runtime/store/domains/index.ts +4 -4
  447. package/src/runtime/store/domains/permissions.ts +1 -1
  448. package/src/runtime/store/helpers/reducers/conversation.ts +3 -3
  449. package/src/runtime/store/helpers/reducers/lifecycle.ts +3 -3
  450. package/src/runtime/store/helpers/reducers/shared.ts +2 -2
  451. package/src/runtime/store/helpers/reducers/sync.ts +1 -1
  452. package/src/runtime/store/helpers/reducers.ts +4 -4
  453. package/src/runtime/store/index.ts +4 -4
  454. package/src/runtime/store/selectors/index.ts +2 -2
  455. package/src/runtime/store/state.ts +4 -4
  456. package/src/runtime/tasks/adapters/acp-adapter.ts +1 -1
  457. package/src/runtime/tasks/adapters/index.ts +6 -6
  458. package/src/runtime/tasks/index.ts +3 -3
  459. package/src/runtime/tasks/manager.ts +3 -3
  460. package/src/runtime/telemetry/api-helpers.ts +2 -2
  461. package/src/runtime/telemetry/api.ts +2 -2
  462. package/src/runtime/telemetry/index.ts +5 -5
  463. package/src/runtime/telemetry/instrumentation/domain-bridge-agent-session.ts +1 -1
  464. package/src/runtime/telemetry/instrumentation/domain-bridge-plugin-mcp.ts +1 -1
  465. package/src/runtime/telemetry/instrumentation/domain-bridge-shared.ts +1 -1
  466. package/src/runtime/telemetry/instrumentation/domain-bridge-transport-task.ts +1 -1
  467. package/src/runtime/telemetry/instrumentation/domain-bridge.ts +5 -5
  468. package/src/runtime/telemetry/instrumentation/index.ts +3 -3
  469. package/src/runtime/tools/context.ts +3 -3
  470. package/src/runtime/tools/index.ts +4 -4
  471. package/src/runtime/tools/phased-executor.ts +3 -3
  472. package/src/runtime/tools/phases/budget.ts +1 -1
  473. package/src/runtime/tools/phases/execute.ts +1 -1
  474. package/src/runtime/tools/phases/index.ts +7 -7
  475. package/src/runtime/tools/phases/map-output.ts +1 -1
  476. package/src/runtime/tools/phases/permission.ts +2 -2
  477. package/src/runtime/tools/phases/posthook.ts +1 -1
  478. package/src/runtime/tools/phases/prehook.ts +1 -1
  479. package/src/runtime/tools/phases/validate.ts +1 -1
  480. package/src/runtime/transports/direct.ts +4 -4
  481. package/src/runtime/transports/http-helpers.ts +3 -3
  482. package/src/runtime/transports/http-types.ts +6 -6
  483. package/src/runtime/transports/http.ts +8 -8
  484. package/src/runtime/transports/realtime.ts +4 -4
  485. package/src/runtime/transports/remote-events.ts +1 -1
  486. package/src/runtime/transports/shared.ts +2 -2
  487. package/src/runtime/transports/ui-runtime-events.ts +2 -2
  488. package/src/runtime/ui/index.ts +7 -7
  489. package/src/runtime/ui/model-picker/data-provider.ts +4 -4
  490. package/src/runtime/ui/model-picker/health-enrichment.ts +3 -3
  491. package/src/runtime/ui/model-picker/index.ts +8 -8
  492. package/src/runtime/ui/provider-health/data-provider.ts +2 -2
  493. package/src/runtime/ui/provider-health/fallback-visualizer.ts +1 -1
  494. package/src/runtime/ui/provider-health/index.ts +5 -5
  495. package/src/runtime/ui-events.ts +1 -1
  496. package/src/runtime/ui-read-models-core.ts +2 -2
  497. package/src/runtime/ui-read-models-observability-maintenance.ts +4 -4
  498. package/src/runtime/ui-read-models-observability-options.ts +1 -1
  499. package/src/runtime/ui-read-models-observability-remote.ts +2 -2
  500. package/src/runtime/ui-read-models-observability-security.ts +3 -3
  501. package/src/runtime/ui-read-models-observability-system.ts +6 -6
  502. package/src/runtime/ui-read-models-observability.ts +10 -10
  503. package/src/runtime/ui-read-models-operations.ts +2 -2
  504. package/src/runtime/ui-read-models.ts +7 -7
  505. package/src/runtime/ui-service-queries.ts +2 -2
  506. package/src/runtime/ui-services.ts +7 -7
  507. package/src/runtime/worktree/registry.ts +1 -1
  508. package/src/scripts/process-messages.ts +1 -1
  509. package/src/sessions/manager.ts +9 -383
  510. package/src/shell/blocking-input.ts +3 -3
  511. package/src/shell/ui-openers.ts +3 -3
  512. package/src/state/file-watcher.ts +1 -1
  513. package/src/state/index.ts +10 -10
  514. package/src/state/knowledge-injection.ts +2 -2
  515. package/src/state/memory-embedding-http.ts +2 -2
  516. package/src/state/memory-embeddings.ts +1 -1
  517. package/src/state/memory-ingest.ts +3 -3
  518. package/src/state/memory-registry.ts +3 -3
  519. package/src/state/memory-store-helpers.ts +1 -1
  520. package/src/state/memory-store.ts +4 -4
  521. package/src/state/memory-vector-store.ts +3 -3
  522. package/src/tools/agent/index.ts +7 -7
  523. package/src/tools/agent/manager.ts +8 -8
  524. package/src/tools/analyze/git-modes.ts +2 -2
  525. package/src/tools/analyze/index.ts +2 -2
  526. package/src/tools/channel/agent-tools.ts +1 -1
  527. package/src/tools/channel/index.ts +2 -2
  528. package/src/tools/edit/core.ts +4 -4
  529. package/src/tools/edit/index.ts +2 -2
  530. package/src/tools/edit/phased.ts +2 -2
  531. package/src/tools/fetch/index.ts +2 -2
  532. package/src/tools/fetch/phased.ts +1 -1
  533. package/src/tools/index.ts +21 -21
  534. package/src/tools/mcp/index.ts +1 -1
  535. package/src/tools/remote-trigger/index.ts +1 -1
  536. package/src/tools/shared/auto-heal.ts +2 -2
  537. package/src/tools/state/index.ts +1 -1
  538. package/src/tools/web-search/index.ts +1 -1
  539. package/src/tools/write/index.ts +3 -3
  540. package/src/tools/write/phased.ts +1 -1
  541. package/src/version.ts +1 -1
  542. package/src/watchers/index.ts +2 -2
  543. package/src/watchers/registry.ts +2 -2
  544. package/src/web-search/index.ts +10 -10
  545. package/src/web-search/provider-registry.ts +8 -8
  546. package/src/web-search/providers/brave.ts +1 -1
  547. package/src/web-search/providers/duckduckgo.ts +1 -1
  548. package/src/web-search/providers/exa.ts +1 -1
  549. package/src/web-search/providers/firecrawl.ts +1 -1
  550. package/src/web-search/providers/perplexity.ts +1 -1
  551. package/src/web-search/providers/searxng.ts +1 -1
  552. package/src/web-search/providers/shared.ts +1 -1
  553. package/src/web-search/providers/tavily.ts +1 -1
  554. package/src/web-search/service.ts +2 -2
  555. package/src/runtime/ecosystem/catalog.ts +0 -606
@@ -1,553 +1 @@
1
- import type { DiscoveredServer } from '@pellux/goodvibes-sdk/platform/discovery/index';
2
- import { HelperModel, type HelperModelDeps } from '../config/helper-model.ts';
3
- import {
4
- compositeScore,
5
- getQualityTier,
6
- getQualityTierFromScore,
7
- type BenchmarkEntry,
8
- type BenchmarkStore,
9
- type ModelBenchmarks,
10
- type QualityTier,
11
- } from '@pellux/goodvibes-sdk/platform/providers/model-benchmarks';
12
- import type { MinimalModelDefinition, SyntheticModelInfo } from './model-catalog.ts';
13
- import type { FavoritesData, FavoritesStore } from '@pellux/goodvibes-sdk/platform/providers/favorites';
14
- import type { LLMProvider, ProviderRuntimeMetadata } from './interface.ts';
15
- import type { ModelDefinition } from './registry-types.ts';
16
- import {
17
- getProviderRuntimeSnapshot,
18
- getProviderUsageSnapshot,
19
- listProviderRuntimeSnapshots,
20
- type ProviderRuntimeSnapshot,
21
- type ProviderUsageSnapshot,
22
- } from './runtime-snapshot.ts';
23
-
24
- export interface ProviderApiModelReference {
25
- readonly modelId: string;
26
- readonly providerId: string;
27
- readonly registryKey: string;
28
- }
29
-
30
- export interface ProviderApiFavoriteState {
31
- readonly pinned: boolean;
32
- readonly recent: boolean;
33
- readonly pinnedAt?: string;
34
- readonly lastUsed?: string;
35
- readonly useCount?: number;
36
- }
37
-
38
- export interface ProviderApiSyntheticRouting {
39
- readonly backendCount: number;
40
- readonly keyedBackendCount: number;
41
- readonly tier: string;
42
- readonly bestCompositeScore: number | null;
43
- }
44
-
45
- export interface ProviderApiModelRouting {
46
- readonly kind: 'direct' | 'synthetic';
47
- readonly failoverStrategy: 'none' | 'synthetic-wrapper' | 'same-tier-provider' | 'intra-synthetic';
48
- readonly alternative?: ProviderApiModelReference;
49
- readonly synthetic?: ProviderApiSyntheticRouting;
50
- }
51
-
52
- export interface ProviderApiCatalogBenchmarkRecord extends ProviderApiModelReference {
53
- readonly kind: 'catalog';
54
- readonly available: boolean;
55
- readonly displayName?: string;
56
- readonly organization: string;
57
- readonly sourceName: string;
58
- readonly benchmarks: ModelBenchmarks;
59
- readonly compositeScore: number | null;
60
- readonly qualityTier: QualityTier;
61
- }
62
-
63
- export interface ProviderApiSyntheticBenchmarkRecord extends ProviderApiModelReference {
64
- readonly kind: 'synthetic';
65
- readonly available: boolean;
66
- readonly displayName?: string;
67
- readonly backendCount: number;
68
- readonly keyedBackendCount: number;
69
- readonly tier: string;
70
- readonly compositeScore: number | null;
71
- readonly qualityTier?: QualityTier;
72
- }
73
-
74
- export type ProviderApiBenchmarkRecord =
75
- | ProviderApiCatalogBenchmarkRecord
76
- | ProviderApiSyntheticBenchmarkRecord;
77
-
78
- export interface ProviderApiModelRecord extends ProviderApiModelReference {
79
- readonly displayName: string;
80
- readonly description: string;
81
- readonly selectable: boolean;
82
- readonly current: boolean;
83
- readonly capabilities: ModelDefinition['capabilities'];
84
- readonly contextWindow: number;
85
- readonly tier?: ModelDefinition['tier'];
86
- readonly reasoningEffort?: readonly string[];
87
- readonly favorite: ProviderApiFavoriteState;
88
- readonly benchmark?: ProviderApiBenchmarkRecord;
89
- readonly routing: ProviderApiModelRouting;
90
- }
91
-
92
- export interface ProviderApiFavoriteRecord {
93
- readonly modelId: string;
94
- readonly available: boolean;
95
- readonly providerId?: string;
96
- readonly registryKey?: string;
97
- readonly displayName?: string;
98
- readonly pinnedAt?: string;
99
- readonly lastUsed?: string;
100
- readonly useCount?: number;
101
- }
102
-
103
- export interface ProviderApiFavoritesSnapshot {
104
- readonly pinned: readonly ProviderApiFavoriteRecord[];
105
- readonly recent: readonly ProviderApiFavoriteRecord[];
106
- }
107
-
108
- export interface ProviderApiModelQuery {
109
- readonly providerId?: string;
110
- readonly selectableOnly?: boolean;
111
- readonly favorites?: 'all' | 'pinned' | 'recent';
112
- }
113
-
114
- export interface ProviderApiBenchmarkQuery {
115
- readonly modelRefs?: readonly string[];
116
- readonly limit?: number;
117
- }
118
-
119
- export interface ProviderApiCatalogRefreshResult {
120
- readonly modelCount: number;
121
- readonly providerCount: number;
122
- }
123
-
124
- export type ProviderApiRuntimeQuery =
125
- | { readonly scope: 'all' }
126
- | { readonly scope: 'provider'; readonly providerId: string }
127
- | { readonly scope: 'usage'; readonly providerId: string };
128
-
129
- export type ProviderApiRuntimeQueryResult =
130
- | { readonly scope: 'all'; readonly snapshots: readonly ProviderRuntimeSnapshot[] }
131
- | { readonly scope: 'provider'; readonly snapshot: ProviderRuntimeSnapshot | null }
132
- | { readonly scope: 'usage'; readonly snapshot: ProviderUsageSnapshot | null };
133
-
134
- export interface ProviderApi {
135
- listProviderIds(): readonly string[];
136
- getCurrentModel(): Promise<ProviderApiModelRecord>;
137
- listModels(query?: ProviderApiModelQuery): Promise<readonly ProviderApiModelRecord[]>;
138
- selectModel(modelRef: string): Promise<ProviderApiModelRecord>;
139
- registerDiscoveredProviders(servers: readonly DiscoveredServer[]): Promise<void>;
140
- refreshCatalog(): Promise<ProviderApiCatalogRefreshResult>;
141
- refreshBenchmarks(): Promise<number>;
142
- refreshModelLimits(): Promise<number>;
143
- getFavorites(): Promise<ProviderApiFavoritesSnapshot>;
144
- pinModel(modelRef: string): Promise<ProviderApiFavoritesSnapshot>;
145
- unpinModel(modelRef: string): Promise<ProviderApiFavoritesSnapshot>;
146
- recordModelUsage(modelRef: string): Promise<ProviderApiFavoritesSnapshot>;
147
- listBenchmarks(query?: ProviderApiBenchmarkQuery): Promise<readonly ProviderApiBenchmarkRecord[]>;
148
- queryRuntimeMetadata(query: ProviderApiRuntimeQuery): Promise<ProviderApiRuntimeQueryResult>;
149
- createHelperModel(configManager: HelperModelDeps['configManager']): HelperModel;
150
- }
151
-
152
- export interface ProviderApiRegistry {
153
- describeRuntime(name: string): Promise<ProviderRuntimeMetadata | null>;
154
- findAlternativeModel(currentModelId: string): ModelDefinition | null;
155
- getCostFromCatalog(modelId: string): { input: number; output: number };
156
- getCatalogModelDefinitions(): readonly MinimalModelDefinition[];
157
- get(name: string): LLMProvider;
158
- getCurrentModel(): ModelDefinition;
159
- getContextWindowForModel(modelDef: ModelDefinition): number;
160
- getForModel(modelId: string, provider?: string): LLMProvider;
161
- getRegistered(name: string): LLMProvider;
162
- getSelectableModels(): ModelDefinition[];
163
- getSyntheticModelInfoFromCatalog(modelId: string): SyntheticModelInfo | null;
164
- listModels(): ModelDefinition[];
165
- listProviders(): readonly LLMProvider[];
166
- registerDiscoveredProviders(servers: DiscoveredServer[]): void;
167
- refreshCatalog(): Promise<void>;
168
- refreshModelLimits(): Promise<number>;
169
- setCurrentModel(modelId: string): void;
170
- }
171
-
172
- export interface ProviderApiFavoritesStore extends Pick<FavoritesStore, 'load' | 'pinModel' | 'recordUsage' | 'unpinModel'> {}
173
-
174
- export interface ProviderApiBenchmarkStore extends Pick<BenchmarkStore, 'getBenchmarks' | 'refreshBenchmarks'> {}
175
-
176
- export interface ProviderApiDependencies {
177
- readonly providerRegistry: ProviderApiRegistry;
178
- readonly favoritesStore: ProviderApiFavoritesStore;
179
- readonly benchmarkStore: ProviderApiBenchmarkStore;
180
- }
181
-
182
- function cloneFavoritesData(data: FavoritesData): FavoritesData {
183
- return {
184
- pinned: data.pinned.map((entry) => ({ ...entry })),
185
- history: data.history.map((entry) => ({ ...entry })),
186
- };
187
- }
188
-
189
- function findModelDefinition(
190
- models: readonly ModelDefinition[],
191
- modelRef: string,
192
- ): ModelDefinition | undefined {
193
- if (modelRef.includes(':')) {
194
- return models.find((model) => model.registryKey === modelRef) ?? models.find((model) => model.id === modelRef);
195
- }
196
- return models.find((model) => model.id === modelRef);
197
- }
198
-
199
- function toModelReference(model: ModelDefinition): ProviderApiModelReference {
200
- return {
201
- modelId: model.id,
202
- providerId: model.provider,
203
- registryKey: model.registryKey,
204
- };
205
- }
206
-
207
- function buildFavoriteIndexes(data: FavoritesData): {
208
- readonly pinnedByModelId: ReadonlyMap<string, FavoritesData['pinned'][number]>;
209
- readonly recentByModelId: ReadonlyMap<string, FavoritesData['history'][number]>;
210
- } {
211
- return {
212
- pinnedByModelId: new Map(data.pinned.map((entry) => [entry.modelId, entry])),
213
- recentByModelId: new Map(data.history.map((entry) => [entry.modelId, entry])),
214
- };
215
- }
216
-
217
- function buildSyntheticBenchmarkRecord(
218
- model: ModelDefinition,
219
- syntheticInfo: SyntheticModelInfo,
220
- ): ProviderApiSyntheticBenchmarkRecord {
221
- return {
222
- ...toModelReference(model),
223
- kind: 'synthetic',
224
- available: true,
225
- displayName: model.displayName,
226
- backendCount: syntheticInfo.backendCount,
227
- keyedBackendCount: syntheticInfo.keyedBackendCount,
228
- tier: syntheticInfo.tier,
229
- compositeScore: syntheticInfo.bestCompositeScore,
230
- ...(syntheticInfo.bestCompositeScore != null
231
- ? { qualityTier: getQualityTierFromScore(syntheticInfo.bestCompositeScore) }
232
- : {}),
233
- };
234
- }
235
-
236
- function buildCatalogBenchmarkRecord(
237
- model: ModelDefinition,
238
- benchmark: BenchmarkEntry,
239
- ): ProviderApiCatalogBenchmarkRecord {
240
- return {
241
- ...toModelReference(model),
242
- kind: 'catalog',
243
- available: true,
244
- displayName: model.displayName,
245
- organization: benchmark.organization,
246
- sourceName: benchmark.name,
247
- benchmarks: benchmark.benchmarks,
248
- compositeScore: compositeScore(benchmark.benchmarks),
249
- qualityTier: getQualityTier(benchmark.benchmarks),
250
- };
251
- }
252
-
253
- function buildModelBenchmark(
254
- model: ModelDefinition,
255
- deps: ProviderApiDependencies,
256
- ): ProviderApiBenchmarkRecord | undefined {
257
- if (model.provider === 'synthetic') {
258
- const syntheticInfo = deps.providerRegistry.getSyntheticModelInfoFromCatalog(model.id);
259
- return syntheticInfo ? buildSyntheticBenchmarkRecord(model, syntheticInfo) : undefined;
260
- }
261
-
262
- const benchmark = deps.benchmarkStore.getBenchmarks(model.id)
263
- ?? deps.benchmarkStore.getBenchmarks(model.displayName);
264
- return benchmark ? buildCatalogBenchmarkRecord(model, benchmark) : undefined;
265
- }
266
-
267
- function buildModelRouting(
268
- model: ModelDefinition,
269
- deps: ProviderApiDependencies,
270
- ): ProviderApiModelRouting {
271
- if (model.provider === 'synthetic') {
272
- const syntheticInfo = deps.providerRegistry.getSyntheticModelInfoFromCatalog(model.id);
273
- return {
274
- kind: 'synthetic',
275
- failoverStrategy: 'intra-synthetic',
276
- ...(syntheticInfo
277
- ? {
278
- synthetic: {
279
- backendCount: syntheticInfo.backendCount,
280
- keyedBackendCount: syntheticInfo.keyedBackendCount,
281
- tier: syntheticInfo.tier,
282
- bestCompositeScore: syntheticInfo.bestCompositeScore,
283
- },
284
- }
285
- : {}),
286
- };
287
- }
288
-
289
- const alternative = deps.providerRegistry.findAlternativeModel(model.registryKey);
290
- if (!alternative) {
291
- return {
292
- kind: 'direct',
293
- failoverStrategy: 'none',
294
- };
295
- }
296
-
297
- return {
298
- kind: 'direct',
299
- failoverStrategy: alternative.provider === 'synthetic' ? 'synthetic-wrapper' : 'same-tier-provider',
300
- alternative: toModelReference(alternative),
301
- };
302
- }
303
-
304
- function buildModelRecord(
305
- model: ModelDefinition,
306
- currentModel: ModelDefinition,
307
- favorites: FavoritesData,
308
- deps: ProviderApiDependencies,
309
- ): ProviderApiModelRecord {
310
- const indexes = buildFavoriteIndexes(favorites);
311
- const pinned = indexes.pinnedByModelId.get(model.id);
312
- const recent = indexes.recentByModelId.get(model.id);
313
-
314
- return {
315
- ...toModelReference(model),
316
- displayName: model.displayName,
317
- description: model.description,
318
- selectable: model.selectable,
319
- current: currentModel.registryKey === model.registryKey,
320
- capabilities: model.capabilities,
321
- contextWindow: model.contextWindow,
322
- ...(model.tier ? { tier: model.tier } : {}),
323
- ...(model.reasoningEffort ? { reasoningEffort: model.reasoningEffort } : {}),
324
- favorite: {
325
- pinned: pinned != null,
326
- recent: recent != null,
327
- ...(pinned ? { pinnedAt: pinned.pinnedAt } : {}),
328
- ...(recent ? { lastUsed: recent.lastUsed, useCount: recent.count } : {}),
329
- },
330
- ...(buildModelBenchmark(model, deps) ? { benchmark: buildModelBenchmark(model, deps)! } : {}),
331
- routing: buildModelRouting(model, deps),
332
- };
333
- }
334
-
335
- function buildFavoriteRecord(
336
- modelId: string,
337
- models: readonly ModelDefinition[],
338
- extras: {
339
- readonly pinnedAt?: string;
340
- readonly lastUsed?: string;
341
- readonly useCount?: number;
342
- },
343
- ): ProviderApiFavoriteRecord {
344
- const model = findModelDefinition(models, modelId);
345
- return {
346
- modelId,
347
- available: model != null,
348
- ...(model
349
- ? {
350
- providerId: model.provider,
351
- registryKey: model.registryKey,
352
- displayName: model.displayName,
353
- }
354
- : {}),
355
- ...extras,
356
- };
357
- }
358
-
359
- async function loadFavoritesSnapshot(
360
- deps: ProviderApiDependencies,
361
- ): Promise<ProviderApiFavoritesSnapshot> {
362
- const favorites = cloneFavoritesData(await deps.favoritesStore.load());
363
- const models = deps.providerRegistry.listModels();
364
- const pinned = favorites.pinned.map((entry) =>
365
- buildFavoriteRecord(entry.modelId, models, { pinnedAt: entry.pinnedAt }),
366
- );
367
- const recent = favorites.history
368
- .slice()
369
- .sort((a, b) => b.lastUsed.localeCompare(a.lastUsed))
370
- .map((entry) =>
371
- buildFavoriteRecord(entry.modelId, models, {
372
- lastUsed: entry.lastUsed,
373
- useCount: entry.count,
374
- }),
375
- );
376
- return { pinned, recent };
377
- }
378
-
379
- function applyModelQuery(
380
- models: readonly ProviderApiModelRecord[],
381
- query: ProviderApiModelQuery | undefined,
382
- ): readonly ProviderApiModelRecord[] {
383
- if (!query) return models;
384
-
385
- return models.filter((model) => {
386
- if (query.providerId && model.providerId !== query.providerId) return false;
387
- if (query.selectableOnly && !model.selectable) return false;
388
- if (query.favorites === 'pinned' && !model.favorite.pinned) return false;
389
- if (query.favorites === 'recent' && !model.favorite.recent) return false;
390
- return true;
391
- });
392
- }
393
-
394
- function resolveModelOrThrow(
395
- deps: ProviderApiDependencies,
396
- modelRef: string,
397
- ): ModelDefinition {
398
- const model = findModelDefinition(deps.providerRegistry.listModels(), modelRef);
399
- if (!model) {
400
- throw new Error(`Model '${modelRef}' not found.`);
401
- }
402
- return model;
403
- }
404
-
405
- async function resolvePinnedModelIdOrThrow(
406
- deps: ProviderApiDependencies,
407
- modelRef: string,
408
- ): Promise<string> {
409
- const model = findModelDefinition(deps.providerRegistry.listModels(), modelRef);
410
- if (model) return model.id;
411
-
412
- const favorites = cloneFavoritesData(await deps.favoritesStore.load());
413
- const pinned = favorites.pinned.find((entry) => entry.modelId === modelRef);
414
- if (pinned) return pinned.modelId;
415
-
416
- throw new Error(`Model '${modelRef}' not found.`);
417
- }
418
-
419
- async function buildBenchmarkRecords(
420
- deps: ProviderApiDependencies,
421
- query?: ProviderApiBenchmarkQuery,
422
- ): Promise<readonly ProviderApiBenchmarkRecord[]> {
423
- const models = deps.providerRegistry.listModels();
424
- const selectedModels = query?.modelRefs
425
- ? query.modelRefs
426
- .map((modelRef) => findModelDefinition(models, modelRef))
427
- .filter((model): model is ModelDefinition => model != null)
428
- : models;
429
-
430
- const records = selectedModels
431
- .map((model) => buildModelBenchmark(model, deps))
432
- .filter((record): record is ProviderApiBenchmarkRecord => record != null)
433
- .sort((a, b) => {
434
- const scoreA = a.compositeScore ?? -1;
435
- const scoreB = b.compositeScore ?? -1;
436
- if (scoreA !== scoreB) return scoreB - scoreA;
437
- return a.registryKey.localeCompare(b.registryKey);
438
- });
439
-
440
- return typeof query?.limit === 'number' ? records.slice(0, query.limit) : records;
441
- }
442
-
443
- function buildCatalogRefreshResult(deps: ProviderApiDependencies): ProviderApiCatalogRefreshResult {
444
- const models = deps.providerRegistry.getCatalogModelDefinitions();
445
- return {
446
- modelCount: models.length,
447
- providerCount: new Set(models.map((model) => model.provider)).size,
448
- };
449
- }
450
-
451
- export function createProviderApi(deps: ProviderApiDependencies): ProviderApi {
452
- return {
453
- listProviderIds(): readonly string[] {
454
- return deps.providerRegistry
455
- .listProviders()
456
- .map((provider) => provider.name)
457
- .slice()
458
- .sort((a, b) => a.localeCompare(b));
459
- },
460
-
461
- async getCurrentModel(): Promise<ProviderApiModelRecord> {
462
- const currentModel = deps.providerRegistry.getCurrentModel();
463
- const favorites = cloneFavoritesData(await deps.favoritesStore.load());
464
- return buildModelRecord(currentModel, currentModel, favorites, deps);
465
- },
466
-
467
- async listModels(query?: ProviderApiModelQuery): Promise<readonly ProviderApiModelRecord[]> {
468
- const currentModel = deps.providerRegistry.getCurrentModel();
469
- const favorites = cloneFavoritesData(await deps.favoritesStore.load());
470
- const models = deps.providerRegistry.listModels().map((model) =>
471
- buildModelRecord(model, currentModel, favorites, deps),
472
- );
473
- return applyModelQuery(models, query);
474
- },
475
-
476
- async selectModel(modelRef: string): Promise<ProviderApiModelRecord> {
477
- deps.providerRegistry.setCurrentModel(modelRef);
478
- return await this.getCurrentModel();
479
- },
480
-
481
- async registerDiscoveredProviders(servers: readonly DiscoveredServer[]): Promise<void> {
482
- deps.providerRegistry.registerDiscoveredProviders([...servers]);
483
- },
484
-
485
- async refreshCatalog(): Promise<ProviderApiCatalogRefreshResult> {
486
- await deps.providerRegistry.refreshCatalog();
487
- return buildCatalogRefreshResult(deps);
488
- },
489
-
490
- async refreshBenchmarks(): Promise<number> {
491
- await deps.benchmarkStore.refreshBenchmarks();
492
- return (await buildBenchmarkRecords(deps)).length;
493
- },
494
-
495
- async refreshModelLimits(): Promise<number> {
496
- return await deps.providerRegistry.refreshModelLimits();
497
- },
498
-
499
- async getFavorites(): Promise<ProviderApiFavoritesSnapshot> {
500
- return await loadFavoritesSnapshot(deps);
501
- },
502
-
503
- async pinModel(modelRef: string): Promise<ProviderApiFavoritesSnapshot> {
504
- const model = resolveModelOrThrow(deps, modelRef);
505
- await deps.favoritesStore.pinModel(model.id);
506
- return await loadFavoritesSnapshot(deps);
507
- },
508
-
509
- async unpinModel(modelRef: string): Promise<ProviderApiFavoritesSnapshot> {
510
- const modelId = await resolvePinnedModelIdOrThrow(deps, modelRef);
511
- await deps.favoritesStore.unpinModel(modelId);
512
- return await loadFavoritesSnapshot(deps);
513
- },
514
-
515
- async recordModelUsage(modelRef: string): Promise<ProviderApiFavoritesSnapshot> {
516
- const model = resolveModelOrThrow(deps, modelRef);
517
- await deps.favoritesStore.recordUsage(model.id);
518
- return await loadFavoritesSnapshot(deps);
519
- },
520
-
521
- async listBenchmarks(query?: ProviderApiBenchmarkQuery): Promise<readonly ProviderApiBenchmarkRecord[]> {
522
- return await buildBenchmarkRecords(deps, query);
523
- },
524
-
525
- async queryRuntimeMetadata(query: ProviderApiRuntimeQuery): Promise<ProviderApiRuntimeQueryResult> {
526
- if (query.scope === 'all') {
527
- return {
528
- scope: 'all',
529
- snapshots: await listProviderRuntimeSnapshots(deps.providerRegistry),
530
- };
531
- }
532
- if (query.scope === 'provider') {
533
- return {
534
- scope: 'provider',
535
- snapshot: await getProviderRuntimeSnapshot(deps.providerRegistry, query.providerId),
536
- };
537
- }
538
- return {
539
- scope: 'usage',
540
- snapshot: await getProviderUsageSnapshot(deps.providerRegistry, query.providerId),
541
- };
542
- },
543
-
544
- createHelperModel(configManager: HelperModelDeps['configManager']): HelperModel {
545
- return new HelperModel({
546
- configManager,
547
- providerRegistry: deps.providerRegistry,
548
- });
549
- },
550
- };
551
- }
552
-
553
- export type { ProviderRuntimeSnapshot, ProviderUsageSnapshot };
1
+ export * from '@pellux/goodvibes-sdk/platform/providers/provider-api';
@@ -1,4 +1,4 @@
1
- import type { ModelDefinition } from './registry-types.ts';
1
+ import type { ModelDefinition } from '@pellux/goodvibes-sdk/platform/providers/registry-types';
2
2
 
3
3
  export function withRegistryKey(model: ModelDefinition): ModelDefinition {
4
4
  return model.registryKey ? model : { ...model, registryKey: `${model.provider}:${model.id}` };
@@ -1,5 +1,5 @@
1
- import type { ModelDefinition } from './registry-types.ts';
2
- import { splitModelRegistryKey, withRegistryKey } from './registry-helpers.ts';
1
+ import type { ModelDefinition } from '@pellux/goodvibes-sdk/platform/providers/registry-types';
2
+ import { splitModelRegistryKey, withRegistryKey } from '@pellux/goodvibes-sdk/platform/providers/registry-helpers';
3
3
 
4
4
  export function getProviderLookupCandidates(
5
5
  providerName: string,
@@ -1,13 +1,13 @@
1
- import type { LLMProvider, ProviderRuntimeMetadataDeps } from './interface.ts';
2
- import type { ProviderCapabilityRegistry } from './capabilities.ts';
3
- import type { ConfigManager } from '../config/manager.ts';
4
- import type { RuntimeEventBus } from '../runtime/events/index.ts';
1
+ import type { LLMProvider, ProviderRuntimeMetadataDeps } from '@pellux/goodvibes-sdk/platform/providers/interface';
2
+ import type { ProviderCapabilityRegistry } from '@pellux/goodvibes-sdk/platform/providers/capabilities';
3
+ import type { ConfigManager } from '@pellux/goodvibes-sdk/platform/config/manager';
4
+ import type { RuntimeEventBus } from '@pellux/goodvibes-sdk/platform/runtime/events/index';
5
5
  import type { SubscriptionManager } from '@pellux/goodvibes-sdk/platform/config/subscriptions';
6
6
  import type { CacheHitTracker } from '@pellux/goodvibes-sdk/platform/providers/cache-strategy';
7
7
  import type { FeatureFlagManager } from '@pellux/goodvibes-sdk/platform/runtime/feature-flags/index';
8
8
  import type { FavoritesStore } from '@pellux/goodvibes-sdk/platform/providers/favorites';
9
9
  import type { BenchmarkStore } from '@pellux/goodvibes-sdk/platform/providers/model-benchmarks';
10
- import type { ModelLimitsService } from './model-limits.ts';
10
+ import type { ModelLimitsService } from '@pellux/goodvibes-sdk/platform/providers/model-limits';
11
11
 
12
12
  /** Model capability tier — controls system prompt verbosity. */
13
13
  export type ModelTier = 'free' | 'standard' | 'premium' | 'subscription';