@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,776 @@
1
+ /**
2
+ * Diagnostics action system — action dispatch bindings for diagnostic entries.
3
+ *
4
+ * Defines the action types, permission model, and dispatcher that allow
5
+ * one-click remediation from the diagnostics UI. Actions are attached to
6
+ * high-severity diagnostic entries and dispatched through this system,
7
+ * which validates permissions before delegating to the appropriate handler.
8
+ *
9
+ * Supported action targets:
10
+ * - Load replay: loads a forensics run into the replay engine
11
+ * - Run policy simulation: triggers a simulation pass for a tool call
12
+ * - Jump to task: navigates the UI focus to a related task entry
13
+ * - Jump to agent: navigates the UI focus to a related agent entry
14
+ * - Jump to tool call: navigates the UI focus to a related tool call entry
15
+ */
16
+ import { logger } from '@pellux/goodvibes-sdk/platform/utils/logger';
17
+ import type { DeterministicReplayEngine } from '@pellux/goodvibes-sdk/platform/core/deterministic-replay';
18
+ import type { PermissionSimulator } from '@pellux/goodvibes-sdk/platform/runtime/permissions/simulation';
19
+ import type { OpsControlPlane } from '../ops/control-plane.ts';
20
+ import { summarizeError } from '@pellux/goodvibes-sdk/platform/utils/error-display';
21
+
22
+ // ── Action type union ─────────────────────────────────────────────────────────
23
+
24
+ /**
25
+ * Discriminated union of all action kinds that can be attached to a
26
+ * diagnostic entry.
27
+ */
28
+ export type DiagnosticActionType =
29
+ | 'load-replay'
30
+ | 'run-policy-simulation'
31
+ | 'jump-to-task'
32
+ | 'jump-to-agent'
33
+ | 'jump-to-tool-call'
34
+ | 'retry-task'
35
+ | 'cancel-task'
36
+ | 'cancel-agent';
37
+
38
+ // ── Permission tiers ──────────────────────────────────────────────────────────
39
+
40
+ /**
41
+ * Permission tier required to dispatch an action.
42
+ *
43
+ * - `read` — read-only navigation; no state mutation.
44
+ * - `operator` — state-mutating actions available to operators.
45
+ * - `admin` — destructive or sensitive actions requiring elevated access.
46
+ */
47
+ export type DiagnosticActionPermission = 'read' | 'operator' | 'admin';
48
+
49
+ // ── Action payload shapes ─────────────────────────────────────────────────────
50
+
51
+ export interface LoadReplayPayload {
52
+ readonly runId: string;
53
+ }
54
+
55
+ export interface RunPolicySimulationPayload {
56
+ readonly toolName: string;
57
+ readonly args: Record<string, unknown>;
58
+ }
59
+
60
+ export interface JumpToTaskPayload {
61
+ readonly taskId: string;
62
+ }
63
+
64
+ export interface JumpToAgentPayload {
65
+ readonly agentId: string;
66
+ }
67
+
68
+ export interface JumpToToolCallPayload {
69
+ readonly callId: string;
70
+ }
71
+
72
+ export interface RetryTaskPayload {
73
+ readonly taskId: string;
74
+ readonly note?: string;
75
+ }
76
+
77
+ export interface CancelTaskPayload {
78
+ readonly taskId: string;
79
+ readonly note?: string;
80
+ }
81
+
82
+ export interface CancelAgentPayload {
83
+ readonly agentId: string;
84
+ readonly note?: string;
85
+ }
86
+
87
+ export type DiagnosticActionPayload =
88
+ | LoadReplayPayload
89
+ | RunPolicySimulationPayload
90
+ | JumpToTaskPayload
91
+ | JumpToAgentPayload
92
+ | JumpToToolCallPayload
93
+ | RetryTaskPayload
94
+ | CancelTaskPayload
95
+ | CancelAgentPayload;
96
+
97
+ // ── Action binding ────────────────────────────────────────────────────────────
98
+
99
+ /** Load-replay action. */
100
+ export interface LoadReplayAction {
101
+ readonly type: 'load-replay';
102
+ readonly permission: DiagnosticActionPermission;
103
+ readonly label: string;
104
+ readonly payload: LoadReplayPayload;
105
+ }
106
+
107
+ /** Run-policy-simulation action. */
108
+ export interface RunPolicySimulationAction {
109
+ readonly type: 'run-policy-simulation';
110
+ readonly permission: DiagnosticActionPermission;
111
+ readonly label: string;
112
+ readonly payload: RunPolicySimulationPayload;
113
+ }
114
+
115
+ /** Jump-to-task action. */
116
+ export interface JumpToTaskAction {
117
+ readonly type: 'jump-to-task';
118
+ readonly permission: DiagnosticActionPermission;
119
+ readonly label: string;
120
+ readonly payload: JumpToTaskPayload;
121
+ }
122
+
123
+ /** Jump-to-agent action. */
124
+ export interface JumpToAgentAction {
125
+ readonly type: 'jump-to-agent';
126
+ readonly permission: DiagnosticActionPermission;
127
+ readonly label: string;
128
+ readonly payload: JumpToAgentPayload;
129
+ }
130
+
131
+ /** Jump-to-tool-call action. */
132
+ export interface JumpToToolCallAction {
133
+ readonly type: 'jump-to-tool-call';
134
+ readonly permission: DiagnosticActionPermission;
135
+ readonly label: string;
136
+ readonly payload: JumpToToolCallPayload;
137
+ }
138
+
139
+ /** Retry-task action. */
140
+ export interface RetryTaskAction {
141
+ readonly type: 'retry-task';
142
+ readonly permission: DiagnosticActionPermission;
143
+ readonly label: string;
144
+ readonly payload: RetryTaskPayload;
145
+ }
146
+
147
+ /** Cancel-task action. */
148
+ export interface CancelTaskAction {
149
+ readonly type: 'cancel-task';
150
+ readonly permission: DiagnosticActionPermission;
151
+ readonly label: string;
152
+ readonly payload: CancelTaskPayload;
153
+ }
154
+
155
+ /** Cancel-agent action. */
156
+ export interface CancelAgentAction {
157
+ readonly type: 'cancel-agent';
158
+ readonly permission: DiagnosticActionPermission;
159
+ readonly label: string;
160
+ readonly payload: CancelAgentPayload;
161
+ }
162
+
163
+ /**
164
+ * Discriminated union of all actionable bindings that can be attached to a
165
+ * diagnostic entry. TypeScript narrows the payload type via the `type`
166
+ * discriminant, eliminating the need for unsafe `as` casts in the dispatcher.
167
+ */
168
+ export type DiagnosticAction =
169
+ | LoadReplayAction
170
+ | RunPolicySimulationAction
171
+ | JumpToTaskAction
172
+ | JumpToAgentAction
173
+ | JumpToToolCallAction
174
+ | RetryTaskAction
175
+ | CancelTaskAction
176
+ | CancelAgentAction;
177
+
178
+ // ── High-severity diagnostic entry ───────────────────────────────────────────
179
+
180
+ /**
181
+ * A high-severity diagnostic entry with attached remediation actions.
182
+ *
183
+ * The acceptance criterion requires every high-severity diagnostic to have
184
+ * at least one remediation action. Callers that produce `HighSeverityDiagnostic`
185
+ * values must always supply a non-empty `actions` array.
186
+ */
187
+ export interface HighSeverityDiagnostic {
188
+ /** Unique entry identifier (correlation ID). */
189
+ readonly id: string;
190
+ /** Short human-readable description of the problem. */
191
+ readonly summary: string;
192
+ /** Domain this diagnostic originates from. */
193
+ readonly domain: string;
194
+ /** Severity — always 'error' or 'warn' for high-severity entries. */
195
+ readonly severity: 'error' | 'warn';
196
+ /** Epoch ms when this diagnostic was produced. */
197
+ readonly ts: number;
198
+ /** Session identifier for correlation. */
199
+ readonly sessionId: string;
200
+ /** Trace identifier for correlation. */
201
+ readonly traceId: string;
202
+ /**
203
+ * Ordered list of remediation actions.
204
+ * Must be non-empty for high-severity entries.
205
+ */
206
+ readonly actions: readonly [DiagnosticAction, ...DiagnosticAction[]];
207
+ }
208
+
209
+ // ── Action result ─────────────────────────────────────────────────────────────
210
+
211
+ /**
212
+ * Result returned by the dispatcher after attempting to execute an action.
213
+ */
214
+ export interface ActionResult {
215
+ /** Whether the action executed successfully. */
216
+ readonly success: boolean;
217
+ /** Human-readable message describing the outcome. */
218
+ readonly message: string;
219
+ /**
220
+ * Whether the failure was due to a permission check (as opposed to a
221
+ * runtime error in the handler).
222
+ */
223
+ readonly permissionDenied?: boolean;
224
+ }
225
+
226
+ // ── Dispatch context ──────────────────────────────────────────────────────────
227
+
228
+ /**
229
+ * Navigation callback invoked when a jump action targets a panel entry.
230
+ * The UI registers this callback to implement panel-switching and focus.
231
+ */
232
+ export type NavigateToEntryCallback = (
233
+ target: 'task' | 'agent' | 'tool-call',
234
+ id: string,
235
+ ) => void;
236
+
237
+ /**
238
+ * Caller-supplied permission check.
239
+ *
240
+ * Receives the required permission tier and returns `true` if the current
241
+ * session/user satisfies that tier. Defaults to allowing 'read' and
242
+ * 'operator' and denying 'admin'.
243
+ */
244
+ export type PermissionChecker = (
245
+ required: DiagnosticActionPermission,
246
+ ) => boolean;
247
+
248
+ /**
249
+ * Configuration for DiagnosticActionDispatcher.
250
+ *
251
+ * All handler fields are optional. When a handler is absent, dispatching
252
+ * an action of the corresponding type returns a graceful failure result
253
+ * rather than throwing.
254
+ */
255
+ export interface DiagnosticActionDispatcherConfig {
256
+ /**
257
+ * Replay engine for 'load-replay' actions.
258
+ * When absent, load-replay actions return an error result.
259
+ */
260
+ readonly replayEngine?: DeterministicReplayEngine;
261
+ /**
262
+ * Permission simulator for 'run-policy-simulation' actions.
263
+ * When absent, policy simulation actions return an error result.
264
+ */
265
+ readonly simulator?: PermissionSimulator;
266
+ /**
267
+ * Ops control plane for 'retry-task', 'cancel-task', 'cancel-agent'.
268
+ * When absent, those actions return an error result.
269
+ */
270
+ readonly controlPlane?: OpsControlPlane;
271
+ /**
272
+ * Navigation callback for 'jump-to-*' actions.
273
+ * When absent, jump actions return a success result with a warning note.
274
+ */
275
+ readonly navigateTo?: NavigateToEntryCallback;
276
+ /**
277
+ * Permission checker invoked before dispatching each action.
278
+ * Defaults to: read=allow, operator=allow, admin=deny.
279
+ */
280
+ readonly checkPermission?: PermissionChecker;
281
+ }
282
+
283
+ // ── Default permission checker ────────────────────────────────────────────────
284
+
285
+ const DEFAULT_PERMISSION_CHECKER: PermissionChecker = (required) => {
286
+ return required !== 'admin';
287
+ };
288
+
289
+ // ── Dispatcher ────────────────────────────────────────────────────────────────
290
+
291
+ /**
292
+ * DiagnosticActionDispatcher — executes diagnostic entry actions.
293
+ *
294
+ * Routes incoming DiagnosticAction values to the appropriate handler,
295
+ * performing a permission check before dispatch. All errors are caught
296
+ * and converted to ActionResult failures so callers never receive thrown
297
+ * exceptions from this API.
298
+ *
299
+ * Usage:
300
+ * ```ts
301
+ * const dispatcher = new DiagnosticActionDispatcher({
302
+ * replayEngine,
303
+ * simulator,
304
+ * controlPlane,
305
+ * navigateTo: (target, id) => focusPanel(target, id),
306
+ * });
307
+ *
308
+ * const result = await dispatcher.dispatch(action);
309
+ * if (!result.success) {
310
+ * showError(result.message);
311
+ * }
312
+ * ```
313
+ */
314
+ export class DiagnosticActionDispatcher {
315
+ private readonly _replayEngine: DeterministicReplayEngine | undefined;
316
+ private readonly _simulator: PermissionSimulator | undefined;
317
+ private readonly _controlPlane: OpsControlPlane | undefined;
318
+ private readonly _navigateTo: NavigateToEntryCallback | undefined;
319
+ private readonly _checkPermission: PermissionChecker;
320
+
321
+ constructor(config: DiagnosticActionDispatcherConfig = {}) {
322
+ this._replayEngine = config.replayEngine;
323
+ this._simulator = config.simulator;
324
+ this._controlPlane = config.controlPlane;
325
+ this._navigateTo = config.navigateTo;
326
+ this._checkPermission = config.checkPermission ?? DEFAULT_PERMISSION_CHECKER;
327
+ }
328
+
329
+ /**
330
+ * Dispatch a diagnostic action.
331
+ *
332
+ * Performs a permission check, then delegates to the appropriate handler.
333
+ * All handler errors are caught and returned as failure ActionResults.
334
+ *
335
+ * @param action - The action to execute.
336
+ * @returns An ActionResult describing the outcome.
337
+ */
338
+ public async dispatch(action: DiagnosticAction): Promise<ActionResult> {
339
+ // Permission gate
340
+ if (!this._checkPermission(action.permission)) {
341
+ logger.debug('[DiagnosticActionDispatcher] permission denied', {
342
+ type: action.type,
343
+ required: action.permission,
344
+ });
345
+ return {
346
+ success: false,
347
+ message: `Permission denied: '${action.permission}' access required for action '${action.type}'.`,
348
+ permissionDenied: true,
349
+ };
350
+ }
351
+
352
+ try {
353
+ return await this._route(action);
354
+ } catch (err) {
355
+ const message = summarizeError(err);
356
+ logger.debug('[DiagnosticActionDispatcher] action error', {
357
+ type: action.type,
358
+ err: message,
359
+ });
360
+ return {
361
+ success: false,
362
+ message: `Action '${action.type}' failed: ${message}`,
363
+ };
364
+ }
365
+ }
366
+
367
+ private async _route(action: DiagnosticAction): Promise<ActionResult> {
368
+ switch (action.type) {
369
+ case 'load-replay':
370
+ return this._handleLoadReplay(action.payload);
371
+
372
+ case 'run-policy-simulation':
373
+ return this._handlePolicySimulation(action.payload);
374
+
375
+ case 'jump-to-task':
376
+ return this._handleJump('task', action.payload.taskId);
377
+
378
+ case 'jump-to-agent':
379
+ return this._handleJump('agent', action.payload.agentId);
380
+
381
+ case 'jump-to-tool-call':
382
+ return this._handleJump('tool-call', action.payload.callId);
383
+
384
+ case 'retry-task':
385
+ return this._handleRetryTask(action.payload);
386
+
387
+ case 'cancel-task':
388
+ return this._handleCancelTask(action.payload);
389
+
390
+ case 'cancel-agent':
391
+ return this._handleCancelAgent(action.payload);
392
+
393
+ default: {
394
+ // Exhaustiveness guard — TypeScript will error if a case is missing.
395
+ const exhaustive: never = action;
396
+ return {
397
+ success: false,
398
+ message: `Unknown action type: ${String(exhaustive)}`,
399
+ };
400
+ }
401
+ }
402
+ }
403
+
404
+ // ── Handlers ────────────────────────────────────────────────────────────────
405
+
406
+ private _handleLoadReplay(payload: LoadReplayPayload): ActionResult {
407
+ if (!this._replayEngine) {
408
+ return {
409
+ success: false,
410
+ message: 'Replay engine is not available. Attach a DeterministicReplayEngine to the dispatcher.',
411
+ };
412
+ }
413
+
414
+ // Reset the engine to 'idle'. The caller is expected to then fetch
415
+ // ledger entries for the given runId and call engine.load(). The
416
+ // ReplayPanel will surface the updated state via subscriber notifications.
417
+ this._replayEngine.reset();
418
+
419
+ logger.debug('[DiagnosticActionDispatcher] load-replay requested', {
420
+ runId: payload.runId,
421
+ });
422
+
423
+ return {
424
+ success: true,
425
+ message: `Replay engine reset for run '${payload.runId}'. Load the ledger entries to begin stepping.`,
426
+ };
427
+ }
428
+
429
+ private _handlePolicySimulation(
430
+ payload: RunPolicySimulationPayload,
431
+ ): ActionResult {
432
+ if (!this._simulator) {
433
+ return {
434
+ success: false,
435
+ message: 'Policy simulator is not available. Attach a PermissionSimulator to the dispatcher.',
436
+ };
437
+ }
438
+
439
+ const result = this._simulator.evaluate(payload.toolName, payload.args);
440
+
441
+ const diverged = result.diverged;
442
+ const actual = result.actualDecision.allowed ? 'allowed' : 'denied';
443
+ const simulated = result.simulatedDecision.allowed ? 'allowed' : 'denied';
444
+
445
+ logger.debug('[DiagnosticActionDispatcher] policy simulation complete', {
446
+ toolName: payload.toolName,
447
+ diverged,
448
+ actual,
449
+ simulated,
450
+ });
451
+
452
+ if (diverged) {
453
+ return {
454
+ success: true,
455
+ message: `Policy simulation diverged for '${payload.toolName}': actual=${actual}, simulated=${simulated}.`,
456
+ };
457
+ }
458
+
459
+ return {
460
+ success: true,
461
+ message: `Policy simulation for '${payload.toolName}': both evaluators returned ${actual}.`,
462
+ };
463
+ }
464
+
465
+ private _handleJump(
466
+ target: 'task' | 'agent' | 'tool-call',
467
+ id: string,
468
+ ): ActionResult {
469
+ if (!this._navigateTo) {
470
+ return {
471
+ success: true,
472
+ message: `Jump to ${target} '${id}' requested but no navigation handler is registered.`,
473
+ };
474
+ }
475
+
476
+ this._navigateTo(target, id);
477
+
478
+ return {
479
+ success: true,
480
+ message: `Navigated to ${target} '${id}'.`,
481
+ };
482
+ }
483
+
484
+ private _handleRetryTask(payload: RetryTaskPayload): ActionResult {
485
+ if (!this._controlPlane) {
486
+ return {
487
+ success: false,
488
+ message: 'Ops control plane is not available. Attach an OpsControlPlane to the dispatcher.',
489
+ };
490
+ }
491
+
492
+ if (!this._controlPlane.canRetryTask(payload.taskId)) {
493
+ return {
494
+ success: false,
495
+ message: `Task '${payload.taskId}' cannot be retried in its current state.`,
496
+ };
497
+ }
498
+
499
+ this._controlPlane.retryTask(payload.taskId, payload.note);
500
+
501
+ return {
502
+ success: true,
503
+ message: `Task '${payload.taskId}' queued for retry.`,
504
+ };
505
+ }
506
+
507
+ private _handleCancelTask(payload: CancelTaskPayload): ActionResult {
508
+ if (!this._controlPlane) {
509
+ return {
510
+ success: false,
511
+ message: 'Ops control plane is not available. Attach an OpsControlPlane to the dispatcher.',
512
+ };
513
+ }
514
+
515
+ if (!this._controlPlane.canCancelTask(payload.taskId)) {
516
+ return {
517
+ success: false,
518
+ message: `Task '${payload.taskId}' cannot be cancelled in its current state.`,
519
+ };
520
+ }
521
+
522
+ this._controlPlane.cancelTask(payload.taskId, payload.note);
523
+
524
+ return {
525
+ success: true,
526
+ message: `Task '${payload.taskId}' cancelled.`,
527
+ };
528
+ }
529
+
530
+ private _handleCancelAgent(payload: CancelAgentPayload): ActionResult {
531
+ if (!this._controlPlane) {
532
+ return {
533
+ success: false,
534
+ message: 'Ops control plane is not available. Attach an OpsControlPlane to the dispatcher.',
535
+ };
536
+ }
537
+
538
+ if (!this._controlPlane.canCancelAgent(payload.agentId)) {
539
+ return {
540
+ success: false,
541
+ message: `Agent '${payload.agentId}' cannot be cancelled in its current state.`,
542
+ };
543
+ }
544
+
545
+ this._controlPlane.cancelAgent(payload.agentId, payload.note);
546
+
547
+ return {
548
+ success: true,
549
+ message: `Agent '${payload.agentId}' cancelled.`,
550
+ };
551
+ }
552
+ }
553
+
554
+ // ── Factory helpers ───────────────────────────────────────────────────────────
555
+
556
+ /**
557
+ * Build a 'load-replay' action for a forensics run ID.
558
+ */
559
+ export function buildLoadReplayAction(runId: string): DiagnosticAction {
560
+ return {
561
+ label: 'Load Replay',
562
+ type: 'load-replay',
563
+ permission: 'operator',
564
+ payload: { runId },
565
+ };
566
+ }
567
+
568
+ /**
569
+ * Build a 'run-policy-simulation' action for a tool call.
570
+ */
571
+ export function buildRunPolicySimulationAction(
572
+ toolName: string,
573
+ args: Record<string, unknown>,
574
+ ): DiagnosticAction {
575
+ return {
576
+ label: 'Run Policy Simulation',
577
+ type: 'run-policy-simulation',
578
+ permission: 'operator',
579
+ payload: { toolName, args },
580
+ };
581
+ }
582
+
583
+ /**
584
+ * Build a 'jump-to-task' action.
585
+ */
586
+ export function buildJumpToTaskAction(taskId: string): DiagnosticAction {
587
+ return {
588
+ label: 'Jump to Task',
589
+ type: 'jump-to-task',
590
+ permission: 'read',
591
+ payload: { taskId },
592
+ };
593
+ }
594
+
595
+ /**
596
+ * Build a 'jump-to-agent' action.
597
+ */
598
+ export function buildJumpToAgentAction(agentId: string): DiagnosticAction {
599
+ return {
600
+ label: 'Jump to Agent',
601
+ type: 'jump-to-agent',
602
+ permission: 'read',
603
+ payload: { agentId },
604
+ };
605
+ }
606
+
607
+ /**
608
+ * Build a 'jump-to-tool-call' action.
609
+ */
610
+ export function buildJumpToToolCallAction(callId: string): DiagnosticAction {
611
+ return {
612
+ label: 'Jump to Tool Call',
613
+ type: 'jump-to-tool-call',
614
+ permission: 'read',
615
+ payload: { callId },
616
+ };
617
+ }
618
+
619
+ /**
620
+ * Build a 'retry-task' action.
621
+ */
622
+ export function buildRetryTaskAction(
623
+ taskId: string,
624
+ note?: string,
625
+ ): DiagnosticAction {
626
+ return {
627
+ label: 'Retry Task',
628
+ type: 'retry-task',
629
+ permission: 'operator',
630
+ payload: { taskId, note },
631
+ };
632
+ }
633
+
634
+ /**
635
+ * Build a 'cancel-task' action.
636
+ */
637
+ export function buildCancelTaskAction(
638
+ taskId: string,
639
+ note?: string,
640
+ ): DiagnosticAction {
641
+ return {
642
+ label: 'Cancel Task',
643
+ type: 'cancel-task',
644
+ permission: 'operator',
645
+ payload: { taskId, note },
646
+ };
647
+ }
648
+
649
+ /**
650
+ * Build a 'cancel-agent' action.
651
+ */
652
+ export function buildCancelAgentAction(
653
+ agentId: string,
654
+ note?: string,
655
+ ): DiagnosticAction {
656
+ return {
657
+ label: 'Cancel Agent',
658
+ type: 'cancel-agent',
659
+ permission: 'operator',
660
+ payload: { agentId, note },
661
+ };
662
+ }
663
+
664
+ /**
665
+ * Create a HighSeverityDiagnostic from a task failure.
666
+ *
667
+ * Attaches retry and jump-to-task actions. Satisfies the acceptance criterion
668
+ * that every high-severity diagnostic has at least one remediation action.
669
+ */
670
+ export function diagnosticFromTaskFailure(opts: {
671
+ taskId: string;
672
+ description: string;
673
+ error: string;
674
+ sessionId: string;
675
+ traceId: string;
676
+ ts: number;
677
+ }): HighSeverityDiagnostic {
678
+ return {
679
+ id: `task-failure:${opts.taskId}`,
680
+ summary: `Task failed: ${opts.description} — ${opts.error}`,
681
+ domain: 'tasks',
682
+ severity: 'error',
683
+ ts: opts.ts,
684
+ sessionId: opts.sessionId,
685
+ traceId: opts.traceId,
686
+ actions: [
687
+ buildRetryTaskAction(opts.taskId, 'Diagnostic retry'),
688
+ buildJumpToTaskAction(opts.taskId),
689
+ ],
690
+ };
691
+ }
692
+
693
+ /**
694
+ * Create a HighSeverityDiagnostic from an agent failure.
695
+ *
696
+ * Attaches cancel and jump-to-agent actions.
697
+ */
698
+ export function diagnosticFromAgentFailure(opts: {
699
+ agentId: string;
700
+ task: string;
701
+ error: string;
702
+ sessionId: string;
703
+ traceId: string;
704
+ ts: number;
705
+ }): HighSeverityDiagnostic {
706
+ return {
707
+ id: `agent-failure:${opts.agentId}`,
708
+ summary: `Agent failed: ${opts.task} — ${opts.error}`,
709
+ domain: 'agents',
710
+ severity: 'error',
711
+ ts: opts.ts,
712
+ sessionId: opts.sessionId,
713
+ traceId: opts.traceId,
714
+ actions: [
715
+ buildCancelAgentAction(opts.agentId, 'Diagnostic cancel'),
716
+ buildJumpToAgentAction(opts.agentId),
717
+ ],
718
+ };
719
+ }
720
+
721
+ /**
722
+ * Create a HighSeverityDiagnostic from a tool contract violation.
723
+ *
724
+ * Attaches a policy simulation action and optionally a jump-to-tool-call action.
725
+ */
726
+ export function diagnosticFromToolContractViolation(opts: {
727
+ toolName: string;
728
+ message: string;
729
+ callId?: string;
730
+ sessionId: string;
731
+ traceId: string;
732
+ ts: number;
733
+ }): HighSeverityDiagnostic {
734
+ const extra: DiagnosticAction[] = opts.callId
735
+ ? [buildJumpToToolCallAction(opts.callId)]
736
+ : [];
737
+ const actions: readonly [DiagnosticAction, ...DiagnosticAction[]] = [
738
+ buildRunPolicySimulationAction(opts.toolName, {}),
739
+ ...extra,
740
+ ];
741
+
742
+ return {
743
+ id: `tool-contract:${opts.toolName}:${opts.ts}`,
744
+ summary: `Tool contract violation: ${opts.toolName} — ${opts.message}`,
745
+ domain: 'tool-contracts',
746
+ severity: 'error',
747
+ ts: opts.ts,
748
+ sessionId: opts.sessionId,
749
+ traceId: opts.traceId,
750
+ actions,
751
+ };
752
+ }
753
+
754
+ /**
755
+ * Create a HighSeverityDiagnostic from a forensics/replay run.
756
+ *
757
+ * Attaches a load-replay action so the operator can step through the run.
758
+ */
759
+ export function diagnosticFromForensicsRun(opts: {
760
+ runId: string;
761
+ summary: string;
762
+ sessionId: string;
763
+ traceId: string;
764
+ ts: number;
765
+ }): HighSeverityDiagnostic {
766
+ return {
767
+ id: `forensics:${opts.runId}`,
768
+ summary: opts.summary,
769
+ domain: 'forensics',
770
+ severity: 'error',
771
+ ts: opts.ts,
772
+ sessionId: opts.sessionId,
773
+ traceId: opts.traceId,
774
+ actions: [buildLoadReplayAction(opts.runId)],
775
+ };
776
+ }