@pellux/goodvibes-agent 0.1.0

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 (398) hide show
  1. package/.goodvibes/GOODVIBES.md +35 -0
  2. package/.goodvibes/agents/reviewer.md +48 -0
  3. package/.goodvibes/skills/add-provider/SKILL.md +199 -0
  4. package/CHANGELOG.md +25 -0
  5. package/README.md +74 -0
  6. package/bin/goodvibes-agent.ts +2 -0
  7. package/docs/README.md +23 -0
  8. package/docs/deployment-and-services.md +57 -0
  9. package/docs/getting-started.md +53 -0
  10. package/docs/release-and-publishing.md +46 -0
  11. package/package.json +134 -0
  12. package/scripts/check-bun.sh +20 -0
  13. package/src/audio/player.ts +156 -0
  14. package/src/audio/spoken-turn-controller.ts +203 -0
  15. package/src/audio/spoken-turn-model-routing.ts +117 -0
  16. package/src/audio/spoken-turn-wiring.ts +44 -0
  17. package/src/audio/text-chunker.ts +110 -0
  18. package/src/cli/bundle-command.ts +227 -0
  19. package/src/cli/completion.ts +90 -0
  20. package/src/cli/config-overrides.ts +159 -0
  21. package/src/cli/endpoints.ts +63 -0
  22. package/src/cli/entrypoint.ts +172 -0
  23. package/src/cli/help.ts +299 -0
  24. package/src/cli/index.ts +11 -0
  25. package/src/cli/management-commands.ts +426 -0
  26. package/src/cli/management.ts +744 -0
  27. package/src/cli/network-posture.ts +46 -0
  28. package/src/cli/package-verification.ts +123 -0
  29. package/src/cli/parser.ts +369 -0
  30. package/src/cli/provider-auth-routes.ts +22 -0
  31. package/src/cli/provider-classification.ts +107 -0
  32. package/src/cli/redaction.ts +105 -0
  33. package/src/cli/service-command.ts +26 -0
  34. package/src/cli/service-posture.ts +482 -0
  35. package/src/cli/status.ts +383 -0
  36. package/src/cli/surface-command.ts +247 -0
  37. package/src/cli/tui-startup.ts +32 -0
  38. package/src/cli/types.ts +69 -0
  39. package/src/cli-flags.ts +21 -0
  40. package/src/config/goodvibes-home-audit.ts +465 -0
  41. package/src/config/index.ts +57 -0
  42. package/src/config/provider-model.ts +23 -0
  43. package/src/config/secret-config.ts +119 -0
  44. package/src/config/secrets.ts +71 -0
  45. package/src/config/surface.ts +1 -0
  46. package/src/core/composer-state.ts +61 -0
  47. package/src/core/conversation-rendering.ts +359 -0
  48. package/src/core/conversation.ts +551 -0
  49. package/src/core/history.ts +45 -0
  50. package/src/core/orchestrator.ts +7 -0
  51. package/src/core/system-message-router.ts +171 -0
  52. package/src/daemon/cli.ts +55 -0
  53. package/src/daemon/safe-serve.ts +61 -0
  54. package/src/input/agent-workspace.ts +428 -0
  55. package/src/input/autocomplete.ts +96 -0
  56. package/src/input/bookmark-modal.ts +115 -0
  57. package/src/input/command-args-hint.ts +36 -0
  58. package/src/input/command-registry.ts +329 -0
  59. package/src/input/commands/agent-externalized-tui.ts +73 -0
  60. package/src/input/commands/agent-workspace-runtime.ts +17 -0
  61. package/src/input/commands/branch-runtime.ts +72 -0
  62. package/src/input/commands/cloudflare-runtime.ts +370 -0
  63. package/src/input/commands/config.ts +18 -0
  64. package/src/input/commands/control-room-runtime.ts +255 -0
  65. package/src/input/commands/conversation-runtime.ts +207 -0
  66. package/src/input/commands/discovery-runtime.ts +52 -0
  67. package/src/input/commands/eval.ts +204 -0
  68. package/src/input/commands/experience-runtime.ts +278 -0
  69. package/src/input/commands/guidance-runtime.ts +106 -0
  70. package/src/input/commands/health-runtime.ts +434 -0
  71. package/src/input/commands/hooks-runtime.ts +148 -0
  72. package/src/input/commands/incident-runtime.ts +95 -0
  73. package/src/input/commands/integration-runtime.ts +394 -0
  74. package/src/input/commands/intelligence-runtime.ts +223 -0
  75. package/src/input/commands/knowledge.ts +531 -0
  76. package/src/input/commands/local-auth-runtime.ts +105 -0
  77. package/src/input/commands/local-provider-runtime.ts +170 -0
  78. package/src/input/commands/local-runtime.ts +392 -0
  79. package/src/input/commands/local-setup-review.ts +199 -0
  80. package/src/input/commands/local-setup-transfer.ts +135 -0
  81. package/src/input/commands/local-setup.ts +282 -0
  82. package/src/input/commands/managed-runtime.ts +209 -0
  83. package/src/input/commands/marketplace-runtime.ts +290 -0
  84. package/src/input/commands/mcp-runtime.ts +432 -0
  85. package/src/input/commands/memory-product-runtime.ts +111 -0
  86. package/src/input/commands/memory.ts +151 -0
  87. package/src/input/commands/notify-runtime.ts +83 -0
  88. package/src/input/commands/onboarding-runtime.ts +14 -0
  89. package/src/input/commands/operator-panel-runtime.ts +146 -0
  90. package/src/input/commands/operator-runtime.ts +392 -0
  91. package/src/input/commands/planning-runtime.ts +205 -0
  92. package/src/input/commands/platform-access-runtime.ts +422 -0
  93. package/src/input/commands/platform-services-runtime.ts +246 -0
  94. package/src/input/commands/policy-dispatch.ts +339 -0
  95. package/src/input/commands/policy.ts +17 -0
  96. package/src/input/commands/product-runtime.ts +351 -0
  97. package/src/input/commands/profile-sync-runtime.ts +99 -0
  98. package/src/input/commands/provider-accounts-runtime.ts +113 -0
  99. package/src/input/commands/provider.ts +363 -0
  100. package/src/input/commands/qrcode-runtime.ts +20 -0
  101. package/src/input/commands/quit-shared.ts +162 -0
  102. package/src/input/commands/recall-bundle.ts +132 -0
  103. package/src/input/commands/recall-capture.ts +152 -0
  104. package/src/input/commands/recall-query.ts +229 -0
  105. package/src/input/commands/recall-review.ts +98 -0
  106. package/src/input/commands/recall-shared.ts +22 -0
  107. package/src/input/commands/remote-runtime-pool.ts +106 -0
  108. package/src/input/commands/remote-runtime-setup.ts +199 -0
  109. package/src/input/commands/remote-runtime.ts +431 -0
  110. package/src/input/commands/replay-runtime.ts +18 -0
  111. package/src/input/commands/runtime-services.ts +291 -0
  112. package/src/input/commands/schedule-runtime.ts +91 -0
  113. package/src/input/commands/services-runtime.ts +209 -0
  114. package/src/input/commands/session-content.ts +408 -0
  115. package/src/input/commands/session-workflow.ts +464 -0
  116. package/src/input/commands/session.ts +375 -0
  117. package/src/input/commands/settings-sync-runtime.ts +174 -0
  118. package/src/input/commands/share-runtime.ts +119 -0
  119. package/src/input/commands/shell-core.ts +307 -0
  120. package/src/input/commands/skills-runtime.ts +221 -0
  121. package/src/input/commands/subscription-runtime.ts +434 -0
  122. package/src/input/commands/tasks-runtime.ts +230 -0
  123. package/src/input/commands/teamwork-runtime.ts +339 -0
  124. package/src/input/commands/teleport-runtime.ts +57 -0
  125. package/src/input/commands/tts-runtime.ts +29 -0
  126. package/src/input/commands/work-plan-runtime.ts +169 -0
  127. package/src/input/commands.ts +131 -0
  128. package/src/input/feed-context-factory.ts +254 -0
  129. package/src/input/file-picker.ts +192 -0
  130. package/src/input/handler-command-route.ts +180 -0
  131. package/src/input/handler-content-actions.ts +497 -0
  132. package/src/input/handler-feed-routes.ts +648 -0
  133. package/src/input/handler-feed.ts +452 -0
  134. package/src/input/handler-interactions.ts +281 -0
  135. package/src/input/handler-modal-routes.ts +418 -0
  136. package/src/input/handler-modal-stack.ts +263 -0
  137. package/src/input/handler-modal-token-routes.ts +329 -0
  138. package/src/input/handler-onboarding-cloudflare.ts +391 -0
  139. package/src/input/handler-onboarding.ts +620 -0
  140. package/src/input/handler-picker-routes.ts +472 -0
  141. package/src/input/handler-prompt-buffer.ts +320 -0
  142. package/src/input/handler-shortcuts.ts +213 -0
  143. package/src/input/handler-ui-state.ts +372 -0
  144. package/src/input/handler.ts +729 -0
  145. package/src/input/input-history.ts +297 -0
  146. package/src/input/keybindings.ts +292 -0
  147. package/src/input/mcp-workspace.ts +554 -0
  148. package/src/input/model-picker-provider-filter.ts +28 -0
  149. package/src/input/model-picker-types.ts +137 -0
  150. package/src/input/model-picker.ts +797 -0
  151. package/src/input/onboarding/handler-onboarding-routes.ts +125 -0
  152. package/src/input/onboarding/onboarding-runtime-status.ts +87 -0
  153. package/src/input/onboarding/onboarding-wizard-apply.ts +277 -0
  154. package/src/input/onboarding/onboarding-wizard-cloudflare-step.ts +494 -0
  155. package/src/input/onboarding/onboarding-wizard-cloudflare.ts +204 -0
  156. package/src/input/onboarding/onboarding-wizard-constants.ts +158 -0
  157. package/src/input/onboarding/onboarding-wizard-external-surface-extra-specs.ts +130 -0
  158. package/src/input/onboarding/onboarding-wizard-external-surfaces.ts +762 -0
  159. package/src/input/onboarding/onboarding-wizard-helpers.ts +167 -0
  160. package/src/input/onboarding/onboarding-wizard-rules.ts +256 -0
  161. package/src/input/onboarding/onboarding-wizard-state.ts +365 -0
  162. package/src/input/onboarding/onboarding-wizard-steps.ts +798 -0
  163. package/src/input/onboarding/onboarding-wizard-types.ts +195 -0
  164. package/src/input/onboarding/onboarding-wizard.ts +711 -0
  165. package/src/input/panel-integration-actions.ts +78 -0
  166. package/src/input/profile-picker-modal.ts +222 -0
  167. package/src/input/search.ts +100 -0
  168. package/src/input/selection-modal.ts +163 -0
  169. package/src/input/selection.ts +135 -0
  170. package/src/input/session-picker-modal.ts +136 -0
  171. package/src/input/settings-modal-behavior.ts +37 -0
  172. package/src/input/settings-modal-secrets.ts +41 -0
  173. package/src/input/settings-modal-subscriptions.ts +95 -0
  174. package/src/input/settings-modal-types.ts +91 -0
  175. package/src/input/settings-modal.ts +793 -0
  176. package/src/input/submission-intent.ts +17 -0
  177. package/src/input/submission-router.ts +59 -0
  178. package/src/input/tts-settings-actions.ts +100 -0
  179. package/src/main.ts +792 -0
  180. package/src/mcp/runtime-reload.ts +81 -0
  181. package/src/panels/agent-inspector-panel.ts +521 -0
  182. package/src/panels/agent-inspector-shared.ts +94 -0
  183. package/src/panels/agent-logs-panel.ts +559 -0
  184. package/src/panels/agent-logs-shared.ts +129 -0
  185. package/src/panels/approval-panel.ts +150 -0
  186. package/src/panels/automation-control-panel.ts +212 -0
  187. package/src/panels/base-panel.ts +254 -0
  188. package/src/panels/builtin/agent.ts +117 -0
  189. package/src/panels/builtin/development.ts +31 -0
  190. package/src/panels/builtin/knowledge.ts +26 -0
  191. package/src/panels/builtin/operations.ts +349 -0
  192. package/src/panels/builtin/session.ts +129 -0
  193. package/src/panels/builtin/shared.ts +274 -0
  194. package/src/panels/builtin-panels.ts +23 -0
  195. package/src/panels/cockpit-panel.ts +183 -0
  196. package/src/panels/communication-panel.ts +153 -0
  197. package/src/panels/confirm-state.ts +61 -0
  198. package/src/panels/context-visualizer-panel.ts +204 -0
  199. package/src/panels/control-plane-panel.ts +211 -0
  200. package/src/panels/cost-tracker-panel.ts +444 -0
  201. package/src/panels/debug-panel.ts +432 -0
  202. package/src/panels/diff-panel.ts +520 -0
  203. package/src/panels/docs-panel.ts +283 -0
  204. package/src/panels/eval-panel.ts +399 -0
  205. package/src/panels/file-explorer-panel.ts +584 -0
  206. package/src/panels/file-preview-panel.ts +434 -0
  207. package/src/panels/forensics-panel.ts +364 -0
  208. package/src/panels/git-panel.ts +638 -0
  209. package/src/panels/hooks-panel.ts +239 -0
  210. package/src/panels/incident-review-panel.ts +197 -0
  211. package/src/panels/index.ts +46 -0
  212. package/src/panels/intelligence-panel.ts +176 -0
  213. package/src/panels/knowledge-panel.ts +345 -0
  214. package/src/panels/local-auth-panel.ts +130 -0
  215. package/src/panels/marketplace-panel.ts +212 -0
  216. package/src/panels/memory-panel.ts +225 -0
  217. package/src/panels/ops-control-panel.ts +150 -0
  218. package/src/panels/ops-strategy-panel.ts +235 -0
  219. package/src/panels/orchestration-panel.ts +273 -0
  220. package/src/panels/panel-list-panel.ts +509 -0
  221. package/src/panels/panel-manager.ts +570 -0
  222. package/src/panels/panel-picker.ts +106 -0
  223. package/src/panels/plan-dashboard-panel.ts +274 -0
  224. package/src/panels/plugins-panel.ts +178 -0
  225. package/src/panels/policy-panel.ts +308 -0
  226. package/src/panels/polish.ts +717 -0
  227. package/src/panels/project-planning-panel.ts +711 -0
  228. package/src/panels/provider-account-snapshot.ts +259 -0
  229. package/src/panels/provider-accounts-panel.ts +218 -0
  230. package/src/panels/provider-health-domains.ts +215 -0
  231. package/src/panels/provider-health-panel.ts +727 -0
  232. package/src/panels/provider-health-tracker.ts +115 -0
  233. package/src/panels/provider-stats-panel.ts +366 -0
  234. package/src/panels/qr-panel.ts +182 -0
  235. package/src/panels/remote-panel.ts +449 -0
  236. package/src/panels/routes-panel.ts +178 -0
  237. package/src/panels/sandbox-panel.ts +283 -0
  238. package/src/panels/schedule-panel.ts +329 -0
  239. package/src/panels/scrollable-list-panel.ts +491 -0
  240. package/src/panels/search-focus.ts +32 -0
  241. package/src/panels/security-panel.ts +295 -0
  242. package/src/panels/services-panel.ts +231 -0
  243. package/src/panels/session-browser-panel.ts +400 -0
  244. package/src/panels/session-maintenance.ts +125 -0
  245. package/src/panels/settings-sync-panel.ts +120 -0
  246. package/src/panels/skills-panel.ts +431 -0
  247. package/src/panels/subscription-panel.ts +263 -0
  248. package/src/panels/symbol-outline-panel.ts +486 -0
  249. package/src/panels/system-messages-panel.ts +230 -0
  250. package/src/panels/tasks-panel.ts +399 -0
  251. package/src/panels/thinking-panel.ts +304 -0
  252. package/src/panels/token-budget-panel.ts +475 -0
  253. package/src/panels/tool-inspector-panel.ts +429 -0
  254. package/src/panels/types.ts +54 -0
  255. package/src/panels/watchers-panel.ts +193 -0
  256. package/src/panels/work-plan-panel.ts +175 -0
  257. package/src/panels/worktree-panel.ts +182 -0
  258. package/src/panels/wrfc-panel.ts +609 -0
  259. package/src/permissions/prompt.ts +165 -0
  260. package/src/planning/project-planning-coordinator.ts +543 -0
  261. package/src/plugins/loader.ts +15 -0
  262. package/src/renderer/agent-detail-modal.ts +331 -0
  263. package/src/renderer/agent-workspace.ts +238 -0
  264. package/src/renderer/ansi-sanitize.ts +76 -0
  265. package/src/renderer/autocomplete-overlay.ts +154 -0
  266. package/src/renderer/block-actions.ts +76 -0
  267. package/src/renderer/bookmark-modal.ts +101 -0
  268. package/src/renderer/bottom-bar.ts +58 -0
  269. package/src/renderer/buffer.ts +113 -0
  270. package/src/renderer/code-block.ts +373 -0
  271. package/src/renderer/compositor.ts +283 -0
  272. package/src/renderer/context-inspector.ts +219 -0
  273. package/src/renderer/conversation-layout.ts +67 -0
  274. package/src/renderer/conversation-overlays.ts +140 -0
  275. package/src/renderer/conversation-surface.ts +260 -0
  276. package/src/renderer/diff-view.ts +132 -0
  277. package/src/renderer/diff.ts +130 -0
  278. package/src/renderer/file-picker-overlay.ts +101 -0
  279. package/src/renderer/file-tree.ts +153 -0
  280. package/src/renderer/fullscreen-primitives.ts +130 -0
  281. package/src/renderer/fullscreen-workspace.ts +199 -0
  282. package/src/renderer/git-status.ts +89 -0
  283. package/src/renderer/help-overlay.ts +267 -0
  284. package/src/renderer/history-search-overlay.ts +73 -0
  285. package/src/renderer/layout-engine.ts +97 -0
  286. package/src/renderer/layout.ts +32 -0
  287. package/src/renderer/live-tail-modal.ts +156 -0
  288. package/src/renderer/markdown.ts +635 -0
  289. package/src/renderer/mcp-workspace.ts +237 -0
  290. package/src/renderer/modal-factory.ts +467 -0
  291. package/src/renderer/modal-utils.ts +24 -0
  292. package/src/renderer/model-picker-overlay.ts +473 -0
  293. package/src/renderer/model-workspace.ts +488 -0
  294. package/src/renderer/onboarding/onboarding-wizard.ts +615 -0
  295. package/src/renderer/overlay-box.ts +146 -0
  296. package/src/renderer/overlay-viewport.ts +104 -0
  297. package/src/renderer/panel-composite.ts +158 -0
  298. package/src/renderer/panel-picker-overlay.ts +202 -0
  299. package/src/renderer/panel-tab-bar.ts +69 -0
  300. package/src/renderer/panel-workspace-bar.ts +42 -0
  301. package/src/renderer/process-indicator.ts +96 -0
  302. package/src/renderer/process-modal.ts +656 -0
  303. package/src/renderer/process-summary.ts +67 -0
  304. package/src/renderer/profile-picker-modal.ts +129 -0
  305. package/src/renderer/progress.ts +98 -0
  306. package/src/renderer/qr-renderer.ts +120 -0
  307. package/src/renderer/search-overlay.ts +54 -0
  308. package/src/renderer/selection-modal-overlay.ts +214 -0
  309. package/src/renderer/semantic-diff.ts +369 -0
  310. package/src/renderer/session-picker-modal.ts +127 -0
  311. package/src/renderer/settings-modal-helpers.ts +193 -0
  312. package/src/renderer/settings-modal.ts +537 -0
  313. package/src/renderer/shell-surface.ts +88 -0
  314. package/src/renderer/status-glyphs.ts +21 -0
  315. package/src/renderer/status-token.ts +67 -0
  316. package/src/renderer/surface-layout.ts +101 -0
  317. package/src/renderer/syntax-highlighter.ts +542 -0
  318. package/src/renderer/system-message.ts +83 -0
  319. package/src/renderer/tab-strip.ts +108 -0
  320. package/src/renderer/text-layout.ts +31 -0
  321. package/src/renderer/thinking.ts +17 -0
  322. package/src/renderer/tool-call.ts +234 -0
  323. package/src/renderer/ui-factory.ts +524 -0
  324. package/src/renderer/ui-primitives.ts +96 -0
  325. package/src/runtime/bootstrap-command-context.ts +278 -0
  326. package/src/runtime/bootstrap-command-parts.ts +386 -0
  327. package/src/runtime/bootstrap-core.ts +540 -0
  328. package/src/runtime/bootstrap-hook-bridge.ts +112 -0
  329. package/src/runtime/bootstrap-shell.ts +283 -0
  330. package/src/runtime/bootstrap.ts +575 -0
  331. package/src/runtime/cloudflare-control-plane.ts +349 -0
  332. package/src/runtime/context.ts +142 -0
  333. package/src/runtime/diagnostics/panels/index.ts +24 -0
  334. package/src/runtime/diagnostics/panels/ops.ts +156 -0
  335. package/src/runtime/diagnostics/panels/panel-resources.ts +118 -0
  336. package/src/runtime/diagnostics/panels/policy.ts +177 -0
  337. package/src/runtime/index.ts +662 -0
  338. package/src/runtime/onboarding/apply.ts +642 -0
  339. package/src/runtime/onboarding/derivation.ts +534 -0
  340. package/src/runtime/onboarding/index.ts +7 -0
  341. package/src/runtime/onboarding/markers.ts +148 -0
  342. package/src/runtime/onboarding/snapshot.ts +406 -0
  343. package/src/runtime/onboarding/state.ts +141 -0
  344. package/src/runtime/onboarding/types.ts +404 -0
  345. package/src/runtime/onboarding/verify.ts +171 -0
  346. package/src/runtime/operator-token-cleanup.ts +27 -0
  347. package/src/runtime/perf/panel-contracts.ts +32 -0
  348. package/src/runtime/perf/panel-health-monitor.ts +18 -0
  349. package/src/runtime/sandbox-public-gaps.ts +358 -0
  350. package/src/runtime/services.ts +670 -0
  351. package/src/runtime/store/domains/domain-read-matrix.ts +15 -0
  352. package/src/runtime/store/domains/index.ts +222 -0
  353. package/src/runtime/store/domains/panels.ts +117 -0
  354. package/src/runtime/store/domains/ui-perf.ts +103 -0
  355. package/src/runtime/store/index.ts +305 -0
  356. package/src/runtime/store/selectors/index.ts +359 -0
  357. package/src/runtime/store/state.ts +145 -0
  358. package/src/runtime/surface-feature-flags.ts +65 -0
  359. package/src/runtime/terminal-output-guard.ts +228 -0
  360. package/src/runtime/ui/index.ts +39 -0
  361. package/src/runtime/ui/model-picker/data-provider.ts +182 -0
  362. package/src/runtime/ui/model-picker/health-enrichment.ts +228 -0
  363. package/src/runtime/ui/model-picker/index.ts +59 -0
  364. package/src/runtime/ui/model-picker/types.ts +149 -0
  365. package/src/runtime/ui/provider-health/data-provider.ts +244 -0
  366. package/src/runtime/ui/provider-health/fallback-visualizer.ts +71 -0
  367. package/src/runtime/ui/provider-health/index.ts +46 -0
  368. package/src/runtime/ui/provider-health/types.ts +146 -0
  369. package/src/runtime/ui-events.ts +1 -0
  370. package/src/runtime/ui-read-model-helpers.ts +1 -0
  371. package/src/runtime/ui-read-models-observability-maintenance.ts +1 -0
  372. package/src/runtime/ui-read-models-observability-options.ts +1 -0
  373. package/src/runtime/ui-read-models-observability-remote.ts +1 -0
  374. package/src/runtime/ui-read-models-observability-security.ts +1 -0
  375. package/src/runtime/ui-read-models-observability-system.ts +1 -0
  376. package/src/runtime/ui-read-models-observability.ts +1 -0
  377. package/src/runtime/ui-read-models.ts +61 -0
  378. package/src/runtime/ui-service-queries.ts +1 -0
  379. package/src/runtime/ui-services.ts +190 -0
  380. package/src/scripts/process-messages.ts +42 -0
  381. package/src/shell/blocking-input.ts +98 -0
  382. package/src/shell/service-settings-sync.ts +273 -0
  383. package/src/shell/ui-openers.ts +352 -0
  384. package/src/tools/index.ts +1 -0
  385. package/src/tools/wrfc-agent-guard.ts +49 -0
  386. package/src/types/grid.ts +48 -0
  387. package/src/types/sql-js.d.ts +15 -0
  388. package/src/utils/clipboard.ts +22 -0
  389. package/src/utils/splash-lines.ts +46 -0
  390. package/src/utils/terminal-width.ts +185 -0
  391. package/src/verification/live-verifier.ts +430 -0
  392. package/src/verification/verification-ledger.ts +242 -0
  393. package/src/version.ts +17 -0
  394. package/src/widget/index.ts +2 -0
  395. package/src/widget/types.ts +9 -0
  396. package/src/widget/widget.ts +8 -0
  397. package/src/work-plans/work-plan-store.ts +374 -0
  398. package/tsconfig.json +18 -0
