@pellux/goodvibes-tui 0.18.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (732) hide show
  1. package/.goodvibes/GOODVIBES.md +35 -0
  2. package/.goodvibes/agents/reviewer.md +89 -0
  3. package/.goodvibes/skills/add-provider/SKILL.md +199 -0
  4. package/CHANGELOG.md +1681 -0
  5. package/README.md +1607 -0
  6. package/bin/goodvibes +66 -0
  7. package/docs/README.md +32 -0
  8. package/docs/foundation-artifacts/README.md +16 -0
  9. package/docs/foundation-artifacts/knowledge-graphql.graphql +397 -0
  10. package/docs/foundation-artifacts/knowledge-store.sql +183 -0
  11. package/docs/foundation-artifacts/operator-contract.json +55157 -0
  12. package/docs/foundation-artifacts/peer-contract.json +2384 -0
  13. package/package.json +114 -0
  14. package/scripts/postinstall.mjs +203 -0
  15. package/src/acp/connection.ts +447 -0
  16. package/src/acp/index.ts +7 -0
  17. package/src/acp/manager.ts +133 -0
  18. package/src/adapters/bluebubbles/index.ts +127 -0
  19. package/src/adapters/discord/index.ts +297 -0
  20. package/src/adapters/github/index.ts +73 -0
  21. package/src/adapters/google-chat/index.ts +119 -0
  22. package/src/adapters/imessage/index.ts +92 -0
  23. package/src/adapters/index.ts +15 -0
  24. package/src/adapters/matrix/index.ts +116 -0
  25. package/src/adapters/mattermost/index.ts +151 -0
  26. package/src/adapters/msteams/index.ts +180 -0
  27. package/src/adapters/ntfy/index.ts +118 -0
  28. package/src/adapters/signal/index.ts +92 -0
  29. package/src/adapters/slack/index.ts +323 -0
  30. package/src/adapters/telegram/index.ts +160 -0
  31. package/src/adapters/types.ts +97 -0
  32. package/src/adapters/webhook/index.ts +178 -0
  33. package/src/adapters/whatsapp/index.ts +135 -0
  34. package/src/agents/message-bus-core.ts +312 -0
  35. package/src/agents/message-bus.ts +2 -0
  36. package/src/agents/orchestrator-prompts.ts +351 -0
  37. package/src/agents/orchestrator-runner.ts +668 -0
  38. package/src/agents/orchestrator.ts +437 -0
  39. package/src/agents/session.ts +108 -0
  40. package/src/agents/worktree.ts +153 -0
  41. package/src/agents/wrfc-config.ts +47 -0
  42. package/src/agents/wrfc-controller.ts +747 -0
  43. package/src/agents/wrfc-gate-runtime.ts +75 -0
  44. package/src/agents/wrfc-reporting.ts +284 -0
  45. package/src/agents/wrfc-runtime-events.ts +150 -0
  46. package/src/agents/wrfc-types.ts +67 -0
  47. package/src/automation/delivery-manager.ts +368 -0
  48. package/src/automation/index.ts +72 -0
  49. package/src/automation/manager-runtime-delivery.ts +139 -0
  50. package/src/automation/manager-runtime-events.ts +131 -0
  51. package/src/automation/manager-runtime-execution.ts +511 -0
  52. package/src/automation/manager-runtime-helpers.ts +433 -0
  53. package/src/automation/manager-runtime-job-mutations.ts +175 -0
  54. package/src/automation/manager-runtime-reconcile.ts +148 -0
  55. package/src/automation/manager-runtime-scheduling.ts +189 -0
  56. package/src/automation/manager-runtime-sync.ts +54 -0
  57. package/src/automation/manager-runtime.ts +721 -0
  58. package/src/automation/manager.ts +10 -0
  59. package/src/automation/service.ts +242 -0
  60. package/src/channels/builtin/account-actions.ts +490 -0
  61. package/src/channels/builtin/accounts.ts +433 -0
  62. package/src/channels/builtin/contracts.ts +405 -0
  63. package/src/channels/builtin/plugins.ts +308 -0
  64. package/src/channels/builtin/rendering.ts +174 -0
  65. package/src/channels/builtin/setup-schema.ts +504 -0
  66. package/src/channels/builtin/shared.ts +96 -0
  67. package/src/channels/builtin/surfaces.ts +57 -0
  68. package/src/channels/builtin/targets.ts +693 -0
  69. package/src/channels/builtin-runtime.ts +443 -0
  70. package/src/channels/delivery/shared.ts +199 -0
  71. package/src/channels/delivery/strategies-bridge.ts +246 -0
  72. package/src/channels/delivery/strategies-core.ts +299 -0
  73. package/src/channels/delivery/strategies-enterprise.ts +178 -0
  74. package/src/channels/delivery/types.ts +59 -0
  75. package/src/channels/delivery-router.ts +127 -0
  76. package/src/channels/index.ts +77 -0
  77. package/src/channels/plugin-registry.ts +551 -0
  78. package/src/channels/provider-runtime.ts +330 -0
  79. package/src/channels/reply-pipeline.ts +522 -0
  80. package/src/channels/route-manager.ts +340 -0
  81. package/src/channels/surface-registry.ts +186 -0
  82. package/src/config/helper-model.ts +233 -0
  83. package/src/config/index.ts +193 -0
  84. package/src/config/manager.ts +404 -0
  85. package/src/config/secrets.ts +547 -0
  86. package/src/config/service-registry.ts +329 -0
  87. package/src/config/subscription-auth.ts +31 -0
  88. package/src/config/subscription-providers.ts +127 -0
  89. package/src/config/tool-llm.ts +110 -0
  90. package/src/control-plane/approval-broker.ts +351 -0
  91. package/src/control-plane/gateway.ts +713 -0
  92. package/src/control-plane/index.ts +54 -0
  93. package/src/control-plane/media-contract-schemas.ts +208 -0
  94. package/src/control-plane/method-catalog-admin.ts +136 -0
  95. package/src/control-plane/method-catalog-channels.ts +591 -0
  96. package/src/control-plane/method-catalog-control-automation.ts +475 -0
  97. package/src/control-plane/method-catalog-control-core.ts +594 -0
  98. package/src/control-plane/method-catalog-control.ts +8 -0
  99. package/src/control-plane/method-catalog-events.ts +74 -0
  100. package/src/control-plane/method-catalog-knowledge.ts +531 -0
  101. package/src/control-plane/method-catalog-media.ts +279 -0
  102. package/src/control-plane/method-catalog-runtime.ts +304 -0
  103. package/src/control-plane/method-catalog-shared.ts +223 -0
  104. package/src/control-plane/method-catalog.ts +242 -0
  105. package/src/control-plane/operator-contract-schemas-admin.ts +639 -0
  106. package/src/control-plane/operator-contract-schemas-channels.ts +375 -0
  107. package/src/control-plane/operator-contract-schemas-control.ts +226 -0
  108. package/src/control-plane/operator-contract-schemas-domains.ts +4 -0
  109. package/src/control-plane/operator-contract-schemas-knowledge.ts +582 -0
  110. package/src/control-plane/operator-contract-schemas-media.ts +297 -0
  111. package/src/control-plane/operator-contract-schemas-permissions.ts +100 -0
  112. package/src/control-plane/operator-contract-schemas-remote.ts +38 -0
  113. package/src/control-plane/operator-contract-schemas-runtime.ts +563 -0
  114. package/src/control-plane/operator-contract-schemas-shared.ts +85 -0
  115. package/src/control-plane/operator-contract-schemas-telemetry.ts +349 -0
  116. package/src/control-plane/operator-contract-schemas.ts +6 -0
  117. package/src/control-plane/operator-contract.ts +163 -0
  118. package/src/control-plane/session-broker.ts +780 -0
  119. package/src/core/compaction-sections.ts +492 -0
  120. package/src/core/compaction-types.ts +147 -0
  121. package/src/core/composer-state.ts +59 -0
  122. package/src/core/context-compaction.ts +542 -0
  123. package/src/core/conversation-compaction.ts +68 -0
  124. package/src/core/conversation-diff.ts +55 -0
  125. package/src/core/conversation-rendering.ts +343 -0
  126. package/src/core/conversation-utils.ts +72 -0
  127. package/src/core/conversation.ts +775 -0
  128. package/src/core/event-replay.ts +287 -0
  129. package/src/core/orchestrator-context-runtime.ts +407 -0
  130. package/src/core/orchestrator-follow-up-runtime.ts +134 -0
  131. package/src/core/orchestrator-runtime.ts +132 -0
  132. package/src/core/orchestrator-tool-runtime.ts +468 -0
  133. package/src/core/orchestrator-turn-helpers.ts +355 -0
  134. package/src/core/orchestrator-turn-loop.ts +443 -0
  135. package/src/core/orchestrator.ts +733 -0
  136. package/src/core/plan-command-handler.ts +169 -0
  137. package/src/core/system-message-router.ts +210 -0
  138. package/src/core/transcript-events/classify.ts +95 -0
  139. package/src/core/transcript-events/index.ts +15 -0
  140. package/src/daemon/cli.ts +88 -0
  141. package/src/daemon/control-plane.ts +522 -0
  142. package/src/daemon/facade-composition.ts +397 -0
  143. package/src/daemon/facade.ts +638 -0
  144. package/src/daemon/helpers.ts +74 -0
  145. package/src/daemon/http/router-route-contexts.ts +370 -0
  146. package/src/daemon/http/router.ts +531 -0
  147. package/src/daemon/http-listener.ts +301 -0
  148. package/src/daemon/index.ts +3 -0
  149. package/src/daemon/server.ts +1 -0
  150. package/src/daemon/service-manager.ts +413 -0
  151. package/src/daemon/surface-actions.ts +183 -0
  152. package/src/daemon/surface-delivery.ts +530 -0
  153. package/src/daemon/surface-policy.ts +60 -0
  154. package/src/daemon/transport-events.ts +110 -0
  155. package/src/daemon/types.ts +191 -0
  156. package/src/export/markdown.ts +213 -0
  157. package/src/export/session-export.ts +633 -0
  158. package/src/git/index.ts +1 -0
  159. package/src/git/service.ts +414 -0
  160. package/src/hooks/chain-engine.ts +414 -0
  161. package/src/hooks/dispatcher.ts +414 -0
  162. package/src/hooks/hook-api.ts +170 -0
  163. package/src/hooks/index.ts +48 -0
  164. package/src/hooks/runners/agent.ts +93 -0
  165. package/src/hooks/runners/prompt.ts +69 -0
  166. package/src/hooks/workbench.ts +360 -0
  167. package/src/input/autocomplete.ts +96 -0
  168. package/src/input/bookmark-modal.ts +115 -0
  169. package/src/input/command-registry.ts +300 -0
  170. package/src/input/commands/branch-runtime.ts +72 -0
  171. package/src/input/commands/config.ts +515 -0
  172. package/src/input/commands/control-room-runtime.ts +255 -0
  173. package/src/input/commands/conversation-runtime.ts +207 -0
  174. package/src/input/commands/diff-runtime.ts +161 -0
  175. package/src/input/commands/discovery-runtime.ts +45 -0
  176. package/src/input/commands/eval.ts +204 -0
  177. package/src/input/commands/experience-runtime.ts +278 -0
  178. package/src/input/commands/git-runtime.ts +81 -0
  179. package/src/input/commands/guidance-runtime.ts +101 -0
  180. package/src/input/commands/health-runtime.ts +434 -0
  181. package/src/input/commands/hooks-runtime.ts +148 -0
  182. package/src/input/commands/incident-runtime.ts +95 -0
  183. package/src/input/commands/integration-runtime.ts +394 -0
  184. package/src/input/commands/intelligence-runtime.ts +223 -0
  185. package/src/input/commands/knowledge.ts +368 -0
  186. package/src/input/commands/local-auth-runtime.ts +105 -0
  187. package/src/input/commands/local-provider-runtime.ts +170 -0
  188. package/src/input/commands/local-runtime.ts +458 -0
  189. package/src/input/commands/local-setup-review.ts +192 -0
  190. package/src/input/commands/local-setup-transfer.ts +134 -0
  191. package/src/input/commands/local-setup.ts +292 -0
  192. package/src/input/commands/managed-runtime.ts +208 -0
  193. package/src/input/commands/marketplace-runtime.ts +290 -0
  194. package/src/input/commands/mcp-runtime.ts +202 -0
  195. package/src/input/commands/memory-product-runtime.ts +111 -0
  196. package/src/input/commands/memory.ts +151 -0
  197. package/src/input/commands/notify-runtime.ts +83 -0
  198. package/src/input/commands/operator-panel-runtime.ts +141 -0
  199. package/src/input/commands/operator-runtime.ts +392 -0
  200. package/src/input/commands/permissions-runtime.ts +104 -0
  201. package/src/input/commands/planning-runtime.ts +97 -0
  202. package/src/input/commands/platform-access-runtime.ts +422 -0
  203. package/src/input/commands/platform-runtime.ts +6 -0
  204. package/src/input/commands/platform-sandbox-qemu.ts +137 -0
  205. package/src/input/commands/platform-sandbox-runtime.ts +406 -0
  206. package/src/input/commands/platform-sandbox-session.ts +128 -0
  207. package/src/input/commands/platform-services-runtime.ts +246 -0
  208. package/src/input/commands/policy-dispatch.ts +339 -0
  209. package/src/input/commands/policy.ts +17 -0
  210. package/src/input/commands/product-runtime.ts +351 -0
  211. package/src/input/commands/profile-sync-runtime.ts +99 -0
  212. package/src/input/commands/provider-accounts-runtime.ts +113 -0
  213. package/src/input/commands/provider.ts +363 -0
  214. package/src/input/commands/quit-shared.ts +162 -0
  215. package/src/input/commands/recall-bundle.ts +132 -0
  216. package/src/input/commands/recall-capture.ts +152 -0
  217. package/src/input/commands/recall-query.ts +229 -0
  218. package/src/input/commands/recall-review.ts +98 -0
  219. package/src/input/commands/recall-shared.ts +22 -0
  220. package/src/input/commands/remote-runtime-pool.ts +106 -0
  221. package/src/input/commands/remote-runtime-setup.ts +199 -0
  222. package/src/input/commands/remote-runtime.ts +531 -0
  223. package/src/input/commands/replay-runtime.ts +18 -0
  224. package/src/input/commands/runtime-services.ts +279 -0
  225. package/src/input/commands/schedule-runtime.ts +332 -0
  226. package/src/input/commands/services-runtime.ts +207 -0
  227. package/src/input/commands/session-content.ts +408 -0
  228. package/src/input/commands/session-workflow.ts +464 -0
  229. package/src/input/commands/session.ts +376 -0
  230. package/src/input/commands/settings-sync-runtime.ts +173 -0
  231. package/src/input/commands/share-runtime.ts +114 -0
  232. package/src/input/commands/shell-core.ts +320 -0
  233. package/src/input/commands/skills-runtime.ts +221 -0
  234. package/src/input/commands/subscription-runtime.ts +434 -0
  235. package/src/input/commands/tasks-runtime.ts +230 -0
  236. package/src/input/commands/teamwork-runtime.ts +374 -0
  237. package/src/input/commands/teleport-runtime.ts +57 -0
  238. package/src/input/commands/worktree-runtime.ts +137 -0
  239. package/src/input/commands.ts +127 -0
  240. package/src/input/file-picker.ts +192 -0
  241. package/src/input/handler-command-route.ts +106 -0
  242. package/src/input/handler-content-actions.ts +465 -0
  243. package/src/input/handler-feed-routes.ts +541 -0
  244. package/src/input/handler-feed.ts +361 -0
  245. package/src/input/handler-modal-routes.ts +335 -0
  246. package/src/input/handler-modal-stack.ts +237 -0
  247. package/src/input/handler-modal-token-routes.ts +272 -0
  248. package/src/input/handler-picker-routes.ts +416 -0
  249. package/src/input/handler-prompt-buffer.ts +320 -0
  250. package/src/input/handler-shortcuts.ts +195 -0
  251. package/src/input/handler-ui-state.ts +294 -0
  252. package/src/input/handler.ts +798 -0
  253. package/src/input/input-history.ts +267 -0
  254. package/src/input/keybindings.ts +256 -0
  255. package/src/input/model-picker.ts +730 -0
  256. package/src/input/panel-integration-actions.ts +77 -0
  257. package/src/input/profile-picker-modal.ts +222 -0
  258. package/src/input/search.ts +100 -0
  259. package/src/input/selection-modal.ts +163 -0
  260. package/src/input/selection.ts +135 -0
  261. package/src/input/session-picker-modal.ts +136 -0
  262. package/src/input/settings-modal.ts +718 -0
  263. package/src/input/submission-intent.ts +18 -0
  264. package/src/input/submission-router.ts +64 -0
  265. package/src/integrations/index.ts +42 -0
  266. package/src/integrations/notifier.ts +206 -0
  267. package/src/integrations/webhooks.ts +177 -0
  268. package/src/knowledge/consolidation.ts +346 -0
  269. package/src/knowledge/graphql.ts +324 -0
  270. package/src/knowledge/index.ts +60 -0
  271. package/src/knowledge/ingest-compile.ts +386 -0
  272. package/src/knowledge/ingest-context.ts +18 -0
  273. package/src/knowledge/ingest-inputs.ts +387 -0
  274. package/src/knowledge/ingest.ts +20 -0
  275. package/src/knowledge/internal.ts +257 -0
  276. package/src/knowledge/knowledge-api.ts +432 -0
  277. package/src/knowledge/lint.ts +121 -0
  278. package/src/knowledge/memory-sync.ts +62 -0
  279. package/src/knowledge/packet.ts +370 -0
  280. package/src/knowledge/scheduling.ts +283 -0
  281. package/src/knowledge/service.ts +715 -0
  282. package/src/main.ts +798 -0
  283. package/src/mcp/client.ts +383 -0
  284. package/src/mcp/index.ts +12 -0
  285. package/src/mcp/mcp-api.ts +90 -0
  286. package/src/mcp/registry.ts +508 -0
  287. package/src/media/builtin-image-understanding.ts +303 -0
  288. package/src/media/builtin-providers.ts +26 -0
  289. package/src/media/index.ts +18 -0
  290. package/src/multimodal/index.ts +13 -0
  291. package/src/multimodal/service.ts +492 -0
  292. package/src/panels/agent-inspector-panel.ts +515 -0
  293. package/src/panels/agent-inspector-shared.ts +94 -0
  294. package/src/panels/agent-logs-panel.ts +539 -0
  295. package/src/panels/agent-logs-shared.ts +129 -0
  296. package/src/panels/approval-panel.ts +169 -0
  297. package/src/panels/automation-control-panel.ts +253 -0
  298. package/src/panels/base-panel.ts +72 -0
  299. package/src/panels/builtin/agent.ts +88 -0
  300. package/src/panels/builtin/development.ts +111 -0
  301. package/src/panels/builtin/knowledge.ts +26 -0
  302. package/src/panels/builtin/operations.ts +385 -0
  303. package/src/panels/builtin/session.ts +61 -0
  304. package/src/panels/builtin/shared.ts +240 -0
  305. package/src/panels/builtin-panels.ts +23 -0
  306. package/src/panels/cockpit-panel.ts +183 -0
  307. package/src/panels/communication-panel.ts +191 -0
  308. package/src/panels/context-visualizer-panel.ts +199 -0
  309. package/src/panels/control-plane-panel.ts +266 -0
  310. package/src/panels/cost-tracker-panel.ts +444 -0
  311. package/src/panels/debug-panel.ts +432 -0
  312. package/src/panels/diff-panel.ts +518 -0
  313. package/src/panels/docs-panel.ts +283 -0
  314. package/src/panels/eval-panel.ts +399 -0
  315. package/src/panels/file-explorer-panel.ts +556 -0
  316. package/src/panels/file-preview-panel.ts +412 -0
  317. package/src/panels/forensics-panel.ts +364 -0
  318. package/src/panels/git-panel.ts +630 -0
  319. package/src/panels/hooks-panel.ts +274 -0
  320. package/src/panels/incident-review-panel.ts +247 -0
  321. package/src/panels/index.ts +48 -0
  322. package/src/panels/intelligence-panel.ts +176 -0
  323. package/src/panels/knowledge-panel.ts +328 -0
  324. package/src/panels/local-auth-panel.ts +146 -0
  325. package/src/panels/marketplace-panel.ts +223 -0
  326. package/src/panels/mcp-panel.ts +260 -0
  327. package/src/panels/memory-panel.ts +293 -0
  328. package/src/panels/ops-control-panel.ts +184 -0
  329. package/src/panels/ops-strategy-panel.ts +235 -0
  330. package/src/panels/orchestration-panel.ts +254 -0
  331. package/src/panels/panel-list-panel.ts +508 -0
  332. package/src/panels/panel-manager.ts +538 -0
  333. package/src/panels/panel-picker.ts +106 -0
  334. package/src/panels/plan-dashboard-panel.ts +272 -0
  335. package/src/panels/plugins-panel.ts +201 -0
  336. package/src/panels/policy-panel.ts +308 -0
  337. package/src/panels/polish.ts +668 -0
  338. package/src/panels/provider-account-snapshot.ts +259 -0
  339. package/src/panels/provider-accounts-panel.ts +221 -0
  340. package/src/panels/provider-health-domains.ts +211 -0
  341. package/src/panels/provider-health-panel.ts +725 -0
  342. package/src/panels/provider-health-tracker.ts +115 -0
  343. package/src/panels/provider-stats-panel.ts +366 -0
  344. package/src/panels/remote-panel.ts +449 -0
  345. package/src/panels/routes-panel.ts +228 -0
  346. package/src/panels/sandbox-panel.ts +289 -0
  347. package/src/panels/schedule-panel.ts +344 -0
  348. package/src/panels/search-focus.ts +32 -0
  349. package/src/panels/security-panel.ts +329 -0
  350. package/src/panels/services-panel.ts +271 -0
  351. package/src/panels/session-browser-panel.ts +399 -0
  352. package/src/panels/session-maintenance.ts +125 -0
  353. package/src/panels/settings-sync-panel.ts +164 -0
  354. package/src/panels/skills-panel.ts +475 -0
  355. package/src/panels/subscription-panel.ts +273 -0
  356. package/src/panels/symbol-outline-panel.ts +486 -0
  357. package/src/panels/system-messages-panel.ts +224 -0
  358. package/src/panels/tasks-panel.ts +448 -0
  359. package/src/panels/thinking-panel.ts +304 -0
  360. package/src/panels/token-budget-panel.ts +469 -0
  361. package/src/panels/tool-inspector-panel.ts +434 -0
  362. package/src/panels/types.ts +44 -0
  363. package/src/panels/watchers-panel.ts +241 -0
  364. package/src/panels/welcome-panel.ts +64 -0
  365. package/src/panels/worktree-panel.ts +180 -0
  366. package/src/panels/wrfc-panel.ts +480 -0
  367. package/src/permissions/briefs/build.ts +88 -0
  368. package/src/permissions/manager.ts +356 -0
  369. package/src/permissions/prompt.ts +184 -0
  370. package/src/plugins/api.ts +383 -0
  371. package/src/plugins/loader.ts +304 -0
  372. package/src/plugins/manager.ts +481 -0
  373. package/src/profiles/shape.ts +58 -0
  374. package/src/providers/amazon-bedrock-mantle.ts +50 -0
  375. package/src/providers/amazon-bedrock.ts +61 -0
  376. package/src/providers/anthropic-compat.ts +373 -0
  377. package/src/providers/anthropic-sdk-provider.ts +230 -0
  378. package/src/providers/anthropic-vertex.ts +59 -0
  379. package/src/providers/anthropic.ts +469 -0
  380. package/src/providers/auto-register.ts +417 -0
  381. package/src/providers/builtin-catalog.ts +326 -0
  382. package/src/providers/builtin-registry.ts +575 -0
  383. package/src/providers/cache-planner.ts +258 -0
  384. package/src/providers/capabilities.ts +601 -0
  385. package/src/providers/custom-loader.ts +425 -0
  386. package/src/providers/discovered-compat.ts +18 -0
  387. package/src/providers/discovered-factory.ts +61 -0
  388. package/src/providers/discovered-traits.ts +138 -0
  389. package/src/providers/gemini.ts +462 -0
  390. package/src/providers/github-copilot.ts +254 -0
  391. package/src/providers/index.ts +47 -0
  392. package/src/providers/interface.ts +185 -0
  393. package/src/providers/llama-cpp.ts +402 -0
  394. package/src/providers/lm-studio-helpers.ts +367 -0
  395. package/src/providers/lm-studio.ts +484 -0
  396. package/src/providers/model-catalog-cache.ts +221 -0
  397. package/src/providers/model-catalog-notifications.ts +97 -0
  398. package/src/providers/model-catalog-synthetic.ts +202 -0
  399. package/src/providers/model-catalog.ts +211 -0
  400. package/src/providers/model-limits.ts +280 -0
  401. package/src/providers/ollama.ts +469 -0
  402. package/src/providers/openai-codex.ts +472 -0
  403. package/src/providers/openai-compat.ts +615 -0
  404. package/src/providers/openai.ts +231 -0
  405. package/src/providers/optimizer.ts +381 -0
  406. package/src/providers/provider-api.ts +553 -0
  407. package/src/providers/registry-helpers.ts +34 -0
  408. package/src/providers/registry-models.ts +77 -0
  409. package/src/providers/registry-types.ts +67 -0
  410. package/src/providers/registry.ts +729 -0
  411. package/src/providers/runtime-metadata.ts +149 -0
  412. package/src/providers/runtime-snapshot.ts +130 -0
  413. package/src/providers/synthetic.ts +561 -0
  414. package/src/providers/tier-prompts.ts +84 -0
  415. package/src/providers/tool-formats.ts +414 -0
  416. package/src/renderer/agent-detail-modal.ts +285 -0
  417. package/src/renderer/autocomplete-overlay.ts +154 -0
  418. package/src/renderer/block-actions.ts +76 -0
  419. package/src/renderer/bookmark-modal.ts +101 -0
  420. package/src/renderer/bottom-bar.ts +58 -0
  421. package/src/renderer/buffer.ts +34 -0
  422. package/src/renderer/code-block.ts +373 -0
  423. package/src/renderer/compositor.ts +261 -0
  424. package/src/renderer/context-inspector.ts +219 -0
  425. package/src/renderer/conversation-layout.ts +67 -0
  426. package/src/renderer/conversation-overlays.ts +123 -0
  427. package/src/renderer/conversation-surface.ts +260 -0
  428. package/src/renderer/diff-view.ts +132 -0
  429. package/src/renderer/diff.ts +122 -0
  430. package/src/renderer/file-picker-overlay.ts +101 -0
  431. package/src/renderer/file-tree.ts +153 -0
  432. package/src/renderer/git-status.ts +89 -0
  433. package/src/renderer/help-overlay.ts +247 -0
  434. package/src/renderer/history-search-overlay.ts +73 -0
  435. package/src/renderer/layout-engine.ts +97 -0
  436. package/src/renderer/layout.ts +32 -0
  437. package/src/renderer/live-tail-modal.ts +156 -0
  438. package/src/renderer/markdown.ts +777 -0
  439. package/src/renderer/modal-factory.ts +467 -0
  440. package/src/renderer/modal-utils.ts +24 -0
  441. package/src/renderer/model-picker-overlay.ts +396 -0
  442. package/src/renderer/overlay-box.ts +165 -0
  443. package/src/renderer/overlay-viewport.ts +104 -0
  444. package/src/renderer/panel-composite.ts +80 -0
  445. package/src/renderer/panel-picker-overlay.ts +202 -0
  446. package/src/renderer/panel-tab-bar.ts +69 -0
  447. package/src/renderer/panel-workspace-bar.ts +38 -0
  448. package/src/renderer/process-indicator.ts +96 -0
  449. package/src/renderer/process-modal.ts +295 -0
  450. package/src/renderer/profile-picker-modal.ts +129 -0
  451. package/src/renderer/progress.ts +98 -0
  452. package/src/renderer/search-overlay.ts +54 -0
  453. package/src/renderer/selection-modal-overlay.ts +214 -0
  454. package/src/renderer/semantic-diff.ts +369 -0
  455. package/src/renderer/session-picker-modal.ts +127 -0
  456. package/src/renderer/settings-modal.ts +701 -0
  457. package/src/renderer/shell-surface.ts +88 -0
  458. package/src/renderer/surface-layout.ts +101 -0
  459. package/src/renderer/syntax-highlighter.ts +542 -0
  460. package/src/renderer/system-message.ts +83 -0
  461. package/src/renderer/tab-strip.ts +108 -0
  462. package/src/renderer/text-layout.ts +31 -0
  463. package/src/renderer/thinking.ts +17 -0
  464. package/src/renderer/tool-call.ts +233 -0
  465. package/src/renderer/ui-factory.ts +524 -0
  466. package/src/renderer/ui-primitives.ts +96 -0
  467. package/src/runtime/auth/inspection.ts +125 -0
  468. package/src/runtime/bootstrap-background.ts +147 -0
  469. package/src/runtime/bootstrap-command-context.ts +265 -0
  470. package/src/runtime/bootstrap-command-parts.ts +357 -0
  471. package/src/runtime/bootstrap-core.ts +375 -0
  472. package/src/runtime/bootstrap-helpers.ts +88 -0
  473. package/src/runtime/bootstrap-hook-bridge.ts +271 -0
  474. package/src/runtime/bootstrap-runtime-events.ts +254 -0
  475. package/src/runtime/bootstrap-services.ts +197 -0
  476. package/src/runtime/bootstrap-shell.ts +262 -0
  477. package/src/runtime/bootstrap.ts +488 -0
  478. package/src/runtime/compaction/index.ts +90 -0
  479. package/src/runtime/compaction/lifecycle.ts +167 -0
  480. package/src/runtime/compaction/manager.ts +474 -0
  481. package/src/runtime/compaction/quality-score.ts +279 -0
  482. package/src/runtime/compaction/resume-repair.ts +183 -0
  483. package/src/runtime/compaction/strategies/autocompact.ts +65 -0
  484. package/src/runtime/compaction/strategies/boundary-commit.ts +106 -0
  485. package/src/runtime/compaction/strategies/collapse.ts +90 -0
  486. package/src/runtime/compaction/strategies/index.ts +23 -0
  487. package/src/runtime/compaction/strategies/microcompact.ts +74 -0
  488. package/src/runtime/compaction/strategies/reactive.ts +89 -0
  489. package/src/runtime/compaction/types.ts +221 -0
  490. package/src/runtime/context.ts +158 -0
  491. package/src/runtime/diagnostics/actions.ts +776 -0
  492. package/src/runtime/diagnostics/index.ts +99 -0
  493. package/src/runtime/diagnostics/panels/agents.ts +252 -0
  494. package/src/runtime/diagnostics/panels/events.ts +188 -0
  495. package/src/runtime/diagnostics/panels/health.ts +242 -0
  496. package/src/runtime/diagnostics/panels/index.ts +24 -0
  497. package/src/runtime/diagnostics/panels/ops.ts +156 -0
  498. package/src/runtime/diagnostics/panels/policy.ts +176 -0
  499. package/src/runtime/diagnostics/panels/tasks.ts +251 -0
  500. package/src/runtime/diagnostics/panels/tool-calls.ts +267 -0
  501. package/src/runtime/diagnostics/provider.ts +262 -0
  502. package/src/runtime/ecosystem/catalog.ts +606 -0
  503. package/src/runtime/ecosystem/recommendations.ts +117 -0
  504. package/src/runtime/emitters/agents.ts +96 -0
  505. package/src/runtime/emitters/automation.ts +112 -0
  506. package/src/runtime/emitters/communication.ts +53 -0
  507. package/src/runtime/emitters/compaction.ts +161 -0
  508. package/src/runtime/emitters/control-plane.ts +65 -0
  509. package/src/runtime/emitters/deliveries.ts +65 -0
  510. package/src/runtime/emitters/forensics.ts +17 -0
  511. package/src/runtime/emitters/index.ts +59 -0
  512. package/src/runtime/emitters/knowledge.ts +129 -0
  513. package/src/runtime/emitters/mcp.ts +95 -0
  514. package/src/runtime/emitters/ops.ts +163 -0
  515. package/src/runtime/emitters/orchestration.ts +87 -0
  516. package/src/runtime/emitters/permissions.ts +98 -0
  517. package/src/runtime/emitters/planner.ts +23 -0
  518. package/src/runtime/emitters/plugins.ts +78 -0
  519. package/src/runtime/emitters/providers.ts +30 -0
  520. package/src/runtime/emitters/routes.ts +57 -0
  521. package/src/runtime/emitters/security.ts +53 -0
  522. package/src/runtime/emitters/session.ts +93 -0
  523. package/src/runtime/emitters/surfaces.ts +57 -0
  524. package/src/runtime/emitters/tasks.ts +69 -0
  525. package/src/runtime/emitters/tools.ts +140 -0
  526. package/src/runtime/emitters/transport.ts +78 -0
  527. package/src/runtime/emitters/turn.ts +155 -0
  528. package/src/runtime/emitters/ui.ts +57 -0
  529. package/src/runtime/emitters/watchers.ts +57 -0
  530. package/src/runtime/emitters/workflows.ts +79 -0
  531. package/src/runtime/eval/index.ts +48 -0
  532. package/src/runtime/eval/runner.ts +163 -0
  533. package/src/runtime/eval/suites.ts +264 -0
  534. package/src/runtime/events/domain-map.ts +148 -0
  535. package/src/runtime/events/index.ts +194 -0
  536. package/src/runtime/events/turn.ts +60 -0
  537. package/src/runtime/events/workflows.ts +17 -0
  538. package/src/runtime/forensics/collector.ts +693 -0
  539. package/src/runtime/forensics/index.ts +23 -0
  540. package/src/runtime/foundation-clients.ts +78 -0
  541. package/src/runtime/foundation-services.ts +96 -0
  542. package/src/runtime/guidance.ts +183 -0
  543. package/src/runtime/health/effect-handlers.ts +189 -0
  544. package/src/runtime/health/index.ts +70 -0
  545. package/src/runtime/health/wiring.ts +115 -0
  546. package/src/runtime/index.ts +174 -0
  547. package/src/runtime/integration/helpers.ts +640 -0
  548. package/src/runtime/lifecycle.ts +107 -0
  549. package/src/runtime/mcp/index.ts +68 -0
  550. package/src/runtime/mcp/manager.ts +513 -0
  551. package/src/runtime/network/inbound.ts +131 -0
  552. package/src/runtime/network/index.ts +30 -0
  553. package/src/runtime/network/outbound.ts +292 -0
  554. package/src/runtime/network/shared.ts +82 -0
  555. package/src/runtime/operator-client.ts +235 -0
  556. package/src/runtime/ops/control-plane.ts +363 -0
  557. package/src/runtime/ops/index.ts +122 -0
  558. package/src/runtime/ops/playbooks/index.ts +10 -0
  559. package/src/runtime/ops/playbooks/session-unrecoverable.ts +196 -0
  560. package/src/runtime/ops/playbooks/stuck-turn.ts +197 -0
  561. package/src/runtime/ops/runtime-context.ts +100 -0
  562. package/src/runtime/ops-api.ts +27 -0
  563. package/src/runtime/orchestration/spawn-policy.ts +83 -0
  564. package/src/runtime/peer-client.ts +404 -0
  565. package/src/runtime/perf/index.ts +57 -0
  566. package/src/runtime/perf/slo-collector.ts +375 -0
  567. package/src/runtime/permissions/index.ts +190 -0
  568. package/src/runtime/permissions/policy-runtime.ts +175 -0
  569. package/src/runtime/permissions/preflight.ts +101 -0
  570. package/src/runtime/permissions/rule-suggestions.ts +36 -0
  571. package/src/runtime/plugins/hot-reload.ts +221 -0
  572. package/src/runtime/plugins/index.ts +84 -0
  573. package/src/runtime/plugins/lifecycle.ts +95 -0
  574. package/src/runtime/plugins/manager.ts +474 -0
  575. package/src/runtime/plugins/manifest.ts +167 -0
  576. package/src/runtime/plugins/quarantine.ts +202 -0
  577. package/src/runtime/plugins/trust.ts +291 -0
  578. package/src/runtime/plugins/types.ts +205 -0
  579. package/src/runtime/provider-accounts/registry.ts +326 -0
  580. package/src/runtime/remote/distributed-runtime-contract-schemas.ts +386 -0
  581. package/src/runtime/remote/index.ts +488 -0
  582. package/src/runtime/remote/runner-registry.ts +438 -0
  583. package/src/runtime/remote/supervisor.ts +70 -0
  584. package/src/runtime/runtime-hook-api.ts +5 -0
  585. package/src/runtime/runtime-knowledge-api.ts +14 -0
  586. package/src/runtime/runtime-mcp-api.ts +5 -0
  587. package/src/runtime/runtime-ops-api.ts +86 -0
  588. package/src/runtime/runtime-provider-api.ts +18 -0
  589. package/src/runtime/sandbox/backend.ts +291 -0
  590. package/src/runtime/sandbox/manager.ts +364 -0
  591. package/src/runtime/sandbox/provisioning.ts +422 -0
  592. package/src/runtime/sandbox/session-registry.ts +289 -0
  593. package/src/runtime/services.ts +541 -0
  594. package/src/runtime/session-maintenance.ts +188 -0
  595. package/src/runtime/session-persistence.ts +288 -0
  596. package/src/runtime/session-return-context.ts +195 -0
  597. package/src/runtime/settings/control-plane-store.ts +258 -0
  598. package/src/runtime/settings/control-plane.ts +599 -0
  599. package/src/runtime/shell-command-extensions.ts +54 -0
  600. package/src/runtime/shell-command-ops.ts +207 -0
  601. package/src/runtime/shell-command-platform.ts +47 -0
  602. package/src/runtime/shell-command-services.ts +143 -0
  603. package/src/runtime/shell-command-workspace.ts +31 -0
  604. package/src/runtime/store/domains/conversation.ts +181 -0
  605. package/src/runtime/store/domains/domain-read-matrix.ts +17 -0
  606. package/src/runtime/store/domains/index.ts +222 -0
  607. package/src/runtime/store/domains/panels.ts +117 -0
  608. package/src/runtime/store/domains/permissions.ts +143 -0
  609. package/src/runtime/store/domains/ui-perf.ts +103 -0
  610. package/src/runtime/store/helpers/reducers/conversation.ts +228 -0
  611. package/src/runtime/store/helpers/reducers/lifecycle.ts +440 -0
  612. package/src/runtime/store/helpers/reducers/shared.ts +60 -0
  613. package/src/runtime/store/helpers/reducers/sync.ts +555 -0
  614. package/src/runtime/store/helpers/reducers.ts +30 -0
  615. package/src/runtime/store/index.ts +304 -0
  616. package/src/runtime/store/selectors/index.ts +354 -0
  617. package/src/runtime/store/state.ts +137 -0
  618. package/src/runtime/tasks/adapters/acp-adapter.ts +211 -0
  619. package/src/runtime/tasks/adapters/agent-adapter.ts +208 -0
  620. package/src/runtime/tasks/adapters/index.ts +16 -0
  621. package/src/runtime/tasks/adapters/process-adapter.ts +214 -0
  622. package/src/runtime/tasks/adapters/scheduler-adapter.ts +193 -0
  623. package/src/runtime/tasks/index.ts +68 -0
  624. package/src/runtime/tasks/manager.ts +415 -0
  625. package/src/runtime/telemetry/api-helpers.ts +517 -0
  626. package/src/runtime/telemetry/api.ts +768 -0
  627. package/src/runtime/telemetry/index.ts +178 -0
  628. package/src/runtime/telemetry/instrumentation/domain-bridge-agent-session.ts +440 -0
  629. package/src/runtime/telemetry/instrumentation/domain-bridge-plugin-mcp.ts +200 -0
  630. package/src/runtime/telemetry/instrumentation/domain-bridge-shared.ts +18 -0
  631. package/src/runtime/telemetry/instrumentation/domain-bridge-transport-task.ts +204 -0
  632. package/src/runtime/telemetry/instrumentation/domain-bridge.ts +125 -0
  633. package/src/runtime/telemetry/instrumentation/index.ts +67 -0
  634. package/src/runtime/tools/context.ts +114 -0
  635. package/src/runtime/tools/index.ts +46 -0
  636. package/src/runtime/tools/phased-executor.ts +448 -0
  637. package/src/runtime/tools/phases/budget.ts +130 -0
  638. package/src/runtime/tools/phases/execute.ts +69 -0
  639. package/src/runtime/tools/phases/index.ts +13 -0
  640. package/src/runtime/tools/phases/map-output.ts +98 -0
  641. package/src/runtime/tools/phases/permission.ts +133 -0
  642. package/src/runtime/tools/phases/posthook.ts +57 -0
  643. package/src/runtime/tools/phases/prehook.ts +68 -0
  644. package/src/runtime/tools/phases/validate.ts +53 -0
  645. package/src/runtime/transports/direct.ts +73 -0
  646. package/src/runtime/transports/http-helpers.ts +218 -0
  647. package/src/runtime/transports/http-types.ts +364 -0
  648. package/src/runtime/transports/http.ts +629 -0
  649. package/src/runtime/transports/realtime.ts +50 -0
  650. package/src/runtime/transports/remote-events.ts +16 -0
  651. package/src/runtime/transports/shared.ts +39 -0
  652. package/src/runtime/transports/ui-runtime-events.ts +35 -0
  653. package/src/runtime/ui/index.ts +39 -0
  654. package/src/runtime/ui/model-picker/data-provider.ts +182 -0
  655. package/src/runtime/ui/model-picker/health-enrichment.ts +228 -0
  656. package/src/runtime/ui/model-picker/index.ts +59 -0
  657. package/src/runtime/ui/model-picker/types.ts +149 -0
  658. package/src/runtime/ui/provider-health/data-provider.ts +244 -0
  659. package/src/runtime/ui/provider-health/fallback-visualizer.ts +69 -0
  660. package/src/runtime/ui/provider-health/index.ts +46 -0
  661. package/src/runtime/ui/provider-health/types.ts +146 -0
  662. package/src/runtime/ui-events.ts +46 -0
  663. package/src/runtime/ui-read-model-helpers.ts +32 -0
  664. package/src/runtime/ui-read-models-core.ts +95 -0
  665. package/src/runtime/ui-read-models-observability-maintenance.ts +81 -0
  666. package/src/runtime/ui-read-models-observability-options.ts +5 -0
  667. package/src/runtime/ui-read-models-observability-remote.ts +73 -0
  668. package/src/runtime/ui-read-models-observability-security.ts +172 -0
  669. package/src/runtime/ui-read-models-observability-system.ts +217 -0
  670. package/src/runtime/ui-read-models-observability.ts +59 -0
  671. package/src/runtime/ui-read-models-operations.ts +203 -0
  672. package/src/runtime/ui-read-models.ts +61 -0
  673. package/src/runtime/ui-service-queries.ts +114 -0
  674. package/src/runtime/ui-services.ts +163 -0
  675. package/src/runtime/worktree/registry.ts +252 -0
  676. package/src/scripts/process-messages.ts +42 -0
  677. package/src/sessions/manager.ts +388 -0
  678. package/src/shell/blocking-input.ts +89 -0
  679. package/src/shell/ui-openers.ts +163 -0
  680. package/src/state/file-watcher.ts +294 -0
  681. package/src/state/index.ts +56 -0
  682. package/src/state/knowledge-injection.ts +214 -0
  683. package/src/state/memory-embedding-http.ts +642 -0
  684. package/src/state/memory-embeddings.ts +312 -0
  685. package/src/state/memory-ingest.ts +132 -0
  686. package/src/state/memory-registry.ts +111 -0
  687. package/src/state/memory-store-helpers.ts +160 -0
  688. package/src/state/memory-store.ts +728 -0
  689. package/src/state/memory-vector-store.ts +418 -0
  690. package/src/templates/manager.ts +187 -0
  691. package/src/tools/agent/index.ts +610 -0
  692. package/src/tools/agent/manager.ts +476 -0
  693. package/src/tools/analyze/git-modes.ts +380 -0
  694. package/src/tools/analyze/index.ts +128 -0
  695. package/src/tools/channel/agent-tools.ts +16 -0
  696. package/src/tools/channel/index.ts +268 -0
  697. package/src/tools/control/index.ts +90 -0
  698. package/src/tools/edit/core.ts +619 -0
  699. package/src/tools/edit/index.ts +4 -0
  700. package/src/tools/edit/phased.ts +33 -0
  701. package/src/tools/fetch/index.ts +3 -0
  702. package/src/tools/fetch/phased.ts +34 -0
  703. package/src/tools/fetch/runtime.ts +499 -0
  704. package/src/tools/index.ts +186 -0
  705. package/src/tools/mcp/index.ts +190 -0
  706. package/src/tools/remote-trigger/index.ts +130 -0
  707. package/src/tools/repl/index.ts +318 -0
  708. package/src/tools/shared/auto-heal.ts +282 -0
  709. package/src/tools/state/index.ts +688 -0
  710. package/src/tools/web-search/index.ts +38 -0
  711. package/src/tools/write/index.ts +604 -0
  712. package/src/tools/write/phased.ts +41 -0
  713. package/src/types/generated/foundation-client-types.ts +22 -0
  714. package/src/types/sql-js.d.ts +15 -0
  715. package/src/utils/splash-lines.ts +46 -0
  716. package/src/version.ts +17 -0
  717. package/src/watchers/index.ts +11 -0
  718. package/src/watchers/registry.ts +517 -0
  719. package/src/web-search/index.ts +26 -0
  720. package/src/web-search/provider-registry.ts +64 -0
  721. package/src/web-search/providers/brave.ts +100 -0
  722. package/src/web-search/providers/duckduckgo.ts +270 -0
  723. package/src/web-search/providers/exa.ts +77 -0
  724. package/src/web-search/providers/firecrawl.ts +90 -0
  725. package/src/web-search/providers/perplexity.ts +86 -0
  726. package/src/web-search/providers/searxng.ts +88 -0
  727. package/src/web-search/providers/shared.ts +249 -0
  728. package/src/web-search/providers/tavily.ts +90 -0
  729. package/src/web-search/service.ts +142 -0
  730. package/src/widget/index.ts +2 -0
  731. package/src/widget/types.ts +9 -0
  732. package/src/widget/widget.ts +8 -0
