@pellux/goodvibes-tui 0.18.11 → 0.18.13

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 (570) hide show
  1. package/CHANGELOG.md +72 -0
  2. package/README.md +1 -1
  3. package/docs/foundation-artifacts/operator-contract.json +1 -1
  4. package/package.json +2 -2
  5. package/src/config/index.ts +1 -138
  6. package/src/config/subscription-providers.ts +1 -127
  7. package/src/core/conversation-rendering.ts +5 -5
  8. package/src/core/conversation.ts +177 -424
  9. package/src/core/history.ts +45 -0
  10. package/src/core/orchestrator.ts +3 -733
  11. package/src/core/system-message-router.ts +19 -58
  12. package/src/input/command-registry.ts +3 -3
  13. package/src/input/commands/session-content.ts +2 -2
  14. package/src/input/commands/session-workflow.ts +1 -1
  15. package/src/input/handler-content-actions.ts +2 -2
  16. package/src/input/handler-feed.ts +2 -2
  17. package/src/input/handler-modal-token-routes.ts +1 -1
  18. package/src/input/handler-ui-state.ts +1 -1
  19. package/src/input/handler.ts +1 -1
  20. package/src/input/search.ts +1 -1
  21. package/src/input/selection.ts +2 -2
  22. package/src/input/session-picker-modal.ts +1 -1
  23. package/src/main.ts +1 -1
  24. package/src/panels/agent-inspector-panel.ts +3 -3
  25. package/src/panels/agent-logs-panel.ts +3 -3
  26. package/src/panels/approval-panel.ts +2 -2
  27. package/src/panels/automation-control-panel.ts +3 -3
  28. package/src/panels/base-panel.ts +14 -14
  29. package/src/panels/builtin/agent.ts +1 -0
  30. package/src/panels/builtin/operations.ts +2 -1
  31. package/src/panels/builtin/session.ts +2 -2
  32. package/src/panels/builtin/shared.ts +5 -5
  33. package/src/panels/cockpit-panel.ts +2 -2
  34. package/src/panels/communication-panel.ts +3 -3
  35. package/src/panels/context-visualizer-panel.ts +6 -3
  36. package/src/panels/control-plane-panel.ts +3 -3
  37. package/src/panels/cost-tracker-panel.ts +3 -3
  38. package/src/panels/debug-panel.ts +2 -2
  39. package/src/panels/diff-panel.ts +2 -2
  40. package/src/panels/docs-panel.ts +1 -1
  41. package/src/panels/eval-panel.ts +2 -2
  42. package/src/panels/file-explorer-panel.ts +3 -3
  43. package/src/panels/file-preview-panel.ts +3 -3
  44. package/src/panels/forensics-panel.ts +2 -2
  45. package/src/panels/git-panel.ts +1 -1
  46. package/src/panels/hooks-panel.ts +3 -3
  47. package/src/panels/incident-review-panel.ts +1 -1
  48. package/src/panels/intelligence-panel.ts +2 -2
  49. package/src/panels/knowledge-panel.ts +1 -1
  50. package/src/panels/local-auth-panel.ts +2 -2
  51. package/src/panels/marketplace-panel.ts +1 -1
  52. package/src/panels/mcp-panel.ts +3 -3
  53. package/src/panels/memory-panel.ts +1 -1
  54. package/src/panels/ops-control-panel.ts +3 -3
  55. package/src/panels/ops-strategy-panel.ts +2 -2
  56. package/src/panels/orchestration-panel.ts +2 -2
  57. package/src/panels/panel-list-panel.ts +6 -6
  58. package/src/panels/plan-dashboard-panel.ts +1 -1
  59. package/src/panels/plugins-panel.ts +2 -2
  60. package/src/panels/policy-panel.ts +2 -2
  61. package/src/panels/polish.ts +3 -3
  62. package/src/panels/provider-accounts-panel.ts +2 -2
  63. package/src/panels/provider-health-domains.ts +5 -1
  64. package/src/panels/provider-health-panel.ts +7 -3
  65. package/src/panels/provider-stats-panel.ts +3 -3
  66. package/src/panels/remote-panel.ts +3 -3
  67. package/src/panels/routes-panel.ts +3 -3
  68. package/src/panels/sandbox-panel.ts +2 -2
  69. package/src/panels/schedule-panel.ts +1 -1
  70. package/src/panels/security-panel.ts +2 -2
  71. package/src/panels/services-panel.ts +2 -2
  72. package/src/panels/session-browser-panel.ts +3 -3
  73. package/src/panels/settings-sync-panel.ts +2 -2
  74. package/src/panels/skills-panel.ts +6 -6
  75. package/src/panels/subscription-panel.ts +2 -2
  76. package/src/panels/symbol-outline-panel.ts +3 -3
  77. package/src/panels/system-messages-panel.ts +4 -4
  78. package/src/panels/tasks-panel.ts +2 -2
  79. package/src/panels/thinking-panel.ts +3 -3
  80. package/src/panels/token-budget-panel.ts +7 -3
  81. package/src/panels/tool-inspector-panel.ts +3 -3
  82. package/src/panels/types.ts +5 -5
  83. package/src/panels/watchers-panel.ts +3 -3
  84. package/src/panels/welcome-panel.ts +1 -1
  85. package/src/panels/worktree-panel.ts +2 -2
  86. package/src/panels/wrfc-panel.ts +3 -3
  87. package/src/permissions/prompt.ts +3 -22
  88. package/src/plugins/loader.ts +15 -304
  89. package/src/renderer/agent-detail-modal.ts +1 -1
  90. package/src/renderer/autocomplete-overlay.ts +2 -2
  91. package/src/renderer/bookmark-modal.ts +1 -1
  92. package/src/renderer/bottom-bar.ts +2 -2
  93. package/src/renderer/buffer.ts +1 -1
  94. package/src/renderer/code-block.ts +2 -2
  95. package/src/renderer/compositor.ts +2 -2
  96. package/src/renderer/context-inspector.ts +1 -1
  97. package/src/renderer/conversation-layout.ts +2 -2
  98. package/src/renderer/conversation-overlays.ts +1 -1
  99. package/src/renderer/conversation-surface.ts +2 -2
  100. package/src/renderer/diff-view.ts +2 -2
  101. package/src/renderer/diff.ts +1 -1
  102. package/src/renderer/file-picker-overlay.ts +2 -2
  103. package/src/renderer/file-tree.ts +2 -2
  104. package/src/renderer/help-overlay.ts +1 -1
  105. package/src/renderer/history-search-overlay.ts +2 -2
  106. package/src/renderer/live-tail-modal.ts +1 -1
  107. package/src/renderer/markdown.ts +2 -2
  108. package/src/renderer/modal-factory.ts +3 -3
  109. package/src/renderer/model-picker-overlay.ts +2 -2
  110. package/src/renderer/overlay-box.ts +2 -2
  111. package/src/renderer/panel-composite.ts +1 -1
  112. package/src/renderer/panel-picker-overlay.ts +2 -2
  113. package/src/renderer/panel-tab-bar.ts +1 -1
  114. package/src/renderer/panel-workspace-bar.ts +1 -1
  115. package/src/renderer/process-indicator.ts +2 -2
  116. package/src/renderer/process-modal.ts +1 -1
  117. package/src/renderer/profile-picker-modal.ts +2 -2
  118. package/src/renderer/progress.ts +2 -2
  119. package/src/renderer/search-overlay.ts +2 -2
  120. package/src/renderer/selection-modal-overlay.ts +2 -2
  121. package/src/renderer/session-picker-modal.ts +2 -2
  122. package/src/renderer/settings-modal.ts +2 -2
  123. package/src/renderer/shell-surface.ts +1 -1
  124. package/src/renderer/system-message.ts +1 -1
  125. package/src/renderer/tab-strip.ts +2 -2
  126. package/src/renderer/text-layout.ts +1 -1
  127. package/src/renderer/thinking.ts +1 -1
  128. package/src/renderer/tool-call.ts +2 -2
  129. package/src/renderer/ui-factory.ts +2 -2
  130. package/src/runtime/bootstrap-command-context.ts +7 -8
  131. package/src/runtime/bootstrap-command-parts.ts +4 -6
  132. package/src/runtime/bootstrap-core.ts +5 -4
  133. package/src/runtime/bootstrap-hook-bridge.ts +16 -175
  134. package/src/runtime/bootstrap-shell.ts +5 -5
  135. package/src/runtime/bootstrap.ts +6 -5
  136. package/src/runtime/context.ts +4 -20
  137. package/src/runtime/diagnostics/panels/index.ts +1 -1
  138. package/src/runtime/diagnostics/panels/ops.ts +1 -1
  139. package/src/runtime/diagnostics/panels/panel-resources.ts +118 -0
  140. package/src/runtime/perf/panel-contracts.ts +32 -0
  141. package/src/runtime/perf/panel-health-monitor.ts +18 -0
  142. package/src/runtime/services.ts +6 -6
  143. package/src/runtime/store/domains/conversation.ts +1 -181
  144. package/src/runtime/store/domains/permissions.ts +1 -143
  145. package/src/runtime/store/helpers/reducers/conversation.ts +1 -228
  146. package/src/runtime/store/helpers/reducers/lifecycle.ts +1 -440
  147. package/src/runtime/store/selectors/index.ts +11 -6
  148. package/src/runtime/store/state.ts +12 -4
  149. package/src/runtime/ui-read-models-observability-security.ts +2 -2
  150. package/src/runtime/ui-read-models-observability-system.ts +1 -1
  151. package/src/runtime/ui-service-queries.ts +1 -1
  152. package/src/runtime/ui-services.ts +1 -1
  153. package/src/shell/ui-openers.ts +1 -1
  154. package/src/tools/index.ts +1 -186
  155. package/src/types/grid.ts +48 -0
  156. package/src/utils/clipboard.ts +21 -0
  157. package/src/utils/splash-lines.ts +1 -1
  158. package/src/utils/terminal-width.ts +185 -0
  159. package/src/version.ts +1 -1
  160. package/src/acp/connection.ts +0 -447
  161. package/src/acp/index.ts +0 -7
  162. package/src/acp/manager.ts +0 -1
  163. package/src/adapters/bluebubbles/index.ts +0 -127
  164. package/src/adapters/discord/index.ts +0 -297
  165. package/src/adapters/github/index.ts +0 -73
  166. package/src/adapters/google-chat/index.ts +0 -119
  167. package/src/adapters/imessage/index.ts +0 -92
  168. package/src/adapters/index.ts +0 -15
  169. package/src/adapters/matrix/index.ts +0 -116
  170. package/src/adapters/mattermost/index.ts +0 -151
  171. package/src/adapters/msteams/index.ts +0 -180
  172. package/src/adapters/ntfy/index.ts +0 -118
  173. package/src/adapters/signal/index.ts +0 -92
  174. package/src/adapters/slack/index.ts +0 -323
  175. package/src/adapters/telegram/index.ts +0 -160
  176. package/src/adapters/types.ts +0 -97
  177. package/src/adapters/webhook/index.ts +0 -178
  178. package/src/adapters/whatsapp/index.ts +0 -135
  179. package/src/agents/message-bus-core.ts +0 -312
  180. package/src/agents/message-bus.ts +0 -2
  181. package/src/agents/orchestrator-prompts.ts +0 -351
  182. package/src/agents/orchestrator-runner.ts +0 -668
  183. package/src/agents/orchestrator.ts +0 -438
  184. package/src/agents/session.ts +0 -108
  185. package/src/agents/worktree.ts +0 -153
  186. package/src/agents/wrfc-config.ts +0 -47
  187. package/src/agents/wrfc-controller.ts +0 -747
  188. package/src/agents/wrfc-gate-runtime.ts +0 -75
  189. package/src/agents/wrfc-reporting.ts +0 -284
  190. package/src/agents/wrfc-runtime-events.ts +0 -150
  191. package/src/agents/wrfc-types.ts +0 -67
  192. package/src/automation/delivery-manager.ts +0 -368
  193. package/src/automation/index.ts +0 -72
  194. package/src/automation/manager-runtime-delivery.ts +0 -139
  195. package/src/automation/manager-runtime-events.ts +0 -131
  196. package/src/automation/manager-runtime-execution.ts +0 -511
  197. package/src/automation/manager-runtime-helpers.ts +0 -433
  198. package/src/automation/manager-runtime-job-mutations.ts +0 -175
  199. package/src/automation/manager-runtime-reconcile.ts +0 -148
  200. package/src/automation/manager-runtime-scheduling.ts +0 -189
  201. package/src/automation/manager-runtime-sync.ts +0 -54
  202. package/src/automation/manager-runtime.ts +0 -721
  203. package/src/automation/manager.ts +0 -10
  204. package/src/automation/service.ts +0 -242
  205. package/src/channels/builtin/account-actions.ts +0 -490
  206. package/src/channels/builtin/accounts.ts +0 -433
  207. package/src/channels/builtin/contracts.ts +0 -405
  208. package/src/channels/builtin/plugins.ts +0 -308
  209. package/src/channels/builtin/rendering.ts +0 -174
  210. package/src/channels/builtin/setup-schema.ts +0 -504
  211. package/src/channels/builtin/shared.ts +0 -96
  212. package/src/channels/builtin/surfaces.ts +0 -57
  213. package/src/channels/builtin/targets.ts +0 -693
  214. package/src/channels/builtin-runtime.ts +0 -443
  215. package/src/channels/delivery/shared.ts +0 -199
  216. package/src/channels/delivery/strategies-bridge.ts +0 -246
  217. package/src/channels/delivery/strategies-core.ts +0 -299
  218. package/src/channels/delivery/strategies-enterprise.ts +0 -178
  219. package/src/channels/delivery/types.ts +0 -59
  220. package/src/channels/delivery-router.ts +0 -127
  221. package/src/channels/index.ts +0 -77
  222. package/src/channels/plugin-registry.ts +0 -551
  223. package/src/channels/provider-runtime.ts +0 -330
  224. package/src/channels/reply-pipeline.ts +0 -522
  225. package/src/channels/route-manager.ts +0 -340
  226. package/src/channels/surface-registry.ts +0 -186
  227. package/src/config/helper-model.ts +0 -1
  228. package/src/config/manager.ts +0 -8
  229. package/src/config/subscription-auth.ts +0 -31
  230. package/src/config/tool-llm.ts +0 -110
  231. package/src/control-plane/approval-broker.ts +0 -351
  232. package/src/control-plane/gateway.ts +0 -1
  233. package/src/control-plane/index.ts +0 -54
  234. package/src/control-plane/media-contract-schemas.ts +0 -1
  235. package/src/control-plane/method-catalog-admin.ts +0 -1
  236. package/src/control-plane/method-catalog-channels.ts +0 -1
  237. package/src/control-plane/method-catalog-control-automation.ts +0 -1
  238. package/src/control-plane/method-catalog-control-core.ts +0 -1
  239. package/src/control-plane/method-catalog-control.ts +0 -1
  240. package/src/control-plane/method-catalog-events.ts +0 -1
  241. package/src/control-plane/method-catalog-knowledge.ts +0 -1
  242. package/src/control-plane/method-catalog-media.ts +0 -1
  243. package/src/control-plane/method-catalog-runtime.ts +0 -1
  244. package/src/control-plane/method-catalog-shared.ts +0 -1
  245. package/src/control-plane/method-catalog.ts +0 -1
  246. package/src/control-plane/operator-contract-schemas-admin.ts +0 -1
  247. package/src/control-plane/operator-contract-schemas-channels.ts +0 -1
  248. package/src/control-plane/operator-contract-schemas-control.ts +0 -1
  249. package/src/control-plane/operator-contract-schemas-domains.ts +0 -1
  250. package/src/control-plane/operator-contract-schemas-knowledge.ts +0 -1
  251. package/src/control-plane/operator-contract-schemas-media.ts +0 -1
  252. package/src/control-plane/operator-contract-schemas-permissions.ts +0 -1
  253. package/src/control-plane/operator-contract-schemas-remote.ts +0 -1
  254. package/src/control-plane/operator-contract-schemas-runtime.ts +0 -1
  255. package/src/control-plane/operator-contract-schemas-shared.ts +0 -1
  256. package/src/control-plane/operator-contract-schemas-telemetry.ts +0 -1
  257. package/src/control-plane/operator-contract-schemas.ts +0 -1
  258. package/src/control-plane/operator-contract.ts +0 -165
  259. package/src/control-plane/session-broker.ts +0 -780
  260. package/src/core/compaction-sections.ts +0 -492
  261. package/src/core/compaction-types.ts +0 -147
  262. package/src/core/context-compaction.ts +0 -542
  263. package/src/core/conversation-compaction.ts +0 -68
  264. package/src/core/conversation-diff.ts +0 -55
  265. package/src/core/conversation-utils.ts +0 -72
  266. package/src/core/event-replay.ts +0 -287
  267. package/src/core/orchestrator-context-runtime.ts +0 -407
  268. package/src/core/orchestrator-follow-up-runtime.ts +0 -134
  269. package/src/core/orchestrator-runtime.ts +0 -132
  270. package/src/core/orchestrator-tool-runtime.ts +0 -468
  271. package/src/core/orchestrator-turn-helpers.ts +0 -355
  272. package/src/core/orchestrator-turn-loop.ts +0 -443
  273. package/src/core/plan-command-handler.ts +0 -169
  274. package/src/core/transcript-events/classify.ts +0 -95
  275. package/src/core/transcript-events/index.ts +0 -15
  276. package/src/daemon/control-plane.ts +0 -522
  277. package/src/daemon/facade-composition.ts +0 -398
  278. package/src/daemon/facade.ts +0 -638
  279. package/src/daemon/helpers.ts +0 -74
  280. package/src/daemon/http/router-route-contexts.ts +0 -370
  281. package/src/daemon/http/router.ts +0 -531
  282. package/src/daemon/http-listener.ts +0 -301
  283. package/src/daemon/index.ts +0 -1
  284. package/src/daemon/server.ts +0 -1
  285. package/src/daemon/service-manager.ts +0 -413
  286. package/src/daemon/surface-actions.ts +0 -183
  287. package/src/daemon/surface-delivery.ts +0 -530
  288. package/src/daemon/surface-policy.ts +0 -60
  289. package/src/daemon/transport-events.ts +0 -110
  290. package/src/daemon/types.ts +0 -191
  291. package/src/export/markdown.ts +0 -213
  292. package/src/export/session-export.ts +0 -1
  293. package/src/git/index.ts +0 -1
  294. package/src/git/service.ts +0 -414
  295. package/src/hooks/chain-engine.ts +0 -414
  296. package/src/hooks/dispatcher.ts +0 -414
  297. package/src/hooks/hook-api.ts +0 -170
  298. package/src/hooks/index.ts +0 -48
  299. package/src/hooks/runners/agent.ts +0 -93
  300. package/src/hooks/runners/prompt.ts +0 -69
  301. package/src/hooks/workbench.ts +0 -360
  302. package/src/integrations/index.ts +0 -42
  303. package/src/integrations/notifier.ts +0 -206
  304. package/src/integrations/webhooks.ts +0 -1
  305. package/src/knowledge/consolidation.ts +0 -346
  306. package/src/knowledge/graphql.ts +0 -324
  307. package/src/knowledge/index.ts +0 -60
  308. package/src/knowledge/ingest-compile.ts +0 -386
  309. package/src/knowledge/ingest-context.ts +0 -18
  310. package/src/knowledge/ingest-inputs.ts +0 -387
  311. package/src/knowledge/ingest.ts +0 -1
  312. package/src/knowledge/internal.ts +0 -257
  313. package/src/knowledge/knowledge-api.ts +0 -432
  314. package/src/knowledge/lint.ts +0 -121
  315. package/src/knowledge/memory-sync.ts +0 -62
  316. package/src/knowledge/packet.ts +0 -370
  317. package/src/knowledge/scheduling.ts +0 -283
  318. package/src/knowledge/service.ts +0 -715
  319. package/src/mcp/client.ts +0 -383
  320. package/src/mcp/index.ts +0 -12
  321. package/src/mcp/mcp-api.ts +0 -90
  322. package/src/mcp/registry.ts +0 -1
  323. package/src/media/builtin-image-understanding.ts +0 -303
  324. package/src/media/builtin-providers.ts +0 -26
  325. package/src/media/index.ts +0 -18
  326. package/src/multimodal/index.ts +0 -13
  327. package/src/multimodal/service.ts +0 -492
  328. package/src/permissions/briefs/build.ts +0 -88
  329. package/src/permissions/manager.ts +0 -1
  330. package/src/plugins/api.ts +0 -383
  331. package/src/plugins/manager.ts +0 -481
  332. package/src/profiles/shape.ts +0 -58
  333. package/src/providers/amazon-bedrock-mantle.ts +0 -50
  334. package/src/providers/amazon-bedrock.ts +0 -61
  335. package/src/providers/anthropic-compat.ts +0 -373
  336. package/src/providers/anthropic-sdk-provider.ts +0 -230
  337. package/src/providers/anthropic-vertex.ts +0 -59
  338. package/src/providers/anthropic.ts +0 -469
  339. package/src/providers/auto-register.ts +0 -417
  340. package/src/providers/builtin-catalog.ts +0 -326
  341. package/src/providers/builtin-registry.ts +0 -575
  342. package/src/providers/cache-planner.ts +0 -258
  343. package/src/providers/capabilities.ts +0 -1
  344. package/src/providers/custom-loader.ts +0 -425
  345. package/src/providers/discovered-compat.ts +0 -7
  346. package/src/providers/discovered-factory.ts +0 -61
  347. package/src/providers/discovered-traits.ts +0 -138
  348. package/src/providers/gemini.ts +0 -462
  349. package/src/providers/github-copilot.ts +0 -254
  350. package/src/providers/index.ts +0 -1
  351. package/src/providers/interface.ts +0 -185
  352. package/src/providers/llama-cpp.ts +0 -402
  353. package/src/providers/lm-studio-helpers.ts +0 -367
  354. package/src/providers/lm-studio.ts +0 -484
  355. package/src/providers/model-catalog-cache.ts +0 -221
  356. package/src/providers/model-catalog-notifications.ts +0 -97
  357. package/src/providers/model-catalog-synthetic.ts +0 -202
  358. package/src/providers/model-catalog.ts +0 -211
  359. package/src/providers/model-limits.ts +0 -1
  360. package/src/providers/ollama.ts +0 -469
  361. package/src/providers/openai-codex.ts +0 -472
  362. package/src/providers/openai-compat.ts +0 -615
  363. package/src/providers/openai.ts +0 -231
  364. package/src/providers/optimizer.ts +0 -1
  365. package/src/providers/provider-api.ts +0 -1
  366. package/src/providers/registry-helpers.ts +0 -34
  367. package/src/providers/registry-models.ts +0 -77
  368. package/src/providers/registry-types.ts +0 -67
  369. package/src/providers/registry.ts +0 -1
  370. package/src/providers/runtime-metadata.ts +0 -149
  371. package/src/providers/runtime-snapshot.ts +0 -130
  372. package/src/providers/synthetic.ts +0 -561
  373. package/src/providers/tier-prompts.ts +0 -84
  374. package/src/providers/tool-formats.ts +0 -414
  375. package/src/runtime/auth/inspection.ts +0 -125
  376. package/src/runtime/bootstrap-background.ts +0 -157
  377. package/src/runtime/bootstrap-helpers.ts +0 -88
  378. package/src/runtime/bootstrap-runtime-events.ts +0 -254
  379. package/src/runtime/bootstrap-services.ts +0 -197
  380. package/src/runtime/compaction/index.ts +0 -1
  381. package/src/runtime/compaction/lifecycle.ts +0 -1
  382. package/src/runtime/compaction/manager.ts +0 -474
  383. package/src/runtime/compaction/quality-score.ts +0 -1
  384. package/src/runtime/compaction/resume-repair.ts +0 -1
  385. package/src/runtime/compaction/strategies/autocompact.ts +0 -1
  386. package/src/runtime/compaction/strategies/boundary-commit.ts +0 -1
  387. package/src/runtime/compaction/strategies/collapse.ts +0 -1
  388. package/src/runtime/compaction/strategies/index.ts +0 -1
  389. package/src/runtime/compaction/strategies/microcompact.ts +0 -1
  390. package/src/runtime/compaction/strategies/reactive.ts +0 -1
  391. package/src/runtime/compaction/types.ts +0 -1
  392. package/src/runtime/ecosystem/recommendations.ts +0 -117
  393. package/src/runtime/emitters/agents.ts +0 -96
  394. package/src/runtime/emitters/automation.ts +0 -112
  395. package/src/runtime/emitters/communication.ts +0 -53
  396. package/src/runtime/emitters/compaction.ts +0 -161
  397. package/src/runtime/emitters/control-plane.ts +0 -65
  398. package/src/runtime/emitters/deliveries.ts +0 -65
  399. package/src/runtime/emitters/forensics.ts +0 -17
  400. package/src/runtime/emitters/index.ts +0 -59
  401. package/src/runtime/emitters/knowledge.ts +0 -129
  402. package/src/runtime/emitters/mcp.ts +0 -95
  403. package/src/runtime/emitters/ops.ts +0 -163
  404. package/src/runtime/emitters/orchestration.ts +0 -87
  405. package/src/runtime/emitters/permissions.ts +0 -98
  406. package/src/runtime/emitters/planner.ts +0 -23
  407. package/src/runtime/emitters/plugins.ts +0 -78
  408. package/src/runtime/emitters/providers.ts +0 -30
  409. package/src/runtime/emitters/routes.ts +0 -57
  410. package/src/runtime/emitters/security.ts +0 -53
  411. package/src/runtime/emitters/session.ts +0 -93
  412. package/src/runtime/emitters/surfaces.ts +0 -57
  413. package/src/runtime/emitters/tasks.ts +0 -69
  414. package/src/runtime/emitters/tools.ts +0 -140
  415. package/src/runtime/emitters/transport.ts +0 -78
  416. package/src/runtime/emitters/turn.ts +0 -155
  417. package/src/runtime/emitters/ui.ts +0 -57
  418. package/src/runtime/emitters/watchers.ts +0 -57
  419. package/src/runtime/emitters/workflows.ts +0 -79
  420. package/src/runtime/eval/index.ts +0 -48
  421. package/src/runtime/eval/runner.ts +0 -163
  422. package/src/runtime/eval/suites.ts +0 -264
  423. package/src/runtime/events/domain-map.ts +0 -148
  424. package/src/runtime/events/index.ts +0 -1
  425. package/src/runtime/events/turn.ts +0 -1
  426. package/src/runtime/events/workflows.ts +0 -1
  427. package/src/runtime/forensics/collector.ts +0 -693
  428. package/src/runtime/forensics/index.ts +0 -23
  429. package/src/runtime/foundation-clients.ts +0 -78
  430. package/src/runtime/foundation-services.ts +0 -96
  431. package/src/runtime/guidance.ts +0 -183
  432. package/src/runtime/health/effect-handlers.ts +0 -189
  433. package/src/runtime/health/index.ts +0 -70
  434. package/src/runtime/health/wiring.ts +0 -115
  435. package/src/runtime/integration/helpers.ts +0 -640
  436. package/src/runtime/lifecycle.ts +0 -107
  437. package/src/runtime/mcp/index.ts +0 -68
  438. package/src/runtime/mcp/manager.ts +0 -513
  439. package/src/runtime/network/inbound.ts +0 -131
  440. package/src/runtime/network/index.ts +0 -30
  441. package/src/runtime/network/outbound.ts +0 -292
  442. package/src/runtime/network/shared.ts +0 -82
  443. package/src/runtime/operator-client.ts +0 -235
  444. package/src/runtime/ops/control-plane.ts +0 -363
  445. package/src/runtime/ops/index.ts +0 -122
  446. package/src/runtime/ops/playbooks/index.ts +0 -10
  447. package/src/runtime/ops/playbooks/session-unrecoverable.ts +0 -196
  448. package/src/runtime/ops/playbooks/stuck-turn.ts +0 -197
  449. package/src/runtime/ops/runtime-context.ts +0 -100
  450. package/src/runtime/ops-api.ts +0 -27
  451. package/src/runtime/orchestration/spawn-policy.ts +0 -83
  452. package/src/runtime/peer-client.ts +0 -404
  453. package/src/runtime/perf/index.ts +0 -57
  454. package/src/runtime/perf/slo-collector.ts +0 -375
  455. package/src/runtime/permissions/index.ts +0 -190
  456. package/src/runtime/permissions/policy-runtime.ts +0 -1
  457. package/src/runtime/permissions/preflight.ts +0 -101
  458. package/src/runtime/permissions/rule-suggestions.ts +0 -36
  459. package/src/runtime/plugins/hot-reload.ts +0 -221
  460. package/src/runtime/plugins/index.ts +0 -84
  461. package/src/runtime/plugins/lifecycle.ts +0 -95
  462. package/src/runtime/plugins/manager.ts +0 -474
  463. package/src/runtime/plugins/manifest.ts +0 -167
  464. package/src/runtime/plugins/quarantine.ts +0 -202
  465. package/src/runtime/plugins/trust.ts +0 -291
  466. package/src/runtime/plugins/types.ts +0 -205
  467. package/src/runtime/provider-accounts/registry.ts +0 -326
  468. package/src/runtime/remote/distributed-runtime-contract-schemas.ts +0 -386
  469. package/src/runtime/remote/index.ts +0 -488
  470. package/src/runtime/remote/runner-registry.ts +0 -438
  471. package/src/runtime/remote/supervisor.ts +0 -70
  472. package/src/runtime/runtime-hook-api.ts +0 -5
  473. package/src/runtime/runtime-knowledge-api.ts +0 -14
  474. package/src/runtime/runtime-mcp-api.ts +0 -5
  475. package/src/runtime/runtime-ops-api.ts +0 -86
  476. package/src/runtime/runtime-provider-api.ts +0 -18
  477. package/src/runtime/session-maintenance.ts +0 -188
  478. package/src/runtime/session-persistence.ts +0 -288
  479. package/src/runtime/session-return-context.ts +0 -195
  480. package/src/runtime/settings/control-plane-store.ts +0 -258
  481. package/src/runtime/settings/control-plane.ts +0 -599
  482. package/src/runtime/shell-command-extensions.ts +0 -54
  483. package/src/runtime/shell-command-ops.ts +0 -207
  484. package/src/runtime/shell-command-platform.ts +0 -47
  485. package/src/runtime/shell-command-services.ts +0 -143
  486. package/src/runtime/shell-command-workspace.ts +0 -31
  487. package/src/runtime/tasks/adapters/acp-adapter.ts +0 -211
  488. package/src/runtime/tasks/adapters/agent-adapter.ts +0 -208
  489. package/src/runtime/tasks/adapters/index.ts +0 -16
  490. package/src/runtime/tasks/adapters/process-adapter.ts +0 -214
  491. package/src/runtime/tasks/adapters/scheduler-adapter.ts +0 -193
  492. package/src/runtime/tasks/index.ts +0 -68
  493. package/src/runtime/tasks/manager.ts +0 -415
  494. package/src/runtime/telemetry/api-helpers.ts +0 -517
  495. package/src/runtime/telemetry/api.ts +0 -768
  496. package/src/runtime/telemetry/index.ts +0 -178
  497. package/src/runtime/telemetry/instrumentation/domain-bridge-agent-session.ts +0 -440
  498. package/src/runtime/telemetry/instrumentation/domain-bridge-plugin-mcp.ts +0 -200
  499. package/src/runtime/telemetry/instrumentation/domain-bridge-shared.ts +0 -18
  500. package/src/runtime/telemetry/instrumentation/domain-bridge-transport-task.ts +0 -204
  501. package/src/runtime/telemetry/instrumentation/domain-bridge.ts +0 -125
  502. package/src/runtime/telemetry/instrumentation/index.ts +0 -67
  503. package/src/runtime/tools/context.ts +0 -114
  504. package/src/runtime/tools/index.ts +0 -46
  505. package/src/runtime/tools/phased-executor.ts +0 -448
  506. package/src/runtime/tools/phases/budget.ts +0 -130
  507. package/src/runtime/tools/phases/execute.ts +0 -69
  508. package/src/runtime/tools/phases/index.ts +0 -13
  509. package/src/runtime/tools/phases/map-output.ts +0 -98
  510. package/src/runtime/tools/phases/permission.ts +0 -133
  511. package/src/runtime/tools/phases/posthook.ts +0 -57
  512. package/src/runtime/tools/phases/prehook.ts +0 -68
  513. package/src/runtime/tools/phases/validate.ts +0 -53
  514. package/src/runtime/transports/direct.ts +0 -73
  515. package/src/runtime/transports/http-helpers.ts +0 -218
  516. package/src/runtime/transports/http-types.ts +0 -364
  517. package/src/runtime/transports/http.ts +0 -629
  518. package/src/runtime/transports/realtime.ts +0 -50
  519. package/src/runtime/transports/remote-events.ts +0 -16
  520. package/src/runtime/transports/shared.ts +0 -39
  521. package/src/runtime/transports/ui-runtime-events.ts +0 -35
  522. package/src/runtime/ui-read-models-core.ts +0 -95
  523. package/src/runtime/ui-read-models-operations.ts +0 -203
  524. package/src/runtime/worktree/registry.ts +0 -252
  525. package/src/sessions/manager.ts +0 -14
  526. package/src/state/file-watcher.ts +0 -294
  527. package/src/state/index.ts +0 -56
  528. package/src/state/knowledge-injection.ts +0 -214
  529. package/src/state/memory-embedding-http.ts +0 -642
  530. package/src/state/memory-embeddings.ts +0 -312
  531. package/src/state/memory-ingest.ts +0 -132
  532. package/src/state/memory-registry.ts +0 -111
  533. package/src/state/memory-store-helpers.ts +0 -160
  534. package/src/state/memory-store.ts +0 -728
  535. package/src/state/memory-vector-store.ts +0 -418
  536. package/src/templates/manager.ts +0 -187
  537. package/src/tools/agent/index.ts +0 -610
  538. package/src/tools/agent/manager.ts +0 -476
  539. package/src/tools/analyze/git-modes.ts +0 -380
  540. package/src/tools/analyze/index.ts +0 -128
  541. package/src/tools/channel/agent-tools.ts +0 -16
  542. package/src/tools/channel/index.ts +0 -268
  543. package/src/tools/control/index.ts +0 -90
  544. package/src/tools/edit/core.ts +0 -619
  545. package/src/tools/edit/index.ts +0 -4
  546. package/src/tools/edit/phased.ts +0 -33
  547. package/src/tools/fetch/index.ts +0 -3
  548. package/src/tools/fetch/phased.ts +0 -34
  549. package/src/tools/fetch/runtime.ts +0 -499
  550. package/src/tools/mcp/index.ts +0 -190
  551. package/src/tools/remote-trigger/index.ts +0 -130
  552. package/src/tools/shared/auto-heal.ts +0 -282
  553. package/src/tools/state/index.ts +0 -688
  554. package/src/tools/web-search/index.ts +0 -38
  555. package/src/tools/write/index.ts +0 -604
  556. package/src/tools/write/phased.ts +0 -41
  557. package/src/types/generated/foundation-client-types.ts +0 -22
  558. package/src/watchers/index.ts +0 -11
  559. package/src/watchers/registry.ts +0 -517
  560. package/src/web-search/index.ts +0 -26
  561. package/src/web-search/provider-registry.ts +0 -64
  562. package/src/web-search/providers/brave.ts +0 -100
  563. package/src/web-search/providers/duckduckgo.ts +0 -270
  564. package/src/web-search/providers/exa.ts +0 -77
  565. package/src/web-search/providers/firecrawl.ts +0 -90
  566. package/src/web-search/providers/perplexity.ts +0 -86
  567. package/src/web-search/providers/searxng.ts +0 -88
  568. package/src/web-search/providers/shared.ts +0 -249
  569. package/src/web-search/providers/tavily.ts +0 -90
  570. package/src/web-search/service.ts +0 -142
