@pellux/goodvibes-tui 0.18.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (732) hide show
  1. package/.goodvibes/GOODVIBES.md +35 -0
  2. package/.goodvibes/agents/reviewer.md +89 -0
  3. package/.goodvibes/skills/add-provider/SKILL.md +199 -0
  4. package/CHANGELOG.md +1681 -0
  5. package/README.md +1607 -0
  6. package/bin/goodvibes +66 -0
  7. package/docs/README.md +32 -0
  8. package/docs/foundation-artifacts/README.md +16 -0
  9. package/docs/foundation-artifacts/knowledge-graphql.graphql +397 -0
  10. package/docs/foundation-artifacts/knowledge-store.sql +183 -0
  11. package/docs/foundation-artifacts/operator-contract.json +55157 -0
  12. package/docs/foundation-artifacts/peer-contract.json +2384 -0
  13. package/package.json +114 -0
  14. package/scripts/postinstall.mjs +203 -0
  15. package/src/acp/connection.ts +447 -0
  16. package/src/acp/index.ts +7 -0
  17. package/src/acp/manager.ts +133 -0
  18. package/src/adapters/bluebubbles/index.ts +127 -0
  19. package/src/adapters/discord/index.ts +297 -0
  20. package/src/adapters/github/index.ts +73 -0
  21. package/src/adapters/google-chat/index.ts +119 -0
  22. package/src/adapters/imessage/index.ts +92 -0
  23. package/src/adapters/index.ts +15 -0
  24. package/src/adapters/matrix/index.ts +116 -0
  25. package/src/adapters/mattermost/index.ts +151 -0
  26. package/src/adapters/msteams/index.ts +180 -0
  27. package/src/adapters/ntfy/index.ts +118 -0
  28. package/src/adapters/signal/index.ts +92 -0
  29. package/src/adapters/slack/index.ts +323 -0
  30. package/src/adapters/telegram/index.ts +160 -0
  31. package/src/adapters/types.ts +97 -0
  32. package/src/adapters/webhook/index.ts +178 -0
  33. package/src/adapters/whatsapp/index.ts +135 -0
  34. package/src/agents/message-bus-core.ts +312 -0
  35. package/src/agents/message-bus.ts +2 -0
  36. package/src/agents/orchestrator-prompts.ts +351 -0
  37. package/src/agents/orchestrator-runner.ts +668 -0
  38. package/src/agents/orchestrator.ts +437 -0
  39. package/src/agents/session.ts +108 -0
  40. package/src/agents/worktree.ts +153 -0
  41. package/src/agents/wrfc-config.ts +47 -0
  42. package/src/agents/wrfc-controller.ts +747 -0
  43. package/src/agents/wrfc-gate-runtime.ts +75 -0
  44. package/src/agents/wrfc-reporting.ts +284 -0
  45. package/src/agents/wrfc-runtime-events.ts +150 -0
  46. package/src/agents/wrfc-types.ts +67 -0
  47. package/src/automation/delivery-manager.ts +368 -0
  48. package/src/automation/index.ts +72 -0
  49. package/src/automation/manager-runtime-delivery.ts +139 -0
  50. package/src/automation/manager-runtime-events.ts +131 -0
  51. package/src/automation/manager-runtime-execution.ts +511 -0
  52. package/src/automation/manager-runtime-helpers.ts +433 -0
  53. package/src/automation/manager-runtime-job-mutations.ts +175 -0
  54. package/src/automation/manager-runtime-reconcile.ts +148 -0
  55. package/src/automation/manager-runtime-scheduling.ts +189 -0
  56. package/src/automation/manager-runtime-sync.ts +54 -0
  57. package/src/automation/manager-runtime.ts +721 -0
  58. package/src/automation/manager.ts +10 -0
  59. package/src/automation/service.ts +242 -0
  60. package/src/channels/builtin/account-actions.ts +490 -0
  61. package/src/channels/builtin/accounts.ts +433 -0
  62. package/src/channels/builtin/contracts.ts +405 -0
  63. package/src/channels/builtin/plugins.ts +308 -0
  64. package/src/channels/builtin/rendering.ts +174 -0
  65. package/src/channels/builtin/setup-schema.ts +504 -0
  66. package/src/channels/builtin/shared.ts +96 -0
  67. package/src/channels/builtin/surfaces.ts +57 -0
  68. package/src/channels/builtin/targets.ts +693 -0
  69. package/src/channels/builtin-runtime.ts +443 -0
  70. package/src/channels/delivery/shared.ts +199 -0
  71. package/src/channels/delivery/strategies-bridge.ts +246 -0
  72. package/src/channels/delivery/strategies-core.ts +299 -0
  73. package/src/channels/delivery/strategies-enterprise.ts +178 -0
  74. package/src/channels/delivery/types.ts +59 -0
  75. package/src/channels/delivery-router.ts +127 -0
  76. package/src/channels/index.ts +77 -0
  77. package/src/channels/plugin-registry.ts +551 -0
  78. package/src/channels/provider-runtime.ts +330 -0
  79. package/src/channels/reply-pipeline.ts +522 -0
  80. package/src/channels/route-manager.ts +340 -0
  81. package/src/channels/surface-registry.ts +186 -0
  82. package/src/config/helper-model.ts +233 -0
  83. package/src/config/index.ts +193 -0
  84. package/src/config/manager.ts +404 -0
  85. package/src/config/secrets.ts +547 -0
  86. package/src/config/service-registry.ts +329 -0
  87. package/src/config/subscription-auth.ts +31 -0
  88. package/src/config/subscription-providers.ts +127 -0
  89. package/src/config/tool-llm.ts +110 -0
  90. package/src/control-plane/approval-broker.ts +351 -0
  91. package/src/control-plane/gateway.ts +713 -0
  92. package/src/control-plane/index.ts +54 -0
  93. package/src/control-plane/media-contract-schemas.ts +208 -0
  94. package/src/control-plane/method-catalog-admin.ts +136 -0
  95. package/src/control-plane/method-catalog-channels.ts +591 -0
  96. package/src/control-plane/method-catalog-control-automation.ts +475 -0
  97. package/src/control-plane/method-catalog-control-core.ts +594 -0
  98. package/src/control-plane/method-catalog-control.ts +8 -0
  99. package/src/control-plane/method-catalog-events.ts +74 -0
  100. package/src/control-plane/method-catalog-knowledge.ts +531 -0
  101. package/src/control-plane/method-catalog-media.ts +279 -0
  102. package/src/control-plane/method-catalog-runtime.ts +304 -0
  103. package/src/control-plane/method-catalog-shared.ts +223 -0
  104. package/src/control-plane/method-catalog.ts +242 -0
  105. package/src/control-plane/operator-contract-schemas-admin.ts +639 -0
  106. package/src/control-plane/operator-contract-schemas-channels.ts +375 -0
  107. package/src/control-plane/operator-contract-schemas-control.ts +226 -0
  108. package/src/control-plane/operator-contract-schemas-domains.ts +4 -0
  109. package/src/control-plane/operator-contract-schemas-knowledge.ts +582 -0
  110. package/src/control-plane/operator-contract-schemas-media.ts +297 -0
  111. package/src/control-plane/operator-contract-schemas-permissions.ts +100 -0
  112. package/src/control-plane/operator-contract-schemas-remote.ts +38 -0
  113. package/src/control-plane/operator-contract-schemas-runtime.ts +563 -0
  114. package/src/control-plane/operator-contract-schemas-shared.ts +85 -0
  115. package/src/control-plane/operator-contract-schemas-telemetry.ts +349 -0
  116. package/src/control-plane/operator-contract-schemas.ts +6 -0
  117. package/src/control-plane/operator-contract.ts +163 -0
  118. package/src/control-plane/session-broker.ts +780 -0
  119. package/src/core/compaction-sections.ts +492 -0
  120. package/src/core/compaction-types.ts +147 -0
  121. package/src/core/composer-state.ts +59 -0
  122. package/src/core/context-compaction.ts +542 -0
  123. package/src/core/conversation-compaction.ts +68 -0
  124. package/src/core/conversation-diff.ts +55 -0
  125. package/src/core/conversation-rendering.ts +343 -0
  126. package/src/core/conversation-utils.ts +72 -0
  127. package/src/core/conversation.ts +775 -0
  128. package/src/core/event-replay.ts +287 -0
  129. package/src/core/orchestrator-context-runtime.ts +407 -0
  130. package/src/core/orchestrator-follow-up-runtime.ts +134 -0
  131. package/src/core/orchestrator-runtime.ts +132 -0
  132. package/src/core/orchestrator-tool-runtime.ts +468 -0
  133. package/src/core/orchestrator-turn-helpers.ts +355 -0
  134. package/src/core/orchestrator-turn-loop.ts +443 -0
  135. package/src/core/orchestrator.ts +733 -0
  136. package/src/core/plan-command-handler.ts +169 -0
  137. package/src/core/system-message-router.ts +210 -0
  138. package/src/core/transcript-events/classify.ts +95 -0
  139. package/src/core/transcript-events/index.ts +15 -0
  140. package/src/daemon/cli.ts +88 -0
  141. package/src/daemon/control-plane.ts +522 -0
  142. package/src/daemon/facade-composition.ts +397 -0
  143. package/src/daemon/facade.ts +638 -0
  144. package/src/daemon/helpers.ts +74 -0
  145. package/src/daemon/http/router-route-contexts.ts +370 -0
  146. package/src/daemon/http/router.ts +531 -0
  147. package/src/daemon/http-listener.ts +301 -0
  148. package/src/daemon/index.ts +3 -0
  149. package/src/daemon/server.ts +1 -0
  150. package/src/daemon/service-manager.ts +413 -0
  151. package/src/daemon/surface-actions.ts +183 -0
  152. package/src/daemon/surface-delivery.ts +530 -0
  153. package/src/daemon/surface-policy.ts +60 -0
  154. package/src/daemon/transport-events.ts +110 -0
  155. package/src/daemon/types.ts +191 -0
  156. package/src/export/markdown.ts +213 -0
  157. package/src/export/session-export.ts +633 -0
  158. package/src/git/index.ts +1 -0
  159. package/src/git/service.ts +414 -0
  160. package/src/hooks/chain-engine.ts +414 -0
  161. package/src/hooks/dispatcher.ts +414 -0
  162. package/src/hooks/hook-api.ts +170 -0
  163. package/src/hooks/index.ts +48 -0
  164. package/src/hooks/runners/agent.ts +93 -0
  165. package/src/hooks/runners/prompt.ts +69 -0
  166. package/src/hooks/workbench.ts +360 -0
  167. package/src/input/autocomplete.ts +96 -0
  168. package/src/input/bookmark-modal.ts +115 -0
  169. package/src/input/command-registry.ts +300 -0
  170. package/src/input/commands/branch-runtime.ts +72 -0
  171. package/src/input/commands/config.ts +515 -0
  172. package/src/input/commands/control-room-runtime.ts +255 -0
  173. package/src/input/commands/conversation-runtime.ts +207 -0
  174. package/src/input/commands/diff-runtime.ts +161 -0
  175. package/src/input/commands/discovery-runtime.ts +45 -0
  176. package/src/input/commands/eval.ts +204 -0
  177. package/src/input/commands/experience-runtime.ts +278 -0
  178. package/src/input/commands/git-runtime.ts +81 -0
  179. package/src/input/commands/guidance-runtime.ts +101 -0
  180. package/src/input/commands/health-runtime.ts +434 -0
  181. package/src/input/commands/hooks-runtime.ts +148 -0
  182. package/src/input/commands/incident-runtime.ts +95 -0
  183. package/src/input/commands/integration-runtime.ts +394 -0
  184. package/src/input/commands/intelligence-runtime.ts +223 -0
  185. package/src/input/commands/knowledge.ts +368 -0
  186. package/src/input/commands/local-auth-runtime.ts +105 -0
  187. package/src/input/commands/local-provider-runtime.ts +170 -0
  188. package/src/input/commands/local-runtime.ts +458 -0
  189. package/src/input/commands/local-setup-review.ts +192 -0
  190. package/src/input/commands/local-setup-transfer.ts +134 -0
  191. package/src/input/commands/local-setup.ts +292 -0
  192. package/src/input/commands/managed-runtime.ts +208 -0
  193. package/src/input/commands/marketplace-runtime.ts +290 -0
  194. package/src/input/commands/mcp-runtime.ts +202 -0
  195. package/src/input/commands/memory-product-runtime.ts +111 -0
  196. package/src/input/commands/memory.ts +151 -0
  197. package/src/input/commands/notify-runtime.ts +83 -0
  198. package/src/input/commands/operator-panel-runtime.ts +141 -0
  199. package/src/input/commands/operator-runtime.ts +392 -0
  200. package/src/input/commands/permissions-runtime.ts +104 -0
  201. package/src/input/commands/planning-runtime.ts +97 -0
  202. package/src/input/commands/platform-access-runtime.ts +422 -0
  203. package/src/input/commands/platform-runtime.ts +6 -0
  204. package/src/input/commands/platform-sandbox-qemu.ts +137 -0
  205. package/src/input/commands/platform-sandbox-runtime.ts +406 -0
  206. package/src/input/commands/platform-sandbox-session.ts +128 -0
  207. package/src/input/commands/platform-services-runtime.ts +246 -0
  208. package/src/input/commands/policy-dispatch.ts +339 -0
  209. package/src/input/commands/policy.ts +17 -0
  210. package/src/input/commands/product-runtime.ts +351 -0
  211. package/src/input/commands/profile-sync-runtime.ts +99 -0
  212. package/src/input/commands/provider-accounts-runtime.ts +113 -0
  213. package/src/input/commands/provider.ts +363 -0
  214. package/src/input/commands/quit-shared.ts +162 -0
  215. package/src/input/commands/recall-bundle.ts +132 -0
  216. package/src/input/commands/recall-capture.ts +152 -0
  217. package/src/input/commands/recall-query.ts +229 -0
  218. package/src/input/commands/recall-review.ts +98 -0
  219. package/src/input/commands/recall-shared.ts +22 -0
  220. package/src/input/commands/remote-runtime-pool.ts +106 -0
  221. package/src/input/commands/remote-runtime-setup.ts +199 -0
  222. package/src/input/commands/remote-runtime.ts +531 -0
  223. package/src/input/commands/replay-runtime.ts +18 -0
  224. package/src/input/commands/runtime-services.ts +279 -0
  225. package/src/input/commands/schedule-runtime.ts +332 -0
  226. package/src/input/commands/services-runtime.ts +207 -0
  227. package/src/input/commands/session-content.ts +408 -0
  228. package/src/input/commands/session-workflow.ts +464 -0
  229. package/src/input/commands/session.ts +376 -0
  230. package/src/input/commands/settings-sync-runtime.ts +173 -0
  231. package/src/input/commands/share-runtime.ts +114 -0
  232. package/src/input/commands/shell-core.ts +320 -0
  233. package/src/input/commands/skills-runtime.ts +221 -0
  234. package/src/input/commands/subscription-runtime.ts +434 -0
  235. package/src/input/commands/tasks-runtime.ts +230 -0
  236. package/src/input/commands/teamwork-runtime.ts +374 -0
  237. package/src/input/commands/teleport-runtime.ts +57 -0
  238. package/src/input/commands/worktree-runtime.ts +137 -0
  239. package/src/input/commands.ts +127 -0
  240. package/src/input/file-picker.ts +192 -0
  241. package/src/input/handler-command-route.ts +106 -0
  242. package/src/input/handler-content-actions.ts +465 -0
  243. package/src/input/handler-feed-routes.ts +541 -0
  244. package/src/input/handler-feed.ts +361 -0
  245. package/src/input/handler-modal-routes.ts +335 -0
  246. package/src/input/handler-modal-stack.ts +237 -0
  247. package/src/input/handler-modal-token-routes.ts +272 -0
  248. package/src/input/handler-picker-routes.ts +416 -0
  249. package/src/input/handler-prompt-buffer.ts +320 -0
  250. package/src/input/handler-shortcuts.ts +195 -0
  251. package/src/input/handler-ui-state.ts +294 -0
  252. package/src/input/handler.ts +798 -0
  253. package/src/input/input-history.ts +267 -0
  254. package/src/input/keybindings.ts +256 -0
  255. package/src/input/model-picker.ts +730 -0
  256. package/src/input/panel-integration-actions.ts +77 -0
  257. package/src/input/profile-picker-modal.ts +222 -0
  258. package/src/input/search.ts +100 -0
  259. package/src/input/selection-modal.ts +163 -0
  260. package/src/input/selection.ts +135 -0
  261. package/src/input/session-picker-modal.ts +136 -0
  262. package/src/input/settings-modal.ts +718 -0
  263. package/src/input/submission-intent.ts +18 -0
  264. package/src/input/submission-router.ts +64 -0
  265. package/src/integrations/index.ts +42 -0
  266. package/src/integrations/notifier.ts +206 -0
  267. package/src/integrations/webhooks.ts +177 -0
  268. package/src/knowledge/consolidation.ts +346 -0
  269. package/src/knowledge/graphql.ts +324 -0
  270. package/src/knowledge/index.ts +60 -0
  271. package/src/knowledge/ingest-compile.ts +386 -0
  272. package/src/knowledge/ingest-context.ts +18 -0
  273. package/src/knowledge/ingest-inputs.ts +387 -0
  274. package/src/knowledge/ingest.ts +20 -0
  275. package/src/knowledge/internal.ts +257 -0
  276. package/src/knowledge/knowledge-api.ts +432 -0
  277. package/src/knowledge/lint.ts +121 -0
  278. package/src/knowledge/memory-sync.ts +62 -0
  279. package/src/knowledge/packet.ts +370 -0
  280. package/src/knowledge/scheduling.ts +283 -0
  281. package/src/knowledge/service.ts +715 -0
  282. package/src/main.ts +798 -0
  283. package/src/mcp/client.ts +383 -0
  284. package/src/mcp/index.ts +12 -0
  285. package/src/mcp/mcp-api.ts +90 -0
  286. package/src/mcp/registry.ts +508 -0
  287. package/src/media/builtin-image-understanding.ts +303 -0
  288. package/src/media/builtin-providers.ts +26 -0
  289. package/src/media/index.ts +18 -0
  290. package/src/multimodal/index.ts +13 -0
  291. package/src/multimodal/service.ts +492 -0
  292. package/src/panels/agent-inspector-panel.ts +515 -0
  293. package/src/panels/agent-inspector-shared.ts +94 -0
  294. package/src/panels/agent-logs-panel.ts +539 -0
  295. package/src/panels/agent-logs-shared.ts +129 -0
  296. package/src/panels/approval-panel.ts +169 -0
  297. package/src/panels/automation-control-panel.ts +253 -0
  298. package/src/panels/base-panel.ts +72 -0
  299. package/src/panels/builtin/agent.ts +88 -0
  300. package/src/panels/builtin/development.ts +111 -0
  301. package/src/panels/builtin/knowledge.ts +26 -0
  302. package/src/panels/builtin/operations.ts +385 -0
  303. package/src/panels/builtin/session.ts +61 -0
  304. package/src/panels/builtin/shared.ts +240 -0
  305. package/src/panels/builtin-panels.ts +23 -0
  306. package/src/panels/cockpit-panel.ts +183 -0
  307. package/src/panels/communication-panel.ts +191 -0
  308. package/src/panels/context-visualizer-panel.ts +199 -0
  309. package/src/panels/control-plane-panel.ts +266 -0
  310. package/src/panels/cost-tracker-panel.ts +444 -0
  311. package/src/panels/debug-panel.ts +432 -0
  312. package/src/panels/diff-panel.ts +518 -0
  313. package/src/panels/docs-panel.ts +283 -0
  314. package/src/panels/eval-panel.ts +399 -0
  315. package/src/panels/file-explorer-panel.ts +556 -0
  316. package/src/panels/file-preview-panel.ts +412 -0
  317. package/src/panels/forensics-panel.ts +364 -0
  318. package/src/panels/git-panel.ts +630 -0
  319. package/src/panels/hooks-panel.ts +274 -0
  320. package/src/panels/incident-review-panel.ts +247 -0
  321. package/src/panels/index.ts +48 -0
  322. package/src/panels/intelligence-panel.ts +176 -0
  323. package/src/panels/knowledge-panel.ts +328 -0
  324. package/src/panels/local-auth-panel.ts +146 -0
  325. package/src/panels/marketplace-panel.ts +223 -0
  326. package/src/panels/mcp-panel.ts +260 -0
  327. package/src/panels/memory-panel.ts +293 -0
  328. package/src/panels/ops-control-panel.ts +184 -0
  329. package/src/panels/ops-strategy-panel.ts +235 -0
  330. package/src/panels/orchestration-panel.ts +254 -0
  331. package/src/panels/panel-list-panel.ts +508 -0
  332. package/src/panels/panel-manager.ts +538 -0
  333. package/src/panels/panel-picker.ts +106 -0
  334. package/src/panels/plan-dashboard-panel.ts +272 -0
  335. package/src/panels/plugins-panel.ts +201 -0
  336. package/src/panels/policy-panel.ts +308 -0
  337. package/src/panels/polish.ts +668 -0
  338. package/src/panels/provider-account-snapshot.ts +259 -0
  339. package/src/panels/provider-accounts-panel.ts +221 -0
  340. package/src/panels/provider-health-domains.ts +211 -0
  341. package/src/panels/provider-health-panel.ts +725 -0
  342. package/src/panels/provider-health-tracker.ts +115 -0
  343. package/src/panels/provider-stats-panel.ts +366 -0
  344. package/src/panels/remote-panel.ts +449 -0
  345. package/src/panels/routes-panel.ts +228 -0
  346. package/src/panels/sandbox-panel.ts +289 -0
  347. package/src/panels/schedule-panel.ts +344 -0
  348. package/src/panels/search-focus.ts +32 -0
  349. package/src/panels/security-panel.ts +329 -0
  350. package/src/panels/services-panel.ts +271 -0
  351. package/src/panels/session-browser-panel.ts +399 -0
  352. package/src/panels/session-maintenance.ts +125 -0
  353. package/src/panels/settings-sync-panel.ts +164 -0
  354. package/src/panels/skills-panel.ts +475 -0
  355. package/src/panels/subscription-panel.ts +273 -0
  356. package/src/panels/symbol-outline-panel.ts +486 -0
  357. package/src/panels/system-messages-panel.ts +224 -0
  358. package/src/panels/tasks-panel.ts +448 -0
  359. package/src/panels/thinking-panel.ts +304 -0
  360. package/src/panels/token-budget-panel.ts +469 -0
  361. package/src/panels/tool-inspector-panel.ts +434 -0
  362. package/src/panels/types.ts +44 -0
  363. package/src/panels/watchers-panel.ts +241 -0
  364. package/src/panels/welcome-panel.ts +64 -0
  365. package/src/panels/worktree-panel.ts +180 -0
  366. package/src/panels/wrfc-panel.ts +480 -0
  367. package/src/permissions/briefs/build.ts +88 -0
  368. package/src/permissions/manager.ts +356 -0
  369. package/src/permissions/prompt.ts +184 -0
  370. package/src/plugins/api.ts +383 -0
  371. package/src/plugins/loader.ts +304 -0
  372. package/src/plugins/manager.ts +481 -0
  373. package/src/profiles/shape.ts +58 -0
  374. package/src/providers/amazon-bedrock-mantle.ts +50 -0
  375. package/src/providers/amazon-bedrock.ts +61 -0
  376. package/src/providers/anthropic-compat.ts +373 -0
  377. package/src/providers/anthropic-sdk-provider.ts +230 -0
  378. package/src/providers/anthropic-vertex.ts +59 -0
  379. package/src/providers/anthropic.ts +469 -0
  380. package/src/providers/auto-register.ts +417 -0
  381. package/src/providers/builtin-catalog.ts +326 -0
  382. package/src/providers/builtin-registry.ts +575 -0
  383. package/src/providers/cache-planner.ts +258 -0
  384. package/src/providers/capabilities.ts +601 -0
  385. package/src/providers/custom-loader.ts +425 -0
  386. package/src/providers/discovered-compat.ts +18 -0
  387. package/src/providers/discovered-factory.ts +61 -0
  388. package/src/providers/discovered-traits.ts +138 -0
  389. package/src/providers/gemini.ts +462 -0
  390. package/src/providers/github-copilot.ts +254 -0
  391. package/src/providers/index.ts +47 -0
  392. package/src/providers/interface.ts +185 -0
  393. package/src/providers/llama-cpp.ts +402 -0
  394. package/src/providers/lm-studio-helpers.ts +367 -0
  395. package/src/providers/lm-studio.ts +484 -0
  396. package/src/providers/model-catalog-cache.ts +221 -0
  397. package/src/providers/model-catalog-notifications.ts +97 -0
  398. package/src/providers/model-catalog-synthetic.ts +202 -0
  399. package/src/providers/model-catalog.ts +211 -0
  400. package/src/providers/model-limits.ts +280 -0
  401. package/src/providers/ollama.ts +469 -0
  402. package/src/providers/openai-codex.ts +472 -0
  403. package/src/providers/openai-compat.ts +615 -0
  404. package/src/providers/openai.ts +231 -0
  405. package/src/providers/optimizer.ts +381 -0
  406. package/src/providers/provider-api.ts +553 -0
  407. package/src/providers/registry-helpers.ts +34 -0
  408. package/src/providers/registry-models.ts +77 -0
  409. package/src/providers/registry-types.ts +67 -0
  410. package/src/providers/registry.ts +729 -0
  411. package/src/providers/runtime-metadata.ts +149 -0
  412. package/src/providers/runtime-snapshot.ts +130 -0
  413. package/src/providers/synthetic.ts +561 -0
  414. package/src/providers/tier-prompts.ts +84 -0
  415. package/src/providers/tool-formats.ts +414 -0
  416. package/src/renderer/agent-detail-modal.ts +285 -0
  417. package/src/renderer/autocomplete-overlay.ts +154 -0
  418. package/src/renderer/block-actions.ts +76 -0
  419. package/src/renderer/bookmark-modal.ts +101 -0
  420. package/src/renderer/bottom-bar.ts +58 -0
  421. package/src/renderer/buffer.ts +34 -0
  422. package/src/renderer/code-block.ts +373 -0
  423. package/src/renderer/compositor.ts +261 -0
  424. package/src/renderer/context-inspector.ts +219 -0
  425. package/src/renderer/conversation-layout.ts +67 -0
  426. package/src/renderer/conversation-overlays.ts +123 -0
  427. package/src/renderer/conversation-surface.ts +260 -0
  428. package/src/renderer/diff-view.ts +132 -0
  429. package/src/renderer/diff.ts +122 -0
  430. package/src/renderer/file-picker-overlay.ts +101 -0
  431. package/src/renderer/file-tree.ts +153 -0
  432. package/src/renderer/git-status.ts +89 -0
  433. package/src/renderer/help-overlay.ts +247 -0
  434. package/src/renderer/history-search-overlay.ts +73 -0
  435. package/src/renderer/layout-engine.ts +97 -0
  436. package/src/renderer/layout.ts +32 -0
  437. package/src/renderer/live-tail-modal.ts +156 -0
  438. package/src/renderer/markdown.ts +777 -0
  439. package/src/renderer/modal-factory.ts +467 -0
  440. package/src/renderer/modal-utils.ts +24 -0
  441. package/src/renderer/model-picker-overlay.ts +396 -0
  442. package/src/renderer/overlay-box.ts +165 -0
  443. package/src/renderer/overlay-viewport.ts +104 -0
  444. package/src/renderer/panel-composite.ts +80 -0
  445. package/src/renderer/panel-picker-overlay.ts +202 -0
  446. package/src/renderer/panel-tab-bar.ts +69 -0
  447. package/src/renderer/panel-workspace-bar.ts +38 -0
  448. package/src/renderer/process-indicator.ts +96 -0
  449. package/src/renderer/process-modal.ts +295 -0
  450. package/src/renderer/profile-picker-modal.ts +129 -0
  451. package/src/renderer/progress.ts +98 -0
  452. package/src/renderer/search-overlay.ts +54 -0
  453. package/src/renderer/selection-modal-overlay.ts +214 -0
  454. package/src/renderer/semantic-diff.ts +369 -0
  455. package/src/renderer/session-picker-modal.ts +127 -0
  456. package/src/renderer/settings-modal.ts +701 -0
  457. package/src/renderer/shell-surface.ts +88 -0
  458. package/src/renderer/surface-layout.ts +101 -0
  459. package/src/renderer/syntax-highlighter.ts +542 -0
  460. package/src/renderer/system-message.ts +83 -0
  461. package/src/renderer/tab-strip.ts +108 -0
  462. package/src/renderer/text-layout.ts +31 -0
  463. package/src/renderer/thinking.ts +17 -0
  464. package/src/renderer/tool-call.ts +233 -0
  465. package/src/renderer/ui-factory.ts +524 -0
  466. package/src/renderer/ui-primitives.ts +96 -0
  467. package/src/runtime/auth/inspection.ts +125 -0
  468. package/src/runtime/bootstrap-background.ts +147 -0
  469. package/src/runtime/bootstrap-command-context.ts +265 -0
  470. package/src/runtime/bootstrap-command-parts.ts +357 -0
  471. package/src/runtime/bootstrap-core.ts +375 -0
  472. package/src/runtime/bootstrap-helpers.ts +88 -0
  473. package/src/runtime/bootstrap-hook-bridge.ts +271 -0
  474. package/src/runtime/bootstrap-runtime-events.ts +254 -0
  475. package/src/runtime/bootstrap-services.ts +197 -0
  476. package/src/runtime/bootstrap-shell.ts +262 -0
  477. package/src/runtime/bootstrap.ts +488 -0
  478. package/src/runtime/compaction/index.ts +90 -0
  479. package/src/runtime/compaction/lifecycle.ts +167 -0
  480. package/src/runtime/compaction/manager.ts +474 -0
  481. package/src/runtime/compaction/quality-score.ts +279 -0
  482. package/src/runtime/compaction/resume-repair.ts +183 -0
  483. package/src/runtime/compaction/strategies/autocompact.ts +65 -0
  484. package/src/runtime/compaction/strategies/boundary-commit.ts +106 -0
  485. package/src/runtime/compaction/strategies/collapse.ts +90 -0
  486. package/src/runtime/compaction/strategies/index.ts +23 -0
  487. package/src/runtime/compaction/strategies/microcompact.ts +74 -0
  488. package/src/runtime/compaction/strategies/reactive.ts +89 -0
  489. package/src/runtime/compaction/types.ts +221 -0
  490. package/src/runtime/context.ts +158 -0
  491. package/src/runtime/diagnostics/actions.ts +776 -0
  492. package/src/runtime/diagnostics/index.ts +99 -0
  493. package/src/runtime/diagnostics/panels/agents.ts +252 -0
  494. package/src/runtime/diagnostics/panels/events.ts +188 -0
  495. package/src/runtime/diagnostics/panels/health.ts +242 -0
  496. package/src/runtime/diagnostics/panels/index.ts +24 -0
  497. package/src/runtime/diagnostics/panels/ops.ts +156 -0
  498. package/src/runtime/diagnostics/panels/policy.ts +176 -0
  499. package/src/runtime/diagnostics/panels/tasks.ts +251 -0
  500. package/src/runtime/diagnostics/panels/tool-calls.ts +267 -0
  501. package/src/runtime/diagnostics/provider.ts +262 -0
  502. package/src/runtime/ecosystem/catalog.ts +606 -0
  503. package/src/runtime/ecosystem/recommendations.ts +117 -0
  504. package/src/runtime/emitters/agents.ts +96 -0
  505. package/src/runtime/emitters/automation.ts +112 -0
  506. package/src/runtime/emitters/communication.ts +53 -0
  507. package/src/runtime/emitters/compaction.ts +161 -0
  508. package/src/runtime/emitters/control-plane.ts +65 -0
  509. package/src/runtime/emitters/deliveries.ts +65 -0
  510. package/src/runtime/emitters/forensics.ts +17 -0
  511. package/src/runtime/emitters/index.ts +59 -0
  512. package/src/runtime/emitters/knowledge.ts +129 -0
  513. package/src/runtime/emitters/mcp.ts +95 -0
  514. package/src/runtime/emitters/ops.ts +163 -0
  515. package/src/runtime/emitters/orchestration.ts +87 -0
  516. package/src/runtime/emitters/permissions.ts +98 -0
  517. package/src/runtime/emitters/planner.ts +23 -0
  518. package/src/runtime/emitters/plugins.ts +78 -0
  519. package/src/runtime/emitters/providers.ts +30 -0
  520. package/src/runtime/emitters/routes.ts +57 -0
  521. package/src/runtime/emitters/security.ts +53 -0
  522. package/src/runtime/emitters/session.ts +93 -0
  523. package/src/runtime/emitters/surfaces.ts +57 -0
  524. package/src/runtime/emitters/tasks.ts +69 -0
  525. package/src/runtime/emitters/tools.ts +140 -0
  526. package/src/runtime/emitters/transport.ts +78 -0
  527. package/src/runtime/emitters/turn.ts +155 -0
  528. package/src/runtime/emitters/ui.ts +57 -0
  529. package/src/runtime/emitters/watchers.ts +57 -0
  530. package/src/runtime/emitters/workflows.ts +79 -0
  531. package/src/runtime/eval/index.ts +48 -0
  532. package/src/runtime/eval/runner.ts +163 -0
  533. package/src/runtime/eval/suites.ts +264 -0
  534. package/src/runtime/events/domain-map.ts +148 -0
  535. package/src/runtime/events/index.ts +194 -0
  536. package/src/runtime/events/turn.ts +60 -0
  537. package/src/runtime/events/workflows.ts +17 -0
  538. package/src/runtime/forensics/collector.ts +693 -0
  539. package/src/runtime/forensics/index.ts +23 -0
  540. package/src/runtime/foundation-clients.ts +78 -0
  541. package/src/runtime/foundation-services.ts +96 -0
  542. package/src/runtime/guidance.ts +183 -0
  543. package/src/runtime/health/effect-handlers.ts +189 -0
  544. package/src/runtime/health/index.ts +70 -0
  545. package/src/runtime/health/wiring.ts +115 -0
  546. package/src/runtime/index.ts +174 -0
  547. package/src/runtime/integration/helpers.ts +640 -0
  548. package/src/runtime/lifecycle.ts +107 -0
  549. package/src/runtime/mcp/index.ts +68 -0
  550. package/src/runtime/mcp/manager.ts +513 -0
  551. package/src/runtime/network/inbound.ts +131 -0
  552. package/src/runtime/network/index.ts +30 -0
  553. package/src/runtime/network/outbound.ts +292 -0
  554. package/src/runtime/network/shared.ts +82 -0
  555. package/src/runtime/operator-client.ts +235 -0
  556. package/src/runtime/ops/control-plane.ts +363 -0
  557. package/src/runtime/ops/index.ts +122 -0
  558. package/src/runtime/ops/playbooks/index.ts +10 -0
  559. package/src/runtime/ops/playbooks/session-unrecoverable.ts +196 -0
  560. package/src/runtime/ops/playbooks/stuck-turn.ts +197 -0
  561. package/src/runtime/ops/runtime-context.ts +100 -0
  562. package/src/runtime/ops-api.ts +27 -0
  563. package/src/runtime/orchestration/spawn-policy.ts +83 -0
  564. package/src/runtime/peer-client.ts +404 -0
  565. package/src/runtime/perf/index.ts +57 -0
  566. package/src/runtime/perf/slo-collector.ts +375 -0
  567. package/src/runtime/permissions/index.ts +190 -0
  568. package/src/runtime/permissions/policy-runtime.ts +175 -0
  569. package/src/runtime/permissions/preflight.ts +101 -0
  570. package/src/runtime/permissions/rule-suggestions.ts +36 -0
  571. package/src/runtime/plugins/hot-reload.ts +221 -0
  572. package/src/runtime/plugins/index.ts +84 -0
  573. package/src/runtime/plugins/lifecycle.ts +95 -0
  574. package/src/runtime/plugins/manager.ts +474 -0
  575. package/src/runtime/plugins/manifest.ts +167 -0
  576. package/src/runtime/plugins/quarantine.ts +202 -0
  577. package/src/runtime/plugins/trust.ts +291 -0
  578. package/src/runtime/plugins/types.ts +205 -0
  579. package/src/runtime/provider-accounts/registry.ts +326 -0
  580. package/src/runtime/remote/distributed-runtime-contract-schemas.ts +386 -0
  581. package/src/runtime/remote/index.ts +488 -0
  582. package/src/runtime/remote/runner-registry.ts +438 -0
  583. package/src/runtime/remote/supervisor.ts +70 -0
  584. package/src/runtime/runtime-hook-api.ts +5 -0
  585. package/src/runtime/runtime-knowledge-api.ts +14 -0
  586. package/src/runtime/runtime-mcp-api.ts +5 -0
  587. package/src/runtime/runtime-ops-api.ts +86 -0
  588. package/src/runtime/runtime-provider-api.ts +18 -0
  589. package/src/runtime/sandbox/backend.ts +291 -0
  590. package/src/runtime/sandbox/manager.ts +364 -0
  591. package/src/runtime/sandbox/provisioning.ts +422 -0
  592. package/src/runtime/sandbox/session-registry.ts +289 -0
  593. package/src/runtime/services.ts +541 -0
  594. package/src/runtime/session-maintenance.ts +188 -0
  595. package/src/runtime/session-persistence.ts +288 -0
  596. package/src/runtime/session-return-context.ts +195 -0
  597. package/src/runtime/settings/control-plane-store.ts +258 -0
  598. package/src/runtime/settings/control-plane.ts +599 -0
  599. package/src/runtime/shell-command-extensions.ts +54 -0
  600. package/src/runtime/shell-command-ops.ts +207 -0
  601. package/src/runtime/shell-command-platform.ts +47 -0
  602. package/src/runtime/shell-command-services.ts +143 -0
  603. package/src/runtime/shell-command-workspace.ts +31 -0
  604. package/src/runtime/store/domains/conversation.ts +181 -0
  605. package/src/runtime/store/domains/domain-read-matrix.ts +17 -0
  606. package/src/runtime/store/domains/index.ts +222 -0
  607. package/src/runtime/store/domains/panels.ts +117 -0
  608. package/src/runtime/store/domains/permissions.ts +143 -0
  609. package/src/runtime/store/domains/ui-perf.ts +103 -0
  610. package/src/runtime/store/helpers/reducers/conversation.ts +228 -0
  611. package/src/runtime/store/helpers/reducers/lifecycle.ts +440 -0
  612. package/src/runtime/store/helpers/reducers/shared.ts +60 -0
  613. package/src/runtime/store/helpers/reducers/sync.ts +555 -0
  614. package/src/runtime/store/helpers/reducers.ts +30 -0
  615. package/src/runtime/store/index.ts +304 -0
  616. package/src/runtime/store/selectors/index.ts +354 -0
  617. package/src/runtime/store/state.ts +137 -0
  618. package/src/runtime/tasks/adapters/acp-adapter.ts +211 -0
  619. package/src/runtime/tasks/adapters/agent-adapter.ts +208 -0
  620. package/src/runtime/tasks/adapters/index.ts +16 -0
  621. package/src/runtime/tasks/adapters/process-adapter.ts +214 -0
  622. package/src/runtime/tasks/adapters/scheduler-adapter.ts +193 -0
  623. package/src/runtime/tasks/index.ts +68 -0
  624. package/src/runtime/tasks/manager.ts +415 -0
  625. package/src/runtime/telemetry/api-helpers.ts +517 -0
  626. package/src/runtime/telemetry/api.ts +768 -0
  627. package/src/runtime/telemetry/index.ts +178 -0
  628. package/src/runtime/telemetry/instrumentation/domain-bridge-agent-session.ts +440 -0
  629. package/src/runtime/telemetry/instrumentation/domain-bridge-plugin-mcp.ts +200 -0
  630. package/src/runtime/telemetry/instrumentation/domain-bridge-shared.ts +18 -0
  631. package/src/runtime/telemetry/instrumentation/domain-bridge-transport-task.ts +204 -0
  632. package/src/runtime/telemetry/instrumentation/domain-bridge.ts +125 -0
  633. package/src/runtime/telemetry/instrumentation/index.ts +67 -0
  634. package/src/runtime/tools/context.ts +114 -0
  635. package/src/runtime/tools/index.ts +46 -0
  636. package/src/runtime/tools/phased-executor.ts +448 -0
  637. package/src/runtime/tools/phases/budget.ts +130 -0
  638. package/src/runtime/tools/phases/execute.ts +69 -0
  639. package/src/runtime/tools/phases/index.ts +13 -0
  640. package/src/runtime/tools/phases/map-output.ts +98 -0
  641. package/src/runtime/tools/phases/permission.ts +133 -0
  642. package/src/runtime/tools/phases/posthook.ts +57 -0
  643. package/src/runtime/tools/phases/prehook.ts +68 -0
  644. package/src/runtime/tools/phases/validate.ts +53 -0
  645. package/src/runtime/transports/direct.ts +73 -0
  646. package/src/runtime/transports/http-helpers.ts +218 -0
  647. package/src/runtime/transports/http-types.ts +364 -0
  648. package/src/runtime/transports/http.ts +629 -0
  649. package/src/runtime/transports/realtime.ts +50 -0
  650. package/src/runtime/transports/remote-events.ts +16 -0
  651. package/src/runtime/transports/shared.ts +39 -0
  652. package/src/runtime/transports/ui-runtime-events.ts +35 -0
  653. package/src/runtime/ui/index.ts +39 -0
  654. package/src/runtime/ui/model-picker/data-provider.ts +182 -0
  655. package/src/runtime/ui/model-picker/health-enrichment.ts +228 -0
  656. package/src/runtime/ui/model-picker/index.ts +59 -0
  657. package/src/runtime/ui/model-picker/types.ts +149 -0
  658. package/src/runtime/ui/provider-health/data-provider.ts +244 -0
  659. package/src/runtime/ui/provider-health/fallback-visualizer.ts +69 -0
  660. package/src/runtime/ui/provider-health/index.ts +46 -0
  661. package/src/runtime/ui/provider-health/types.ts +146 -0
  662. package/src/runtime/ui-events.ts +46 -0
  663. package/src/runtime/ui-read-model-helpers.ts +32 -0
  664. package/src/runtime/ui-read-models-core.ts +95 -0
  665. package/src/runtime/ui-read-models-observability-maintenance.ts +81 -0
  666. package/src/runtime/ui-read-models-observability-options.ts +5 -0
  667. package/src/runtime/ui-read-models-observability-remote.ts +73 -0
  668. package/src/runtime/ui-read-models-observability-security.ts +172 -0
  669. package/src/runtime/ui-read-models-observability-system.ts +217 -0
  670. package/src/runtime/ui-read-models-observability.ts +59 -0
  671. package/src/runtime/ui-read-models-operations.ts +203 -0
  672. package/src/runtime/ui-read-models.ts +61 -0
  673. package/src/runtime/ui-service-queries.ts +114 -0
  674. package/src/runtime/ui-services.ts +163 -0
  675. package/src/runtime/worktree/registry.ts +252 -0
  676. package/src/scripts/process-messages.ts +42 -0
  677. package/src/sessions/manager.ts +388 -0
  678. package/src/shell/blocking-input.ts +89 -0
  679. package/src/shell/ui-openers.ts +163 -0
  680. package/src/state/file-watcher.ts +294 -0
  681. package/src/state/index.ts +56 -0
  682. package/src/state/knowledge-injection.ts +214 -0
  683. package/src/state/memory-embedding-http.ts +642 -0
  684. package/src/state/memory-embeddings.ts +312 -0
  685. package/src/state/memory-ingest.ts +132 -0
  686. package/src/state/memory-registry.ts +111 -0
  687. package/src/state/memory-store-helpers.ts +160 -0
  688. package/src/state/memory-store.ts +728 -0
  689. package/src/state/memory-vector-store.ts +418 -0
  690. package/src/templates/manager.ts +187 -0
  691. package/src/tools/agent/index.ts +610 -0
  692. package/src/tools/agent/manager.ts +476 -0
  693. package/src/tools/analyze/git-modes.ts +380 -0
  694. package/src/tools/analyze/index.ts +128 -0
  695. package/src/tools/channel/agent-tools.ts +16 -0
  696. package/src/tools/channel/index.ts +268 -0
  697. package/src/tools/control/index.ts +90 -0
  698. package/src/tools/edit/core.ts +619 -0
  699. package/src/tools/edit/index.ts +4 -0
  700. package/src/tools/edit/phased.ts +33 -0
  701. package/src/tools/fetch/index.ts +3 -0
  702. package/src/tools/fetch/phased.ts +34 -0
  703. package/src/tools/fetch/runtime.ts +499 -0
  704. package/src/tools/index.ts +186 -0
  705. package/src/tools/mcp/index.ts +190 -0
  706. package/src/tools/remote-trigger/index.ts +130 -0
  707. package/src/tools/repl/index.ts +318 -0
  708. package/src/tools/shared/auto-heal.ts +282 -0
  709. package/src/tools/state/index.ts +688 -0
  710. package/src/tools/web-search/index.ts +38 -0
  711. package/src/tools/write/index.ts +604 -0
  712. package/src/tools/write/phased.ts +41 -0
  713. package/src/types/generated/foundation-client-types.ts +22 -0
  714. package/src/types/sql-js.d.ts +15 -0
  715. package/src/utils/splash-lines.ts +46 -0
  716. package/src/version.ts +17 -0
  717. package/src/watchers/index.ts +11 -0
  718. package/src/watchers/registry.ts +517 -0
  719. package/src/web-search/index.ts +26 -0
  720. package/src/web-search/provider-registry.ts +64 -0
  721. package/src/web-search/providers/brave.ts +100 -0
  722. package/src/web-search/providers/duckduckgo.ts +270 -0
  723. package/src/web-search/providers/exa.ts +77 -0
  724. package/src/web-search/providers/firecrawl.ts +90 -0
  725. package/src/web-search/providers/perplexity.ts +86 -0
  726. package/src/web-search/providers/searxng.ts +88 -0
  727. package/src/web-search/providers/shared.ts +249 -0
  728. package/src/web-search/providers/tavily.ts +90 -0
  729. package/src/web-search/service.ts +142 -0
  730. package/src/widget/index.ts +2 -0
  731. package/src/widget/types.ts +9 -0
  732. package/src/widget/widget.ts +8 -0