@@ -0,0 +1,16 @@
1
+ export type {
2
+ DomainEventConnector,
3
+ DomainEvents as RemoteDomainEvents,
4
+ SerializedEventEnvelope as SerializedRuntimeEnvelope,
5
+ RemoteRuntimeEvents,
6
+ RuntimeEventConnectorOptions,
7
+ } from '@pellux/goodvibes-sdk/transport-realtime';
8
+ export {
9
+ buildEventSourceUrl,
10
+ buildWebSocketUrl,
11
+ createEventSourceConnector,
12
+ createRemoteDomainEvents,
13
+ createRemoteRuntimeEvents,
14
+ createWebSocketConnector,
15
+ } from '@pellux/goodvibes-sdk/transport-realtime';
16
+ export { createRemoteUiRuntimeEvents } from './ui-runtime-events.ts';
@@ -0,0 +1,39 @@
1
+ export type { DomainEventConnector, SerializedRuntimeEnvelope } from './remote-events.ts';
2
+ export {
3
+ buildEventSourceUrl,
4
+ buildWebSocketUrl,
5
+ createEventSourceConnector,
6
+ createRemoteRuntimeEvents,
7
+ createRemoteUiRuntimeEvents,
8
+ createWebSocketConnector,
9
+ } from './remote-events.ts';
10
+ export type { TransportPaths } from '@pellux/goodvibes-sdk/platform/runtime/transports/transport-paths';
11
+ export { buildUrl, createTransportPaths, normalizeBaseUrl } from '@pellux/goodvibes-sdk/platform/runtime/transports/transport-paths';
12
+ export type { BackoffPolicy, ResolvedBackoffPolicy } from '@pellux/goodvibes-sdk/platform/runtime/transports/backoff';
13
+ export { computeBackoffDelay, normalizeBackoffPolicy, sleepWithSignal } from '@pellux/goodvibes-sdk/platform/runtime/transports/backoff';
14
+ export type { AuthTokenResolver, HeaderResolver, MaybePromise } from '@pellux/goodvibes-sdk/platform/runtime/transports/http-auth';
15
+ export { mergeHeaders, resolveAuthToken, resolveHeaders } from '@pellux/goodvibes-sdk/platform/runtime/transports/http-auth';
16
+ export type {
17
+ HttpJsonRequestOptions,
18
+ HttpRetryPolicy,
19
+ HttpJsonTransport,
20
+ HttpJsonTransportOptions,
21
+ JsonObject,
22
+ JsonValue,
23
+ ResolvedContractRequest,
24
+ TransportJsonError,
25
+ } from '@pellux/goodvibes-sdk/platform/runtime/transports/http-json-transport';
26
+ export {
27
+ createFetch,
28
+ createHttpJsonTransport,
29
+ createJsonInit,
30
+ createJsonRequestInit,
31
+ readJsonBody,
32
+ requestJson,
33
+ } from '@pellux/goodvibes-sdk/platform/runtime/transports/http-json-transport';
34
+ export type { ResolvedHttpRetryPolicy } from '@pellux/goodvibes-sdk/platform/runtime/transports/http-retry';
35
+ export { DEFAULT_HTTP_RETRY_POLICY, getHttpRetryDelay, isRetryableHttpStatus, isRetryableNetworkError, normalizeHttpRetryPolicy, resolveHttpRetryPolicy } from '@pellux/goodvibes-sdk/platform/runtime/transports/http-retry';
36
+ export type { ServerSentEventHandlers, ServerSentEventOptions } from '@pellux/goodvibes-sdk/platform/runtime/transports/sse-stream';
37
+ export { isAbortError, openServerSentEventStream } from '@pellux/goodvibes-sdk/platform/runtime/transports/sse-stream';
38
+ export type { StreamReconnectPolicy, ResolvedStreamReconnectPolicy } from '@pellux/goodvibes-sdk/platform/runtime/transports/stream-reconnect';
39
+ export { DEFAULT_STREAM_RECONNECT_POLICY, getStreamReconnectDelay, normalizeStreamReconnectPolicy } from '@pellux/goodvibes-sdk/platform/runtime/transports/stream-reconnect';
@@ -0,0 +1,35 @@
1
+ import type {
2
+ AgentEvent,
3
+ OpsEvent,
4
+ PlannerEvent,
5
+ ProviderEvent,
6
+ RuntimeEventDomain,
7
+ SessionEvent,
8
+ ToolEvent,
9
+ TurnEvent,
10
+ WorkflowEvent,
11
+ } from '../events/index.ts';
12
+ import type { UiEventFeed, UiRuntimeEvents } from '../ui-events.ts';
13
+ import type { DomainEventConnector } from '@pellux/goodvibes-sdk/platform/runtime/transports/domain-events';
14
+ import { createRemoteRuntimeEvents, type RemoteRuntimeEvents } from '@pellux/goodvibes-sdk/platform/runtime/transports/runtime-events-client';
15
+
16
+ type RuntimeEventRecord = { readonly type: string };
17
+
18
+ function asUiEvents(runtimeEvents: RemoteRuntimeEvents<RuntimeEventRecord>): UiRuntimeEvents {
19
+ return {
20
+ sessions: runtimeEvents.session as UiEventFeed<SessionEvent>,
21
+ turns: runtimeEvents.turn as UiEventFeed<TurnEvent>,
22
+ tools: runtimeEvents.tools as UiEventFeed<ToolEvent>,
23
+ providers: runtimeEvents.providers as UiEventFeed<ProviderEvent>,
24
+ agents: runtimeEvents.agents as UiEventFeed<AgentEvent>,
25
+ workflows: runtimeEvents.workflows as UiEventFeed<WorkflowEvent>,
26
+ planner: runtimeEvents.planner as UiEventFeed<PlannerEvent>,
27
+ ops: runtimeEvents.ops as UiEventFeed<OpsEvent>,
28
+ };
29
+ }
30
+
31
+ export function createRemoteUiRuntimeEvents(
32
+ connect: DomainEventConnector<RuntimeEventDomain, RuntimeEventRecord>,
33
+ ): UiRuntimeEvents {
34
+ return asUiEvents(createRemoteRuntimeEvents(connect));
35
+ }
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Runtime UI data surface barrel.
3
+ *
4
+ * Exports enriched data providers and one-shot factory functions for
5
+ * the model picker and provider health surfaces.
6
+ *
7
+ * These modules produce structured data for renderers — no UI rendering
8
+ * logic lives here.
9
+ */
10
+
11
+ // ── Model picker ──────────────────────────────────────────────────────────────
12
+ export type {
13
+ CapabilityFlags,
14
+ ProviderLatencyStats,
15
+ ProviderHealthContext,
16
+ ModelPickerEntry,
17
+ ModelPickerGroup,
18
+ ModelPickerData,
19
+ } from './model-picker/index.ts';
20
+ export type { ProviderStatus as ModelPickerProviderStatus } from './model-picker/index.ts';
21
+ export { ModelPickerDataProvider, createModelPickerData } from './model-picker/index.ts';
22
+ export type { ModelPickerDataProviderOptions } from './model-picker/index.ts';
23
+
24
+ // ── Provider health ───────────────────────────────────────────────────────────
25
+ export type {
26
+ HealthTimelinePoint,
27
+ HealthTimeline,
28
+ ProviderHealthEntry,
29
+ FallbackChainNode,
30
+ FallbackChainData,
31
+ ProviderHealthData,
32
+ CompositeHealthStatus,
33
+ } from './provider-health/index.ts';
34
+ export type { ProviderStatus } from './provider-health/index.ts';
35
+ export {
36
+ ProviderHealthDataProvider,
37
+ buildFallbackChainData,
38
+ createProviderHealthData,
39
+ } from './provider-health/index.ts';
@@ -0,0 +1,182 @@
1
+ /**
2
+ * ModelPickerDataProvider — enriched model picker data surface.
3
+ *
4
+ * Combines ModelDefinition records from the provider registry with
5
+ * ProviderHealthDomainState and ModelDomainState to produce a single,
6
+ * sorted, health-enriched ModelPickerData snapshot for UI consumption.
7
+ *
8
+ * This class is a data provider only — it contains no rendering logic.
9
+ * Subscribe to change notifications and call getSnapshot() to render.
10
+ */
11
+ import type { ModelDefinition } from '../../../providers/registry.ts';
12
+ import type { ProviderRegistry } from '../../../providers/registry.ts';
13
+ import type { BenchmarkStore } from '@pellux/goodvibes-sdk/platform/providers/model-benchmarks';
14
+ import type { ProviderHealthDomainState } from '@pellux/goodvibes-sdk/platform/runtime/store/domains/provider-health';
15
+ import type { ModelDomainState } from '@pellux/goodvibes-sdk/platform/runtime/store/domains/model';
16
+ import { enrichModelEntries, groupEntriesByProvider } from './health-enrichment.ts';
17
+ import type { ModelPickerData, ModelPickerEntry } from './types.ts';
18
+
19
+ /** Options for constructing a ModelPickerDataProvider. */
20
+ export interface ModelPickerDataProviderOptions {
21
+ /**
22
+ * Initial set of pinned model IDs.
23
+ * Call updatePinnedIds() to update at runtime.
24
+ */
25
+ readonly pinnedIds?: ReadonlySet<string>;
26
+ readonly benchmarkStore: Pick<BenchmarkStore, 'getBenchmarks'>;
27
+ readonly providerRegistry: Pick<ProviderRegistry, 'getSyntheticModelInfoFromCatalog' | 'getContextWindowForModel'>;
28
+ }
29
+
30
+ /**
31
+ * ModelPickerDataProvider produces enriched model picker data snapshots.
32
+ *
33
+ * Usage:
34
+ * ```ts
35
+ * const provider = new ModelPickerDataProvider(models, healthState, modelState);
36
+ * const unsub = provider.subscribe(() => {
37
+ * const data = provider.getSnapshot();
38
+ * // render data.entries or data.groups
39
+ * });
40
+ * // When health or model state changes:
41
+ * provider.updateHealthState(newHealthState);
42
+ * provider.updateModelState(newModelState);
43
+ * // Cleanup:
44
+ * unsub();
45
+ * provider.dispose();
46
+ * ```
47
+ */
48
+ export class ModelPickerDataProvider {
49
+ private _models: readonly ModelDefinition[];
50
+ private _healthState: ProviderHealthDomainState;
51
+ private _modelState: ModelDomainState;
52
+ private _pinnedIds: ReadonlySet<string>;
53
+ private _snapshot: ModelPickerData;
54
+ private readonly benchmarkStore: Pick<BenchmarkStore, 'getBenchmarks'>;
55
+ private readonly providerRegistry: Pick<ProviderRegistry, 'getSyntheticModelInfoFromCatalog' | 'getContextWindowForModel'>;
56
+ private readonly _subscribers = new Set<() => void>();
57
+
58
+ constructor(
59
+ models: readonly ModelDefinition[],
60
+ healthState: ProviderHealthDomainState,
61
+ modelState: ModelDomainState,
62
+ options: ModelPickerDataProviderOptions,
63
+ ) {
64
+ this._models = models;
65
+ this._healthState = healthState;
66
+ this._modelState = modelState;
67
+ this._pinnedIds = options.pinnedIds ?? new Set();
68
+ this.benchmarkStore = options.benchmarkStore;
69
+ this.providerRegistry = options.providerRegistry;
70
+ this._snapshot = this._buildSnapshot();
71
+ }
72
+
73
+ /**
74
+ * Return the current enriched model picker data snapshot.
75
+ * This is updated synchronously when state changes via update methods.
76
+ */
77
+ public getSnapshot(): ModelPickerData {
78
+ return this._snapshot;
79
+ }
80
+
81
+ /**
82
+ * Register a callback invoked whenever the snapshot changes.
83
+ * @returns An unsubscribe function.
84
+ */
85
+ public subscribe(callback: () => void): () => void {
86
+ this._subscribers.add(callback);
87
+ return () => this._subscribers.delete(callback);
88
+ }
89
+
90
+ /**
91
+ * Update the model list (e.g. after registry reload).
92
+ * Triggers a snapshot rebuild and notifies subscribers.
93
+ */
94
+ public updateModels(models: readonly ModelDefinition[]): void {
95
+ this._models = models;
96
+ this._rebuild();
97
+ }
98
+
99
+ /**
100
+ * Update health state (e.g. on ProviderHealthDomainState change).
101
+ * Triggers a snapshot rebuild and notifies subscribers.
102
+ */
103
+ public updateHealthState(healthState: ProviderHealthDomainState): void {
104
+ this._healthState = healthState;
105
+ this._rebuild();
106
+ }
107
+
108
+ /**
109
+ * Update model domain state (e.g. on active model or fallback change).
110
+ * Triggers a snapshot rebuild and notifies subscribers.
111
+ */
112
+ public updateModelState(modelState: ModelDomainState): void {
113
+ this._modelState = modelState;
114
+ this._rebuild();
115
+ }
116
+
117
+ /**
118
+ * Update the pinned/favorites model ID set.
119
+ * Triggers a snapshot rebuild and notifies subscribers.
120
+ */
121
+ public updatePinnedIds(pinnedIds: ReadonlySet<string>): void {
122
+ this._pinnedIds = pinnedIds;
123
+ this._rebuild();
124
+ }
125
+
126
+ /**
127
+ * Release all subscriber references.
128
+ * Does not clear internal state — getSnapshot() remains usable after disposal.
129
+ */
130
+ public dispose(): void {
131
+ this._subscribers.clear();
132
+ }
133
+
134
+ // ── Private ────────────────────────────────────────────────────────────────
135
+
136
+ private _rebuild(): void {
137
+ this._snapshot = this._buildSnapshot();
138
+ this._notify();
139
+ }
140
+
141
+ private _buildSnapshot(): ModelPickerData {
142
+ const entries: readonly ModelPickerEntry[] = enrichModelEntries(
143
+ this._models,
144
+ this._healthState,
145
+ this._modelState,
146
+ this._pinnedIds,
147
+ this.benchmarkStore,
148
+ this.providerRegistry,
149
+ );
150
+
151
+ const groups = groupEntriesByProvider(entries);
152
+
153
+ const degradedProviderIds: string[] = [];
154
+ const unavailableProviderIds: string[] = [];
155
+ for (const [id, record] of this._healthState.providers) {
156
+ if (record.status === 'degraded' || record.status === 'rate_limited') {
157
+ degradedProviderIds.push(id);
158
+ } else if (record.status === 'unavailable' || record.status === 'auth_error') {
159
+ unavailableProviderIds.push(id);
160
+ }
161
+ }
162
+
163
+ return {
164
+ entries,
165
+ groups,
166
+ degradedProviderIds,
167
+ unavailableProviderIds,
168
+ activeModelId: this._modelState.activeModelId,
169
+ snapshotAt: Date.now(),
170
+ };
171
+ }
172
+
173
+ private _notify(): void {
174
+ for (const cb of this._subscribers) {
175
+ try {
176
+ cb();
177
+ } catch {
178
+ // Non-fatal: subscriber errors must not crash the provider
179
+ }
180
+ }
181
+ }
182
+ }
@@ -0,0 +1,228 @@
1
+ /**
2
+ * Health enrichment for model picker entries.
3
+ *
4
+ * Joins ModelDefinition records from the provider registry with health
5
+ * telemetry from ProviderHealthDomainState to produce enriched
6
+ * ModelPickerEntry objects ready for UI consumption.
7
+ */
8
+ import type { ModelDefinition } from '../../../providers/registry.ts';
9
+ import type { ProviderRegistry } from '../../../providers/registry.ts';
10
+ import type { BenchmarkStore } from '@pellux/goodvibes-sdk/platform/providers/model-benchmarks';
11
+ import type { ProviderHealthDomainState, ProviderHealthRecord } from '@pellux/goodvibes-sdk/platform/runtime/store/domains/provider-health';
12
+ import type { ModelDomainState } from '@pellux/goodvibes-sdk/platform/runtime/store/domains/model';
13
+ import { detectFamily, tierToCategoryFilter } from '../../../input/model-picker.ts';
14
+ import { getQualityTier, getQualityTierFromScore, compositeScore } from '@pellux/goodvibes-sdk/platform/providers/model-benchmarks';
15
+ import type {
16
+ ModelPickerEntry,
17
+ ModelPickerGroup,
18
+ ProviderHealthContext,
19
+ CapabilityFlags,
20
+ ProviderLatencyStats,
21
+ } from './types.ts';
22
+
23
+ /** Status sort priority (lower = shown first). */
24
+ const STATUS_ORDER: Record<string, number> = {
25
+ healthy: 0,
26
+ unknown: 1,
27
+ degraded: 2,
28
+ rate_limited: 3,
29
+ auth_error: 4,
30
+ unavailable: 5,
31
+ };
32
+
33
+ /**
34
+ * Derive ProviderHealthContext from a ProviderHealthRecord.
35
+ * Returns a safe default when the record is absent (provider not yet observed).
36
+ */
37
+ function buildHealthContext(record: ProviderHealthRecord | undefined): ProviderHealthContext {
38
+ if (!record) {
39
+ return {
40
+ status: 'unknown',
41
+ isConfigured: false,
42
+ };
43
+ }
44
+
45
+ let latency: ProviderLatencyStats | undefined;
46
+ if (record.stats.totalCalls > 0) {
47
+ latency = {
48
+ avgMs: record.stats.avgLatencyMs,
49
+ p95Ms: record.stats.maxLatencyMs,
50
+ minMs: record.stats.minLatencyMs,
51
+ };
52
+ }
53
+
54
+ return {
55
+ status: record.status,
56
+ latency,
57
+ cacheHitRate: record.cacheMetrics?.hitRate,
58
+ isConfigured: record.isConfigured,
59
+ rateLimitResetAt: record.rateLimitResetAt,
60
+ };
61
+ }
62
+
63
+ /**
64
+ * Derive CapabilityFlags from a ModelDefinition.
65
+ */
66
+ function buildCapabilityFlags(model: ModelDefinition): CapabilityFlags {
67
+ return {
68
+ reasoning: model.capabilities?.reasoning ?? false,
69
+ caching: false, // caching capability is provider-level; enriched separately if needed
70
+ toolCalling: model.capabilities?.toolCalling ?? false,
71
+ multimodal: model.capabilities?.multimodal ?? false,
72
+ codeEditing: model.capabilities?.codeEditing ?? false,
73
+ };
74
+ }
75
+
76
+ /**
77
+ * Derive quality tier and benchmark score for a model.
78
+ * Handles synthetic models (catalog-backed composite scores) and standard models.
79
+ */
80
+ function buildQualityInfo(
81
+ model: ModelDefinition,
82
+ benchmarkStore: Pick<BenchmarkStore, 'getBenchmarks'>,
83
+ providerRegistry: Pick<ProviderRegistry, 'getSyntheticModelInfoFromCatalog'>,
84
+ ): { qualityTier?: string; benchmarkScore?: number } {
85
+ if (model.provider === 'synthetic') {
86
+ const info = providerRegistry.getSyntheticModelInfoFromCatalog(model.id);
87
+ if (info?.bestCompositeScore != null) {
88
+ return {
89
+ qualityTier: getQualityTierFromScore(info.bestCompositeScore),
90
+ benchmarkScore: info.bestCompositeScore,
91
+ };
92
+ }
93
+ return {};
94
+ }
95
+
96
+ const benchmarks = benchmarkStore.getBenchmarks(model.id) ?? benchmarkStore.getBenchmarks(model.displayName);
97
+ if (!benchmarks) return {};
98
+
99
+ return {
100
+ qualityTier: getQualityTier(benchmarks.benchmarks),
101
+ benchmarkScore: compositeScore(benchmarks.benchmarks) ?? undefined,
102
+ };
103
+ }
104
+
105
+ /**
106
+ * Build the set of model IDs in the current fallback chain.
107
+ * Returns a Map from modelId to its position (0 = primary).
108
+ */
109
+ function buildFallbackPositionMap(modelState: ModelDomainState): Map<string, number> {
110
+ const map = new Map<string, number>();
111
+ // Position 0 is always the primary active model
112
+ map.set(modelState.activeModelId, 0);
113
+ for (let i = 0; i < modelState.fallbackChain.length; i++) {
114
+ const entry = modelState.fallbackChain[i];
115
+ if (!map.has(entry.modelId)) {
116
+ map.set(entry.modelId, i + 1);
117
+ }
118
+ }
119
+ return map;
120
+ }
121
+
122
+ /**
123
+ * Enrich a flat list of ModelDefinitions with health and state data.
124
+ *
125
+ * @param models - All selectable models from the registry.
126
+ * @param healthState - Current provider health domain state.
127
+ * @param modelState - Current model domain state.
128
+ * @param pinnedIds - Set of pinned/favorited model IDs.
129
+ * @returns Sorted, enriched ModelPickerEntry array.
130
+ */
131
+ export function enrichModelEntries(
132
+ models: readonly ModelDefinition[],
133
+ healthState: ProviderHealthDomainState,
134
+ modelState: ModelDomainState,
135
+ pinnedIds: ReadonlySet<string>,
136
+ benchmarkStore: Pick<BenchmarkStore, 'getBenchmarks'>,
137
+ providerRegistry: Pick<ProviderRegistry, 'getSyntheticModelInfoFromCatalog' | 'getContextWindowForModel'>,
138
+ ): ModelPickerEntry[] {
139
+ const fallbackPositions = buildFallbackPositionMap(modelState);
140
+
141
+ const entries: ModelPickerEntry[] = models.map((model) => {
142
+ const record = healthState.providers.get(model.provider);
143
+ const health = buildHealthContext(record);
144
+ const { qualityTier, benchmarkScore } = buildQualityInfo(model, benchmarkStore, providerRegistry);
145
+ const isProviderDegraded =
146
+ health.status === 'degraded' || health.status === 'rate_limited';
147
+ const isProviderUnavailable =
148
+ health.status === 'unavailable' || health.status === 'auth_error';
149
+
150
+ const fallbackPosition = fallbackPositions.get(model.id);
151
+
152
+ // Resolve effective context window and determine display source label.
153
+ const effectiveContextWindow = providerRegistry.getContextWindowForModel(model);
154
+ // Determine source: custom/local providers carry provenance on ModelDefinition;
155
+ // for catalog models, if getContextWindowForModel returned more than the
156
+ // static contextWindow it came from OpenRouter, else it's the registry value.
157
+ let contextWindowSource: ModelPickerEntry['contextWindowSource'];
158
+ if (model.contextWindowProvenance) {
159
+ contextWindowSource = model.contextWindowProvenance;
160
+ } else if (effectiveContextWindow !== model.contextWindow) {
161
+ contextWindowSource = 'openrouter';
162
+ } else {
163
+ contextWindowSource = 'registry';
164
+ }
165
+
166
+ return {
167
+ modelId: model.id,
168
+ providerId: model.provider,
169
+ displayName: model.displayName,
170
+ family: detectFamily(model),
171
+ pricingTier: tierToCategoryFilter(model.tier),
172
+ qualityTier,
173
+ benchmarkScore,
174
+ capabilities: buildCapabilityFlags(model),
175
+ health,
176
+ contextWindow: effectiveContextWindow,
177
+ contextWindowSource,
178
+ isPinned: pinnedIds.has(model.id),
179
+ isActive: model.id === modelState.activeModelId,
180
+ isProviderDegraded,
181
+ isProviderUnavailable,
182
+ isInFallbackChain: fallbackPosition !== undefined,
183
+ fallbackPosition,
184
+ };
185
+ });
186
+
187
+ // Sort: healthy providers first, then degraded, then unavailable.
188
+ // Within each status bucket: pinned first, then active, then by display name.
189
+ entries.sort((a, b) => {
190
+ const statusDiff =
191
+ (STATUS_ORDER[a.health.status] ?? 1) - (STATUS_ORDER[b.health.status] ?? 1);
192
+ if (statusDiff !== 0) return statusDiff;
193
+
194
+ // Pinned before unpinned
195
+ if (a.isPinned !== b.isPinned) return a.isPinned ? -1 : 1;
196
+ // Active before inactive
197
+ if (a.isActive !== b.isActive) return a.isActive ? -1 : 1;
198
+
199
+ return a.displayName.localeCompare(b.displayName);
200
+ });
201
+
202
+ return entries;
203
+ }
204
+
205
+ /**
206
+ * Group a sorted list of ModelPickerEntry records by their provider ID.
207
+ * Preserves the sort order of entries within each group.
208
+ *
209
+ * @param entries - Pre-sorted enriched entries.
210
+ * @returns Groups ordered by first appearance of each provider in entries.
211
+ */
212
+ export function groupEntriesByProvider(entries: readonly ModelPickerEntry[]): ModelPickerGroup[] {
213
+ const groupMap = new Map<string, ModelPickerEntry[]>();
214
+ const groupOrder: string[] = [];
215
+
216
+ for (const entry of entries) {
217
+ if (!groupMap.has(entry.providerId)) {
218
+ groupMap.set(entry.providerId, []);
219
+ groupOrder.push(entry.providerId);
220
+ }
221
+ groupMap.get(entry.providerId)!.push(entry);
222
+ }
223
+
224
+ return groupOrder.map((providerId) => ({
225
+ label: providerId,
226
+ entries: groupMap.get(providerId)!,
227
+ }));
228
+ }
@@ -0,0 +1,59 @@
1
+ /**
2
+ * Model picker UI data surface barrel.
3
+ *
4
+ * Re-exports all types and the ModelPickerDataProvider class.
5
+ * Also provides the createModelPickerData() factory for one-shot snapshots.
6
+ */
7
+ export type {
8
+ CapabilityFlags,
9
+ ProviderLatencyStats,
10
+ ProviderHealthContext,
11
+ ModelPickerEntry,
12
+ ModelPickerGroup,
13
+ ModelPickerData,
14
+ } from './types.ts';
15
+ // ProviderStatus re-exported from types for convenience
16
+ export type { ProviderStatus } from './types.ts';
17
+
18
+ export { ModelPickerDataProvider } from './data-provider.ts';
19
+ export type { ModelPickerDataProviderOptions } from './data-provider.ts';
20
+
21
+ import type { ModelDefinition } from '../../../providers/registry.ts';
22
+ import type { ProviderRegistry } from '../../../providers/registry.ts';
23
+ import type { BenchmarkStore } from '@pellux/goodvibes-sdk/platform/providers/model-benchmarks';
24
+ import type { ProviderHealthDomainState } from '@pellux/goodvibes-sdk/platform/runtime/store/domains/provider-health';
25
+ import type { ModelDomainState } from '@pellux/goodvibes-sdk/platform/runtime/store/domains/model';
26
+ import type { ModelPickerData } from './types.ts';
27
+ import { ModelPickerDataProvider } from './data-provider.ts';
28
+
29
+ /**
30
+ * Produce a one-shot ModelPickerData snapshot without creating a long-lived provider.
31
+ *
32
+ * Use this when you need a single render pass and do not require change subscriptions.
33
+ * For reactive/subscription-based UIs, prefer ModelPickerDataProvider.
34
+ *
35
+ * @param models - All selectable models from the registry.
36
+ * @param healthState - Current provider health domain state.
37
+ * @param modelState - Current model domain state.
38
+ * @param pinnedIds - Set of pinned/favorited model IDs.
39
+ * @returns Immutable ModelPickerData snapshot.
40
+ */
41
+ export function createModelPickerData(
42
+ models: readonly ModelDefinition[],
43
+ healthState: ProviderHealthDomainState,
44
+ modelState: ModelDomainState,
45
+ benchmarkStore: Pick<BenchmarkStore, 'getBenchmarks'>,
46
+ providerRegistry: Pick<ProviderRegistry, 'getSyntheticModelInfoFromCatalog' | 'getContextWindowForModel'>,
47
+ pinnedIds: ReadonlySet<string> = new Set(),
48
+ ): ModelPickerData {
49
+ // Delegate to the data provider for consistent derivation logic,
50
+ // then dispose immediately since no subscriptions are needed.
51
+ const dp = new ModelPickerDataProvider(models, healthState, modelState, {
52
+ pinnedIds,
53
+ benchmarkStore,
54
+ providerRegistry,
55
+ });
56
+ const snapshot = dp.getSnapshot();
57
+ dp.dispose();
58
+ return snapshot;
59
+ }