@@ -1,84 +0,0 @@
1
- /**
2
- * Tier-based system prompt supplements.
3
- *
4
- * Model capability tiers drive how much extra guidance is injected into
5
- * the system prompt. All features remain available regardless of tier;
6
- * only the verbosity of the guidance changes.
7
- */
8
-
9
- import type { ModelTier } from '@pellux/goodvibes-sdk/platform/providers/registry';
10
- export type { ModelTier };
11
-
12
- /**
13
- * Derive the model tier from a model's context window size.
14
- *
15
- * - small (<32K) → 'free' (needs most guidance)
16
- * - medium (32K–128K) → 'standard' (brief reminders)
17
- * - large (>128K) → 'premium' (no extra guidance needed)
18
- *
19
- * This is used instead of the static ModelDefinition.tier field so that
20
- * tier-prompt selection is driven by actual model capabilities.
21
- */
22
- export function getTierForContextWindow(contextWindow: number): ModelTier {
23
- if (contextWindow > 128_000) return 'premium';
24
- if (contextWindow >= 32_000) return 'standard';
25
- return 'free';
26
- }
27
-
28
- /**
29
- * Returns supplemental system prompt content based on the model's capability
30
- * tier. The returned string is appended to the base system prompt before
31
- * each LLM call.
32
- *
33
- * - free — explicit tool-call examples, multi-agent reminders, structured
34
- * output enforcement (~300 tokens)
35
- * - standard — brief reminders about tool usage and plan adherence (~80 tokens)
36
- * - premium — empty; capable models need no extra hand-holding
37
- */
38
- export function getTierPromptSupplement(tier: ModelTier): string {
39
- switch (tier) {
40
- case 'free':
41
- return FREE_SUPPLEMENT;
42
- case 'standard':
43
- return STANDARD_SUPPLEMENT;
44
- case 'premium':
45
- return '';
46
- case 'subscription':
47
- return '';
48
- }
49
- }
50
-
51
- // ---------------------------------------------------------------------------
52
- // Supplement text
53
- // ---------------------------------------------------------------------------
54
-
55
- const FREE_SUPPLEMENT = `## Agent Guidance
56
-
57
- You are operating in a multi-agent system. Follow these rules carefully:
58
-
59
- **Tool calls — required format:**
60
- Every tool call must include ALL required parameters. Missing parameters cause
61
- silent failures. When in doubt, check the tool's schema before calling it.
62
-
63
- Example — correct agent spawn:
64
- \`\`\`json
65
- { "name": "agent", "input": { "task": "<task>", "mode": "engineer" } }
66
- \`\`\`
67
-
68
- **Multi-agent workflows:**
69
- When a plan requires multiple parallel agents, spawn ALL of them before
70
- waiting for results — do not spawn one, wait, then spawn the next. Parallel
71
- spawns run concurrently and complete faster.
72
-
73
- **Structured output:**
74
- Your final message MUST end with the required JSON completion block. Omitting
75
- it causes the orchestrator to treat your run as failed.
76
-
77
- **Plan adherence:**
78
- Complete the full plan. Do not stop after the first step and ask for
79
- confirmation — there is no human watching. Make the best choice and continue.`;
80
-
81
- const STANDARD_SUPPLEMENT = `## Reminders
82
- - Include all required parameters in every tool call.
83
- - When spawning agents, use the correct \`mode\` parameter.
84
- - Complete your full plan before reporting results.`;
@@ -1,414 +0,0 @@
1
- import type { ToolDefinition, ToolCall } from '@pellux/goodvibes-sdk/platform/types/tools';
2
- import type { ProviderMessage, ContentPart } from '@pellux/goodvibes-sdk/platform/providers/interface';
3
- import { logger } from '@pellux/goodvibes-sdk/platform/utils/logger';
4
- import { summarizeError } from '@pellux/goodvibes-sdk/platform/utils/error-display';
5
-
6
- // ---------------------------------------------------------------------------
7
- // OpenAI wire format
8
- // ---------------------------------------------------------------------------
9
-
10
- export interface OpenAITool {
11
- type: 'function';
12
- function: {
13
- name: string;
14
- description: string;
15
- parameters: Record<string, unknown>;
16
- };
17
- }
18
-
19
- export interface OpenAIToolCall {
20
- id: string;
21
- type: 'function';
22
- function: { name: string; arguments: string };
23
- }
24
-
25
- export type OpenAIContentPart =
26
- | { type: 'text'; text: string }
27
- | { type: 'image_url'; image_url: { url: string } };
28
-
29
- export interface OpenAIMessage {
30
- role: 'system' | 'user' | 'assistant' | 'tool';
31
- content: string | OpenAIContentPart[] | null;
32
- tool_calls?: OpenAIToolCall[];
33
- tool_call_id?: string;
34
- }
35
-
36
- /** Convert internal ToolDefinitions to OpenAI tools array. */
37
- export function toOpenAITools(tools: ToolDefinition[]): OpenAITool[] {
38
- return tools.map((t) => ({
39
- type: 'function',
40
- function: {
41
- name: t.name,
42
- description: t.description,
43
- parameters: t.parameters,
44
- },
45
- }));
46
- }
47
-
48
- /** Parse OpenAI tool_calls from a response into internal ToolCall[]. */
49
- export function fromOpenAIToolCalls(calls: OpenAIToolCall[]): ToolCall[] {
50
- return calls.map((c) => ({
51
- id: c.id,
52
- name: c.function.name,
53
- arguments: parseJson(c.function.arguments),
54
- }));
55
- }
56
-
57
- /** Convert internal ProviderMessages to OpenAI message array. */
58
- export function toOpenAIMessages(
59
- messages: ProviderMessage[],
60
- systemPrompt?: string,
61
- ): OpenAIMessage[] {
62
- const result: OpenAIMessage[] = [];
63
-
64
- if (systemPrompt) {
65
- result.push({ role: 'system', content: systemPrompt });
66
- }
67
-
68
- for (const msg of messages) {
69
- if (msg.role === 'user') {
70
- if (Array.isArray(msg.content)) {
71
- // ContentPart[] — convert to OpenAI multimodal parts
72
- const parts: OpenAIContentPart[] = msg.content.map((part: ContentPart) => {
73
- if (part.type === 'text') return { type: 'text', text: part.text };
74
- return { type: 'image_url', image_url: { url: `data:${part.mediaType};base64,${part.data}` } };
75
- });
76
- result.push({ role: 'user', content: parts });
77
- } else {
78
- result.push({ role: 'user', content: msg.content });
79
- }
80
- } else if (msg.role === 'assistant') {
81
- const m: OpenAIMessage = { role: 'assistant', content: msg.content ?? '' };
82
- if (msg.toolCalls && msg.toolCalls.length > 0) {
83
- m.tool_calls = msg.toolCalls.map((tc) => ({
84
- id: tc.id,
85
- type: 'function',
86
- function: { name: tc.name, arguments: JSON.stringify(tc.arguments) },
87
- }));
88
- }
89
- result.push(m);
90
- } else if (msg.role === 'tool') {
91
- result.push({
92
- role: 'tool',
93
- content: msg.content,
94
- tool_call_id: msg.callId,
95
- });
96
- }
97
- }
98
-
99
- return result;
100
- }
101
-
102
- // ---------------------------------------------------------------------------
103
- // Anthropic wire format
104
- // ---------------------------------------------------------------------------
105
-
106
- export interface AnthropicTool {
107
- name: string;
108
- description: string;
109
- input_schema: Record<string, unknown>;
110
- }
111
-
112
- export type AnthropicContentBlock =
113
- | { type: 'text'; text: string }
114
- | { type: 'image'; source: { type: 'base64'; media_type: 'image/png' | 'image/jpeg' | 'image/gif' | 'image/webp'; data: string } }
115
- | { type: 'tool_use'; id: string; name: string; input: Record<string, unknown> }
116
- | { type: 'tool_result'; tool_use_id: string; content: string };
117
-
118
- export interface AnthropicMessage {
119
- role: 'user' | 'assistant';
120
- content: string | AnthropicContentBlock[];
121
- }
122
-
123
- /** Convert internal ToolDefinitions to Anthropic tools array. */
124
- export function toAnthropicTools(tools: ToolDefinition[]): AnthropicTool[] {
125
- return tools.map((t) => ({
126
- name: t.name,
127
- description: t.description,
128
- input_schema: t.parameters,
129
- }));
130
- }
131
-
132
- /** Parse Anthropic response content blocks into text + ToolCall[]. */
133
- export function fromAnthropicContent(content: AnthropicContentBlock[]): {
134
- text: string;
135
- toolCalls: ToolCall[];
136
- } {
137
- let text = '';
138
- const toolCalls: ToolCall[] = [];
139
-
140
- for (const block of content) {
141
- if (block.type === 'text') {
142
- text += block.text;
143
- } else if (block.type === 'tool_use') {
144
- toolCalls.push({ id: block.id, name: block.name, arguments: block.input });
145
- }
146
- }
147
-
148
- return { text, toolCalls };
149
- }
150
-
151
- /** Convert internal ProviderMessages to Anthropic message array. */
152
- export function toAnthropicMessages(messages: ProviderMessage[]): AnthropicMessage[] {
153
- const result: AnthropicMessage[] = [];
154
-
155
- // Collect consecutive tool results to merge into one user message
156
- let pendingToolResults: AnthropicContentBlock[] = [];
157
-
158
- function flushToolResults(): void {
159
- if (pendingToolResults.length > 0) {
160
- result.push({ role: 'user', content: pendingToolResults });
161
- pendingToolResults = [];
162
- }
163
- }
164
-
165
- for (const msg of messages) {
166
- if (msg.role === 'user') {
167
- flushToolResults();
168
- if (Array.isArray(msg.content)) {
169
- // ContentPart[] — convert to Anthropic content blocks
170
- const blocks: AnthropicContentBlock[] = msg.content.map((part: ContentPart) => {
171
- if (part.type === 'text') return { type: 'text' as const, text: part.text };
172
- return {
173
- type: 'image' as const,
174
- source: { type: 'base64' as const, media_type: part.mediaType as 'image/png' | 'image/jpeg' | 'image/gif' | 'image/webp', data: part.data },
175
- };
176
- });
177
- result.push({ role: 'user', content: blocks });
178
- } else {
179
- result.push({ role: 'user', content: msg.content });
180
- }
181
- } else if (msg.role === 'assistant') {
182
- flushToolResults();
183
- if (msg.toolCalls && msg.toolCalls.length > 0) {
184
- const blocks: AnthropicContentBlock[] = [];
185
- if (msg.content) blocks.push({ type: 'text', text: msg.content });
186
- for (const tc of msg.toolCalls) {
187
- blocks.push({ type: 'tool_use', id: tc.id, name: tc.name, input: tc.arguments });
188
- }
189
- result.push({ role: 'assistant', content: blocks });
190
- } else {
191
- result.push({ role: 'assistant', content: msg.content });
192
- }
193
- } else if (msg.role === 'tool') {
194
- pendingToolResults.push({
195
- type: 'tool_result',
196
- tool_use_id: msg.callId,
197
- content: msg.content,
198
- });
199
- }
200
- }
201
-
202
- flushToolResults();
203
- return result;
204
- }
205
-
206
- // ---------------------------------------------------------------------------
207
- // Gemini wire format
208
- // ---------------------------------------------------------------------------
209
-
210
- export interface GeminiFunctionDeclaration {
211
- name: string;
212
- description: string;
213
- parameters: Record<string, unknown>;
214
- }
215
-
216
- export interface GeminiPart {
217
- text?: string;
218
- inlineData?: { mimeType: string; data: string };
219
- functionCall?: { name: string; args: Record<string, unknown> };
220
- functionResponse?: { name: string; response: { content: string } };
221
- }
222
-
223
- export interface GeminiContent {
224
- role: 'user' | 'model';
225
- parts: GeminiPart[];
226
- }
227
-
228
- /** Strip properties that Gemini's API doesn't support (e.g. additionalProperties). */
229
- function stripUnsupportedProperties(obj: unknown): unknown {
230
- if (Array.isArray(obj)) return obj.map(stripUnsupportedProperties);
231
- if (obj !== null && typeof obj === 'object') {
232
- const result: Record<string, unknown> = {};
233
- for (const [key, value] of Object.entries(obj as Record<string, unknown>)) {
234
- if (key === 'additionalProperties') continue;
235
- result[key] = stripUnsupportedProperties(value);
236
- }
237
- return result;
238
- }
239
- return obj;
240
- }
241
-
242
- /** Convert internal ToolDefinitions to Gemini functionDeclarations. */
243
- export function toGeminiFunctionDeclarations(
244
- tools: ToolDefinition[],
245
- ): GeminiFunctionDeclaration[] {
246
- return tools.map((t) => ({
247
- name: t.name,
248
- description: t.description,
249
- parameters: stripUnsupportedProperties(t.parameters) as Record<string, unknown>,
250
- }));
251
- }
252
-
253
- /** Parse Gemini response parts into text + ToolCall[]. */
254
- export function fromGeminiParts(parts: GeminiPart[]): {
255
- text: string;
256
- toolCalls: ToolCall[];
257
- } {
258
- let text = '';
259
- const toolCalls: ToolCall[] = [];
260
-
261
- for (const part of parts) {
262
- if (part.text) {
263
- text += part.text;
264
- } else if (part.functionCall) {
265
- toolCalls.push({
266
- id: crypto.randomUUID(),
267
- name: part.functionCall.name,
268
- arguments: part.functionCall.args,
269
- });
270
- }
271
- }
272
-
273
- return { text, toolCalls };
274
- }
275
-
276
- /** Convert internal ProviderMessages to Gemini contents array. */
277
- export function toGeminiContents(
278
- messages: ProviderMessage[],
279
- systemPrompt?: string,
280
- ): { contents: GeminiContent[]; systemInstruction?: { parts: GeminiPart[] } } {
281
- const contents: GeminiContent[] = [];
282
- const systemInstruction = systemPrompt
283
- ? { parts: [{ text: systemPrompt }] }
284
- : undefined;
285
-
286
- let pendingFunctionResponses: GeminiPart[] = [];
287
-
288
- function flushFunctionResponses(): void {
289
- if (pendingFunctionResponses.length > 0) {
290
- contents.push({ role: 'user', parts: pendingFunctionResponses });
291
- pendingFunctionResponses = [];
292
- }
293
- }
294
-
295
- for (const msg of messages) {
296
- if (msg.role === 'user') {
297
- flushFunctionResponses();
298
- if (Array.isArray(msg.content)) {
299
- // ContentPart[] — convert to Gemini parts
300
- const parts: GeminiPart[] = msg.content.map((part: ContentPart) => {
301
- if (part.type === 'text') return { text: part.text };
302
- return { inlineData: { mimeType: part.mediaType, data: part.data } };
303
- });
304
- contents.push({ role: 'user', parts });
305
- } else {
306
- contents.push({ role: 'user', parts: [{ text: msg.content }] });
307
- }
308
- } else if (msg.role === 'assistant') {
309
- flushFunctionResponses();
310
- const parts: GeminiPart[] = [];
311
- if (msg.content) parts.push({ text: msg.content });
312
- if (msg.toolCalls) {
313
- for (const tc of msg.toolCalls) {
314
- parts.push({ functionCall: { name: tc.name, args: tc.arguments } });
315
- }
316
- }
317
- contents.push({ role: 'model', parts });
318
- } else if (msg.role === 'tool') {
319
- pendingFunctionResponses.push({
320
- functionResponse: {
321
- name: msg.name ?? msg.callId,
322
- response: { content: msg.content },
323
- },
324
- });
325
- }
326
- }
327
-
328
- flushFunctionResponses();
329
- return { contents, systemInstruction };
330
- }
331
-
332
- // ---------------------------------------------------------------------------
333
- // Text-based tool call extraction (for models that emit tool calls as tokens)
334
- // ---------------------------------------------------------------------------
335
-
336
- /**
337
- * Extracts tool calls from raw text content for models (e.g. kimi-k2-thinking
338
- * via ollama-cloud) that emit tool calls as text tokens instead of using the
339
- * OpenAI function-calling wire format.
340
- *
341
- * Supports two delimiter formats (both emitted by kimi variants):
342
- * Without underscores: <|toolcallbegin|>functions.TOOLNAME:INDEX<|toolcallargumentbegin|>JSON_ARGS<|toolcallend|>
343
- * With underscores: <|tool_call_begin|>functions.TOOLNAME:INDEX<|tool_call_argument_begin|>JSON_ARGS<|tool_call_end|>
344
- *
345
- * A trailing <|tool_calls_section_end|> or <|toolcallssectionend|> is also
346
- * stripped from the cleaned content.
347
- *
348
- * @returns Extracted ToolCall array and the content with all tool-call tokens
349
- * removed (trimmed). Returns empty array when no text-based calls are found.
350
- */
351
- export function extractTextToolCalls(content: string): {
352
- toolCalls: ToolCall[];
353
- cleanedContent: string;
354
- } {
355
- // Fast path: skip regex work when neither sentinel variant is present
356
- if (!content.includes('<|toolcallbegin|>') && !content.includes('<|tool_call_begin|>')) {
357
- return { toolCalls: [], cleanedContent: content };
358
- }
359
-
360
- // Match both delimiter variants using optional underscores.
361
- // The `.*?` lazy match with /s is safe here: backtracking is bounded by
362
- // the end delimiter, which appears within kilobytes of the argument-begin
363
- // delimiter — the span of a single tool call's JSON args.
364
- // kimi is the known model that emits these delimiter formats.
365
- const pattern =
366
- /<\|tool_?call_?begin\|>functions\.([^:]+):\d+<\|tool_?call_?argument_?begin\|>(.*?)<\|tool_?call_?end\|>/gs;
367
-
368
- const toolCalls: ToolCall[] = [];
369
- // Build cleaned content in a single pass by collecting match spans,
370
- // avoiding a second regex execution over the same string.
371
- const segments: string[] = [];
372
- let lastEnd = 0;
373
- let index = 0;
374
-
375
- for (const match of content.matchAll(pattern)) {
376
- const matchStart = match.index!;
377
- const matchEnd = matchStart + match[0].length;
378
- // Collect the text before this match
379
- segments.push(content.slice(lastEnd, matchStart));
380
- lastEnd = matchEnd;
381
-
382
- const toolName = match[1];
383
- const rawArgs = match[2];
384
- toolCalls.push({
385
- id: `text-call-${index}`,
386
- name: toolName,
387
- arguments: parseJson(rawArgs),
388
- });
389
- index++;
390
- }
391
- // Append any trailing text after the last match
392
- segments.push(content.slice(lastEnd));
393
-
394
- // Strip section-end sentinels (both variants) and trim
395
- const cleanedContent = segments
396
- .join('')
397
- .replace(/<\|tool_?calls_?section_?end\|>/g, '')
398
- .trim();
399
-
400
- return { toolCalls, cleanedContent };
401
- }
402
-
403
- // ---------------------------------------------------------------------------
404
- // Shared helper
405
- // ---------------------------------------------------------------------------
406
-
407
- function parseJson(raw: string): Record<string, unknown> {
408
- try {
409
- return JSON.parse(raw) as Record<string, unknown>;
410
- } catch (err) {
411
- logger.warn('tool-formats: failed to parse JSON tool arguments', { error: summarizeError(err) });
412
- return {};
413
- }
414
- }
@@ -1,125 +0,0 @@
1
- import { SecretsManager } from '../../config/secrets.ts';
2
- import { ServiceRegistry } from '../../config/service-registry.ts';
3
- import { SubscriptionManager, type ProviderSubscription } from '@pellux/goodvibes-sdk/platform/config/subscriptions';
4
- import { getSubscriptionProviderConfig } from '../../config/subscription-providers.ts';
5
-
6
- export type AuthInspectionFreshness = 'healthy' | 'expiring' | 'expired' | 'pending' | 'available' | 'unconfigured';
7
-
8
- export interface ProviderAuthInspection {
9
- readonly provider: string;
10
- readonly configured: boolean;
11
- readonly source?: 'service' | 'builtin';
12
- readonly freshness: AuthInspectionFreshness;
13
- readonly redirectUri?: string;
14
- readonly callbackMode: 'local' | 'manual';
15
- readonly localCallback?: string;
16
- readonly activeSubscription: boolean;
17
- readonly pendingLogin: boolean;
18
- readonly overrideAmbientApiKeys: boolean;
19
- readonly tokenType?: string;
20
- readonly expiresAt?: number;
21
- readonly issues: readonly string[];
22
- readonly nextActions: readonly string[];
23
- }
24
-
25
- export interface AuthInspectionSnapshot {
26
- readonly generatedAt: number;
27
- readonly secretKeyCount: number;
28
- readonly activeSubscriptions: number;
29
- readonly pendingSubscriptions: number;
30
- readonly providers: readonly ProviderAuthInspection[];
31
- }
32
-
33
- export interface AuthInspectionDeps {
34
- readonly serviceRegistry: Pick<ServiceRegistry, 'get' | 'getAll'>;
35
- readonly subscriptionManager: Pick<SubscriptionManager, 'get' | 'getPending' | 'list' | 'listPending'>;
36
- readonly secretsManager: Pick<SecretsManager, 'list'>;
37
- }
38
-
39
- function determineFreshness(subscription: ProviderSubscription | null, pending: boolean, configured: boolean): AuthInspectionFreshness {
40
- if (pending) return 'pending';
41
- if (!subscription) return configured ? 'available' : 'unconfigured';
42
- if (typeof subscription.expiresAt !== 'number' || !Number.isFinite(subscription.expiresAt)) return 'healthy';
43
- if (subscription.expiresAt <= Date.now()) return 'expired';
44
- if (subscription.expiresAt <= Date.now() + 24 * 60 * 60 * 1000) return 'expiring';
45
- return 'healthy';
46
- }
47
-
48
- export async function inspectProviderAuth(
49
- provider: string,
50
- deps: AuthInspectionDeps,
51
- ): Promise<ProviderAuthInspection> {
52
- const service = deps.serviceRegistry.get(provider);
53
- const resolved = getSubscriptionProviderConfig(provider, service);
54
- const subscription = deps.subscriptionManager.get(provider);
55
- const pending = deps.subscriptionManager.getPending(provider);
56
- const configured = resolved != null;
57
- const freshness = determineFreshness(subscription, pending != null, configured);
58
- const issues: string[] = [];
59
- const nextActions: string[] = [];
60
-
61
- if (!configured) {
62
- issues.push('No provider OAuth configuration is available.');
63
- nextActions.push(`Add provider OAuth config or a built-in adapter before using /subscription login ${provider} start.`);
64
- }
65
- if (freshness === 'expired') {
66
- issues.push('Stored provider session is expired.');
67
- nextActions.push(`Refresh or replace the stored ${provider} session.`);
68
- } else if (freshness === 'expiring') {
69
- issues.push('Stored provider session expires within 24 hours.');
70
- nextActions.push(`Verify or renew the stored ${provider} session soon.`);
71
- } else if (freshness === 'pending') {
72
- issues.push('OAuth login has started but has not been completed.');
73
- nextActions.push(`Finish /subscription login ${provider} finish <code-or-url>.`);
74
- } else if (freshness === 'available') {
75
- nextActions.push(`Start /subscription login ${provider} start to create a stored session.`);
76
- }
77
-
78
- const callbackMode = resolved?.oauth.localCallback ? 'local' : 'manual';
79
- const localCallback = resolved?.oauth.localCallback
80
- ? `${resolved.oauth.localCallback.host ?? 'localhost'}:${resolved.oauth.localCallback.port ?? 80}${resolved.oauth.localCallback.path ?? '/'}`
81
- : undefined;
82
-
83
- return Object.freeze({
84
- provider,
85
- configured,
86
- ...(resolved ? { source: resolved.source } : {}),
87
- freshness,
88
- ...(resolved ? { redirectUri: resolved.oauth.redirectUri } : {}),
89
- callbackMode,
90
- ...(localCallback ? { localCallback } : {}),
91
- activeSubscription: subscription != null,
92
- pendingLogin: pending != null,
93
- overrideAmbientApiKeys: subscription?.overrideAmbientApiKeys ?? false,
94
- ...(subscription?.tokenType ? { tokenType: subscription.tokenType } : {}),
95
- ...(subscription?.expiresAt ? { expiresAt: subscription.expiresAt } : {}),
96
- issues,
97
- nextActions,
98
- });
99
- }
100
-
101
- export async function buildAuthInspectionSnapshot(
102
- deps: AuthInspectionDeps,
103
- ): Promise<AuthInspectionSnapshot> {
104
- const secrets = await deps.secretsManager.list();
105
- const services = deps.serviceRegistry.getAll();
106
- const providerIds = new Set<string>([
107
- ...Object.values(services)
108
- .filter((service) => service.authType === 'oauth' && service.oauth)
109
- .map((service) => service.providerId ?? service.name),
110
- ...deps.subscriptionManager.list().map((entry) => entry.provider),
111
- ...deps.subscriptionManager.listPending().map((entry) => entry.provider),
112
- ]);
113
- const providers = await Promise.all(
114
- [...providerIds]
115
- .sort((a, b) => a.localeCompare(b))
116
- .map((provider) => inspectProviderAuth(provider, deps)),
117
- );
118
- return Object.freeze({
119
- generatedAt: Date.now(),
120
- secretKeyCount: secrets.length,
121
- activeSubscriptions: deps.subscriptionManager.list().length,
122
- pendingSubscriptions: deps.subscriptionManager.listPending().length,
123
- providers,
124
- });
125
- }