package/bin/goodvibes ADDED
@@ -0,0 +1,66 @@
1
+ #!/usr/bin/env node
2
+ import { accessSync, constants } from 'node:fs';
3
+ import { dirname, join } from 'node:path';
4
+ import { fileURLToPath } from 'node:url';
5
+ import { spawnSync } from 'node:child_process';
6
+
7
+ const __dirname = dirname(fileURLToPath(import.meta.url));
8
+ const packageRoot = join(__dirname, '..');
9
+
10
+ if (process.platform === 'win32') {
11
+ console.error('goodvibes: native Windows is not supported.');
12
+ console.error('Use WSL so the Linux release binary path applies.');
13
+ process.exit(1);
14
+ }
15
+
16
+ function resolveArtifactName(platform, arch) {
17
+ if (platform === 'linux' && arch === 'x64') return 'goodvibes-linux-x64';
18
+ if (platform === 'linux' && arch === 'arm64') return 'goodvibes-linux-arm64';
19
+ if (platform === 'darwin' && arch === 'x64') return 'goodvibes-macos-x64';
20
+ if (platform === 'darwin' && arch === 'arm64') return 'goodvibes-macos-arm64';
21
+ return null;
22
+ }
23
+
24
+ function isExecutable(path) {
25
+ try {
26
+ accessSync(path, constants.X_OK);
27
+ return true;
28
+ } catch {
29
+ return false;
30
+ }
31
+ }
32
+
33
+ function run(command, args) {
34
+ const child = spawnSync(command, args, { stdio: 'inherit' });
35
+ if (child.error) {
36
+ throw child.error;
37
+ }
38
+ process.exit(child.status ?? 1);
39
+ }
40
+
41
+ const artifactName = resolveArtifactName(process.platform, process.arch);
42
+ const vendoredBinary = artifactName ? join(packageRoot, 'vendor', artifactName) : null;
43
+
44
+ if (vendoredBinary && isExecutable(vendoredBinary)) {
45
+ run(vendoredBinary, process.argv.slice(2));
46
+ }
47
+
48
+ const bunProbe = spawnSync('bun', ['--version'], { stdio: 'ignore' });
49
+ if (bunProbe.status === 0) {
50
+ run('bun', [join(packageRoot, 'src', 'main.ts'), ...process.argv.slice(2)]);
51
+ }
52
+
53
+ const supported = [
54
+ 'linux-x64',
55
+ 'linux-arm64',
56
+ 'darwin-x64',
57
+ 'darwin-arm64',
58
+ ].join(', ');
59
+
60
+ console.error('goodvibes: no runnable binary is available.');
61
+ console.error(`platform: ${process.platform}-${process.arch}`);
62
+ console.error(`supported prebuilt targets: ${supported}`);
63
+ console.error('Either:');
64
+ console.error(' 1. install Bun and re-run the command, or');
65
+ console.error(' 2. reinstall after a matching GitHub release asset exists for this version.');
66
+ process.exit(1);
package/docs/README.md ADDED
@@ -0,0 +1,32 @@
1
+ # Documentation
2
+
3
+ This directory contains the current product documentation for `goodvibes-tui`.
4
+
5
+ ## Guides
6
+
7
+ - [Getting started](getting-started.md)
8
+ Installation, first-run setup, provider configuration, common paths, and basic run/build flows.
9
+
10
+ - [Deployment and services](deployment-and-services.md)
11
+ TUI-only mode, compiled binary behavior, in-process daemon/listener hosting, source-run daemon mode, inbound TLS, outbound trust configuration, and control-plane entrypoints.
12
+
13
+ - [Providers and routing](providers-and-routing.md)
14
+ Native providers, compatible/gateway providers, local discovery, synthetic failover, search providers, voice providers, and media providers.
15
+
16
+ - [Knowledge, artifacts, and multimodal](knowledge-artifacts-and-multimodal.md)
17
+ Session memory, durable memory, structured knowledge, connectors, extractors, embeddings, artifacts, and multimodal analysis.
18
+
19
+ - [Channels, remote runtime, and API](channels-remote-and-api.md)
20
+ Omnichannel surfaces, reply routing, remote peers, node-host contracts, and the daemon/control-plane HTTP + streaming surfaces.
21
+
22
+ - [Tools and commands](tools-and-commands.md)
23
+ Built-in tool families, slash-command families, and the operator/workflow surfaces that tie them together.
24
+
25
+ - [Release and publishing](release-and-publishing.md)
26
+ Release validation, GitHub CD, compiled binary releases, and optional Bun-oriented npm distribution.
27
+
28
+ - [Release notes](releases/0.18.4.md)
29
+ Version-specific release notes for shipped TUI releases.
30
+
31
+ - [Foundation artifacts](foundation-artifacts/README.md)
32
+ Checked-in operator and peer contract manifests plus canonical knowledge GraphQL and SQL artifacts for release-gate and SDK extraction work.
@@ -0,0 +1,16 @@
1
+ ## Foundation Artifacts
2
+
3
+ These files are the checked-in canonical artifacts for the current GoodVibes foundation surfaces.
4
+
5
+ - `operator-contract.json` — typed operator/client contract manifest
6
+ - `peer-contract.json` — node-host / peer contract manifest
7
+ - `knowledge-graphql.graphql` — canonical knowledge GraphQL schema text
8
+ - `knowledge-store.sql` — canonical knowledge SQL schema
9
+
10
+ Regenerate them with:
11
+
12
+ ```bash
13
+ bun run foundation:artifacts
14
+ ```
15
+
16
+ The release-gate tests fail if these artifacts drift from the current source.
@@ -0,0 +1,397 @@
1
+ scalar JSON
2
+
3
+ enum KnowledgeProjectionKind {
4
+ OVERVIEW
5
+ BUNDLE
6
+ SOURCE
7
+ NODE
8
+ ISSUE
9
+ DASHBOARD
10
+ ROLLUP
11
+ }
12
+
13
+ enum KnowledgePacketDetail {
14
+ COMPACT
15
+ STANDARD
16
+ DETAILED
17
+ }
18
+
19
+ enum KnowledgeJobMode {
20
+ INLINE
21
+ BACKGROUND
22
+ }
23
+
24
+ type KnowledgeStatus {
25
+ ready: Boolean!
26
+ storagePath: String!
27
+ sourceCount: Int!
28
+ nodeCount: Int!
29
+ edgeCount: Int!
30
+ issueCount: Int!
31
+ extractionCount: Int!
32
+ jobRunCount: Int!
33
+ usageCount: Int!
34
+ candidateCount: Int!
35
+ reportCount: Int!
36
+ scheduleCount: Int!
37
+ note: String!
38
+ }
39
+
40
+ type KnowledgeConnectorSetupField {
41
+ key: String!
42
+ label: String!
43
+ kind: String!
44
+ optional: Boolean
45
+ source: String
46
+ description: String
47
+ }
48
+
49
+ type KnowledgeConnectorSetup {
50
+ version: String!
51
+ summary: String!
52
+ transportHints: [String!]!
53
+ steps: [String!]!
54
+ fields: [KnowledgeConnectorSetupField!]!
55
+ metadata: JSON
56
+ }
57
+
58
+ type KnowledgeConnectorDoctorCheck {
59
+ id: String!
60
+ label: String!
61
+ status: String!
62
+ detail: String!
63
+ metadata: JSON
64
+ }
65
+
66
+ type KnowledgeConnectorDoctorReport {
67
+ connectorId: String!
68
+ ready: Boolean!
69
+ summary: String!
70
+ checks: [KnowledgeConnectorDoctorCheck!]!
71
+ hints: [String!]!
72
+ metadata: JSON
73
+ }
74
+
75
+ type KnowledgeConnector {
76
+ id: String!
77
+ displayName: String
78
+ version: String
79
+ description: String!
80
+ sourceType: String!
81
+ inputSchema: JSON
82
+ examples: [JSON!]!
83
+ capabilities: [String!]!
84
+ setup: KnowledgeConnectorSetup
85
+ metadata: JSON
86
+ }
87
+
88
+ type KnowledgeSource {
89
+ id: String!
90
+ connectorId: String!
91
+ sourceType: String!
92
+ title: String
93
+ sourceUri: String
94
+ canonicalUri: String
95
+ summary: String
96
+ description: String
97
+ tags: [String!]!
98
+ folderPath: String
99
+ status: String!
100
+ artifactId: String
101
+ contentHash: String
102
+ lastCrawledAt: Float
103
+ crawlError: String
104
+ sessionId: String
105
+ metadata: JSON
106
+ createdAt: Float!
107
+ updatedAt: Float!
108
+ }
109
+
110
+ type KnowledgeNode {
111
+ id: String!
112
+ kind: String!
113
+ slug: String!
114
+ title: String!
115
+ summary: String
116
+ aliases: [String!]!
117
+ status: String!
118
+ confidence: Int!
119
+ sourceId: String
120
+ metadata: JSON
121
+ createdAt: Float!
122
+ updatedAt: Float!
123
+ }
124
+
125
+ type KnowledgeEdge {
126
+ id: String!
127
+ fromKind: String!
128
+ fromId: String!
129
+ toKind: String!
130
+ toId: String!
131
+ relation: String!
132
+ weight: Float!
133
+ metadata: JSON
134
+ createdAt: Float!
135
+ updatedAt: Float!
136
+ }
137
+
138
+ type KnowledgeIssue {
139
+ id: String!
140
+ severity: String!
141
+ code: String!
142
+ message: String!
143
+ status: String!
144
+ sourceId: String
145
+ nodeId: String
146
+ metadata: JSON
147
+ createdAt: Float!
148
+ updatedAt: Float!
149
+ }
150
+
151
+ type KnowledgeExtraction {
152
+ id: String!
153
+ sourceId: String!
154
+ artifactId: String
155
+ extractorId: String!
156
+ format: String!
157
+ title: String
158
+ summary: String
159
+ excerpt: String
160
+ sections: [String!]!
161
+ links: [String!]!
162
+ estimatedTokens: Int!
163
+ structure: JSON
164
+ metadata: JSON
165
+ createdAt: Float!
166
+ updatedAt: Float!
167
+ }
168
+
169
+ type KnowledgeItemView {
170
+ source: KnowledgeSource
171
+ node: KnowledgeNode
172
+ issue: KnowledgeIssue
173
+ relatedEdges: [KnowledgeEdge!]!
174
+ linkedSources: [KnowledgeSource!]!
175
+ linkedNodes: [KnowledgeNode!]!
176
+ }
177
+
178
+ type KnowledgeSearchResult {
179
+ kind: String!
180
+ id: String!
181
+ score: Float!
182
+ reason: String!
183
+ source: KnowledgeSource
184
+ node: KnowledgeNode
185
+ }
186
+
187
+ type KnowledgePacketItem {
188
+ kind: String!
189
+ id: String!
190
+ title: String!
191
+ summary: String
192
+ uri: String
193
+ reason: String!
194
+ score: Float!
195
+ estimatedTokens: Int!
196
+ related: [String!]!
197
+ evidence: [String!]!
198
+ metadata: JSON
199
+ }
200
+
201
+ type KnowledgePacket {
202
+ task: String!
203
+ writeScope: [String!]!
204
+ generatedAt: Float!
205
+ detail: KnowledgePacketDetail!
206
+ strategy: String!
207
+ budgetLimit: Int!
208
+ estimatedTokens: Int!
209
+ items: [KnowledgePacketItem!]!
210
+ }
211
+
212
+ type KnowledgeProjectionTarget {
213
+ targetId: String!
214
+ kind: KnowledgeProjectionKind!
215
+ title: String!
216
+ description: String!
217
+ itemId: String
218
+ defaultPath: String!
219
+ defaultFilename: String!
220
+ metadata: JSON
221
+ }
222
+
223
+ type KnowledgeProjectionPage {
224
+ path: String!
225
+ title: String!
226
+ format: String!
227
+ content: String!
228
+ itemIds: [String!]!
229
+ metadata: JSON
230
+ }
231
+
232
+ type KnowledgeProjectionBundle {
233
+ id: String!
234
+ target: KnowledgeProjectionTarget!
235
+ generatedAt: Float!
236
+ pageCount: Int!
237
+ pages: [KnowledgeProjectionPage!]!
238
+ metadata: JSON
239
+ }
240
+
241
+ type ArtifactDescriptor {
242
+ id: String!
243
+ kind: String!
244
+ mimeType: String!
245
+ filename: String
246
+ sizeBytes: Int!
247
+ sourceUri: String
248
+ createdAt: Float!
249
+ metadata: JSON
250
+ }
251
+
252
+ type KnowledgeJob {
253
+ id: String!
254
+ label: String!
255
+ description: String!
256
+ defaultMode: KnowledgeJobMode!
257
+ triggerKinds: [String!]!
258
+ lastRunAt: Float
259
+ metadata: JSON
260
+ }
261
+
262
+ type KnowledgeJobRun {
263
+ id: String!
264
+ jobId: String!
265
+ status: String!
266
+ mode: KnowledgeJobMode!
267
+ requestedAt: Float!
268
+ startedAt: Float
269
+ completedAt: Float
270
+ error: String
271
+ result: JSON
272
+ metadata: JSON
273
+ }
274
+
275
+ type KnowledgeBatchIngestResult {
276
+ imported: Int!
277
+ failed: Int!
278
+ sources: [KnowledgeSource!]!
279
+ errors: [String!]!
280
+ }
281
+
282
+ type KnowledgeUsageRecord {
283
+ id: String!
284
+ targetKind: String!
285
+ targetId: String!
286
+ usageKind: String!
287
+ task: String
288
+ sessionId: String
289
+ score: Float
290
+ metadata: JSON
291
+ createdAt: Float!
292
+ }
293
+
294
+ type KnowledgeConsolidationCandidate {
295
+ id: String!
296
+ candidateType: String!
297
+ status: String!
298
+ subjectKind: String!
299
+ subjectId: String!
300
+ title: String!
301
+ summary: String
302
+ score: Float!
303
+ evidence: [String!]!
304
+ suggestedMemoryClass: String
305
+ suggestedScope: String
306
+ decidedAt: Float
307
+ decidedBy: String
308
+ metadata: JSON
309
+ createdAt: Float!
310
+ updatedAt: Float!
311
+ }
312
+
313
+ type KnowledgeConsolidationReport {
314
+ id: String!
315
+ kind: String!
316
+ title: String!
317
+ summary: String!
318
+ highlights: [String!]!
319
+ metrics: JSON
320
+ metadata: JSON
321
+ createdAt: Float!
322
+ updatedAt: Float!
323
+ }
324
+
325
+ type KnowledgeSchedule {
326
+ id: String!
327
+ jobId: String!
328
+ label: String!
329
+ enabled: Boolean!
330
+ schedule: JSON!
331
+ lastRunAt: Float
332
+ nextRunAt: Float
333
+ metadata: JSON
334
+ createdAt: Float!
335
+ updatedAt: Float!
336
+ }
337
+
338
+ input KnowledgeJobRunInput {
339
+ mode: KnowledgeJobMode
340
+ }
341
+
342
+ input KnowledgePacketInput {
343
+ task: String!
344
+ writeScope: [String!]
345
+ limit: Int
346
+ detail: KnowledgePacketDetail
347
+ budgetLimit: Int
348
+ }
349
+
350
+ type Query {
351
+ status: KnowledgeStatus!
352
+ connectors: [KnowledgeConnector!]!
353
+ connectorDoctor(id: String!): KnowledgeConnectorDoctorReport
354
+ sources(limit: Int, offset: Int): [KnowledgeSource!]!
355
+ nodes(limit: Int, offset: Int): [KnowledgeNode!]!
356
+ issues(limit: Int, offset: Int): [KnowledgeIssue!]!
357
+ itemView(kind: String!, id: String!): KnowledgeItemView
358
+ extractions(limit: Int, sourceId: String): [KnowledgeExtraction!]!
359
+ neighbors(kind: String!, id: String!, relation: String, limit: Int): [KnowledgeEdge!]!
360
+ search(query: String!, limit: Int): [KnowledgeSearchResult!]!
361
+ packet(task: String!, writeScope: [String!], limit: Int, detail: KnowledgePacketDetail, budgetLimit: Int): KnowledgePacket!
362
+ projectionTargets(limit: Int): [KnowledgeProjectionTarget!]!
363
+ projection(kind: KnowledgeProjectionKind!, id: String, limit: Int): KnowledgeProjectionBundle!
364
+ jobs: [KnowledgeJob!]!
365
+ job(id: String!): KnowledgeJob
366
+ jobRuns(limit: Int, jobId: String): [KnowledgeJobRun!]!
367
+ usage(limit: Int, targetKind: String, targetId: String, usageKind: String): [KnowledgeUsageRecord!]!
368
+ usageRecords(limit: Int, targetKind: String, targetId: String, usageKind: String): [KnowledgeUsageRecord!]!
369
+ consolidationCandidates(limit: Int, status: String): [KnowledgeConsolidationCandidate!]!
370
+ consolidationReports(limit: Int): [KnowledgeConsolidationReport!]!
371
+ schedules(limit: Int): [KnowledgeSchedule!]!
372
+ sourceExtraction(sourceId: String!): KnowledgeExtraction
373
+ }
374
+
375
+ type Mutation {
376
+ ingestUrl(url: String!, sourceType: String, connectorId: String, folderPath: String, tags: [String!], sessionId: String, allowPrivateHosts: Boolean): KnowledgeSource!
377
+ ingestArtifact(path: String!, connectorId: String, tags: [String!], sessionId: String, allowPrivateHosts: Boolean): KnowledgeSource!
378
+ importBookmarksFromFile(path: String!, sessionId: String, allowPrivateHosts: Boolean): KnowledgeBatchIngestResult!
379
+ importUrlsFromFile(path: String!, sessionId: String, allowPrivateHosts: Boolean): KnowledgeBatchIngestResult!
380
+ ingestBookmarkSeeds(seeds: [String!]!, connectorId: String, sessionId: String): KnowledgeBatchIngestResult!
381
+ ingestWithConnector(connectorId: String!, input: String!, sessionId: String, allowPrivateHosts: Boolean): KnowledgeBatchIngestResult!
382
+ ingestConnectorInput(input: String!, connectorId: String, sessionId: String, allowPrivateHosts: Boolean): KnowledgeBatchIngestResult!
383
+ renderProjection(kind: KnowledgeProjectionKind!, id: String, limit: Int): KnowledgeProjectionBundle!
384
+ materializeProjection(kind: KnowledgeProjectionKind!, id: String, limit: Int): KnowledgeMaterializedProjection!
385
+ reindex: KnowledgeStatus!
386
+ runJob(id: String!, mode: KnowledgeJobMode): KnowledgeJobRun!
387
+ saveSchedule(id: String, jobId: String!, label: String!, enabled: Boolean!, schedule: JSON!, metadata: JSON): KnowledgeSchedule!
388
+ deleteSchedule(id: String!): Boolean!
389
+ setScheduleEnabled(id: String!, enabled: Boolean!): KnowledgeSchedule
390
+ decideConsolidationCandidate(id: String!, status: String!, decidedBy: String): KnowledgeConsolidationCandidate!
391
+ lint: [KnowledgeIssue!]!
392
+ }
393
+
394
+ type KnowledgeMaterializedProjection {
395
+ artifact: ArtifactDescriptor!
396
+ bundle: KnowledgeProjectionBundle!
397
+ }
@@ -0,0 +1,183 @@
1
+ CREATE TABLE IF NOT EXISTS knowledge_sources (
2
+ id TEXT PRIMARY KEY,
3
+ connector_id TEXT NOT NULL,
4
+ source_type TEXT NOT NULL,
5
+ title TEXT,
6
+ source_uri TEXT,
7
+ canonical_uri TEXT,
8
+ summary TEXT,
9
+ description TEXT,
10
+ tags TEXT NOT NULL DEFAULT '[]',
11
+ folder_path TEXT,
12
+ status TEXT NOT NULL,
13
+ artifact_id TEXT,
14
+ content_hash TEXT,
15
+ last_crawled_at INTEGER,
16
+ crawl_error TEXT,
17
+ session_id TEXT,
18
+ metadata TEXT NOT NULL DEFAULT '{}',
19
+ created_at INTEGER NOT NULL,
20
+ updated_at INTEGER NOT NULL
21
+ );
22
+
23
+ CREATE INDEX IF NOT EXISTS idx_knowledge_sources_canonical_uri ON knowledge_sources(canonical_uri);
24
+
25
+ CREATE INDEX IF NOT EXISTS idx_knowledge_sources_updated_at ON knowledge_sources(updated_at);
26
+
27
+ CREATE TABLE IF NOT EXISTS knowledge_nodes (
28
+ id TEXT PRIMARY KEY,
29
+ kind TEXT NOT NULL,
30
+ slug TEXT NOT NULL,
31
+ title TEXT NOT NULL,
32
+ summary TEXT,
33
+ aliases TEXT NOT NULL DEFAULT '[]',
34
+ status TEXT NOT NULL,
35
+ confidence INTEGER NOT NULL,
36
+ source_id TEXT,
37
+ metadata TEXT NOT NULL DEFAULT '{}',
38
+ created_at INTEGER NOT NULL,
39
+ updated_at INTEGER NOT NULL
40
+ );
41
+
42
+ CREATE UNIQUE INDEX IF NOT EXISTS idx_knowledge_nodes_kind_slug ON knowledge_nodes(kind, slug);
43
+
44
+ CREATE INDEX IF NOT EXISTS idx_knowledge_nodes_updated_at ON knowledge_nodes(updated_at);
45
+
46
+ CREATE TABLE IF NOT EXISTS knowledge_edges (
47
+ id TEXT PRIMARY KEY,
48
+ from_kind TEXT NOT NULL,
49
+ from_id TEXT NOT NULL,
50
+ to_kind TEXT NOT NULL,
51
+ to_id TEXT NOT NULL,
52
+ relation TEXT NOT NULL,
53
+ weight REAL NOT NULL,
54
+ metadata TEXT NOT NULL DEFAULT '{}',
55
+ created_at INTEGER NOT NULL,
56
+ updated_at INTEGER NOT NULL
57
+ );
58
+
59
+ CREATE UNIQUE INDEX IF NOT EXISTS idx_knowledge_edges_unique ON knowledge_edges(from_kind, from_id, to_kind, to_id, relation);
60
+
61
+ CREATE TABLE IF NOT EXISTS knowledge_issues (
62
+ id TEXT PRIMARY KEY,
63
+ severity TEXT NOT NULL,
64
+ code TEXT NOT NULL,
65
+ message TEXT NOT NULL,
66
+ status TEXT NOT NULL,
67
+ source_id TEXT,
68
+ node_id TEXT,
69
+ metadata TEXT NOT NULL DEFAULT '{}',
70
+ created_at INTEGER NOT NULL,
71
+ updated_at INTEGER NOT NULL
72
+ );
73
+
74
+ CREATE INDEX IF NOT EXISTS idx_knowledge_issues_code ON knowledge_issues(code);
75
+
76
+ CREATE TABLE IF NOT EXISTS knowledge_extractions (
77
+ id TEXT PRIMARY KEY,
78
+ source_id TEXT NOT NULL,
79
+ artifact_id TEXT,
80
+ extractor_id TEXT NOT NULL,
81
+ format TEXT NOT NULL,
82
+ title TEXT,
83
+ summary TEXT,
84
+ excerpt TEXT,
85
+ sections TEXT NOT NULL DEFAULT '[]',
86
+ links TEXT NOT NULL DEFAULT '[]',
87
+ estimated_tokens INTEGER NOT NULL DEFAULT 0,
88
+ structure TEXT NOT NULL DEFAULT '{}',
89
+ metadata TEXT NOT NULL DEFAULT '{}',
90
+ created_at INTEGER NOT NULL,
91
+ updated_at INTEGER NOT NULL
92
+ );
93
+
94
+ CREATE UNIQUE INDEX IF NOT EXISTS idx_knowledge_extractions_source_id ON knowledge_extractions(source_id);
95
+
96
+ CREATE INDEX IF NOT EXISTS idx_knowledge_extractions_format ON knowledge_extractions(format);
97
+
98
+ CREATE TABLE IF NOT EXISTS knowledge_job_runs (
99
+ id TEXT PRIMARY KEY,
100
+ job_id TEXT NOT NULL,
101
+ status TEXT NOT NULL,
102
+ mode TEXT NOT NULL,
103
+ requested_at INTEGER NOT NULL,
104
+ started_at INTEGER,
105
+ completed_at INTEGER,
106
+ error TEXT,
107
+ result TEXT NOT NULL DEFAULT '{}',
108
+ metadata TEXT NOT NULL DEFAULT '{}',
109
+ created_at INTEGER NOT NULL,
110
+ updated_at INTEGER NOT NULL
111
+ );
112
+
113
+ CREATE INDEX IF NOT EXISTS idx_knowledge_job_runs_job_id ON knowledge_job_runs(job_id);
114
+
115
+ CREATE INDEX IF NOT EXISTS idx_knowledge_job_runs_requested_at ON knowledge_job_runs(requested_at);
116
+
117
+ CREATE TABLE IF NOT EXISTS knowledge_usage_records (
118
+ id TEXT PRIMARY KEY,
119
+ target_kind TEXT NOT NULL,
120
+ target_id TEXT NOT NULL,
121
+ usage_kind TEXT NOT NULL,
122
+ task TEXT,
123
+ session_id TEXT,
124
+ score REAL,
125
+ metadata TEXT NOT NULL DEFAULT '{}',
126
+ created_at INTEGER NOT NULL
127
+ );
128
+
129
+ CREATE INDEX IF NOT EXISTS idx_knowledge_usage_target ON knowledge_usage_records(target_kind, target_id);
130
+
131
+ CREATE INDEX IF NOT EXISTS idx_knowledge_usage_created_at ON knowledge_usage_records(created_at);
132
+
133
+ CREATE TABLE IF NOT EXISTS knowledge_consolidation_candidates (
134
+ id TEXT PRIMARY KEY,
135
+ candidate_type TEXT NOT NULL,
136
+ status TEXT NOT NULL,
137
+ subject_kind TEXT NOT NULL,
138
+ subject_id TEXT NOT NULL,
139
+ title TEXT NOT NULL,
140
+ summary TEXT,
141
+ score REAL NOT NULL,
142
+ evidence TEXT NOT NULL DEFAULT '[]',
143
+ suggested_memory_class TEXT,
144
+ suggested_scope TEXT,
145
+ decided_at INTEGER,
146
+ decided_by TEXT,
147
+ metadata TEXT NOT NULL DEFAULT '{}',
148
+ created_at INTEGER NOT NULL,
149
+ updated_at INTEGER NOT NULL
150
+ );
151
+
152
+ CREATE INDEX IF NOT EXISTS idx_knowledge_candidates_subject ON knowledge_consolidation_candidates(subject_kind, subject_id);
153
+
154
+ CREATE INDEX IF NOT EXISTS idx_knowledge_candidates_status ON knowledge_consolidation_candidates(status);
155
+
156
+ CREATE TABLE IF NOT EXISTS knowledge_consolidation_reports (
157
+ id TEXT PRIMARY KEY,
158
+ kind TEXT NOT NULL,
159
+ title TEXT NOT NULL,
160
+ summary TEXT NOT NULL,
161
+ highlights TEXT NOT NULL DEFAULT '[]',
162
+ metrics TEXT NOT NULL DEFAULT '{}',
163
+ metadata TEXT NOT NULL DEFAULT '{}',
164
+ created_at INTEGER NOT NULL,
165
+ updated_at INTEGER NOT NULL
166
+ );
167
+
168
+ CREATE INDEX IF NOT EXISTS idx_knowledge_reports_kind ON knowledge_consolidation_reports(kind);
169
+
170
+ CREATE TABLE IF NOT EXISTS knowledge_schedules (
171
+ id TEXT PRIMARY KEY,
172
+ job_id TEXT NOT NULL,
173
+ label TEXT NOT NULL,
174
+ enabled INTEGER NOT NULL,
175
+ schedule TEXT NOT NULL,
176
+ last_run_at INTEGER,
177
+ next_run_at INTEGER,
178
+ metadata TEXT NOT NULL DEFAULT '{}',
179
+ created_at INTEGER NOT NULL,
180
+ updated_at INTEGER NOT NULL
181
+ );
182
+
183
+ CREATE INDEX IF NOT EXISTS idx_knowledge_schedules_job_id ON knowledge_schedules(job_id);