@@ -0,0 +1,670 @@
1
+ import { join } from 'node:path';
2
+ import { ConfigManager } from '@pellux/goodvibes-sdk/platform/config';
3
+ import { SecretsManager } from '../config/secrets.ts';
4
+ import { ServiceRegistry } from '@pellux/goodvibes-sdk/platform/config';
5
+ import { SubscriptionManager } from '@pellux/goodvibes-sdk/platform/config';
6
+ import { AutomationDeliveryManager, AutomationManager, AutomationRouteStore } from '@pellux/goodvibes-sdk/platform/automation';
7
+ import { ChannelPluginRegistry, ChannelPolicyManager, RouteBindingManager, SurfaceRegistry } from '@pellux/goodvibes-sdk/platform/channels';
8
+ import { ChannelDeliveryRouter } from '@pellux/goodvibes-sdk/platform/channels';
9
+ import { ApprovalBroker, GatewayMethodCatalog, SharedSessionBroker } from '@pellux/goodvibes-sdk/platform/control-plane';
10
+ import { WatcherRegistry } from '@pellux/goodvibes-sdk/platform/watchers';
11
+ import { ArtifactStore } from '@pellux/goodvibes-sdk/platform/artifacts';
12
+ import {
13
+ HomeGraphService,
14
+ GOODVIBES_AGENT_KNOWLEDGE_DB_FILE,
15
+ HOME_GRAPH_KNOWLEDGE_EXTENSION,
16
+ KnowledgeService,
17
+ KnowledgeSemanticService,
18
+ KnowledgeStore,
19
+ ProjectPlanningService,
20
+ createProviderBackedKnowledgeSemanticLlm,
21
+ createWebKnowledgeGapRepairer,
22
+ projectPlanningProjectIdFromPath,
23
+ } from '@pellux/goodvibes-sdk/platform/knowledge';
24
+ import { MediaProviderRegistry, ensureBuiltinMediaProviders } from '@pellux/goodvibes-sdk/platform/media';
25
+ import { MultimodalService } from '@pellux/goodvibes-sdk/platform/multimodal';
26
+ import { AgentManager } from '@pellux/goodvibes-sdk/platform/tools';
27
+ import { AgentMessageBus } from '@pellux/goodvibes-sdk/platform/agents';
28
+ import { WrfcController } from '@pellux/goodvibes-sdk/platform/agents';
29
+ import { AgentOrchestrator } from '@pellux/goodvibes-sdk/platform/agents';
30
+ import { ArchetypeLoader } from '@pellux/goodvibes-sdk/platform/agents';
31
+ import { ProcessManager } from '@pellux/goodvibes-sdk/platform/tools';
32
+ import { ModeManager } from '@pellux/goodvibes-sdk/platform/state';
33
+ import { FileUndoManager } from '@pellux/goodvibes-sdk/platform/state';
34
+ import { MemoryRegistry } from '@pellux/goodvibes-sdk/platform/state';
35
+ import { MemoryStore } from '@pellux/goodvibes-sdk/platform/state';
36
+ import type { RuntimeEventBus } from '@/runtime/index.ts';
37
+ import { createDomainDispatch } from './store/index.ts';
38
+ import type { DomainDispatch, RuntimeStore } from './store/index.ts';
39
+ import { DistributedRuntimeManager } from '@/runtime/index.ts';
40
+ import { RemoteRunnerRegistry, RemoteSupervisor } from '@/runtime/index.ts';
41
+ import { IntegrationHelperService } from '@/runtime/index.ts';
42
+ import { VoiceProviderRegistry, VoiceService, ensureBuiltinVoiceProviders } from '@pellux/goodvibes-sdk/platform/voice';
43
+ import { WebSearchProviderRegistry, WebSearchService } from '@pellux/goodvibes-sdk/platform/web-search';
44
+ import { MemoryEmbeddingProviderRegistry } from '@pellux/goodvibes-sdk/platform/state';
45
+ import { PanelManager } from '../panels/panel-manager.ts';
46
+ import { HookActivityTracker } from '@pellux/goodvibes-sdk/platform/hooks';
47
+ import { HookDispatcher, createHookWorkbench, type HookWorkbench } from '@pellux/goodvibes-sdk/platform/hooks';
48
+ import { PluginManager } from '@pellux/goodvibes-sdk/platform/plugins';
49
+ import { BookmarkManager } from '@pellux/goodvibes-sdk/platform/bookmarks';
50
+ import { ProfileManager } from '@pellux/goodvibes-sdk/platform/profiles';
51
+ import { SessionManager } from '@pellux/goodvibes-sdk/platform/sessions';
52
+ import { CrossSessionTaskRegistry } from '@pellux/goodvibes-sdk/platform/sessions';
53
+ import { ApiTokenAuditor } from '@pellux/goodvibes-sdk/platform/security';
54
+ import { UserAuthManager } from '@pellux/goodvibes-sdk/platform/security';
55
+ import { WebhookNotifier } from '@pellux/goodvibes-sdk/platform/integrations';
56
+ import { McpRegistry } from '@pellux/goodvibes-sdk/platform/mcp';
57
+ import { DeterministicReplayEngine } from '@pellux/goodvibes-sdk/platform/core';
58
+ import { ProviderOptimizer } from '@pellux/goodvibes-sdk/platform/providers';
59
+ import { ProviderRegistry } from '@pellux/goodvibes-sdk/platform/providers';
60
+ import type { ModelDefinition } from '@pellux/goodvibes-sdk/platform/providers';
61
+ import { ProviderCapabilityRegistry } from '@pellux/goodvibes-sdk/platform/providers';
62
+ import { CacheHitTracker } from '@pellux/goodvibes-sdk/platform/providers';
63
+ import { FavoritesStore } from '@pellux/goodvibes-sdk/platform/providers';
64
+ import { BenchmarkStore } from '@pellux/goodvibes-sdk/platform/providers';
65
+ import { ModelLimitsService } from '@pellux/goodvibes-sdk/platform/providers';
66
+ import { KeybindingsManager } from '../input/keybindings.ts';
67
+ import { SessionMemoryStore } from '@pellux/goodvibes-sdk/platform/core';
68
+ import { SessionLineageTracker } from '@pellux/goodvibes-sdk/platform/core';
69
+ import { SessionChangeTracker } from '@pellux/goodvibes-sdk/platform/sessions';
70
+ import { ExecutionPlanManager } from '@pellux/goodvibes-sdk/platform/core';
71
+ import { AdaptivePlanner } from '@pellux/goodvibes-sdk/platform/core';
72
+ import { FileStateCache } from '@pellux/goodvibes-sdk/platform/state';
73
+ import { ProjectIndex } from '@pellux/goodvibes-sdk/platform/state';
74
+ import { IdempotencyStore } from '@/runtime/index.ts';
75
+ import { OverflowHandler } from '@pellux/goodvibes-sdk/platform/tools';
76
+ import { ToolLLM } from '@pellux/goodvibes-sdk/platform/config';
77
+ import { ComponentHealthMonitor } from '@/runtime/index.ts';
78
+ import { WorktreeRegistry } from '@/runtime/index.ts';
79
+ import { SandboxSessionRegistry } from '@/runtime/index.ts';
80
+ import { createShellPathService, type ShellPathService } from '@/runtime/index.ts';
81
+ import { GOODVIBES_AGENT_SURFACE_ROOT } from '../config/surface.ts';
82
+ import type { FeatureFlagManager } from '@/runtime/index.ts';
83
+ import { createFeatureFlagManager } from '@/runtime/index.ts';
84
+ import { PolicyRuntimeState } from '@/runtime/index.ts';
85
+ import {
86
+ createWorkflowServices,
87
+ type WorkflowServices,
88
+ } from '@pellux/goodvibes-sdk/platform/tools';
89
+ import { WorkPlanStore } from '../work-plans/work-plan-store.ts';
90
+
91
+ const REGULAR_KNOWLEDGE_DB_FILE = 'knowledge-wiki.sqlite';
92
+ const HOME_GRAPH_KNOWLEDGE_DB_FILE = 'knowledge-home-graph.sqlite';
93
+
94
+ function buildFallbackModelDefinition(provider: string, modelId: string): ModelDefinition {
95
+ const providerLower = provider.toLowerCase();
96
+ const isReasoningProvider = providerLower.includes('openai')
97
+ || providerLower.includes('anthropic')
98
+ || providerLower.includes('gemini')
99
+ || providerLower.includes('google');
100
+
101
+ return {
102
+ id: modelId,
103
+ provider,
104
+ registryKey: `${provider}:${modelId}`,
105
+ displayName: modelId,
106
+ description: 'Configured model available before the model catalog cache has loaded.',
107
+ capabilities: {
108
+ toolCalling: true,
109
+ codeEditing: true,
110
+ reasoning: isReasoningProvider,
111
+ multimodal: isReasoningProvider,
112
+ },
113
+ contextWindow: isReasoningProvider ? 128_000 : 32_000,
114
+ contextWindowProvenance: 'fallback',
115
+ selectable: true,
116
+ tier: 'standard',
117
+ ...(isReasoningProvider ? { reasoningEffort: ['instant', 'low', 'medium', 'high'] } : {}),
118
+ };
119
+ }
120
+
121
+ function ensureConfiguredModelIsRoutable(providerRegistry: ProviderRegistry, configManager: ConfigManager): void {
122
+ const configuredModel = String(configManager.get('provider.model') ?? '').trim();
123
+ if (!configuredModel.includes(':')) return;
124
+ if (providerRegistry.listModels().some((model) => model.registryKey === configuredModel)) return;
125
+
126
+ const [providerId, ...modelParts] = configuredModel.split(':');
127
+ const modelId = modelParts.join(':').trim();
128
+ if (!providerId || !modelId) return;
129
+
130
+ const provider = providerRegistry.tryGet(providerId);
131
+ if (!provider) return;
132
+
133
+ providerRegistry.registerRuntimeProvider({
134
+ provider,
135
+ replace: true,
136
+ models: [buildFallbackModelDefinition(providerId, modelId)],
137
+ });
138
+ }
139
+
140
+ export interface RuntimeServicesOptions {
141
+ readonly runtimeBus: RuntimeEventBus;
142
+ readonly runtimeStore: RuntimeStore;
143
+ readonly configManager: ConfigManager;
144
+ readonly localUserAuthManager?: UserAuthManager;
145
+ readonly featureFlags?: FeatureFlagManager;
146
+ readonly getConversationTitle?: () => string | undefined;
147
+ readonly workingDir: string;
148
+ readonly homeDirectory: string;
149
+ }
150
+
151
+ export interface RuntimeServices {
152
+ readonly workingDirectory: string;
153
+ readonly homeDirectory: string;
154
+ readonly shellPaths: ShellPathService;
155
+ readonly configManager: ConfigManager;
156
+ readonly featureFlags: FeatureFlagManager;
157
+ readonly runtimeBus: RuntimeEventBus;
158
+ readonly runtimeStore: RuntimeStore;
159
+ readonly runtimeDispatch: DomainDispatch;
160
+ readonly panelManager: PanelManager;
161
+ readonly keybindingsManager: KeybindingsManager;
162
+ readonly routeBindings: RouteBindingManager;
163
+ readonly surfaceRegistry: SurfaceRegistry;
164
+ readonly channelPlugins: ChannelPluginRegistry;
165
+ readonly channelDeliveryRouter: ChannelDeliveryRouter;
166
+ readonly watcherRegistry: WatcherRegistry;
167
+ readonly approvalBroker: ApprovalBroker;
168
+ readonly sessionBroker: SharedSessionBroker;
169
+ readonly deliveryManager: AutomationDeliveryManager;
170
+ readonly automationManager: AutomationManager;
171
+ readonly gatewayMethods: GatewayMethodCatalog;
172
+ readonly artifactStore: ArtifactStore;
173
+ readonly knowledgeService: KnowledgeService;
174
+ readonly agentKnowledgeService: KnowledgeService;
175
+ readonly homeGraphService: HomeGraphService;
176
+ readonly projectPlanningService: ProjectPlanningService;
177
+ readonly projectPlanningProjectId: string;
178
+ readonly workPlanStore: WorkPlanStore;
179
+ readonly memoryStore: MemoryStore;
180
+ readonly memoryRegistry: MemoryRegistry;
181
+ readonly serviceRegistry: ServiceRegistry;
182
+ readonly secretsManager: SecretsManager;
183
+ readonly subscriptionManager: SubscriptionManager;
184
+ readonly localUserAuthManager: UserAuthManager;
185
+ readonly profileManager: ProfileManager;
186
+ readonly bookmarkManager: BookmarkManager;
187
+ readonly sessionManager: SessionManager;
188
+ readonly sessionOrchestration: CrossSessionTaskRegistry;
189
+ readonly hookDispatcher: HookDispatcher;
190
+ readonly hookActivityTracker: HookActivityTracker;
191
+ readonly hookWorkbench: HookWorkbench;
192
+ readonly pluginManager: PluginManager;
193
+ readonly workflow: WorkflowServices;
194
+ readonly voiceProviders: VoiceProviderRegistry;
195
+ readonly voiceService: VoiceService;
196
+ readonly webSearchProviders: WebSearchProviderRegistry;
197
+ readonly webSearchService: WebSearchService;
198
+ readonly mediaProviders: MediaProviderRegistry;
199
+ readonly multimodalService: MultimodalService;
200
+ readonly memoryEmbeddingRegistry: MemoryEmbeddingProviderRegistry;
201
+ readonly channelPolicy: ChannelPolicyManager;
202
+ readonly mcpRegistry: McpRegistry;
203
+ readonly tokenAuditor: ApiTokenAuditor;
204
+ readonly componentHealthMonitor: ComponentHealthMonitor;
205
+ readonly worktreeRegistry: WorktreeRegistry;
206
+ readonly sandboxSessionRegistry: SandboxSessionRegistry;
207
+ readonly webhookNotifier: WebhookNotifier;
208
+ readonly replayEngine: DeterministicReplayEngine;
209
+ readonly providerOptimizer: ProviderOptimizer;
210
+ readonly providerCapabilityRegistry: ProviderCapabilityRegistry;
211
+ readonly cacheHitTracker: CacheHitTracker;
212
+ readonly favoritesStore: FavoritesStore;
213
+ readonly benchmarkStore: BenchmarkStore;
214
+ readonly modelLimitsService: ModelLimitsService;
215
+ readonly providerRegistry: ProviderRegistry;
216
+ readonly toolLLM: ToolLLM;
217
+ readonly distributedRuntime: DistributedRuntimeManager;
218
+ readonly remoteRunnerRegistry: RemoteRunnerRegistry;
219
+ readonly remoteSupervisor: RemoteSupervisor;
220
+ readonly sessionMemoryStore: SessionMemoryStore;
221
+ readonly sessionLineageTracker: SessionLineageTracker;
222
+ readonly sessionChangeTracker: SessionChangeTracker;
223
+ readonly planManager: ExecutionPlanManager;
224
+ readonly adaptivePlanner: AdaptivePlanner;
225
+ readonly idempotencyStore: IdempotencyStore;
226
+ readonly overflowHandler: OverflowHandler;
227
+ readonly policyRuntimeState: PolicyRuntimeState;
228
+ readonly archetypeLoader: ArchetypeLoader;
229
+ readonly agentManager: AgentManager;
230
+ readonly agentMessageBus: AgentMessageBus;
231
+ readonly agentOrchestrator: AgentOrchestrator;
232
+ readonly wrfcController: WrfcController;
233
+ readonly processManager: ProcessManager;
234
+ readonly modeManager: ModeManager;
235
+ readonly fileUndoManager: FileUndoManager;
236
+ readonly integrationHelpers: IntegrationHelperService;
237
+ /**
238
+ * Re-root path-bound stores (MemoryStore, ProjectIndex) to a new working directory.
239
+ * Called by WorkspaceSwapManager after the new directory has been verified.
240
+ * Stores that require a process restart emit a warn-level log; they continue serving
241
+ * the old path until the daemon restarts with the new --working-dir.
242
+ */
243
+ rerootStores(newWorkingDir: string): Promise<void>;
244
+ }
245
+
246
+ export function createRuntimeServices(options: RuntimeServicesOptions): RuntimeServices {
247
+ const workingDirectory = options.workingDir;
248
+ const homeDirectory = options.homeDirectory;
249
+ const shellPaths = createShellPathService({
250
+ workingDirectory,
251
+ homeDirectory,
252
+ });
253
+ const configManager = options.configManager;
254
+ const featureFlags = options.featureFlags ?? createFeatureFlagManager();
255
+ const runtimeDispatch = createDomainDispatch(options.runtimeStore);
256
+ const gatewayMethods = new GatewayMethodCatalog();
257
+ const panelManager = new PanelManager();
258
+ const keybindingsManager = new KeybindingsManager({
259
+ configPath: shellPaths.resolveUserPath(GOODVIBES_AGENT_SURFACE_ROOT, 'keybindings.json'),
260
+ });
261
+ const routeBindings = new RouteBindingManager({
262
+ store: new AutomationRouteStore({ configManager }),
263
+ runtimeStore: options.runtimeStore,
264
+ runtimeBus: options.runtimeBus,
265
+ });
266
+ const surfaceRegistry = new SurfaceRegistry(configManager, options.runtimeStore);
267
+ const channelPlugins = new ChannelPluginRegistry();
268
+ surfaceRegistry.attachPluginRegistry(channelPlugins);
269
+ const secretsManager = new SecretsManager({
270
+ projectRoot: workingDirectory,
271
+ globalHome: homeDirectory,
272
+ configManager,
273
+ });
274
+ const subscriptionManager = new SubscriptionManager(
275
+ shellPaths.resolveUserPath(GOODVIBES_AGENT_SURFACE_ROOT, 'subscriptions.json'),
276
+ );
277
+ const serviceRegistry = new ServiceRegistry(shellPaths.resolveProjectPath(GOODVIBES_AGENT_SURFACE_ROOT, 'services.json'), {
278
+ secretsManager,
279
+ subscriptionManager,
280
+ });
281
+ const providerCapabilityRegistry = new ProviderCapabilityRegistry();
282
+ const cacheHitTracker = new CacheHitTracker();
283
+ const favoritesStore = new FavoritesStore({ dir: shellPaths.resolveUserPath(GOODVIBES_AGENT_SURFACE_ROOT) });
284
+ const benchmarkStore = new BenchmarkStore({ dir: shellPaths.resolveUserPath(GOODVIBES_AGENT_SURFACE_ROOT) });
285
+ const modelLimitsService = new ModelLimitsService({
286
+ cachePath: shellPaths.resolveUserPath(GOODVIBES_AGENT_SURFACE_ROOT, 'model-limits.json'),
287
+ });
288
+ const providerRegistry = new ProviderRegistry({
289
+ configManager,
290
+ subscriptionManager,
291
+ secretsManager,
292
+ serviceRegistry,
293
+ capabilityRegistry: providerCapabilityRegistry,
294
+ cacheHitTracker,
295
+ favoritesStore,
296
+ benchmarkStore,
297
+ modelLimitsService,
298
+ featureFlags,
299
+ runtimeBus: options.runtimeBus,
300
+ });
301
+ ensureConfiguredModelIsRoutable(providerRegistry, configManager);
302
+ providerRegistry.initCustomProviders();
303
+ const toolLLM = new ToolLLM({
304
+ configManager,
305
+ providerRegistry,
306
+ });
307
+ const localUserAuthManager = options.localUserAuthManager ?? new UserAuthManager({
308
+ bootstrapFilePath: shellPaths.resolveUserPath(GOODVIBES_AGENT_SURFACE_ROOT, 'auth-users.json'),
309
+ bootstrapCredentialPath: shellPaths.resolveUserPath(GOODVIBES_AGENT_SURFACE_ROOT, 'auth-bootstrap.txt'),
310
+ });
311
+ const profileManager = new ProfileManager(shellPaths.resolveUserPath(GOODVIBES_AGENT_SURFACE_ROOT, 'profiles'));
312
+ const bookmarkManager = new BookmarkManager(shellPaths.resolveUserPath(GOODVIBES_AGENT_SURFACE_ROOT, 'bookmarks'));
313
+ const sessionManager = new SessionManager(workingDirectory, { surfaceRoot: GOODVIBES_AGENT_SURFACE_ROOT });
314
+ const sessionOrchestration = new CrossSessionTaskRegistry(
315
+ shellPaths.resolveProjectPath(GOODVIBES_AGENT_SURFACE_ROOT, 'sessions', 'task-graph.json'),
316
+ );
317
+ const hookActivityTracker = new HookActivityTracker();
318
+ const watcherRegistry = new WatcherRegistry({
319
+ storePath: shellPaths.resolveProjectPath(GOODVIBES_AGENT_SURFACE_ROOT, 'watchers.json'),
320
+ });
321
+ watcherRegistry.attachRuntime({
322
+ runtimeStore: options.runtimeStore,
323
+ runtimeBus: options.runtimeBus,
324
+ });
325
+ const agentMessageBus = new AgentMessageBus();
326
+ agentMessageBus.setRuntimeBus(options.runtimeBus);
327
+ const archetypeLoader = new ArchetypeLoader(join(workingDirectory, '.goodvibes', 'agents'));
328
+ const agentOrchestrator = new AgentOrchestrator({
329
+ messageBus: agentMessageBus,
330
+ });
331
+ agentOrchestrator.setRuntimeBus(options.runtimeBus);
332
+ const agentManager = new AgentManager({
333
+ archetypeLoader,
334
+ messageBus: agentMessageBus,
335
+ executor: agentOrchestrator,
336
+ configManager,
337
+ });
338
+ agentManager.setRuntimeBus(options.runtimeBus);
339
+ const wrfcController = new WrfcController(options.runtimeBus, agentMessageBus, {
340
+ agentManager,
341
+ configManager,
342
+ projectRoot: workingDirectory,
343
+ });
344
+ agentManager.setWrfcController(wrfcController);
345
+ const hookDispatcher = new HookDispatcher({ toolLLM, projectRoot: workingDirectory }, hookActivityTracker);
346
+ configManager.attachHookDispatcher(hookDispatcher);
347
+ const hookWorkbench = createHookWorkbench({
348
+ hookDispatcher,
349
+ configManager,
350
+ });
351
+ const approvalBroker = new ApprovalBroker({
352
+ storePath: shellPaths.resolveProjectPath(GOODVIBES_AGENT_SURFACE_ROOT, 'control-plane', 'approvals.json'),
353
+ });
354
+ const sessionBroker = new SharedSessionBroker({
355
+ storePath: shellPaths.resolveProjectPath(GOODVIBES_AGENT_SURFACE_ROOT, 'control-plane', 'sessions.json'),
356
+ routeBindings,
357
+ agentStatusProvider: agentManager,
358
+ messageSender: agentMessageBus,
359
+ });
360
+ sessionBroker.setContinuationRunner(async ({ task, input }) => {
361
+ throw new Error([
362
+ 'GoodVibes Agent does not own shared-session task execution.',
363
+ `Received task for session ${input.sessionId}: ${task}`,
364
+ 'Delegate explicit build/fix/review work to GoodVibes TUI through the public shared-session/build-delegation contract.',
365
+ ].join(' '));
366
+ });
367
+ const artifactStore = new ArtifactStore({ configManager });
368
+ const memoryEmbeddingRegistry = new MemoryEmbeddingProviderRegistry({ configManager });
369
+ const memoryDbPath = join(workingDirectory, '.goodvibes', GOODVIBES_AGENT_SURFACE_ROOT, 'memory.sqlite');
370
+ const memoryStore = new MemoryStore(memoryDbPath, {
371
+ embeddingRegistry: memoryEmbeddingRegistry,
372
+ });
373
+ const memoryRegistry = new MemoryRegistry(memoryStore);
374
+ const deliveryManager = new AutomationDeliveryManager({
375
+ configManager,
376
+ serviceRegistry,
377
+ runtimeBus: options.runtimeBus,
378
+ runtimeStore: options.runtimeStore,
379
+ routeBindings,
380
+ artifactStore,
381
+ });
382
+ const automationManager = new AutomationManager({
383
+ configManager,
384
+ defaultSurfaceKind: 'service',
385
+ routeBindings,
386
+ sessionBroker,
387
+ runtimeStore: options.runtimeStore,
388
+ runtimeBus: options.runtimeBus,
389
+ deliveryManager,
390
+ spawnTask: (input) => {
391
+ throw new Error([
392
+ 'GoodVibes Agent does not spawn local automation agents.',
393
+ `Received automation prompt: ${input.prompt}`,
394
+ 'Use read-only automation observability here; explicit build/fix/review execution belongs to GoodVibes TUI delegation.',
395
+ ].join(' '));
396
+ },
397
+ });
398
+ const knowledgeStore = new KnowledgeStore({
399
+ configManager,
400
+ dbFileName: REGULAR_KNOWLEDGE_DB_FILE,
401
+ });
402
+ const agentKnowledgeStore = new KnowledgeStore({
403
+ configManager,
404
+ dbFileName: GOODVIBES_AGENT_KNOWLEDGE_DB_FILE,
405
+ });
406
+ const homeGraphKnowledgeStore = new KnowledgeStore({
407
+ configManager,
408
+ dbFileName: HOME_GRAPH_KNOWLEDGE_DB_FILE,
409
+ });
410
+ const knowledgeSemanticLlm = createProviderBackedKnowledgeSemanticLlm(providerRegistry, {
411
+ timeoutMs: 20_000,
412
+ maxConcurrent: 1,
413
+ });
414
+ const knowledgeSemanticService = new KnowledgeSemanticService(knowledgeStore, {
415
+ llm: knowledgeSemanticLlm,
416
+ maxLlmSourcesPerReindex: 3,
417
+ });
418
+ const homeGraphSemanticService = new KnowledgeSemanticService(homeGraphKnowledgeStore, {
419
+ llm: knowledgeSemanticLlm,
420
+ maxLlmSourcesPerReindex: 3,
421
+ objectProfiles: HOME_GRAPH_KNOWLEDGE_EXTENSION.objectProfiles,
422
+ });
423
+ const agentKnowledgeSemanticService = new KnowledgeSemanticService(agentKnowledgeStore, {
424
+ llm: knowledgeSemanticLlm,
425
+ maxLlmSourcesPerReindex: 3,
426
+ });
427
+ const knowledgeService = new KnowledgeService(knowledgeStore, artifactStore, undefined, {
428
+ memoryRegistry,
429
+ runtimeBus: options.runtimeBus,
430
+ semanticService: knowledgeSemanticService,
431
+ });
432
+ knowledgeService.attachRuntimeBus(options.runtimeBus);
433
+ const agentKnowledgeService = new KnowledgeService(agentKnowledgeStore, artifactStore, undefined, {
434
+ memoryRegistry,
435
+ runtimeBus: options.runtimeBus,
436
+ semanticService: agentKnowledgeSemanticService,
437
+ });
438
+ agentKnowledgeService.attachRuntimeBus(options.runtimeBus);
439
+ const homeGraphService = new HomeGraphService(homeGraphKnowledgeStore, artifactStore, {
440
+ semanticService: homeGraphSemanticService,
441
+ });
442
+ const projectPlanningProjectId = projectPlanningProjectIdFromPath(workingDirectory);
443
+ const projectPlanningService = new ProjectPlanningService(knowledgeStore, {
444
+ defaultProjectId: projectPlanningProjectId,
445
+ });
446
+ const workPlanStore = new WorkPlanStore({
447
+ homeDirectory,
448
+ projectId: projectPlanningProjectId,
449
+ projectRoot: workingDirectory,
450
+ });
451
+ const voiceProviders = new VoiceProviderRegistry();
452
+ ensureBuiltinVoiceProviders(voiceProviders);
453
+ const voiceService = new VoiceService(voiceProviders);
454
+ const webSearchProviders = new WebSearchProviderRegistry({
455
+ env: process.env,
456
+ serviceRegistry,
457
+ });
458
+ const webSearchService = new WebSearchService(webSearchProviders, {
459
+ serviceRegistry,
460
+ featureFlags,
461
+ });
462
+ knowledgeSemanticService.setGapRepairer(createWebKnowledgeGapRepairer({
463
+ searchService: webSearchService,
464
+ ingestService: knowledgeService,
465
+ }));
466
+ agentKnowledgeSemanticService.setGapRepairer(createWebKnowledgeGapRepairer({
467
+ searchService: webSearchService,
468
+ ingestService: agentKnowledgeService,
469
+ }));
470
+ homeGraphSemanticService.setGapRepairer(createWebKnowledgeGapRepairer({
471
+ searchService: webSearchService,
472
+ ingestService: homeGraphService,
473
+ }));
474
+ const mediaProviders = new MediaProviderRegistry();
475
+ ensureBuiltinMediaProviders(mediaProviders, artifactStore, providerRegistry);
476
+ const multimodalService = new MultimodalService(artifactStore, mediaProviders, voiceService, knowledgeService);
477
+ const pluginManager = new PluginManager({
478
+ pathOptions: {
479
+ cwd: shellPaths.workingDirectory,
480
+ homeDir: shellPaths.homeDirectory,
481
+ },
482
+ stateFilePath: shellPaths.resolveUserPath(GOODVIBES_AGENT_SURFACE_ROOT, 'plugins.json'),
483
+ });
484
+ const workflow = createWorkflowServices();
485
+ hookDispatcher.setTriggerManager(workflow.triggerManager);
486
+ const channelPolicy = new ChannelPolicyManager({
487
+ storePath: shellPaths.resolveProjectPath(GOODVIBES_AGENT_SURFACE_ROOT, 'channels', 'policies.json'),
488
+ });
489
+ const distributedRuntime = new DistributedRuntimeManager(
490
+ shellPaths.resolveProjectPath(GOODVIBES_AGENT_SURFACE_ROOT, 'remote', 'distributed-runtime.json'),
491
+ );
492
+ distributedRuntime.attachRuntime({
493
+ sessionBridge: sessionBroker,
494
+ approvalBridge: approvalBroker,
495
+ automationBridge: automationManager,
496
+ });
497
+ const remoteRunnerRegistry = new RemoteRunnerRegistry(agentManager);
498
+ const remoteSupervisor = new RemoteSupervisor(remoteRunnerRegistry);
499
+ const sandboxSessionRegistry = new SandboxSessionRegistry(workingDirectory);
500
+ const mcpRegistry = new McpRegistry({
501
+ hookDispatcher,
502
+ sandboxSessions: sandboxSessionRegistry,
503
+ });
504
+ mcpRegistry.setRuntimeBus(options.runtimeBus);
505
+ mcpRegistry.setSandboxRuntime(configManager, sandboxSessionRegistry);
506
+ const tokenAuditor = new ApiTokenAuditor({ managed: false });
507
+ const componentHealthMonitor = new ComponentHealthMonitor();
508
+ const worktreeRegistry = new WorktreeRegistry(workingDirectory);
509
+ const webhookNotifier = new WebhookNotifier();
510
+ const replayEngine = new DeterministicReplayEngine(workingDirectory);
511
+ const providerOptimizer = new ProviderOptimizer(providerRegistry, providerCapabilityRegistry, false);
512
+ const sessionMemoryStore = new SessionMemoryStore();
513
+ const sessionLineageTracker = new SessionLineageTracker();
514
+ const sessionChangeTracker = new SessionChangeTracker();
515
+ const planManager = new ExecutionPlanManager(workingDirectory);
516
+ const adaptivePlanner = new AdaptivePlanner();
517
+ const idempotencyStore = new IdempotencyStore();
518
+ const overflowHandler = new OverflowHandler({ baseDir: workingDirectory });
519
+ const policyRuntimeState = new PolicyRuntimeState();
520
+ const fileCache = new FileStateCache();
521
+ const projectIndex = new ProjectIndex(workingDirectory);
522
+ const channelDeliveryRouter = new ChannelDeliveryRouter({
523
+ configManager,
524
+ secretsManager,
525
+ serviceRegistry,
526
+ artifactStore,
527
+ });
528
+ const processManager = new ProcessManager();
529
+ const modeManager = new ModeManager();
530
+ const fileUndoManager = new FileUndoManager();
531
+ const integrationHelpers = new IntegrationHelperService({
532
+ workingDirectory,
533
+ homeDirectory,
534
+ runtimeStore: options.runtimeStore,
535
+ runtimeBus: options.runtimeBus,
536
+ configManager,
537
+ getConversationTitle: options.getConversationTitle,
538
+ automationManager,
539
+ approvalBroker,
540
+ sessionBroker,
541
+ distributedRuntime,
542
+ remoteRunnerRegistry,
543
+ remoteSupervisor,
544
+ panelManager,
545
+ localUserAuthManager,
546
+ providerRegistry,
547
+ serviceRegistry,
548
+ subscriptionManager,
549
+ secretsManager,
550
+ });
551
+ agentOrchestrator.setDependencies({
552
+ surfaceRoot: GOODVIBES_AGENT_SURFACE_ROOT,
553
+ fileCache,
554
+ projectIndex,
555
+ workingDirectory,
556
+ fileUndoManager,
557
+ modeManager,
558
+ processManager,
559
+ agentMessageBus,
560
+ webSearchService,
561
+ channelRegistry: channelPlugins,
562
+ remoteRunnerRegistry,
563
+ knowledgeService,
564
+ memoryRegistry,
565
+ archetypeLoader,
566
+ configManager,
567
+ providerRegistry,
568
+ providerOptimizer,
569
+ toolLLM,
570
+ serviceRegistry,
571
+ sessionOrchestration,
572
+ featureFlags,
573
+ overflowHandler,
574
+ sandboxSessionRegistry,
575
+ workflowServices: workflow,
576
+ });
577
+
578
+ return {
579
+ workingDirectory,
580
+ homeDirectory,
581
+ shellPaths,
582
+ configManager,
583
+ featureFlags,
584
+ runtimeBus: options.runtimeBus,
585
+ runtimeStore: options.runtimeStore,
586
+ runtimeDispatch,
587
+ panelManager,
588
+ keybindingsManager,
589
+ routeBindings,
590
+ surfaceRegistry,
591
+ channelPlugins,
592
+ channelDeliveryRouter,
593
+ watcherRegistry,
594
+ approvalBroker,
595
+ sessionBroker,
596
+ deliveryManager,
597
+ automationManager,
598
+ gatewayMethods,
599
+ artifactStore,
600
+ knowledgeService,
601
+ agentKnowledgeService,
602
+ homeGraphService,
603
+ projectPlanningService,
604
+ projectPlanningProjectId,
605
+ workPlanStore,
606
+ memoryStore,
607
+ memoryRegistry,
608
+ serviceRegistry,
609
+ secretsManager,
610
+ subscriptionManager,
611
+ localUserAuthManager,
612
+ profileManager,
613
+ bookmarkManager,
614
+ sessionManager,
615
+ sessionOrchestration,
616
+ hookDispatcher,
617
+ hookActivityTracker,
618
+ hookWorkbench,
619
+ pluginManager,
620
+ workflow,
621
+ voiceProviders,
622
+ voiceService,
623
+ webSearchProviders,
624
+ webSearchService,
625
+ mediaProviders,
626
+ multimodalService,
627
+ memoryEmbeddingRegistry,
628
+ channelPolicy,
629
+ mcpRegistry,
630
+ tokenAuditor,
631
+ componentHealthMonitor,
632
+ worktreeRegistry,
633
+ sandboxSessionRegistry,
634
+ webhookNotifier,
635
+ replayEngine,
636
+ providerOptimizer,
637
+ providerCapabilityRegistry,
638
+ cacheHitTracker,
639
+ favoritesStore,
640
+ benchmarkStore,
641
+ modelLimitsService,
642
+ providerRegistry,
643
+ toolLLM,
644
+ distributedRuntime,
645
+ remoteRunnerRegistry,
646
+ remoteSupervisor,
647
+ sessionMemoryStore,
648
+ sessionLineageTracker,
649
+ sessionChangeTracker,
650
+ planManager,
651
+ adaptivePlanner,
652
+ idempotencyStore,
653
+ overflowHandler,
654
+ policyRuntimeState,
655
+ archetypeLoader,
656
+ agentManager,
657
+ agentMessageBus,
658
+ agentOrchestrator,
659
+ wrfcController,
660
+ processManager,
661
+ modeManager,
662
+ fileUndoManager,
663
+ integrationHelpers,
664
+ async rerootStores(newWorkingDir: string): Promise<void> {
665
+ const newMemoryDbPath = join(newWorkingDir, '.goodvibes', GOODVIBES_AGENT_SURFACE_ROOT, 'memory.sqlite');
666
+ await memoryStore.reroot(newMemoryDbPath);
667
+ await projectIndex.reroot(newWorkingDir);
668
+ },
669
+ };
670
+ }
@@ -0,0 +1,15 @@
1
+ export const DOMAINS = [
2
+ 'panels',
3
+ 'ui-perf',
4
+ ] as const;
5
+
6
+ export type DomainName = (typeof DOMAINS)[number];
7
+
8
+ export const DOMAIN_READ_MATRIX: ReadonlyArray<{
9
+ readonly reader: DomainName;
10
+ readonly reads: readonly DomainName[];
11
+ }> = [];
12
+
13
+ export function getAllowedReadsFor(reader: DomainName): ReadonlySet<DomainName> {
14
+ return new Set<DomainName>([reader]);
15
+ }