@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,172 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { ConfigManager } from '../config/index.ts';
4
+ import { formatProviderModel, getModelIdFromProviderModel, getProviderIdFromModel } from '../config/provider-model.ts';
5
+ import { readOnboardingCheckMarkers } from '../runtime/onboarding/index.ts';
6
+ import { GlobalNetworkTransportInstaller } from '@/runtime/index.ts';
7
+ import { createShellPathService } from '@/runtime/index.ts';
8
+ import { configureActivityLogger } from '@pellux/goodvibes-sdk/platform/utils';
9
+ import {
10
+ applyRuntimeCommandEndpointFlagOverrides,
11
+ applyRuntimeConfigOverrides,
12
+ applyRuntimeConfigValue,
13
+ applyRuntimeFeatureFlagOverrides,
14
+ buildCliStatusSnapshot,
15
+ handleGoodVibesCliCommand,
16
+ parseGoodVibesCli,
17
+ renderCliStatus,
18
+ renderCompletion,
19
+ renderGoodVibesCommandHelp,
20
+ renderGoodVibesHelp,
21
+ renderGoodVibesVersion,
22
+ renderOnboardingCliStatus,
23
+ } from './index.ts';
24
+ import { buildCliServicePosture } from './service-posture.ts';
25
+ import { GOODVIBES_AGENT_SURFACE_ROOT } from '../config/surface.ts';
26
+
27
+ type ShellEntrypointOwnership = {
28
+ readonly workingDirectory: string;
29
+ readonly homeDirectory: string;
30
+ };
31
+
32
+ export type ShellEntrypointRoots = {
33
+ readonly defaultWorkingDirectory: string;
34
+ readonly homeDirectory: string;
35
+ };
36
+
37
+ export type PreparedShellCliRuntime = {
38
+ readonly cli: ReturnType<typeof parseGoodVibesCli>;
39
+ readonly configManager: ConfigManager;
40
+ readonly bootstrapWorkingDir: string;
41
+ readonly bootstrapHomeDirectory: string;
42
+ };
43
+
44
+ function resolveShellEntrypointOwnership(roots: ShellEntrypointRoots, workingDirOverride?: string): ShellEntrypointOwnership {
45
+ return {
46
+ workingDirectory: workingDirOverride ?? roots.defaultWorkingDirectory,
47
+ homeDirectory: roots.homeDirectory,
48
+ };
49
+ }
50
+
51
+ export async function prepareShellCliRuntime(
52
+ argv: readonly string[],
53
+ roots: ShellEntrypointRoots,
54
+ binary = 'goodvibes-agent',
55
+ ): Promise<PreparedShellCliRuntime> {
56
+ const cli = parseGoodVibesCli(argv, binary);
57
+
58
+ if (cli.errors.length > 0) {
59
+ console.error(cli.errors.join('\n'));
60
+ console.error('');
61
+ console.error(renderGoodVibesHelp(binary));
62
+ process.exit(2);
63
+ }
64
+
65
+ if (cli.flags.help || cli.command === 'help') {
66
+ const helpTopic = cli.command === 'help'
67
+ ? cli.commandArgs[0]
68
+ : cli.rawCommand ?? undefined;
69
+ console.log(helpTopic ? renderGoodVibesCommandHelp(helpTopic, binary) : renderGoodVibesHelp(binary));
70
+ process.exit(0);
71
+ }
72
+
73
+ if (cli.flags.version || cli.command === 'version') {
74
+ console.log(renderGoodVibesVersion(binary));
75
+ process.exit(0);
76
+ }
77
+
78
+ if (cli.command === 'completion') {
79
+ console.log(renderCompletion(cli.commandArgs[0], binary));
80
+ process.exit(0);
81
+ }
82
+
83
+ if (cli.command === 'serve') {
84
+ console.error(`${binary} connects to an already-running GoodVibes daemon and does not start or own daemon lifecycle.`);
85
+ console.error('Start or manage the daemon from GoodVibes TUI or your daemon host tooling, then run this Agent against it.');
86
+ process.exit(2);
87
+ }
88
+
89
+ const {
90
+ workingDirectory: bootstrapWorkingDir,
91
+ homeDirectory: bootstrapHomeDirectory,
92
+ } = resolveShellEntrypointOwnership(roots, cli.flags.workingDir ?? (cli.command === 'tui' ? cli.commandArgs[0] : undefined));
93
+ configureActivityLogger(join(bootstrapWorkingDir, '.goodvibes', 'logs'));
94
+ const configManager = new ConfigManager({
95
+ workingDir: bootstrapWorkingDir,
96
+ homeDir: bootstrapHomeDirectory,
97
+ surfaceRoot: GOODVIBES_AGENT_SURFACE_ROOT,
98
+ });
99
+ new GlobalNetworkTransportInstaller().install(configManager);
100
+
101
+ const overrideErrors = applyRuntimeConfigOverrides(configManager, cli.flags.configOverrides);
102
+ if (overrideErrors.length > 0) {
103
+ console.error(overrideErrors.join('\n'));
104
+ process.exit(2);
105
+ }
106
+ applyRuntimeFeatureFlagOverrides(configManager, {
107
+ enableFeatures: cli.flags.enableFeatures,
108
+ disableFeatures: cli.flags.disableFeatures,
109
+ });
110
+
111
+ if (cli.flags.provider !== undefined || cli.flags.model !== undefined) {
112
+ const currentModel = configManager.get('provider.model');
113
+ const provider = cli.flags.provider ?? getProviderIdFromModel(currentModel);
114
+ const model = cli.flags.model ?? getModelIdFromProviderModel(currentModel);
115
+ applyRuntimeConfigValue(configManager, 'provider.model', formatProviderModel(provider, model));
116
+ }
117
+ const endpointOverrideErrors = applyRuntimeCommandEndpointFlagOverrides(configManager, cli.command, cli.flags);
118
+ if (endpointOverrideErrors.length > 0) {
119
+ console.error(endpointOverrideErrors.join('\n'));
120
+ process.exit(2);
121
+ }
122
+
123
+ if (cli.command === 'status' || cli.command === 'doctor' || (cli.command === 'onboarding' && cli.commandArgs[0] === 'status')) {
124
+ const shellPaths = createShellPathService({
125
+ workingDirectory: bootstrapWorkingDir,
126
+ homeDirectory: bootstrapHomeDirectory,
127
+ });
128
+ const userStorePath = shellPaths.resolveUserPath(GOODVIBES_AGENT_SURFACE_ROOT, 'auth-users.json');
129
+ const bootstrapCredentialPath = shellPaths.resolveUserPath(GOODVIBES_AGENT_SURFACE_ROOT, 'auth-bootstrap.txt');
130
+ const operatorTokenPath = join(bootstrapHomeDirectory, '.goodvibes', 'daemon', 'operator-tokens.json');
131
+ const onboardingMarkers = readOnboardingCheckMarkers(shellPaths);
132
+ const service = await buildCliServicePosture({
133
+ configManager,
134
+ workingDirectory: bootstrapWorkingDir,
135
+ homeDirectory: bootstrapHomeDirectory,
136
+ });
137
+ const statusOptions = {
138
+ configManager,
139
+ workingDirectory: bootstrapWorkingDir,
140
+ homeDirectory: bootstrapHomeDirectory,
141
+ onboardingMarkers,
142
+ auth: {
143
+ userStorePath,
144
+ userStorePresent: existsSync(userStorePath),
145
+ bootstrapCredentialPath,
146
+ bootstrapCredentialPresent: existsSync(bootstrapCredentialPath),
147
+ operatorTokenPath,
148
+ operatorTokenPresent: existsSync(operatorTokenPath),
149
+ },
150
+ service,
151
+ doctor: cli.command === 'doctor',
152
+ outputFormat: cli.flags.outputFormat,
153
+ };
154
+ const snapshot = buildCliStatusSnapshot(statusOptions);
155
+ console.log(cli.command === 'onboarding'
156
+ ? renderOnboardingCliStatus(statusOptions)
157
+ : renderCliStatus(statusOptions));
158
+ process.exit(cli.command === 'doctor' && snapshot.findings.length > 0 ? 1 : 0);
159
+ }
160
+
161
+ const cliCommandResult = await handleGoodVibesCliCommand({
162
+ cli,
163
+ configManager,
164
+ workingDirectory: bootstrapWorkingDir,
165
+ homeDirectory: bootstrapHomeDirectory,
166
+ });
167
+ if (cliCommandResult.handled) {
168
+ process.exit(cliCommandResult.exitCode);
169
+ }
170
+
171
+ return { cli, configManager, bootstrapWorkingDir, bootstrapHomeDirectory };
172
+ }
@@ -0,0 +1,299 @@
1
+ import { existsSync, readFileSync } from 'node:fs';
2
+ import { dirname, join } from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ import { VERSION } from '../version.ts';
5
+
6
+ function readJsonVersion(path: string): string | null {
7
+ try {
8
+ if (!existsSync(path)) return null;
9
+ const parsed = JSON.parse(readFileSync(path, 'utf-8')) as { version?: unknown };
10
+ return typeof parsed.version === 'string' ? parsed.version : null;
11
+ } catch {
12
+ return null;
13
+ }
14
+ }
15
+
16
+ export function getPackageVersion(): string {
17
+ const here = dirname(fileURLToPath(import.meta.url));
18
+ return readJsonVersion(join(here, '..', '..', 'package.json'))
19
+ ?? VERSION;
20
+ }
21
+
22
+ export function renderGoodVibesVersion(binary = 'goodvibes-agent'): string {
23
+ return `${binary} ${getPackageVersion()}`;
24
+ }
25
+
26
+ export function renderGoodVibesHelp(binary = 'goodvibes-agent'): string {
27
+ return [
28
+ `Usage: ${binary} [OPTIONS] [PROMPT]`,
29
+ ` ${binary} [OPTIONS] <COMMAND> [ARGS]`,
30
+ '',
31
+ 'Commands:',
32
+ ' tui [path] Start the interactive Agent terminal UI (default)',
33
+ ' run|exec [prompt] Run non-interactively with text/json/stream-json output',
34
+ ' web Show browser surface bind URL and enablement',
35
+ ' service Inspect existing daemon service posture (read-only)',
36
+ ' status Print config, provider, service, and onboarding posture',
37
+ ' doctor Print status plus setup warnings',
38
+ ' onboarding [status] Open Agent onboarding, or print onboarding status',
39
+ ' models [provider] List/use/pin selectable models and recent model history',
40
+ ' providers List/inspect/use provider config/auth posture',
41
+ ' auth Inspect and manage local users, sessions, and bootstrap auth',
42
+ ' subscription Start/finish/logout provider subscription sessions',
43
+ ' secrets List, set, link, delete, and test GoodVibes secret refs',
44
+ ' sessions List, show, export, or resume saved sessions',
45
+ ' tasks List/show in-process tasks or submit a non-interactive task',
46
+ ' pair|qrcode Print companion pairing payload and QR code',
47
+ ' surfaces Inspect/check browser/listener/external surfaces (read-only)',
48
+ ' listener test Test HTTP listener/webhook readiness',
49
+ ' control-plane status Inspect daemon auth, local admin, tokens, and ports',
50
+ ' bundle export|inspect|import',
51
+ ' Move setup/profile/trust/support bundles',
52
+ ' remote|bridge Inspect remote runner/node posture',
53
+ ' completion <shell> Generate shell completion script',
54
+ ' help [command] Print this help or command-specific help',
55
+ ' version Print version',
56
+ '',
57
+ 'Options:',
58
+ ' -m, --model <registryKey> Override model. provider:model infers --provider',
59
+ ' --provider <id> Override provider',
60
+ ' -C, --cd <dir> Set working directory for this launch',
61
+ ' --working-dir <dir> Alias for --cd',
62
+ ' --daemon-home <dir> Override daemon home for daemon-backed commands',
63
+ ' -c, --config <key=value> Override a config value for this launch',
64
+ ' --enable <feature> Enable a feature flag for this launch',
65
+ ' --disable <feature> Disable a feature flag for this launch',
66
+ ' -p, --prompt <text> Run a non-interactive prompt',
67
+ ' --print Alias for non-interactive run mode',
68
+ ' -o, --output <format> text, json, or stream-json',
69
+ ' --output-format <format> Alias for --output',
70
+ ' --json Alias for --output-format json',
71
+ ' --no-alt-screen Keep output in normal terminal scrollback',
72
+ ' --port <port> Port for server/web commands',
73
+ ' --hostname <host> Hostname for server/web commands',
74
+ ' --open Open browser when supported',
75
+ ' -r, --resume [id|latest] Resume saved session when supported',
76
+ ' -s, --session <id> Use a specific session when supported',
77
+ ' --continue Continue the latest session when supported',
78
+ ' --fork Fork session when supported',
79
+ ' -h, --help Print help',
80
+ ' -v, --version Print version',
81
+ '',
82
+ 'Examples:',
83
+ ` ${binary}`,
84
+ ` ${binary} --no-alt-screen`,
85
+ ` ${binary} --cd ~/work/project --model openai:gpt-5.2`,
86
+ ` ${binary} onboarding`,
87
+ ` ${binary} onboarding status`,
88
+ ` ${binary} status`,
89
+ ` ${binary} models current`,
90
+ ` ${binary} models use openai:gpt-5.2`,
91
+ ` ${binary} providers inspect openai`,
92
+ ` ${binary} surfaces`,
93
+ ` ${binary} surfaces check`,
94
+ ` ${binary} service check`,
95
+ ` ${binary} listener test`,
96
+ ` ${binary} control-plane status`,
97
+ ` ${binary} subscription providers`,
98
+ ` ${binary} subscription login openai start --open`,
99
+ ].join('\n');
100
+ }
101
+
102
+ type CommandHelp = {
103
+ readonly usage: readonly string[];
104
+ readonly summary: string;
105
+ readonly subcommands?: readonly string[];
106
+ readonly examples?: readonly string[];
107
+ };
108
+
109
+ const COMMAND_HELP: Record<string, CommandHelp> = {
110
+ tui: {
111
+ usage: ['tui [path]', '[prompt]'],
112
+ summary: 'Start the interactive Agent terminal UI. A prompt starts Agent with that prompt seeded.',
113
+ examples: ['', 'tui ~/work/project', '"summarize current tasks"'],
114
+ },
115
+ run: {
116
+ usage: ['run [prompt] [--output text|json|stream-json]', 'exec [prompt]'],
117
+ summary: 'Run a single non-interactive agent turn and write the result to stdout.',
118
+ examples: ['run "summarize the current project"', 'run --output json "list risks"', 'exec --output stream-json "check daemon status"'],
119
+ },
120
+ onboarding: {
121
+ usage: ['onboarding', 'setup', 'onboarding status'],
122
+ summary: 'Open the setup wizard, or inspect whether onboarding has already been shown for this user.',
123
+ examples: ['onboarding', 'onboarding status'],
124
+ },
125
+ status: {
126
+ usage: ['status', 'status --json'],
127
+ summary: 'Print config, provider, auth, service, surface, and onboarding posture.',
128
+ examples: ['status', 'status --json'],
129
+ },
130
+ doctor: {
131
+ usage: ['doctor', 'doctor --json'],
132
+ summary: 'Print status plus actionable setup warnings with cause, impact, and next action.',
133
+ examples: ['doctor', 'doctor --json'],
134
+ },
135
+ providers: {
136
+ usage: ['providers [list]', 'providers current', 'providers inspect <provider>', 'providers use <provider> [modelRegistryKey]'],
137
+ summary: 'Inspect and change provider setup, auth posture, model counts, and setup class.',
138
+ examples: ['providers', 'providers inspect openai-subscriber', 'providers use openai openai:gpt-5.4'],
139
+ },
140
+ models: {
141
+ usage: ['models [provider]', 'models current', 'models use <registryKey>', 'models pin <registryKey>', 'models recent'],
142
+ summary: 'List, inspect, select, pin, and review model choices.',
143
+ examples: ['models current', 'models openai', 'models use openai:gpt-5.4'],
144
+ },
145
+ auth: {
146
+ usage: ['auth status', 'auth users', 'auth sessions', 'auth add-user <username>', 'auth clear-bootstrap'],
147
+ summary: 'Inspect and manage local admin users, bootstrap auth, and local sessions.',
148
+ examples: ['auth', 'auth add-user admin --password-stdin', 'auth clear-bootstrap'],
149
+ },
150
+ subscription: {
151
+ usage: ['subscription list', 'subscription providers', 'subscription inspect <provider>', 'subscription login <provider> start|finish', 'subscription logout <provider>'],
152
+ summary: 'Manage OAuth/subscription-backed provider sessions such as OpenAI subscription access.',
153
+ examples: ['subscription providers', 'subscription login openai start --open', 'subscription inspect openai'],
154
+ },
155
+ secrets: {
156
+ usage: ['secrets list', 'secrets providers', 'secrets test goodvibes://secrets/<source>/...', 'secrets set <KEY> <value>', 'secrets link <KEY> <ref>'],
157
+ summary: 'Manage GoodVibes secret records and secret references. Secret refs never embed secret values.',
158
+ examples: ['secrets providers', 'secrets test goodvibes://secrets/env/OPENAI_API_KEY', 'secrets link OPENAI_API_KEY goodvibes://secrets/env/OPENAI_API_KEY'],
159
+ },
160
+ sessions: {
161
+ usage: ['sessions list', 'sessions show <id|name>', 'sessions export <id|name> [path]', 'sessions resume <id|name>'],
162
+ summary: 'List, inspect, export, or resume saved Agent terminal sessions.',
163
+ examples: ['sessions list', 'sessions show latest-session', 'sessions export abc123 session.json'],
164
+ },
165
+ tasks: {
166
+ usage: ['tasks list', 'tasks show <taskId>', 'tasks submit <prompt>'],
167
+ summary: 'Inspect runtime tasks or submit a non-interactive task.',
168
+ examples: ['tasks list', 'tasks submit "check provider readiness"'],
169
+ },
170
+ surfaces: {
171
+ usage: ['surfaces [list]', 'surfaces check', 'surfaces show <surfaceId>'],
172
+ summary: 'Inspect browser, control-plane, HTTP listener, and external integration surfaces. Agent does not mutate daemon/listener posture.',
173
+ examples: ['surfaces', 'surfaces check', 'surfaces show slack'],
174
+ },
175
+ listener: {
176
+ usage: ['listener test'],
177
+ summary: 'Check HTTP listener/webhook readiness, network posture, service posture, auth, and enabled surface requirements.',
178
+ examples: ['listener test', 'listener test --json'],
179
+ },
180
+ 'control-plane': {
181
+ usage: ['control-plane status'],
182
+ summary: 'Inspect daemon control-plane bind posture, reachability, local auth, bootstrap credentials, and operator tokens.',
183
+ examples: ['control-plane status', 'control-plane status --json'],
184
+ },
185
+ bundle: {
186
+ usage: ['bundle export [path]', 'bundle inspect <path>', 'bundle import <path>'],
187
+ summary: 'Export, inspect, or import setup/profile/trust/support bundle data.',
188
+ examples: ['bundle export goodvibes-agent-bundle.json', 'bundle inspect goodvibes-agent-bundle.json'],
189
+ },
190
+ pair: {
191
+ usage: ['pair', 'qrcode'],
192
+ summary: 'Print companion pairing connection details and a QR code.',
193
+ examples: ['pair', 'qrcode'],
194
+ },
195
+ web: {
196
+ usage: ['web [--open]'],
197
+ summary: 'Show the configured browser surface URL, bind address, and enablement state.',
198
+ examples: ['web', 'web --open', 'web --hostname 0.0.0.0 --port 3423'],
199
+ },
200
+ service: {
201
+ usage: ['service status', 'service check'],
202
+ summary: 'Inspect the externally owned GoodVibes daemon service posture. Agent does not install, start, stop, restart, or uninstall the daemon.',
203
+ examples: ['service status', 'service check --json'],
204
+ },
205
+ completion: {
206
+ usage: ['completion <bash|zsh|fish>'],
207
+ summary: 'Generate shell completion scripts.',
208
+ examples: ['completion bash', 'completion zsh'],
209
+ },
210
+ serve: {
211
+ usage: ['serve [--hostname <host>] [--port <port>]', 'daemon [--hostname <host>] [--port <port>]'],
212
+ summary: 'Unavailable in GoodVibes Agent. Agent connects to an already-running GoodVibes daemon owned by GoodVibes TUI/daemon tooling.',
213
+ examples: [],
214
+ },
215
+ remote: {
216
+ usage: ['remote', 'bridge'],
217
+ summary: 'Inspect remote runner/node posture and bridge readiness.',
218
+ examples: ['remote', 'bridge'],
219
+ },
220
+ };
221
+
222
+ const HELP_ALIASES: Record<string, string> = {
223
+ app: 'tui',
224
+ exec: 'run',
225
+ setup: 'onboarding',
226
+ provider: 'providers',
227
+ model: 'models',
228
+ subscriptions: 'subscription',
229
+ secret: 'secrets',
230
+ session: 'sessions',
231
+ task: 'tasks',
232
+ surface: 'surfaces',
233
+ webhook: 'listener',
234
+ controlplane: 'control-plane',
235
+ cp: 'control-plane',
236
+ qrcode: 'pair',
237
+ qr: 'pair',
238
+ daemon: 'serve',
239
+ server: 'serve',
240
+ services: 'service',
241
+ bridge: 'remote',
242
+ };
243
+
244
+ function normalizeHelpTopic(topic: string): string {
245
+ const normalized = topic.trim().toLowerCase();
246
+ return HELP_ALIASES[normalized] ?? normalized;
247
+ }
248
+
249
+ export function renderGoodVibesCommandHelp(topic: string, binary = 'goodvibes-agent'): string {
250
+ const normalized = normalizeHelpTopic(topic);
251
+ const help = COMMAND_HELP[normalized];
252
+ if (!help) {
253
+ return [
254
+ `No detailed help is available for "${topic}".`,
255
+ '',
256
+ renderGoodVibesHelp(binary),
257
+ ].join('\n');
258
+ }
259
+ return [
260
+ `GoodVibes ${normalized}`,
261
+ '',
262
+ help.summary,
263
+ '',
264
+ 'Usage:',
265
+ ...help.usage.map((usage) => ` ${binary} ${usage}`),
266
+ ...(help.subcommands && help.subcommands.length > 0 ? [
267
+ '',
268
+ 'Subcommands:',
269
+ ...help.subcommands.map((subcommand) => ` ${subcommand}`),
270
+ ] : []),
271
+ ...(help.examples && help.examples.length > 0 ? [
272
+ '',
273
+ 'Examples:',
274
+ ...help.examples.map((example) => ` ${binary}${example ? ` ${example}` : ''}`),
275
+ ] : []),
276
+ ].join('\n');
277
+ }
278
+
279
+ export function renderGoodVibesDaemonHelp(binary = 'goodvibes-daemon'): string {
280
+ return [
281
+ `Usage: ${binary} [OPTIONS]`,
282
+ '',
283
+ 'Unavailable in GoodVibes Agent.',
284
+ '',
285
+ 'GoodVibes Agent connects to an already-running GoodVibes daemon. It does not start, install, restart, or own daemon/listener lifecycle.',
286
+ 'Use GoodVibes TUI or your daemon host tooling to manage the daemon, then connect with goodvibes-agent.',
287
+ '',
288
+ 'Options:',
289
+ ' --daemon-home <dir> Override daemon home',
290
+ ' --working-dir <dir> Override working directory',
291
+ ' -C, --cd <dir> Alias for --working-dir',
292
+ ' --provider <id> Override provider',
293
+ ' -m, --model <registryKey> Override model. provider:model infers --provider',
294
+ ' --hostname <host> Hostname hint for printed connection info',
295
+ ' --port <port> Control-plane port override when supported',
296
+ ' -h, --help Print help',
297
+ ' -v, --version Print version',
298
+ ].join('\n');
299
+ }
@@ -0,0 +1,11 @@
1
+ export * from './types.ts';
2
+ export * from './parser.ts';
3
+ export * from './help.ts';
4
+ export * from './status.ts';
5
+ export * from './completion.ts';
6
+ export * from './config-overrides.ts';
7
+ export * from './endpoints.ts';
8
+ export * from './surface-command.ts';
9
+ export * from './service-command.ts';
10
+ export * from './bundle-command.ts';
11
+ export * from './management.ts';