@pellux/goodvibes-tui 0.18.4 → 0.18.9

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 (571) hide show
  1. package/CHANGELOG.md +190 -0
  2. package/README.md +2 -2
  3. package/bin/goodvibes +1 -1
  4. package/bin/goodvibes-daemon +66 -0
  5. package/docs/foundation-artifacts/operator-contract.json +1 -1
  6. package/package.json +14 -7
  7. package/scripts/postinstall.js +220 -0
  8. package/src/acp/connection.ts +5 -5
  9. package/src/acp/index.ts +1 -1
  10. package/src/acp/manager.ts +1 -133
  11. package/src/adapters/bluebubbles/index.ts +1 -1
  12. package/src/adapters/discord/index.ts +2 -2
  13. package/src/adapters/github/index.ts +1 -1
  14. package/src/adapters/google-chat/index.ts +1 -1
  15. package/src/adapters/imessage/index.ts +1 -1
  16. package/src/adapters/index.ts +15 -15
  17. package/src/adapters/matrix/index.ts +1 -1
  18. package/src/adapters/mattermost/index.ts +1 -1
  19. package/src/adapters/msteams/index.ts +2 -2
  20. package/src/adapters/ntfy/index.ts +1 -1
  21. package/src/adapters/signal/index.ts +1 -1
  22. package/src/adapters/slack/index.ts +2 -2
  23. package/src/adapters/telegram/index.ts +1 -1
  24. package/src/adapters/types.ts +4 -4
  25. package/src/adapters/webhook/index.ts +1 -1
  26. package/src/adapters/whatsapp/index.ts +1 -1
  27. package/src/agents/message-bus-core.ts +2 -2
  28. package/src/agents/message-bus.ts +2 -2
  29. package/src/agents/orchestrator-prompts.ts +4 -4
  30. package/src/agents/orchestrator-runner.ts +11 -11
  31. package/src/agents/orchestrator.ts +15 -14
  32. package/src/agents/session.ts +1 -1
  33. package/src/agents/worktree.ts +1 -1
  34. package/src/agents/wrfc-config.ts +2 -2
  35. package/src/agents/wrfc-controller.ts +12 -12
  36. package/src/agents/wrfc-gate-runtime.ts +5 -5
  37. package/src/agents/wrfc-reporting.ts +1 -1
  38. package/src/agents/wrfc-runtime-events.ts +3 -3
  39. package/src/agents/wrfc-types.ts +1 -1
  40. package/src/automation/delivery-manager.ts +4 -4
  41. package/src/automation/index.ts +4 -4
  42. package/src/automation/manager-runtime-delivery.ts +1 -1
  43. package/src/automation/manager-runtime-events.ts +3 -3
  44. package/src/automation/manager-runtime-execution.ts +5 -5
  45. package/src/automation/manager-runtime-helpers.ts +2 -2
  46. package/src/automation/manager-runtime-job-mutations.ts +3 -3
  47. package/src/automation/manager-runtime-reconcile.ts +4 -4
  48. package/src/automation/manager-runtime-scheduling.ts +2 -2
  49. package/src/automation/manager-runtime.ts +18 -18
  50. package/src/automation/manager.ts +2 -2
  51. package/src/automation/service.ts +2 -2
  52. package/src/channels/builtin/account-actions.ts +5 -5
  53. package/src/channels/builtin/accounts.ts +2 -2
  54. package/src/channels/builtin/contracts.ts +3 -3
  55. package/src/channels/builtin/plugins.ts +5 -5
  56. package/src/channels/builtin/rendering.ts +4 -4
  57. package/src/channels/builtin/setup-schema.ts +1 -1
  58. package/src/channels/builtin/shared.ts +7 -7
  59. package/src/channels/builtin/surfaces.ts +2 -2
  60. package/src/channels/builtin/targets.ts +3 -3
  61. package/src/channels/builtin-runtime.ts +11 -11
  62. package/src/channels/delivery/shared.ts +2 -2
  63. package/src/channels/delivery/strategies-bridge.ts +3 -3
  64. package/src/channels/delivery/strategies-core.ts +5 -5
  65. package/src/channels/delivery/strategies-enterprise.ts +3 -3
  66. package/src/channels/delivery/types.ts +2 -2
  67. package/src/channels/delivery-router.ts +9 -9
  68. package/src/channels/index.ts +12 -12
  69. package/src/channels/plugin-registry.ts +1 -1
  70. package/src/channels/provider-runtime.ts +3 -3
  71. package/src/channels/reply-pipeline.ts +3 -3
  72. package/src/channels/route-manager.ts +2 -2
  73. package/src/channels/surface-registry.ts +2 -2
  74. package/src/config/helper-model.ts +1 -233
  75. package/src/config/index.ts +3 -3
  76. package/src/config/manager.ts +8 -404
  77. package/src/config/secrets.ts +21 -542
  78. package/src/config/service-registry.ts +1 -329
  79. package/src/config/tool-llm.ts +3 -3
  80. package/src/control-plane/approval-broker.ts +1 -1
  81. package/src/control-plane/gateway.ts +1 -713
  82. package/src/control-plane/index.ts +7 -7
  83. package/src/control-plane/media-contract-schemas.ts +1 -208
  84. package/src/control-plane/method-catalog-admin.ts +1 -136
  85. package/src/control-plane/method-catalog-channels.ts +1 -591
  86. package/src/control-plane/method-catalog-control-automation.ts +1 -475
  87. package/src/control-plane/method-catalog-control-core.ts +1 -594
  88. package/src/control-plane/method-catalog-control.ts +1 -8
  89. package/src/control-plane/method-catalog-events.ts +1 -74
  90. package/src/control-plane/method-catalog-knowledge.ts +1 -531
  91. package/src/control-plane/method-catalog-media.ts +1 -279
  92. package/src/control-plane/method-catalog-runtime.ts +1 -304
  93. package/src/control-plane/method-catalog-shared.ts +1 -223
  94. package/src/control-plane/method-catalog.ts +1 -242
  95. package/src/control-plane/operator-contract-schemas-admin.ts +1 -639
  96. package/src/control-plane/operator-contract-schemas-channels.ts +1 -375
  97. package/src/control-plane/operator-contract-schemas-control.ts +1 -226
  98. package/src/control-plane/operator-contract-schemas-domains.ts +1 -4
  99. package/src/control-plane/operator-contract-schemas-knowledge.ts +1 -582
  100. package/src/control-plane/operator-contract-schemas-media.ts +1 -297
  101. package/src/control-plane/operator-contract-schemas-permissions.ts +1 -100
  102. package/src/control-plane/operator-contract-schemas-remote.ts +1 -38
  103. package/src/control-plane/operator-contract-schemas-runtime.ts +1 -563
  104. package/src/control-plane/operator-contract-schemas-shared.ts +1 -85
  105. package/src/control-plane/operator-contract-schemas-telemetry.ts +1 -349
  106. package/src/control-plane/operator-contract-schemas.ts +1 -6
  107. package/src/control-plane/operator-contract.ts +5 -3
  108. package/src/control-plane/session-broker.ts +1 -1
  109. package/src/core/compaction-sections.ts +5 -5
  110. package/src/core/compaction-types.ts +3 -3
  111. package/src/core/composer-state.ts +1 -1
  112. package/src/core/context-compaction.ts +7 -7
  113. package/src/core/conversation-compaction.ts +4 -4
  114. package/src/core/conversation-diff.ts +1 -1
  115. package/src/core/conversation-rendering.ts +5 -5
  116. package/src/core/conversation-utils.ts +2 -2
  117. package/src/core/conversation.ts +10 -10
  118. package/src/core/event-replay.ts +1 -1
  119. package/src/core/orchestrator-context-runtime.ts +8 -8
  120. package/src/core/orchestrator-follow-up-runtime.ts +2 -2
  121. package/src/core/orchestrator-runtime.ts +4 -4
  122. package/src/core/orchestrator-tool-runtime.ts +7 -7
  123. package/src/core/orchestrator-turn-helpers.ts +7 -7
  124. package/src/core/orchestrator-turn-loop.ts +10 -10
  125. package/src/core/orchestrator.ts +17 -17
  126. package/src/core/plan-command-handler.ts +2 -2
  127. package/src/core/system-message-router.ts +2 -2
  128. package/src/core/transcript-events/classify.ts +1 -1
  129. package/src/core/transcript-events/index.ts +3 -3
  130. package/src/daemon/cli.ts +6 -6
  131. package/src/daemon/control-plane.ts +7 -7
  132. package/src/daemon/facade-composition.ts +16 -15
  133. package/src/daemon/facade.ts +17 -17
  134. package/src/daemon/helpers.ts +2 -2
  135. package/src/daemon/http/router-route-contexts.ts +11 -11
  136. package/src/daemon/http/router.ts +25 -25
  137. package/src/daemon/http-listener.ts +3 -3
  138. package/src/daemon/index.ts +1 -3
  139. package/src/daemon/service-manager.ts +1 -1
  140. package/src/daemon/surface-actions.ts +8 -8
  141. package/src/daemon/surface-delivery.ts +7 -7
  142. package/src/daemon/surface-policy.ts +1 -1
  143. package/src/daemon/transport-events.ts +4 -4
  144. package/src/daemon/types.ts +24 -24
  145. package/src/export/markdown.ts +1 -1
  146. package/src/export/session-export.ts +1 -633
  147. package/src/git/index.ts +1 -1
  148. package/src/git/service.ts +1 -1
  149. package/src/hooks/chain-engine.ts +1 -1
  150. package/src/hooks/dispatcher.ts +4 -4
  151. package/src/hooks/hook-api.ts +1 -1
  152. package/src/hooks/index.ts +8 -8
  153. package/src/hooks/runners/agent.ts +1 -1
  154. package/src/hooks/runners/prompt.ts +1 -1
  155. package/src/hooks/workbench.ts +2 -2
  156. package/src/input/command-registry.ts +24 -17
  157. package/src/input/commands/config.ts +1 -1
  158. package/src/input/commands/control-room-runtime.ts +2 -2
  159. package/src/input/commands/conversation-runtime.ts +1 -1
  160. package/src/input/commands/discovery-runtime.ts +7 -1
  161. package/src/input/commands/eval.ts +2 -2
  162. package/src/input/commands/git-runtime.ts +1 -1
  163. package/src/input/commands/guidance-runtime.ts +3 -3
  164. package/src/input/commands/health-runtime.ts +7 -7
  165. package/src/input/commands/incident-runtime.ts +1 -1
  166. package/src/input/commands/integration-runtime.ts +3 -3
  167. package/src/input/commands/local-provider-runtime.ts +1 -1
  168. package/src/input/commands/local-runtime.ts +1 -1
  169. package/src/input/commands/local-setup-review.ts +2 -2
  170. package/src/input/commands/local-setup.ts +2 -2
  171. package/src/input/commands/managed-runtime.ts +2 -2
  172. package/src/input/commands/marketplace-runtime.ts +1 -1
  173. package/src/input/commands/platform-access-runtime.ts +1 -1
  174. package/src/input/commands/platform-sandbox-qemu.ts +3 -3
  175. package/src/input/commands/platform-sandbox-runtime.ts +5 -5
  176. package/src/input/commands/platform-sandbox-session.ts +1 -1
  177. package/src/input/commands/policy-dispatch.ts +2 -2
  178. package/src/input/commands/product-runtime.ts +2 -2
  179. package/src/input/commands/profile-sync-runtime.ts +1 -1
  180. package/src/input/commands/provider-accounts-runtime.ts +1 -1
  181. package/src/input/commands/provider.ts +3 -3
  182. package/src/input/commands/quit-shared.ts +1 -1
  183. package/src/input/commands/recall-bundle.ts +1 -1
  184. package/src/input/commands/recall-capture.ts +2 -2
  185. package/src/input/commands/recall-query.ts +2 -2
  186. package/src/input/commands/recall-shared.ts +1 -1
  187. package/src/input/commands/remote-runtime-setup.ts +1 -1
  188. package/src/input/commands/remote-runtime.ts +1 -1
  189. package/src/input/commands/runtime-services.ts +13 -11
  190. package/src/input/commands/schedule-runtime.ts +2 -2
  191. package/src/input/commands/session-content.ts +1 -1
  192. package/src/input/commands/session-workflow.ts +4 -4
  193. package/src/input/commands/settings-sync-runtime.ts +1 -1
  194. package/src/input/commands/share-runtime.ts +9 -4
  195. package/src/input/commands/shell-core.ts +1 -1
  196. package/src/input/commands/skills-runtime.ts +1 -1
  197. package/src/input/commands/subscription-runtime.ts +1 -1
  198. package/src/input/commands/tasks-runtime.ts +1 -1
  199. package/src/input/commands/teamwork-runtime.ts +1 -1
  200. package/src/input/commands/worktree-runtime.ts +1 -1
  201. package/src/input/handler-command-route.ts +1 -1
  202. package/src/input/handler-content-actions.ts +3 -3
  203. package/src/input/handler-feed-routes.ts +2 -2
  204. package/src/input/handler-feed.ts +1 -1
  205. package/src/input/handler-shortcuts.ts +1 -1
  206. package/src/input/handler.ts +1 -1
  207. package/src/input/keybindings.ts +5 -0
  208. package/src/input/model-picker.ts +2 -2
  209. package/src/input/profile-picker-modal.ts +1 -1
  210. package/src/input/session-picker-modal.ts +1 -1
  211. package/src/input/settings-modal.ts +4 -4
  212. package/src/integrations/index.ts +1 -1
  213. package/src/integrations/notifier.ts +1 -1
  214. package/src/integrations/webhooks.ts +1 -177
  215. package/src/knowledge/consolidation.ts +2 -2
  216. package/src/knowledge/graphql.ts +1 -1
  217. package/src/knowledge/index.ts +5 -5
  218. package/src/knowledge/ingest-compile.ts +3 -3
  219. package/src/knowledge/ingest-context.ts +1 -1
  220. package/src/knowledge/ingest-inputs.ts +4 -4
  221. package/src/knowledge/ingest.ts +1 -20
  222. package/src/knowledge/internal.ts +1 -1
  223. package/src/knowledge/knowledge-api.ts +7 -7
  224. package/src/knowledge/lint.ts +3 -3
  225. package/src/knowledge/memory-sync.ts +2 -2
  226. package/src/knowledge/packet.ts +3 -3
  227. package/src/knowledge/scheduling.ts +2 -2
  228. package/src/knowledge/service.ts +10 -10
  229. package/src/main.ts +11 -10
  230. package/src/mcp/index.ts +4 -4
  231. package/src/mcp/mcp-api.ts +1 -1
  232. package/src/mcp/registry.ts +1 -508
  233. package/src/media/builtin-image-understanding.ts +2 -2
  234. package/src/media/builtin-providers.ts +2 -2
  235. package/src/media/index.ts +1 -1
  236. package/src/multimodal/index.ts +1 -1
  237. package/src/multimodal/service.ts +2 -2
  238. package/src/panels/agent-inspector-panel.ts +2 -2
  239. package/src/panels/agent-logs-panel.ts +3 -3
  240. package/src/panels/approval-panel.ts +2 -2
  241. package/src/panels/builtin/operations.ts +3 -1
  242. package/src/panels/builtin/shared.ts +14 -14
  243. package/src/panels/context-visualizer-panel.ts +2 -2
  244. package/src/panels/cost-tracker-panel.ts +2 -2
  245. package/src/panels/debug-panel.ts +3 -3
  246. package/src/panels/git-panel.ts +1 -1
  247. package/src/panels/hooks-panel.ts +4 -4
  248. package/src/panels/knowledge-panel.ts +1 -1
  249. package/src/panels/marketplace-panel.ts +1 -1
  250. package/src/panels/mcp-panel.ts +1 -1
  251. package/src/panels/memory-panel.ts +2 -2
  252. package/src/panels/ops-control-panel.ts +2 -2
  253. package/src/panels/ops-strategy-panel.ts +2 -2
  254. package/src/panels/plugins-panel.ts +1 -1
  255. package/src/panels/policy-panel.ts +1 -1
  256. package/src/panels/provider-health-panel.ts +3 -3
  257. package/src/panels/provider-stats-panel.ts +2 -2
  258. package/src/panels/sandbox-panel.ts +3 -3
  259. package/src/panels/schedule-panel.ts +1 -1
  260. package/src/panels/settings-sync-panel.ts +1 -1
  261. package/src/panels/skills-panel.ts +28 -1
  262. package/src/panels/system-messages-panel.ts +1 -1
  263. package/src/panels/tasks-panel.ts +1 -1
  264. package/src/panels/thinking-panel.ts +2 -2
  265. package/src/panels/token-budget-panel.ts +1 -1
  266. package/src/panels/tool-inspector-panel.ts +2 -2
  267. package/src/panels/worktree-panel.ts +1 -1
  268. package/src/panels/wrfc-panel.ts +4 -4
  269. package/src/permissions/briefs/build.ts +1 -1
  270. package/src/permissions/manager.ts +1 -356
  271. package/src/permissions/prompt.ts +1 -1
  272. package/src/plugins/api.ts +9 -9
  273. package/src/plugins/loader.ts +8 -8
  274. package/src/plugins/manager.ts +5 -5
  275. package/src/providers/amazon-bedrock-mantle.ts +1 -1
  276. package/src/providers/amazon-bedrock.ts +1 -1
  277. package/src/providers/anthropic-compat.ts +4 -4
  278. package/src/providers/anthropic-sdk-provider.ts +5 -5
  279. package/src/providers/anthropic-vertex.ts +1 -1
  280. package/src/providers/anthropic.ts +4 -4
  281. package/src/providers/auto-register.ts +6 -6
  282. package/src/providers/builtin-catalog.ts +2 -2
  283. package/src/providers/builtin-registry.ts +15 -15
  284. package/src/providers/cache-planner.ts +2 -2
  285. package/src/providers/capabilities.ts +1 -601
  286. package/src/providers/custom-loader.ts +6 -6
  287. package/src/providers/discovered-compat.ts +7 -18
  288. package/src/providers/discovered-factory.ts +7 -7
  289. package/src/providers/discovered-traits.ts +1 -1
  290. package/src/providers/gemini.ts +4 -4
  291. package/src/providers/github-copilot.ts +4 -4
  292. package/src/providers/index.ts +1 -47
  293. package/src/providers/interface.ts +1 -1
  294. package/src/providers/llama-cpp.ts +4 -4
  295. package/src/providers/lm-studio-helpers.ts +1 -1
  296. package/src/providers/lm-studio.ts +4 -4
  297. package/src/providers/model-catalog-cache.ts +1 -1
  298. package/src/providers/model-catalog-notifications.ts +1 -1
  299. package/src/providers/model-catalog-synthetic.ts +2 -2
  300. package/src/providers/model-catalog.ts +7 -7
  301. package/src/providers/model-limits.ts +1 -280
  302. package/src/providers/ollama.ts +4 -4
  303. package/src/providers/openai-codex.ts +2 -2
  304. package/src/providers/openai-compat.ts +4 -4
  305. package/src/providers/openai.ts +3 -3
  306. package/src/providers/optimizer.ts +1 -381
  307. package/src/providers/provider-api.ts +1 -553
  308. package/src/providers/registry-helpers.ts +1 -1
  309. package/src/providers/registry-models.ts +2 -2
  310. package/src/providers/registry-types.ts +5 -5
  311. package/src/providers/registry.ts +1 -729
  312. package/src/providers/runtime-metadata.ts +1 -1
  313. package/src/providers/runtime-snapshot.ts +3 -3
  314. package/src/providers/synthetic.ts +3 -3
  315. package/src/providers/tier-prompts.ts +1 -1
  316. package/src/providers/tool-formats.ts +1 -1
  317. package/src/renderer/agent-detail-modal.ts +2 -2
  318. package/src/renderer/block-actions.ts +1 -1
  319. package/src/renderer/context-inspector.ts +1 -1
  320. package/src/renderer/conversation-layout.ts +1 -1
  321. package/src/renderer/conversation-overlays.ts +1 -1
  322. package/src/renderer/git-status.ts +1 -1
  323. package/src/renderer/live-tail-modal.ts +1 -1
  324. package/src/renderer/process-modal.ts +2 -2
  325. package/src/runtime/bootstrap-background.ts +18 -8
  326. package/src/runtime/bootstrap-command-context.ts +24 -24
  327. package/src/runtime/bootstrap-command-parts.ts +24 -24
  328. package/src/runtime/bootstrap-core.ts +12 -10
  329. package/src/runtime/bootstrap-helpers.ts +2 -2
  330. package/src/runtime/bootstrap-hook-bridge.ts +9 -9
  331. package/src/runtime/bootstrap-runtime-events.ts +4 -4
  332. package/src/runtime/bootstrap-services.ts +4 -4
  333. package/src/runtime/bootstrap-shell.ts +11 -11
  334. package/src/runtime/bootstrap.ts +28 -10
  335. package/src/runtime/compaction/index.ts +1 -90
  336. package/src/runtime/compaction/lifecycle.ts +1 -167
  337. package/src/runtime/compaction/manager.ts +11 -11
  338. package/src/runtime/compaction/quality-score.ts +1 -279
  339. package/src/runtime/compaction/resume-repair.ts +1 -183
  340. package/src/runtime/compaction/strategies/autocompact.ts +1 -65
  341. package/src/runtime/compaction/strategies/boundary-commit.ts +1 -106
  342. package/src/runtime/compaction/strategies/collapse.ts +1 -90
  343. package/src/runtime/compaction/strategies/index.ts +1 -23
  344. package/src/runtime/compaction/strategies/microcompact.ts +1 -74
  345. package/src/runtime/compaction/strategies/reactive.ts +1 -89
  346. package/src/runtime/compaction/types.ts +1 -221
  347. package/src/runtime/context.ts +10 -10
  348. package/src/runtime/diagnostics/actions.ts +1 -1
  349. package/src/runtime/diagnostics/index.ts +5 -5
  350. package/src/runtime/diagnostics/panels/agents.ts +2 -2
  351. package/src/runtime/diagnostics/panels/events.ts +2 -2
  352. package/src/runtime/diagnostics/panels/health.ts +2 -2
  353. package/src/runtime/diagnostics/panels/ops.ts +2 -2
  354. package/src/runtime/diagnostics/panels/policy.ts +2 -2
  355. package/src/runtime/diagnostics/panels/tasks.ts +2 -2
  356. package/src/runtime/diagnostics/panels/tool-calls.ts +2 -2
  357. package/src/runtime/diagnostics/provider.ts +1 -1
  358. package/src/runtime/ecosystem/recommendations.ts +1 -1
  359. package/src/runtime/emitters/agents.ts +2 -2
  360. package/src/runtime/emitters/automation.ts +2 -2
  361. package/src/runtime/emitters/communication.ts +2 -2
  362. package/src/runtime/emitters/compaction.ts +2 -2
  363. package/src/runtime/emitters/control-plane.ts +2 -2
  364. package/src/runtime/emitters/deliveries.ts +2 -2
  365. package/src/runtime/emitters/forensics.ts +2 -2
  366. package/src/runtime/emitters/index.ts +27 -27
  367. package/src/runtime/emitters/knowledge.ts +2 -2
  368. package/src/runtime/emitters/mcp.ts +2 -2
  369. package/src/runtime/emitters/ops.ts +2 -2
  370. package/src/runtime/emitters/orchestration.ts +2 -2
  371. package/src/runtime/emitters/permissions.ts +2 -2
  372. package/src/runtime/emitters/planner.ts +2 -2
  373. package/src/runtime/emitters/plugins.ts +2 -2
  374. package/src/runtime/emitters/providers.ts +2 -2
  375. package/src/runtime/emitters/routes.ts +2 -2
  376. package/src/runtime/emitters/security.ts +2 -2
  377. package/src/runtime/emitters/session.ts +2 -2
  378. package/src/runtime/emitters/surfaces.ts +2 -2
  379. package/src/runtime/emitters/tasks.ts +2 -2
  380. package/src/runtime/emitters/tools.ts +2 -2
  381. package/src/runtime/emitters/transport.ts +2 -2
  382. package/src/runtime/emitters/turn.ts +3 -3
  383. package/src/runtime/emitters/ui.ts +2 -2
  384. package/src/runtime/emitters/watchers.ts +2 -2
  385. package/src/runtime/emitters/workflows.ts +3 -3
  386. package/src/runtime/eval/index.ts +3 -3
  387. package/src/runtime/eval/runner.ts +1 -1
  388. package/src/runtime/eval/suites.ts +1 -1
  389. package/src/runtime/events/domain-map.ts +2 -2
  390. package/src/runtime/events/index.ts +1 -194
  391. package/src/runtime/events/turn.ts +1 -60
  392. package/src/runtime/events/workflows.ts +1 -17
  393. package/src/runtime/forensics/collector.ts +4 -4
  394. package/src/runtime/forensics/index.ts +1 -1
  395. package/src/runtime/foundation-clients.ts +14 -14
  396. package/src/runtime/foundation-services.ts +8 -8
  397. package/src/runtime/guidance.ts +3 -3
  398. package/src/runtime/health/effect-handlers.ts +3 -3
  399. package/src/runtime/health/index.ts +4 -4
  400. package/src/runtime/health/wiring.ts +2 -2
  401. package/src/runtime/index.ts +29 -29
  402. package/src/runtime/integration/helpers.ts +12 -12
  403. package/src/runtime/lifecycle.ts +4 -4
  404. package/src/runtime/mcp/index.ts +3 -3
  405. package/src/runtime/mcp/manager.ts +1 -1
  406. package/src/runtime/network/inbound.ts +2 -2
  407. package/src/runtime/network/index.ts +5 -5
  408. package/src/runtime/network/outbound.ts +2 -2
  409. package/src/runtime/network/shared.ts +1 -1
  410. package/src/runtime/operator-client.ts +9 -9
  411. package/src/runtime/ops/control-plane.ts +2 -2
  412. package/src/runtime/ops/index.ts +3 -3
  413. package/src/runtime/ops/playbooks/index.ts +2 -2
  414. package/src/runtime/ops/playbooks/session-unrecoverable.ts +2 -2
  415. package/src/runtime/ops/playbooks/stuck-turn.ts +1 -1
  416. package/src/runtime/ops/runtime-context.ts +1 -1
  417. package/src/runtime/orchestration/spawn-policy.ts +1 -1
  418. package/src/runtime/peer-client.ts +3 -3
  419. package/src/runtime/perf/index.ts +1 -1
  420. package/src/runtime/perf/slo-collector.ts +1 -1
  421. package/src/runtime/permissions/index.ts +5 -5
  422. package/src/runtime/permissions/policy-runtime.ts +1 -175
  423. package/src/runtime/permissions/rule-suggestions.ts +1 -1
  424. package/src/runtime/plugins/hot-reload.ts +4 -4
  425. package/src/runtime/plugins/index.ts +13 -13
  426. package/src/runtime/plugins/lifecycle.ts +1 -1
  427. package/src/runtime/plugins/manager.ts +10 -10
  428. package/src/runtime/plugins/manifest.ts +2 -2
  429. package/src/runtime/plugins/quarantine.ts +2 -2
  430. package/src/runtime/plugins/trust.ts +2 -2
  431. package/src/runtime/plugins/types.ts +1 -1
  432. package/src/runtime/provider-accounts/registry.ts +2 -2
  433. package/src/runtime/remote/distributed-runtime-contract-schemas.ts +3 -3
  434. package/src/runtime/remote/index.ts +3 -3
  435. package/src/runtime/remote/runner-registry.ts +2 -2
  436. package/src/runtime/remote/supervisor.ts +1 -1
  437. package/src/runtime/runtime-hook-api.ts +1 -1
  438. package/src/runtime/runtime-knowledge-api.ts +1 -1
  439. package/src/runtime/runtime-mcp-api.ts +1 -1
  440. package/src/runtime/runtime-ops-api.ts +2 -2
  441. package/src/runtime/runtime-provider-api.ts +1 -1
  442. package/src/runtime/services.ts +42 -35
  443. package/src/runtime/session-maintenance.ts +1 -1
  444. package/src/runtime/session-persistence.ts +2 -2
  445. package/src/runtime/session-return-context.ts +3 -3
  446. package/src/runtime/settings/control-plane-store.ts +1 -1
  447. package/src/runtime/settings/control-plane.ts +2 -2
  448. package/src/runtime/shell-command-extensions.ts +7 -7
  449. package/src/runtime/shell-command-ops.ts +6 -6
  450. package/src/runtime/shell-command-platform.ts +1 -1
  451. package/src/runtime/shell-command-services.ts +18 -18
  452. package/src/runtime/shell-command-workspace.ts +2 -2
  453. package/src/runtime/store/domains/conversation.ts +1 -1
  454. package/src/runtime/store/domains/index.ts +4 -4
  455. package/src/runtime/store/domains/permissions.ts +1 -1
  456. package/src/runtime/store/helpers/reducers/conversation.ts +3 -3
  457. package/src/runtime/store/helpers/reducers/lifecycle.ts +3 -3
  458. package/src/runtime/store/helpers/reducers/shared.ts +2 -2
  459. package/src/runtime/store/helpers/reducers/sync.ts +1 -1
  460. package/src/runtime/store/helpers/reducers.ts +4 -4
  461. package/src/runtime/store/index.ts +4 -4
  462. package/src/runtime/store/selectors/index.ts +2 -2
  463. package/src/runtime/store/state.ts +4 -4
  464. package/src/runtime/tasks/adapters/acp-adapter.ts +1 -1
  465. package/src/runtime/tasks/adapters/index.ts +6 -6
  466. package/src/runtime/tasks/index.ts +3 -3
  467. package/src/runtime/tasks/manager.ts +3 -3
  468. package/src/runtime/telemetry/api-helpers.ts +2 -2
  469. package/src/runtime/telemetry/api.ts +2 -2
  470. package/src/runtime/telemetry/index.ts +5 -5
  471. package/src/runtime/telemetry/instrumentation/domain-bridge-agent-session.ts +1 -1
  472. package/src/runtime/telemetry/instrumentation/domain-bridge-plugin-mcp.ts +1 -1
  473. package/src/runtime/telemetry/instrumentation/domain-bridge-shared.ts +1 -1
  474. package/src/runtime/telemetry/instrumentation/domain-bridge-transport-task.ts +1 -1
  475. package/src/runtime/telemetry/instrumentation/domain-bridge.ts +5 -5
  476. package/src/runtime/telemetry/instrumentation/index.ts +3 -3
  477. package/src/runtime/tools/context.ts +3 -3
  478. package/src/runtime/tools/index.ts +4 -4
  479. package/src/runtime/tools/phased-executor.ts +3 -3
  480. package/src/runtime/tools/phases/budget.ts +1 -1
  481. package/src/runtime/tools/phases/execute.ts +1 -1
  482. package/src/runtime/tools/phases/index.ts +7 -7
  483. package/src/runtime/tools/phases/map-output.ts +1 -1
  484. package/src/runtime/tools/phases/permission.ts +2 -2
  485. package/src/runtime/tools/phases/posthook.ts +1 -1
  486. package/src/runtime/tools/phases/prehook.ts +1 -1
  487. package/src/runtime/tools/phases/validate.ts +1 -1
  488. package/src/runtime/transports/direct.ts +4 -4
  489. package/src/runtime/transports/http-helpers.ts +3 -3
  490. package/src/runtime/transports/http-types.ts +6 -6
  491. package/src/runtime/transports/http.ts +8 -8
  492. package/src/runtime/transports/realtime.ts +4 -4
  493. package/src/runtime/transports/remote-events.ts +1 -1
  494. package/src/runtime/transports/shared.ts +2 -2
  495. package/src/runtime/transports/ui-runtime-events.ts +2 -2
  496. package/src/runtime/ui/index.ts +7 -7
  497. package/src/runtime/ui/model-picker/data-provider.ts +4 -4
  498. package/src/runtime/ui/model-picker/health-enrichment.ts +3 -3
  499. package/src/runtime/ui/model-picker/index.ts +8 -8
  500. package/src/runtime/ui/provider-health/data-provider.ts +2 -2
  501. package/src/runtime/ui/provider-health/fallback-visualizer.ts +1 -1
  502. package/src/runtime/ui/provider-health/index.ts +5 -5
  503. package/src/runtime/ui-events.ts +1 -1
  504. package/src/runtime/ui-read-models-core.ts +2 -2
  505. package/src/runtime/ui-read-models-observability-maintenance.ts +4 -4
  506. package/src/runtime/ui-read-models-observability-options.ts +1 -1
  507. package/src/runtime/ui-read-models-observability-remote.ts +2 -2
  508. package/src/runtime/ui-read-models-observability-security.ts +3 -3
  509. package/src/runtime/ui-read-models-observability-system.ts +6 -6
  510. package/src/runtime/ui-read-models-observability.ts +10 -10
  511. package/src/runtime/ui-read-models-operations.ts +2 -2
  512. package/src/runtime/ui-read-models.ts +7 -7
  513. package/src/runtime/ui-service-queries.ts +2 -2
  514. package/src/runtime/ui-services.ts +7 -7
  515. package/src/runtime/worktree/registry.ts +1 -1
  516. package/src/scripts/process-messages.ts +1 -1
  517. package/src/sessions/manager.ts +9 -383
  518. package/src/shell/blocking-input.ts +3 -3
  519. package/src/shell/ui-openers.ts +3 -3
  520. package/src/state/file-watcher.ts +1 -1
  521. package/src/state/index.ts +10 -10
  522. package/src/state/knowledge-injection.ts +2 -2
  523. package/src/state/memory-embedding-http.ts +2 -2
  524. package/src/state/memory-embeddings.ts +1 -1
  525. package/src/state/memory-ingest.ts +3 -3
  526. package/src/state/memory-registry.ts +3 -3
  527. package/src/state/memory-store-helpers.ts +1 -1
  528. package/src/state/memory-store.ts +4 -4
  529. package/src/state/memory-vector-store.ts +3 -3
  530. package/src/tools/agent/index.ts +7 -7
  531. package/src/tools/agent/manager.ts +8 -8
  532. package/src/tools/analyze/git-modes.ts +2 -2
  533. package/src/tools/analyze/index.ts +2 -2
  534. package/src/tools/channel/agent-tools.ts +1 -1
  535. package/src/tools/channel/index.ts +2 -2
  536. package/src/tools/control/index.ts +1 -1
  537. package/src/tools/edit/core.ts +3 -3
  538. package/src/tools/edit/index.ts +2 -2
  539. package/src/tools/edit/phased.ts +2 -2
  540. package/src/tools/fetch/index.ts +2 -2
  541. package/src/tools/fetch/phased.ts +1 -1
  542. package/src/tools/index.ts +28 -28
  543. package/src/tools/mcp/index.ts +1 -1
  544. package/src/tools/remote-trigger/index.ts +1 -1
  545. package/src/tools/shared/auto-heal.ts +2 -2
  546. package/src/tools/state/index.ts +1 -1
  547. package/src/tools/web-search/index.ts +1 -1
  548. package/src/tools/write/index.ts +3 -3
  549. package/src/tools/write/phased.ts +1 -1
  550. package/src/version.ts +1 -1
  551. package/src/watchers/index.ts +2 -2
  552. package/src/watchers/registry.ts +2 -2
  553. package/src/web-search/index.ts +10 -10
  554. package/src/web-search/provider-registry.ts +8 -8
  555. package/src/web-search/providers/brave.ts +1 -1
  556. package/src/web-search/providers/duckduckgo.ts +1 -1
  557. package/src/web-search/providers/exa.ts +1 -1
  558. package/src/web-search/providers/firecrawl.ts +1 -1
  559. package/src/web-search/providers/perplexity.ts +1 -1
  560. package/src/web-search/providers/searxng.ts +1 -1
  561. package/src/web-search/providers/shared.ts +1 -1
  562. package/src/web-search/providers/tavily.ts +1 -1
  563. package/src/web-search/service.ts +2 -2
  564. package/docs/README.md +0 -32
  565. package/scripts/postinstall.mjs +0 -203
  566. package/src/runtime/ecosystem/catalog.ts +0 -606
  567. package/src/runtime/sandbox/backend.ts +0 -291
  568. package/src/runtime/sandbox/manager.ts +0 -364
  569. package/src/runtime/sandbox/provisioning.ts +0 -422
  570. package/src/runtime/sandbox/session-registry.ts +0 -289
  571. package/src/tools/repl/index.ts +0 -318
@@ -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';