@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,278 @@
1
+ import { mkdirSync, readFileSync, writeFileSync } from 'node:fs';
2
+ import { dirname, resolve } from 'node:path';
3
+ import type { CommandRegistry } from '../command-registry.ts';
4
+ import { requirePanelManager, requireShellPaths } from './runtime-services.ts';
5
+
6
+ interface VoiceBundle {
7
+ readonly version: 1;
8
+ readonly exportedAt: number;
9
+ readonly enabled: boolean;
10
+ readonly notes: readonly string[];
11
+ }
12
+
13
+ function inspectVoiceBundle(bundle: VoiceBundle): string {
14
+ return [
15
+ 'Voice Review',
16
+ ` exportedAt: ${new Date(bundle.exportedAt).toISOString()}`,
17
+ ` enabled: ${bundle.enabled ? 'yes' : 'no'}`,
18
+ ` notes: ${bundle.notes.length}`,
19
+ ].join('\n');
20
+ }
21
+
22
+ export function registerExperienceRuntimeCommands(registry: CommandRegistry): void {
23
+ registry.register({
24
+ name: 'remote-setup',
25
+ description: 'Dedicated front-door for remote setup review and portable setup bundles',
26
+ usage: '[review|export <path>]',
27
+ async handler(args, ctx) {
28
+ const sub = (args[0] ?? 'review').toLowerCase();
29
+ if (ctx.executeCommand) {
30
+ if (sub === 'review') {
31
+ await ctx.executeCommand('remote', ['setup']);
32
+ return;
33
+ }
34
+ if (sub === 'export') {
35
+ const pathArg = args[1];
36
+ if (!pathArg) {
37
+ ctx.print('Usage: /remote-setup export <path>');
38
+ return;
39
+ }
40
+ await ctx.executeCommand('remote', ['setup', 'export', pathArg]);
41
+ return;
42
+ }
43
+ }
44
+ ctx.print('Remote setup controls are not available in this runtime.');
45
+ },
46
+ });
47
+
48
+ registry.register({
49
+ name: 'remote-env',
50
+ description: 'Dedicated front-door for remote environment snippets and portable env exports',
51
+ usage: '[review|export <path>]',
52
+ async handler(args, ctx) {
53
+ const sub = (args[0] ?? 'review').toLowerCase();
54
+ if (ctx.executeCommand) {
55
+ if (sub === 'review') {
56
+ await ctx.executeCommand('remote', ['env']);
57
+ return;
58
+ }
59
+ if (sub === 'export') {
60
+ const pathArg = args[1];
61
+ if (!pathArg) {
62
+ ctx.print('Usage: /remote-env export <path>');
63
+ return;
64
+ }
65
+ await ctx.executeCommand('remote', ['env', 'export', pathArg]);
66
+ return;
67
+ }
68
+ }
69
+ ctx.print('Remote environment controls are not available in this runtime.');
70
+ },
71
+ });
72
+
73
+ registry.register({
74
+ name: 'tunnel',
75
+ description: 'Dedicated front-door for remote tunnel review and export flows',
76
+ usage: '[review|export <path>]',
77
+ async handler(args, ctx) {
78
+ const sub = (args[0] ?? 'review').toLowerCase();
79
+ if (ctx.executeCommand) {
80
+ if (sub === 'review') {
81
+ await ctx.executeCommand('remote', ['tunnel', 'review']);
82
+ return;
83
+ }
84
+ if (sub === 'export') {
85
+ const pathArg = args[1];
86
+ if (!pathArg) {
87
+ ctx.print('Usage: /tunnel export <path>');
88
+ return;
89
+ }
90
+ await ctx.executeCommand('remote', ['tunnel', 'export', pathArg]);
91
+ return;
92
+ }
93
+ }
94
+ ctx.print('Tunnel controls are not available in this runtime.');
95
+ },
96
+ });
97
+
98
+ registry.register({
99
+ name: 'bootstrap',
100
+ description: 'Dedicated front-door for remote bootstrap bundle export and inspection',
101
+ usage: '[export <path>|inspect <path>]',
102
+ async handler(args, ctx) {
103
+ const sub = (args[0] ?? '').toLowerCase();
104
+ const pathArg = args[1];
105
+ if (!ctx.executeCommand) {
106
+ ctx.print('Bootstrap controls are not available in this runtime.');
107
+ return;
108
+ }
109
+ if ((sub === 'export' || sub === 'inspect') && pathArg) {
110
+ await ctx.executeCommand('remote', ['bootstrap', sub, pathArg]);
111
+ return;
112
+ }
113
+ ctx.print('Usage: /bootstrap [export <path>|inspect <path>]');
114
+ },
115
+ });
116
+
117
+ registry.register({
118
+ name: 'runner-pool',
119
+ aliases: ['pool'],
120
+ description: 'Dedicated front-door for remote runner pool review and assignment flows',
121
+ usage: '[list|show <id>|create <id> <label...>|assign <pool> <runner>|unassign <pool> <runner>]',
122
+ async handler(args, ctx) {
123
+ const sub = (args[0] ?? 'list').toLowerCase();
124
+ if (!ctx.executeCommand) {
125
+ ctx.print('Runner pool controls are not available in this runtime.');
126
+ return;
127
+ }
128
+ if (sub === 'list') {
129
+ await ctx.executeCommand('remote', ['pool', 'list']);
130
+ return;
131
+ }
132
+ if (sub === 'show' && args[1]) {
133
+ await ctx.executeCommand('remote', ['pool', 'show', args[1]]);
134
+ return;
135
+ }
136
+ if (sub === 'create' && args[1] && args.length >= 3) {
137
+ await ctx.executeCommand('remote', ['pool', 'create', args[1], ...args.slice(2)]);
138
+ return;
139
+ }
140
+ if ((sub === 'assign' || sub === 'unassign') && args[1] && args[2]) {
141
+ await ctx.executeCommand('remote', ['pool', sub, args[1], args[2]]);
142
+ return;
143
+ }
144
+ ctx.print('Usage: /runner-pool [list|show <id>|create <id> <label...>|assign <pool> <runner>|unassign <pool> <runner>]');
145
+ },
146
+ });
147
+
148
+ registry.register({
149
+ name: 'approval',
150
+ aliases: ['approvals'],
151
+ description: 'Review action-specific approval classes and the specialized security UX matrix',
152
+ usage: '[matrix|review <kind>]',
153
+ handler(args, ctx) {
154
+ const sub = (args[0] ?? 'matrix').toLowerCase();
155
+ if (sub === 'open' || sub === 'panel') {
156
+ if (ctx.showPanel) ctx.showPanel('approval');
157
+ else {
158
+ const panelManager = requirePanelManager(ctx);
159
+ panelManager.open('approval');
160
+ panelManager.show();
161
+ }
162
+ return;
163
+ }
164
+ const matrix = [
165
+ ['shell', 'Shell execution approval with side-effect and credential review.'],
166
+ ['file', 'File mutation approval with config/notebook differentiation.'],
167
+ ['network', 'Network access approval with host/scope review.'],
168
+ ['delegate', 'Agent spawn/delegation approval with recursion ceilings.'],
169
+ ['mcp', 'MCP trust escalation approval with host/path review.'],
170
+ ['remote', 'Remote dispatch approval with trust/artifact review.'],
171
+ ['hook', 'Hook execution approval with deny/mutate authority review.'],
172
+ ['plugin', 'Plugin lifecycle approval with provenance and capability review.'],
173
+ ['sandbox', 'Sandbox isolation/policy change approval with WSL/VM review.'],
174
+ ] as const;
175
+ if (sub === 'matrix') {
176
+ ctx.print([
177
+ 'Approval Matrix',
178
+ ...matrix.map(([kind, summary]) => ` ${kind.padEnd(10)} ${summary}`),
179
+ ].join('\n'));
180
+ return;
181
+ }
182
+ if (sub === 'review') {
183
+ const kind = (args[1] ?? '').toLowerCase();
184
+ const entry = matrix.find(([id]) => id === kind);
185
+ if (!entry) {
186
+ ctx.print('Usage: /approval review <shell|file|network|delegate|mcp|remote|hook|plugin|sandbox>');
187
+ return;
188
+ }
189
+ ctx.print([
190
+ `Approval Review: ${entry[0]}`,
191
+ ` ${entry[1]}`,
192
+ ' Related surfaces: /security, /policy preflight, /trust, /sandbox, /mcp',
193
+ ].join('\n'));
194
+ return;
195
+ }
196
+ ctx.print('Usage: /approval [open|matrix|review <kind>]');
197
+ },
198
+ });
199
+
200
+ registry.register({
201
+ name: 'memory-review',
202
+ aliases: ['knowledge-review'],
203
+ description: 'Dedicated front-door for knowledge review queues and task-specific memory injection explanations',
204
+ usage: '[queue [limit]|explain <task...> [--scope <path> ...]]',
205
+ async handler(args, ctx) {
206
+ const sub = (args[0] ?? 'queue').toLowerCase();
207
+ if (!ctx.executeCommand) {
208
+ ctx.print('Memory review controls are not available in this runtime.');
209
+ return;
210
+ }
211
+ if (sub === 'queue') {
212
+ await ctx.executeCommand('knowledge', ['queue', ...(args[1] ? [args[1]] : [])]);
213
+ return;
214
+ }
215
+ if (sub === 'explain' && args.length >= 2) {
216
+ await ctx.executeCommand('knowledge', ['explain', ...args.slice(1)]);
217
+ return;
218
+ }
219
+ ctx.print('Usage: /memory-review [queue [limit]|explain <task...> [--scope <path> ...]]');
220
+ },
221
+ });
222
+
223
+ registry.register({
224
+ name: 'voice',
225
+ description: 'Review voice posture and package portable voice-surface metadata',
226
+ usage: '[review|enable|disable|bundle export <path>|bundle inspect <path>]',
227
+ handler(args, ctx) {
228
+ const shellPaths = requireShellPaths(ctx);
229
+ const sub = (args[0] ?? 'review').toLowerCase();
230
+ if (sub === 'review') {
231
+ const enabled = Boolean(ctx.platform.configManager.get('ui.voiceEnabled') ?? false);
232
+ ctx.print([
233
+ 'Voice Review',
234
+ ` enabled: ${enabled ? 'yes' : 'no'}`,
235
+ ' posture: optional local companion surface; disabled by default',
236
+ ' note: voice remains an optional operator convenience, not a required SaaS dependency',
237
+ ].join('\n'));
238
+ return;
239
+ }
240
+ if (sub === 'enable' || sub === 'disable') {
241
+ const next = sub === 'enable';
242
+ ctx.platform.configManager.setDynamic('ui.voiceEnabled', next);
243
+ ctx.print(`Voice surface ${next ? 'enabled' : 'disabled'} for this runtime.`);
244
+ return;
245
+ }
246
+ if (sub === 'bundle') {
247
+ const mode = args[1];
248
+ const pathArg = args[2];
249
+ if ((mode === 'export' || mode === 'inspect') && !pathArg) {
250
+ ctx.print(`Usage: /voice bundle ${mode} <path>`);
251
+ return;
252
+ }
253
+ const targetPath = shellPaths.resolveWorkspacePath(pathArg!);
254
+ if (mode === 'export') {
255
+ const bundle: VoiceBundle = {
256
+ version: 1,
257
+ exportedAt: Date.now(),
258
+ enabled: Boolean(ctx.platform.configManager.get('ui.voiceEnabled')),
259
+ notes: [
260
+ 'Voice is optional and local-first.',
261
+ 'Secure sandbox mode and operator review remain the primary control surfaces.',
262
+ ],
263
+ };
264
+ mkdirSync(dirname(targetPath), { recursive: true });
265
+ writeFileSync(targetPath, `${JSON.stringify(bundle, null, 2)}\n`, 'utf-8');
266
+ ctx.print(`Voice bundle exported to ${targetPath}`);
267
+ return;
268
+ }
269
+ if (mode === 'inspect') {
270
+ const bundle = JSON.parse(readFileSync(targetPath, 'utf-8')) as VoiceBundle;
271
+ ctx.print(inspectVoiceBundle(bundle));
272
+ return;
273
+ }
274
+ }
275
+ ctx.print('Usage: /voice [review|enable|disable|bundle export <path>|bundle inspect <path>]');
276
+ },
277
+ });
278
+ }
@@ -0,0 +1,106 @@
1
+ import { estimateConversationTokens } from '@pellux/goodvibes-sdk/platform/core';
2
+ import { evaluateSessionMaintenance, formatSessionMaintenanceLines, getGuidanceMode } from '@/runtime/index.ts';
3
+ import { dismissGuidance, evaluateContextualGuidance, formatGuidanceItems, resetGuidance } from '@/runtime/index.ts';
4
+ import type { CommandRegistry } from '../command-registry.ts';
5
+ import { requireProviderApi, requireReadModels, requireSessionMemoryStore, requireShellPaths } from './runtime-services.ts';
6
+
7
+ export function registerGuidanceRuntimeCommands(registry: CommandRegistry): void {
8
+ registry.register({
9
+ name: 'welcome',
10
+ aliases: ['guide'],
11
+ description: 'Open the product entry surface for the onboarding wizard, security, marketplace, remote, and operator workflows',
12
+ usage: '[open|print]',
13
+ handler(args, ctx) {
14
+ const sub = args[0] ?? 'open';
15
+ if (sub === 'open' || sub === 'panel') {
16
+ if (ctx.openOnboardingWizard) {
17
+ ctx.openOnboardingWizard({ mode: 'edit' });
18
+ return;
19
+ }
20
+ ctx.print('Use /onboarding to open the setup wizard.');
21
+ return;
22
+ }
23
+ if (sub === 'print') {
24
+ ctx.print([
25
+ 'Welcome To GoodVibes',
26
+ ' /onboarding - open the onboarding wizard with current settings preloaded',
27
+ ' /setup onboarding - open the same onboarding wizard from setup workflows',
28
+ ' /health review - unified startup, service, and sandbox posture',
29
+ ' /sandbox - explain that sandbox/QEMU workflows are delegated to GoodVibes TUI',
30
+ ' /marketplace open - browse curated plugins, skills, hook packs, and policy packs',
31
+ ' /remote setup - review bridge, tunnel, env, and bootstrap flows',
32
+ ' /security - review trust posture, policy pressure, and incidents',
33
+ ' /cockpit - unified operator control room',
34
+ ].join('\n'));
35
+ return;
36
+ }
37
+ ctx.print('Usage: /welcome [open|print]');
38
+ },
39
+ });
40
+
41
+ registry.register({
42
+ name: 'guidance',
43
+ description: 'Review contextual operational guidance without interrupting the main conversation flow',
44
+ usage: '[review|dismiss <id>|reset [id]]',
45
+ async handler(args, ctx) {
46
+ const sub = (args[0] ?? 'review').toLowerCase();
47
+ const shellPaths = requireShellPaths(ctx);
48
+ const guidanceOptions = {
49
+ homeDirectory: shellPaths.homeDirectory,
50
+ };
51
+ if (sub === 'dismiss') {
52
+ const id = args[1];
53
+ if (!id) {
54
+ ctx.print('Usage: /guidance dismiss <id>');
55
+ return;
56
+ }
57
+ dismissGuidance(id, guidanceOptions);
58
+ ctx.print(`Dismissed guidance item ${id}.`);
59
+ return;
60
+ }
61
+ if (sub === 'reset') {
62
+ resetGuidance(args[1], guidanceOptions);
63
+ ctx.print(args[1] ? `Reset guidance item ${args[1]}.` : 'Reset all dismissed guidance items.');
64
+ return;
65
+ }
66
+ if (sub !== 'review') {
67
+ ctx.print('Usage: /guidance [review|dismiss <id>|reset [id]]');
68
+ return;
69
+ }
70
+
71
+ const providerApi = requireProviderApi(ctx);
72
+ const currentModel = await providerApi.getCurrentModel().catch(() => null); // best-effort: null handled as unknown context window
73
+ const llmMessages = ctx.session.conversationManager.getMessagesForLLM();
74
+ const readModels = requireReadModels(ctx);
75
+ const session = readModels.session.getSnapshot();
76
+ const intelligence = readModels.intelligence.getSnapshot();
77
+ const mcp = readModels.mcp.getSnapshot();
78
+ const health = readModels.health.getSnapshot();
79
+ const marketplace = readModels.marketplace.getSnapshot();
80
+ const maintenance = evaluateSessionMaintenance({
81
+ configManager: ctx.platform.configManager,
82
+ currentTokens: estimateConversationTokens(llmMessages),
83
+ contextWindow: currentModel?.contextWindow ?? 0,
84
+ messageCount: llmMessages.length,
85
+ sessionMemoryCount: requireSessionMemoryStore(ctx).list().length,
86
+ session: session.session,
87
+ });
88
+ const contextual = evaluateContextualGuidance(ctx.platform.configManager, {
89
+ pendingApproval: session.pendingApproval,
90
+ denialCount: session.denialCount,
91
+ authRequiredMcpCount: mcp.servers.filter((server) => server.status === 'auth_required').length,
92
+ degradedProviderCount: health.providerProblems.length,
93
+ intelligenceUnavailable: intelligence.diagnosticsStatus === 'unavailable' && intelligence.symbolSearchStatus === 'unavailable',
94
+ recommendations: marketplace.recommendations,
95
+ }, maintenance, guidanceOptions);
96
+
97
+ ctx.print([
98
+ `Guidance Review (${getGuidanceMode(ctx.platform.configManager)})`,
99
+ '',
100
+ ...formatGuidanceItems(contextual),
101
+ '',
102
+ ...formatSessionMaintenanceLines(maintenance, maintenance.guidanceMode === 'guided' ? 'guided' : 'minimal'),
103
+ ].join('\n'));
104
+ },
105
+ });
106
+ }