vibe64 0.1.32 → 0.1.34

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 (294) hide show
  1. package/bin/run.js +1717 -1648
  2. package/bin/server.js +81 -68
  3. package/bin/upgrade-state.js +5438 -5189
  4. package/dist/assets/{GithubBrowserTabs-2bEGbRAs.js → GithubBrowserTabs-DO5PHon-.js} +1 -1
  5. package/dist/assets/GithubMarkdown-BQ6MfCDJ.js +3 -0
  6. package/dist/assets/GithubMarkdown-U7-j-qNI.css +1 -0
  7. package/dist/assets/StudioErrorNotice-sQfmeR-z.js +1 -0
  8. package/dist/assets/VAlert-P256xaE0.js +1 -0
  9. package/dist/assets/VAutocomplete-BDb95qJX.js +1 -0
  10. package/dist/assets/VAvatar-9ilDR2r2.css +1 -0
  11. package/dist/assets/VAvatar-DPzqDH4r.js +1 -0
  12. package/dist/assets/VBtn-B2MBK2DL.js +1 -0
  13. package/dist/assets/VCard-mXy0k4aS.js +1 -0
  14. package/dist/assets/VCheckbox-C7A1ZW4D.js +1 -0
  15. package/dist/assets/VChip-CcI-Oo2J.js +1 -0
  16. package/dist/assets/VDialog-Bu3EfKb1.js +1 -0
  17. package/dist/assets/VDivider-BMEqUoAB.js +1 -0
  18. package/dist/assets/VExpansionPanels-Dgjrop0V.js +1 -0
  19. package/dist/assets/VMenu-C_x18lwb.js +1 -0
  20. package/dist/assets/VOverlay-CeMZurIN.js +1 -0
  21. package/dist/assets/VRadioGroup-CUu2-KIP.js +1 -0
  22. package/dist/assets/VRow-Cpw7OHQV.js +1 -0
  23. package/dist/assets/{VSelect-DY-ZuBJJ.js → VSelect-DL3HaA5m.js} +1 -1
  24. package/dist/assets/VSheet-DZWsu0kL.js +1 -0
  25. package/dist/assets/VSkeletonLoader-CttxM1tw.js +1 -0
  26. package/dist/assets/VSpacer-Dhmsvk4t.js +1 -0
  27. package/dist/assets/{VSwitch-Bm1bwl2V.js → VSwitch-BRHeDJkH.js} +1 -1
  28. package/dist/assets/VTextField-BR2eZeFT.js +1 -0
  29. package/dist/assets/VTextarea-DbqamXJd.js +1 -0
  30. package/dist/assets/Vibe64AsyncModuleState-Dx7YKRPp.js +1 -0
  31. package/dist/assets/Vibe64DashboardBackButton-DD9UR77P.css +1 -0
  32. package/dist/assets/Vibe64DashboardBackButton-yE6cyYg2.js +1 -0
  33. package/dist/assets/Vibe64DashboardPageHeader-BXQR00HK.js +1 -0
  34. package/dist/assets/Vibe64DashboardPageHeader-Gm1IvlHx.css +1 -0
  35. package/dist/assets/Vibe64DashboardShell-CuCVMhOc.js +1 -0
  36. package/dist/assets/Vibe64DashboardShell-MBkUHjs-.css +1 -0
  37. package/dist/assets/Vibe64DatabaseWorkspace-BONJdxBS.js +18 -0
  38. package/dist/assets/{Vibe64DatabaseWorkspace-C39Jvver.css → Vibe64DatabaseWorkspace-CR4pzzcf.css} +1 -1
  39. package/dist/assets/Vibe64OutputControls-DAAmA09l.js +8 -0
  40. package/dist/assets/{Vibe64OutputControls-CsZFv12r.css → Vibe64OutputControls-DPBsyDZM.css} +1 -1
  41. package/dist/assets/{Vibe64RepositoryWorkspace-ebUaYOU4.js → Vibe64RepositoryWorkspace-ByQlZbyO.js} +2 -2
  42. package/dist/assets/{Vibe64RepositoryWorkspace-Cqm6TOFk.css → Vibe64RepositoryWorkspace-CVHcT93M.css} +1 -1
  43. package/dist/assets/Vibe64SessionFiles-B0u9HKdF.js +107 -0
  44. package/dist/assets/Vibe64SessionFiles-NjOMVwPR.css +1 -0
  45. package/dist/assets/Vibe64TemporaryAiFixAction-BGlcrq4d.js +1 -0
  46. package/dist/assets/Vibe64UiStoryboardView-3WXph5bz.css +1 -0
  47. package/dist/assets/Vibe64UiStoryboardView-Brlwdvqi.js +7 -0
  48. package/dist/assets/Vibe64UnavailableSessions-zwlWlcZD.js +1 -0
  49. package/dist/assets/_sessionId_-CvOkQbVy.js +1 -0
  50. package/dist/assets/{_sessionTool_-B39BIzzZ.js → _sessionTool_-Dwod5ns9.js} +1 -1
  51. package/dist/assets/_slug_-B31c15cc.css +1 -0
  52. package/dist/assets/_slug_-Dy35qLo1.js +1 -0
  53. package/dist/assets/access-BVu5XYm2.js +1 -0
  54. package/dist/assets/app-DRXCcv05.css +1 -0
  55. package/dist/assets/app-zt7HwQKT.js +1 -0
  56. package/dist/assets/assistantRouting-CwbwfkwB.js +3 -0
  57. package/dist/assets/{changes-ByjS7QGx.js → changes-olY8cnFK.js} +1 -1
  58. package/dist/assets/{client-C-tpoG6F.js → client-BrV4QPwG.js} +1 -1
  59. package/dist/assets/createSimpleFunctional-CZTGuNuR.js +1 -0
  60. package/dist/assets/dashboard-BnXD-H4R.js +1 -0
  61. package/dist/assets/definitions-DaOPIkyB.js +1 -0
  62. package/dist/assets/env-DJhnLOH7.css +1 -0
  63. package/dist/assets/env-DN0vW4EI.js +1 -0
  64. package/dist/assets/{error-DFKtZBJ8.js → error-DgrgRbJJ.js} +1 -1
  65. package/dist/assets/{error-DE4zo8Lk.js → error-Dug56can.js} +1 -1
  66. package/dist/assets/health-7oIQODer.css +1 -0
  67. package/dist/assets/health-Z6m96GDr.js +1 -0
  68. package/dist/assets/history-BOwbCRQP.css +1 -0
  69. package/dist/assets/history-BxlpB-YH.js +1 -0
  70. package/dist/assets/incoming-BOxRVlOM.js +2 -0
  71. package/dist/assets/incoming-DWDrmxyH.css +1 -0
  72. package/dist/assets/index-BUq-MczL.js +86 -0
  73. package/dist/assets/{index-D4MsP3dq.css → index-DtmBqE3h.css} +1 -1
  74. package/dist/assets/{integrations-B4txOZfY.js → integrations-BFltGDVI.js} +1 -1
  75. package/dist/assets/issues-1iS5zoed.js +1 -0
  76. package/dist/assets/issues-XnpGgdmn.css +1 -0
  77. package/dist/assets/layout-BkWVNT37.js +1 -0
  78. package/dist/assets/lazy-NHSwD9FS.js +1 -0
  79. package/dist/assets/mdi-C54lQ0i_.js +1 -0
  80. package/dist/assets/{pages-BW2l8fNe.js → pages-DuMgH61T.js} +1 -1
  81. package/dist/assets/{placement-JxzrmUR3.js → placement-CwTqWLQH.js} +1 -1
  82. package/dist/assets/placement-DLsU3pCW.js +1 -0
  83. package/dist/assets/pull-requests-BJOwNL4k.js +1 -0
  84. package/dist/assets/pull-requests-CdbhyFOv.css +1 -0
  85. package/dist/assets/{repository-BTC3lkrh.js → repository-JWLVST3D.js} +1 -1
  86. package/dist/assets/{VAvatar-CAFvgSUo.js → ripple-BVltMmyV.js} +2 -2
  87. package/dist/assets/ripple-DqhAt1Ze.css +1 -0
  88. package/dist/assets/runtime-core.esm-bundler-DGXg_mpN.js +3 -0
  89. package/dist/assets/{session-CG-TUCJt.css → session-5qADMzDP.css} +1 -1
  90. package/dist/assets/session-C5Nj8Dlq.js +1 -0
  91. package/dist/assets/settings-BopLnpB0.css +1 -0
  92. package/dist/assets/settings-c273Ikrm.js +1 -0
  93. package/dist/assets/ssrBoot-Rlh6kLbD.js +1 -0
  94. package/dist/assets/{studioGateApi-C0GvzVlt.js → studioGateApi-DhA9IJGZ.js} +1 -1
  95. package/dist/assets/{studioUrls-CIab-Axb.js → studioUrls-Dj8rXeXO.js} +1 -1
  96. package/dist/assets/{useApi-BPuI6ZR9-Dr8wK_Co.js → useApi-BPuI6ZR9-CFWU1m37.js} +1 -1
  97. package/dist/assets/useArchivedVibe64Sessions-CVZx2Rtm.js +1 -0
  98. package/dist/assets/useCommand-DWuxfAV0.js +1 -0
  99. package/dist/assets/useEndpointResource-MWVNfmMa.js +1 -0
  100. package/dist/assets/{usePaths-DVTieF_G.js → usePaths-Db88-HOm.js} +1 -1
  101. package/dist/assets/{useUiFeedback-Tzi-PRlX.js → useUiFeedback-0FqKuZRP.js} +1 -1
  102. package/dist/assets/useVibe64ConversationLog-8cKh1eDm.js +1 -0
  103. package/dist/assets/useVibe64DatabaseTools-BcRG1s3i.js +1 -0
  104. package/dist/assets/useVibe64LearningMode-Bl0dGdCh.js +28 -0
  105. package/dist/assets/useVibe64LearningMode-C3PcXdVg.css +1 -0
  106. package/dist/assets/useVibe64ProjectScope-DOEVkBqX.js +1 -0
  107. package/dist/assets/useVibe64SessionData-DFTyLzci.js +1 -0
  108. package/dist/assets/useVibe64SessionSelection-j9lsllx4.js +1 -0
  109. package/dist/assets/useVibe64SystemGraph-tNkIwSBQ.js +1 -0
  110. package/dist/assets/{useVibe64Terminal-C2XJ9Y1K.js → useVibe64Terminal-BPnN25WH.js} +1 -1
  111. package/dist/assets/vibe64AssistantHost-DdE_-lZF.js +1 -0
  112. package/dist/assets/vibe64LessonDashboard-DlKYjisq.js +1 -0
  113. package/dist/assets/vibe64ProjectScope.local-DqT6e5un.js +1 -0
  114. package/dist/assets/vibe64RepositoryRealtime-DXk0Jai3.js +1 -0
  115. package/dist/assets/vibe64SessionFocus-OJ2toBd9.css +1 -0
  116. package/dist/assets/vibe64SessionFocus-kqPOPaOH.js +1 -0
  117. package/dist/assets/{vibe64SessionInfo-D8l22MFm.js → vibe64SessionInfo-BHxtTrLX.js} +1 -1
  118. package/dist/assets/vibe64SessionToolDefinitions-NfLd1HZI.js +1 -0
  119. package/dist/assets/vue-flow-core-BlVEnES8.js +26 -0
  120. package/dist/index.html +51 -48
  121. package/docs/colleague-usage/account-profile-and-appearance.md +29 -0
  122. package/docs/colleague-usage/ai-accounts-and-routing.md +23 -4
  123. package/docs/colleague-usage/ai-balance-and-allowance.md +4 -0
  124. package/docs/colleague-usage/architecture-explanations.md +99 -0
  125. package/docs/colleague-usage/auto-workflow.md +49 -11
  126. package/docs/colleague-usage/coding-agent-failures.md +94 -0
  127. package/docs/colleague-usage/coding-agent-goal-pause.md +110 -0
  128. package/docs/colleague-usage/coding-agent-goals.md +140 -38
  129. package/docs/colleague-usage/coding-agent-history.md +20 -2
  130. package/docs/colleague-usage/coding-agent-recovery.md +136 -0
  131. package/docs/colleague-usage/coding-agents.md +138 -150
  132. package/docs/colleague-usage/colleague-recovery.md +28 -5
  133. package/docs/colleague-usage/colleague-upgrade-recovery.md +4 -0
  134. package/docs/colleague-usage/colleague-watches.md +84 -0
  135. package/docs/colleague-usage/colleague.md +18 -34
  136. package/docs/colleague-usage/connected-contributions.md +196 -0
  137. package/docs/colleague-usage/connected-projects.md +196 -0
  138. package/docs/colleague-usage/conversation-context.md +67 -1
  139. package/docs/colleague-usage/dashboard-navigation.md +79 -5
  140. package/docs/colleague-usage/database.md +11 -0
  141. package/docs/colleague-usage/developing-vibe64.md +137 -0
  142. package/docs/colleague-usage/development-copies.md +20 -0
  143. package/docs/colleague-usage/development-env.md +34 -0
  144. package/docs/colleague-usage/file-interfaces.md +156 -0
  145. package/docs/colleague-usage/github-work.md +88 -1
  146. package/docs/colleague-usage/health-checks.md +32 -0
  147. package/docs/colleague-usage/incoming-changes.md +94 -0
  148. package/docs/colleague-usage/learning-chat-retention.md +11 -2
  149. package/docs/colleague-usage/learning-code-questions.md +55 -0
  150. package/docs/colleague-usage/learning-course-catalogue.md +118 -0
  151. package/docs/colleague-usage/learning-diagrams-and-voice.md +97 -0
  152. package/docs/colleague-usage/learning-history.md +17 -9
  153. package/docs/colleague-usage/learning-lesson-watch.md +95 -0
  154. package/docs/colleague-usage/learning-mode-ui.md +187 -85
  155. package/docs/colleague-usage/learning-native-session.md +12 -10
  156. package/docs/colleague-usage/learning-practical-exercises.md +71 -0
  157. package/docs/colleague-usage/learning-practical-gestures.md +18 -1
  158. package/docs/colleague-usage/learning-practice-projects.md +55 -4
  159. package/docs/colleague-usage/learning-session-creation.md +7 -7
  160. package/docs/colleague-usage/learning-teacher-guide.md +52 -0
  161. package/docs/colleague-usage/learning-with-colleague.md +59 -80
  162. package/docs/colleague-usage/lesson-authoring.md +12 -4
  163. package/docs/colleague-usage/lesson-practical-assessment.md +3 -1
  164. package/docs/colleague-usage/managed-app-access.md +6 -0
  165. package/docs/colleague-usage/message-delivery-recovery.md +56 -0
  166. package/docs/colleague-usage/plans.md +14 -7
  167. package/docs/colleague-usage/preview-browser-checks.md +61 -0
  168. package/docs/colleague-usage/preview-lesson-presentation.md +56 -0
  169. package/docs/colleague-usage/preview-starting-application.md +92 -0
  170. package/docs/colleague-usage/preview.md +70 -96
  171. package/docs/colleague-usage/project-architecture.md +229 -0
  172. package/docs/colleague-usage/project-language-tools.md +31 -0
  173. package/docs/colleague-usage/project-messages.md +106 -0
  174. package/docs/colleague-usage/project-settings.md +22 -0
  175. package/docs/colleague-usage/project-setup.md +29 -2
  176. package/docs/colleague-usage/session-terminal.md +42 -0
  177. package/docs/colleague-usage/sessions.md +122 -52
  178. package/docs/colleague-usage/teaching-content.md +12 -6
  179. package/docs/colleague-usage/temporary-chat-context.md +29 -0
  180. package/docs/colleague-usage/temporary-chats.md +95 -2
  181. package/docs/colleague-usage/voice-chat.md +10 -43
  182. package/docs/colleague-usage/voice-face-and-speaking-voice.md +73 -0
  183. package/docs/colleague-usage/workspace-preparation.md +89 -0
  184. package/docs/training-content.md +208 -7
  185. package/node_modules/@jskit-ai/assistant-core/package.json +1 -1
  186. package/node_modules/@jskit-ai/assistant-runtime/README.md +29 -0
  187. package/node_modules/@jskit-ai/assistant-runtime/package.json +1 -1
  188. package/node_modules/@jskit-ai/assistant-voice/package.json +1 -1
  189. package/node_modules/@jskit-ai/connector-google-calendar/package.json +1 -1
  190. package/node_modules/@jskit-ai/connectors-catalog/package.json +1 -1
  191. package/node_modules/@jskit-ai/connectors-core/package.json +1 -1
  192. package/node_modules/@jskit-ai/http-runtime/package.json +1 -1
  193. package/node_modules/@jskit-ai/kernel/package.json +1 -1
  194. package/node_modules/@jskit-ai/payments-core/package.json +1 -1
  195. package/node_modules/@jskit-ai/realtime/package.json +1 -1
  196. package/node_modules/@jskit-ai/resource-core/package.json +1 -1
  197. package/node_modules/@jskit-ai/resource-crud-core/package.json +1 -1
  198. package/node_modules/@jskit-ai/uploads-runtime/package.json +1 -1
  199. package/node_modules/@local/vibe64-core/package.json +1 -0
  200. package/node_modules/@local/vibe64-execution/src/host/execHelper.js +280 -272
  201. package/node_modules/@local/vibe64-genesis/README.md +15 -0
  202. package/node_modules/@local/vibe64-genesis/bin/vibe64-genesis-host-context +879 -1225
  203. package/node_modules/@local/vibe64-genesis/package.json +2 -1
  204. package/node_modules/@local/vibe64-genesis/src/server/index.js +496 -418
  205. package/node_modules/@local/vibe64-genesis/src/server/promptContext.js +165 -146
  206. package/node_modules/@local/vibe64-runtime/src/server/agentSessionCommandHook.js +8 -8
  207. package/node_modules/@local/vibe64-runtime/src/server/codexAppServerProcess.js +128 -129
  208. package/node_modules/@local/vibe64-system-graph/README.md +136 -6
  209. package/node_modules/@local/vibe64-terminals/package.json +3 -0
  210. package/node_modules/@local/vibe64-terminals/src/server/sessionWorkOperationCommand.js +1527 -1326
  211. package/node_modules/@local/vibe64-training/package.json +6 -1
  212. package/node_modules/@local/vibe64-voice/package.json +1 -0
  213. package/package.json +16 -16
  214. package/server.bundle.mjs +42853 -40268
  215. package/dist/assets/StudioErrorNotice-Ccjvcn9C.js +0 -1
  216. package/dist/assets/VAlert-B7ciJKQL.js +0 -1
  217. package/dist/assets/VAutocomplete-QjMk5d_j.js +0 -1
  218. package/dist/assets/VAvatar-nHaK192T.css +0 -1
  219. package/dist/assets/VBtn-Kl_qcBsy.js +0 -1
  220. package/dist/assets/VCard-nrJPeo91.js +0 -1
  221. package/dist/assets/VCheckbox-DTRAWOIf.js +0 -1
  222. package/dist/assets/VChip-Dfs5jX0f.js +0 -1
  223. package/dist/assets/VDialog-Dt1VjJg1.js +0 -1
  224. package/dist/assets/VDivider-DFsS0OTx.js +0 -1
  225. package/dist/assets/VExpansionPanels-CYKU0cAr.js +0 -1
  226. package/dist/assets/VMenu-BLxobsuU.js +0 -1
  227. package/dist/assets/VOverlay-BvFVZKNS.js +0 -1
  228. package/dist/assets/VRadioGroup-DzQzpCfg.js +0 -1
  229. package/dist/assets/VRow-BR2RMCM1.js +0 -1
  230. package/dist/assets/VSheet-BA95RNmA.js +0 -1
  231. package/dist/assets/VSkeletonLoader-hpJqr0HL.js +0 -1
  232. package/dist/assets/VSpacer-B1l1hVvU.js +0 -1
  233. package/dist/assets/VTextField-CA_p3N4d.js +0 -1
  234. package/dist/assets/VTextarea-NyCqY4h5.js +0 -1
  235. package/dist/assets/Vibe64AsyncModuleState-DEFlqJ97.js +0 -1
  236. package/dist/assets/Vibe64DashboardShell-BNv2I-P8.js +0 -1
  237. package/dist/assets/Vibe64DashboardShell-w20wNTGW.css +0 -1
  238. package/dist/assets/Vibe64DatabaseWorkspace-CuY5lN1o.js +0 -43
  239. package/dist/assets/Vibe64OutputControls-D2JuYlYU.js +0 -8
  240. package/dist/assets/Vibe64SessionFiles-C-rWehq_.js +0 -34
  241. package/dist/assets/Vibe64SessionFiles-Dsr6KQNP.css +0 -1
  242. package/dist/assets/Vibe64SubsystemsView-BvdU_o6H.css +0 -1
  243. package/dist/assets/Vibe64SubsystemsView-DJCjSzQM.js +0 -1
  244. package/dist/assets/Vibe64SystemWorldView-B91ioQaO.js +0 -4312
  245. package/dist/assets/Vibe64SystemWorldView-BXiQ7_Qb.css +0 -1
  246. package/dist/assets/Vibe64UnavailableSessions-OvnoD3ZB.js +0 -1
  247. package/dist/assets/_sessionId_-JTvMh54L.js +0 -1
  248. package/dist/assets/_slug_-DP_heCDa.js +0 -1
  249. package/dist/assets/_slug_-DmBZGb0q.css +0 -1
  250. package/dist/assets/access-C8GQIS19.js +0 -1
  251. package/dist/assets/app-B83lF61Y.js +0 -1
  252. package/dist/assets/app-ByLIQ3SB.css +0 -1
  253. package/dist/assets/assistantRouting-TDtryU6o.js +0 -1
  254. package/dist/assets/createSimpleFunctional-DPIT6zsT.js +0 -1
  255. package/dist/assets/dashboard-CWGFPojJ.js +0 -1
  256. package/dist/assets/definitions-BeLcvOW3.js +0 -1
  257. package/dist/assets/display-BLmcO-5p.js +0 -1
  258. package/dist/assets/env-7bqFyF_E.css +0 -1
  259. package/dist/assets/env-BVwxNL8M.js +0 -1
  260. package/dist/assets/health-BzNhp7r8.js +0 -1
  261. package/dist/assets/health-DoHTXTGx.css +0 -1
  262. package/dist/assets/history-BPeZGofK.js +0 -1
  263. package/dist/assets/history-iMQxp5AR.css +0 -1
  264. package/dist/assets/httpClient-BaaZuFvF.js +0 -1
  265. package/dist/assets/index-5sKwLHOH.js +0 -86
  266. package/dist/assets/issues-DCEhGlfn.css +0 -1
  267. package/dist/assets/issues-wby50y9b.js +0 -3
  268. package/dist/assets/layout-YCn17mK1.js +0 -1
  269. package/dist/assets/lazy-CvQfXeLg.js +0 -1
  270. package/dist/assets/mdi-C31_SZp-.js +0 -1
  271. package/dist/assets/placement-C4R2t6rl.js +0 -1
  272. package/dist/assets/pull-requests-BNK6mq2u.css +0 -1
  273. package/dist/assets/pull-requests-lNQAigaC.js +0 -1
  274. package/dist/assets/runtime-core.esm-bundler-DMrccYS5.js +0 -3
  275. package/dist/assets/session-D38nzG41.js +0 -1
  276. package/dist/assets/settings-CFyUJ_kR.js +0 -1
  277. package/dist/assets/settings-vWsAEoE9.css +0 -1
  278. package/dist/assets/useArchivedVibe64Sessions-C2DSq2Z4.js +0 -1
  279. package/dist/assets/useCommand-BzThFLYP.js +0 -1
  280. package/dist/assets/useEndpointResource-C2KD4Ub_.js +0 -1
  281. package/dist/assets/useVibe64ConversationLog-CMUlXJtU.js +0 -1
  282. package/dist/assets/useVibe64DatabaseTools-DBcKhm6B.js +0 -1
  283. package/dist/assets/useVibe64LearningMode-BPRWM5Rp.js +0 -28
  284. package/dist/assets/useVibe64LearningMode-PJUv0O25.css +0 -1
  285. package/dist/assets/useVibe64SessionData-CdtJbAIx.js +0 -1
  286. package/dist/assets/useVibe64SessionSelection-aR0f6xVT.js +0 -1
  287. package/dist/assets/useVibe64SystemGraph-DeTPBn0e.js +0 -1
  288. package/dist/assets/vibe64AssistantHost-Dgyz4TrT.js +0 -1
  289. package/dist/assets/vibe64ProjectScope.local-GOSMVDRi.js +0 -1
  290. package/dist/assets/vibe64RepositoryRealtime-t5Al8BlU.js +0 -1
  291. package/dist/assets/vibe64SessionFocus-CcN6Grgw.js +0 -1
  292. package/dist/assets/vibe64SessionFocus-ChabllPA.css +0 -1
  293. package/dist/assets/vibe64SessionToolDefinitions-BaO1DEup.js +0 -1
  294. /package/dist/assets/{vibe64RepositoryRealtime-D_mq1dFE.css → Vibe64TemporaryAiFixAction-D_mq1dFE.css} +0 -0
@@ -0,0 +1,73 @@
1
+ # Assistant face and speaking voice
2
+
3
+ This is part of [Voice chat with Colleague or a project agent](voice-chat.md).
4
+
5
+ ## Choose the assistant's face
6
+
7
+ Colleague and the project agent show an illustrated face that blinks, moves and
8
+ animates its mouth while listening, thinking and speaking. Colleague starts with
9
+ **Merc · male**; project agents, including the Learning teacher, start with
10
+ **Yu · female**. To change one, open that assistant's **Voice settings** cog
11
+ beside the microphone and speaker controls (below its face when expanded) and
12
+ choose **Avatar**. Colleague and project agents keep separate choices. A project
13
+ agent's cog works without starting voice; Colleague shows its cog once its voice
14
+ controls are active (tap **Talk**). The face changes immediately, in the header
15
+ button, chat and voice window. On a phone the cog sits in the same row below
16
+ the face. Colleague can explain this but cannot choose for you: pick the
17
+ avatar yourself. In standalone Vibe64 the choice is saved in this browser only
18
+ (**Saved in this browser for this assistant type.**); another browser, a private
19
+ window or cleared site data starts again from the defaults. If browser storage
20
+ is blocked, the choice lasts until the page reloads.
21
+
22
+ ## Choose a speaking voice
23
+
24
+ Open the same **Voice settings** cog and choose **Speaking voice**.
25
+ Opening settings loads the installed choices without recording. The
26
+ change applies to the next spoken reply. In standalone Vibe64 it lasts for the
27
+ current voice session; a host with saved speech preferences can replace this
28
+ selector and retain the choice across sessions. Vibe64 Online saves your avatar
29
+ and voice personally, separately for Colleague and coding assistants across
30
+ projects. Its Management → **Speech and Colleague** page changes only the shared
31
+ Colleague name; use each assistant's cog for your own avatar and voice.
32
+ The personal cog's **Speak replies** choice controls output for that target.
33
+ In Vibe64 Online, older browser-only speaker choices are not copied into personal
34
+ settings; check **Speak replies** when first using your personal controls.
35
+ While that choice saves, the speaker control briefly waits; microphone capture
36
+ and typed chat remain available.
37
+ For coding assistants, **Read thinking**, **Read progress** and **Thinking sounds**
38
+ also select optional thinking, interim work and a short sound while working.
39
+ These activities use the same speaker and queue as answers. New messages wait
40
+ for the current message to finish; arriving progress or an answer does not cut off
41
+ spoken text. Repeated updates do not restart a message. The optional thinking
42
+ sound yields to a real answer. **Stop speaking**, turning off spoken replies and
43
+ switching voice targets still cancel playback.
44
+ Thinking and interim speech default off; thinking sounds default on. They follow
45
+ only the exact current, accessible Main view while the page is visible; hiding
46
+ the avatar does not disable them. Loading history primes the narrator rather
47
+ than replaying old activity. Turning off spoken replies silences all narration.
48
+ Choices and defaults come from the installed model pack and may include male and
49
+ female voices. If only one voice is installed it is shown but cannot be changed.
50
+ Server model setup is an operator task.
51
+
52
+ Loading **Speaking voice** performs a read-only, authorized catalogue check. It
53
+ does not start the microphone, open an audio connection or send an assistant
54
+ message. The app rechecks your current sign-in before showing installed choices.
55
+ If the catalogue cannot be loaded, sign in again if prompted, then close and
56
+ reopen **Voice settings** after the speech service has recovered; typed chat
57
+ remains available.
58
+
59
+ Answers start speaking in short phrases before completion; code and dense tables
60
+ remain in chat. Spoken answers use up to 4,000 characters after removing code and
61
+ formatting from the first 8,000 characters of the answer. A long code block within
62
+ that window leaves room to speak the explanation after it. Read the chat for the
63
+ rest of a longer answer; reaching the speech limit does not mean the agent has
64
+ finished. Existing history is not replayed when the window opens. Spoken
65
+ “Stop talking”, “Stop speaking” or “Be quiet” stops audio locally in either live
66
+ mode. Other wording is an ordinary message, so use the explicit button if recognition
67
+ is wrong. Pause detection and echo cancellation depend on the recording environment.
68
+ Use push-to-talk or review when pauses/noise make hands-free unreliable.
69
+ The default service preserves native handling of quiet input. An operator may
70
+ configure an input floor; if quiet words then fail to appear, move closer to the
71
+ microphone and ask the operator to review that setting. **Pause** retains captured
72
+ audio and finishes the final word; review the displayed words before retrying a
73
+ message that was already sent.
@@ -9,6 +9,25 @@ Select **Prepare workspace**. The notice shows progress while those steps run.
9
9
  Use **Expand** to inspect output, or **Dismiss** to hide an inactive notice.
10
10
  Preparation does not publish the project.
11
11
 
12
+ To rerun preparation after success, select **Prepare workspace** (the wrench)
13
+ in the session header. On narrow screens, open **Session actions** (three dots)
14
+ and select **Prepare workspace**. This stays available after dismissing the
15
+ preparation notice. It runs the complete current recipe, including declared
16
+ database steps and connected-source Prepare/Verify commands. It is unavailable
17
+ while another assistant or repository operation is active, or for archived sessions.
18
+
19
+ A new session with connected projects starts preparation automatically. Its
20
+ first step, **Preparing connected projects**, creates or reuses each connected
21
+ project's contribution session at the same time and lists the ones still in
22
+ progress, then **Linking connected sources** and **Checking connected sources**
23
+ while it rechecks access to each one. If one fails, the notice names that repository; earlier prepared
24
+ sources are kept and **Retry** reuses them instead of copying them again.
25
+
26
+ A successful result records the previous recipe execution. It does not prove
27
+ that custom compiled outputs still match later source or script edits. Rerun
28
+ preparation explicitly after those edits when the project needs rebuilt outputs;
29
+ Vibe64 does not automatically rebuild custom connections.
30
+
12
31
  An actual failed command or failure to start preparation still displays an error
13
32
  and its diagnostic. Use the available retry or **Fix it with AI** action to deal
14
33
  with that failure; do not assume a required preparation step has already failed.
@@ -17,6 +36,55 @@ Colleague can explain the notice and, when explicitly asked, use the session's
17
36
  authorized workspace-preparation operation. It should inspect the current
18
37
  result before saying preparation succeeded.
19
38
 
39
+ ## Missing project-owned Stack sections
40
+
41
+ **Project setup needs attention** can report a missing section such as
42
+ `## Connected development` after the installed Stack catalog changes. This is
43
+ a declaration problem; repeatedly retrying dependency installation will not
44
+ repair it.
45
+
46
+ For an older Genesis project format, follow the diagnostic's `genesis migrate`
47
+ instruction first. If the missing-section diagnostic remains after migration,
48
+ explicitly reconcile the selected component as described below. A format upgrade
49
+ does not necessarily add newer catalog proposals, and migration on a
50
+ current-format project does not add them. Use **Fix it with AI** or ask your
51
+ coding assistant to inspect
52
+ `genesis/stack.md` and reconcile the missing section with the actual application.
53
+ If `nodejs` is already listed under **Components**, the existing explicit repair
54
+ is `genesis stack add nodejs`. Use the project's installed Genesis command
55
+ (`npm exec --no -- genesis stack add nodejs` when it declares `genesis-compiler`).
56
+ Do not select Node or another technology merely to dismiss a warning.
57
+
58
+ The command preserves existing complete project sections and adds missing
59
+ proposals. Review its returned preparation instructions and the source diff;
60
+ keep the application's real setup, launch and database commands. Node's default
61
+ `Connected development` declaration selects `npm` treatment only; it adds no
62
+ connected repositories and performs no dependency installation by itself.
63
+
64
+ After the declaration is repaired, select **Recheck setup**. If workspace
65
+ preparation is still required, **Prepare workspace** or **Retry** runs the
66
+ declared recipe; inspect it before rerunning database or installation steps.
67
+ The same recovery applies on desktop and mobile. Colleague can explain the
68
+ warning and offer the supported repair flow; source edits and terminal commands
69
+ belong to the coding assistant or the person, not Colleague.
70
+
71
+ ## Competing Stack proposals
72
+
73
+ When two selected technologies propose different bodies for the same section,
74
+ for example Node and Python both proposing `## Connected development`, Genesis
75
+ leaves that heading unwritten and reports `STACK_SECTION_AMBIGUOUS` until the
76
+ project chooses. **Project setup needs attention** shows Genesis's message,
77
+ which quotes each proposal; workspace preparation shows **Workspace setup needs
78
+ a choice** with the same text. Vibe64 never picks a proposal for you, and
79
+ retrying preparation alone does not resolve it.
80
+
81
+ Chat stays available: use **Fix it with AI** or ask your coding assistant to
82
+ author one complete project-owned section in `genesis/stack.md` that fits the
83
+ application (a multi-language project chooses one `Default package type`).
84
+ Then select **Recheck setup** and **Prepare workspace** or **Retry**. Skill
85
+ refresh waits until the section is decided. Colleague can explain the choice;
86
+ the source edit belongs to the coding assistant or the person.
87
+
20
88
  ## Locally installed command-line tools
21
89
 
22
90
  When you open a directory with the local Vibe64 editor, start Vibe64 from the
@@ -29,3 +97,24 @@ works in that terminal, then restart the local editor after correcting the
29
97
  installation or shell path. Hosted workspaces use their host's prepared tools.
30
98
  Colleague can explain this recovery; installing a local tool and restarting the
31
99
  local editor require the person to use their terminal.
100
+
101
+
102
+ ## Resource recovery after a daemon restart
103
+
104
+ When the host supports database preservation checks, reopening a previously
105
+ prepared session can restore its managed environment without repeating unchanged
106
+ Workspace setup commands. Vibe64 requires the same successful recipe and resource
107
+ identity, and the host must verify that its databases already existed. Recreated,
108
+ changed or unverified resources run the full recipe, including application database
109
+ initialization. An older successful setup without that identity runs once to
110
+ establish it; existing session metadata is not guessed or rewritten on opening.
111
+
112
+ **Retry** still runs the declared setup again. If resource recovery fails, inspect
113
+ the preparation error before retrying. Colleague can inspect that result and retry
114
+ when asked; it should not call an unchanged setup successful merely because saved
115
+ database connection settings exist. The controls are the same on desktop and mobile.
116
+
117
+ If someone manually drops and recreates a database under the same name outside
118
+ Vibe64's preparation, use **Retry** to rerun the application's setup. Preservation
119
+ checks cover Vibe64's own provisioning; they do not inspect or reconstruct an
120
+ application schema changed outside that operation.
@@ -49,14 +49,94 @@ An assessment declares `id`, `kind` (`answer` or `practical`), `required` and
49
49
  `rubric`. Use an explicit `<a id="assessment-id"></a>` line in the teaching
50
50
  document and refer to it as `lesson.md#assessment-id`. Answer assessments use
51
51
  the admitted learner answer and that rubric. Practical assessments also declare
52
- `evidence: {producer, operation, check?, explanationRequired?}`. Supported producers
53
- are `workspace`, `colleague` and `exercise`. Exercise evidence requires an exercise
54
- and a declared check; other producers cannot execute checks. Declare checks as
55
- `checks: [{id,file,assets?}]`. Declare auxiliary check inputs in `assets`, relative to the lesson descriptor.
52
+ `evidence: {producer, operation, check?, explanationRequired?, files?}`. Supported producers
53
+ are `workspace`, `colleague`, `exercise` and `code`. Exercise and code evidence
54
+ require an exercise and a declared check; other producers cannot execute checks. Declare checks as
55
+ `checks: [{id,file,assets?,kind?,timeoutSeconds?}]`. Declare auxiliary check inputs in `assets`, relative to the lesson descriptor.
56
56
  The validator includes these files but never executes them.
57
57
  The managed application execution owner will run approved pinned checks; teaching
58
58
  tools do not gain arbitrary shell access. Demonstrations cannot earn learner passes.
59
59
 
60
+ An exercise lesson may optionally declare the practice app's data-changing routes
61
+ so a Learning watch can name a failed request the learner started:
62
+ `appRoutes: [{method, path}]`, at most 16 unique entries. `method` is `POST`,
63
+ `PUT`, `PATCH` or `DELETE`; `path` starts with `/`, has no query, fragment or
64
+ trailing slash, and each segment is a literal or `:id` (the Preview replaces
65
+ numeric and UUID segments with `:id`). For the notes exercise:
66
+ `"appRoutes": [{ "method": "POST", "path": "/api/notes" }]`. A failed request on
67
+ any other path is still reported, as `other`, so route segments that might carry
68
+ typed text never leave the learner's browser. Routes only label watch hints; they
69
+ never grade, and a lesson without an exercise cannot declare them.
70
+
71
+ ### Authoring a code question
72
+
73
+ A `code` practical asks the learner to change exercise code in the lesson
74
+ Dashboard's **Code** tab and press **Check my code**. Declare it like this
75
+ (the test fixture `tests/fixtures/training/code-practical/` is a complete,
76
+ validating example):
77
+
78
+ ```json
79
+ "exercise": { "kind": "bundled", "source": "app", "reuse": "attempt" },
80
+ "checks": [{ "id": "notes-title-required", "file": "checks/notes/title.mjs",
81
+ "kind": "code", "timeoutSeconds": 15 }],
82
+ "assessments": [{ "id": "require-note-title", "kind": "practical", "required": true,
83
+ "rubric": "lesson.md#require-note-title",
84
+ "evidence": { "producer": "code", "operation": "edit-and-check",
85
+ "check": "notes-title-required", "files": ["notes.mjs"],
86
+ "explanationRequired": true } }]
87
+ ```
88
+
89
+ - `files` lists 1–8 exercise-relative paths the learner edits. Each must be an
90
+ ordinary bundled exercise file (no `..`, absolute path, `.git`,
91
+ `node_modules` or `.genesis` segment) and may appear once. Only `code`
92
+ evidence may name files.
93
+ - The check must declare `kind: "code"`; a code check can only be named by
94
+ `code` evidence and an `exercise` check must not be a code check. Omitted
95
+ `kind` means the existing `response` kind. `timeoutSeconds` (1–60, default
96
+ 15) is allowed only on a code check. The operation is any lesson ID.
97
+ - `reuse:"attempt"` is the supported exercise mode; sequence-reused baselines
98
+ are not part of this first slice.
99
+ - The rubric should ask for the learner's own explanation. The check alone
100
+ never passes: the existing tool-free grading Helper grades the explanation
101
+ against the rubric with the check result.
102
+
103
+ The check runs with Node in the managed execution owner on a private copy laid
104
+ out like the topic: the pinned exercise at its topic path, with only the
105
+ declared files replaced by the learner's saved bytes, plus the pinned check and
106
+ its assets. Its working directory is the exercise copy, its environment is
107
+ empty, output is limited to 4 KiB and it has no dependency installation, so an
108
+ exercise and its check must need no packages. Import learner code relative to
109
+ the check (for example `new URL("../../app/notes.mjs", import.meta.url)`); the
110
+ same command works in the topic checkout. The check reads one JSON object on
111
+ stdin, `{check, filesHash, files:[{path,sha256}]}`, and prints exactly one JSON
112
+ line echoing `check` and `filesHash`:
113
+
114
+ - exit 0 and `{check, filesHash, outcome:"verified"}` — the code is correct;
115
+ - exit 1 and `{check, filesHash, outcome:"incomplete", reason}` (reason at most
116
+ 256 characters) — shown to the learner as "Not yet: …".
117
+
118
+ A different `filesHash` or any other success-shaped output is rejected as an
119
+ invalid check result. A check stopped by its timeout, or learner code that
120
+ crashes the check before it prints a result, is "not yet passed" with a fixed
121
+ explanation. stderr is ignored. Use plain `node:assert`-style logic rather than
122
+ `node --test`, whose reporter writes to stdout.
123
+
124
+ Authorship: when Main prepares a code question, Vibe64 records the SHA-256 of
125
+ each declared file in the live practice project as the question's starting
126
+ point. Each save from the learner's lesson Dashboard Files section is recorded server-side
127
+ with its base hash, intended hash and saved hash. At **Check my code** the chain
128
+ from the starting point through those saves must reach the current bytes
129
+ exactly; otherwise the check is not run and the question is automatically not
130
+ passed with "needs an independent attempt: other edits detected in `<file>`".
131
+ In a practice lesson Main is also the learner's agent, but while a code
132
+ question is open the teaching brief instructs Main not to write that question's
133
+ declared files (even when asked) or send solution code, and to warn the learner
134
+ that an agent edit there voids the attempt. The ledger above enforces this; there
135
+ is no technical write-deny for agents in this slice. Teacher chat
136
+ is not shared with the grader. The check is learner-run code on the learner's
137
+ own machine and has no network isolation: for hosted use, sandboxing and network
138
+ denial of the check job are an open gap.
139
+
60
140
  An optional exercise uses `{kind:"bundled", source, reuse:"attempt"}`. Continued
61
141
  work uses `reuse:"sequence"`, `sequenceId` and `sequenceMode:"create"|"continue"`.
62
142
  One creation precedes continuations in topic order, with the same source directory.
@@ -102,6 +182,12 @@ A `course.json` declares schema version 1, `courseId`, `title`, an exact three-p
102
182
  `release`, `status` (`preview` or `released`) and ordered `topics` containing
103
183
  `{topicId,release}`. A course selects whole topics; lesson selection or reordering
104
184
  is rejected. A released course requires released topics with no required drafts.
185
+ A preview course is for the workspace owner to review: `lesson.start` admits its
186
+ published lessons only when the actor is the workspace owner (on local Vibe64,
187
+ the OS user), and refuses everyone else with `VIBE64_TRAINING_COURSE_PREVIEW`.
188
+ `courses.list` reports `canTryPreviews`, and Courses shows the owner **Try
189
+ preview**. The started attempt is an ordinary saved lesson. Releasing the course
190
+ offers **Start** to everyone; draft lessons and disabled courses stay refused.
105
191
 
106
192
  Run `vibe64 training publish-manifest <course.json> <committed-topic-directory...>`
107
193
  with one canonical repository root for each selected topic. Each topic's package
@@ -119,6 +205,26 @@ ordered lesson identities. If a topic changes during generation, commit the
119
205
  intended content and retry. This command generates local release material only;
120
206
  it does not push Git, create a remote release, install content or enable a course.
121
207
 
208
+ ### Lesson 0 is supplied by each installation
209
+
210
+ Local and hosted Vibe64 are set up very differently, so "Set yourself up"
211
+ (Lesson 0) is not part of the shared topic. Each installation supplies its own
212
+ Lesson 0 topic and lists it first in the same course, followed by the shared,
213
+ installation-agnostic topic:
214
+
215
+ ```json
216
+ { "schemaVersion": 1, "courseId": "vibe64-getting-started-local", "title": "Getting started with local Vibe64",
217
+ "release": "0.1.0", "status": "preview",
218
+ "topics": [{ "topicId": "vibe64-local-setup", "release": "0.1.0" },
219
+ { "topicId": "vibe64-getting-started", "release": "0.1.12" }] }
220
+ ```
221
+
222
+ Local Vibe64 uses `learn-vibe64-local-setup` (V64-SETUP-00). It checks the
223
+ machine through the real **Dashboard → Health** checks and **Account settings**,
224
+ which Colleague can also read for the person. A hosted service keeps its own
225
+ Lesson 0 topic in its own repository. Every later lesson stays in the shared
226
+ topic and must work the same way on both.
227
+
122
228
  ## Server reads of installed snapshots
123
229
 
124
230
  This release provides a read-only server API at
@@ -236,8 +342,8 @@ The exact schema-version-1 pin contains `topicId`, `release`, canonical `reposit
236
342
  40-character `commit` and trusted `topicHash`, as well as `schemaVersion`. Map the
237
343
  course lock's topic `manifestHash` to `topicHash` at that owning operation.
238
344
  This low-level service does not authenticate callers, fetch Git repositories,
239
- enable courses or grant access. No browser/assistant install action or terminal
240
- install command is exposed yet.
345
+ enable courses or grant access. Its callers are the operator `install-topic`
346
+ command, the owner author trial and the official catalogue installer below.
241
347
 
242
348
  Installation reuses the clean committed-source proof, original bundle command
243
349
  and installed reader. It checks the approved identity before and after bundling,
@@ -271,6 +377,8 @@ runs no authored exercise, check or visual controller.
271
377
  `enableCourse({course,lock,expectedRevision})` and
272
378
  `disableCourse({courseId,release,expectedRevision})`. These are internal server
273
379
  facilities, with explicit local operator commands documented below and no browser control or Colleague tool.
380
+ The one exception is `createCourse({title,topics,expectedRevision})`, described
381
+ under [Custom courses](#custom-courses).
274
382
  An admitted owner caller supplies the approved course and its exact lock together;
275
383
  the store does not authenticate objects or discover/fetch repositories.
276
384
 
@@ -306,12 +414,45 @@ exercise execution is introduced. This projection can be reconstructed only by
306
414
  an explicit owner operation from the same approved definitions/pins; it is not a
307
415
  backup of learner state.
308
416
 
309
- The future authenticated start action chooses an enabled exact entry from a fresh
417
+ The authenticated `lesson.start` action chooses an enabled exact entry from a fresh
310
418
  read. That read admits the start; a later disable blocks future admissions but
311
419
  does not revoke work already admitted or a saved attempt. This store does not
312
420
  serialize its lock with reservation writes or add an action/authentication layer.
313
421
  Resume continues through the saved learner pin independently of the catalogue.
314
422
 
423
+ ### Custom courses
424
+
425
+ The workspace owner can create a custom course from Learning → **Courses** →
426
+ **New course**, or through the owner-only `vibe64.training.courses.create` action
427
+ (`POST /api/vibe64/training/courses` with `{title,topics,expectedRevision}`).
428
+ `courses.list` reports `canCreateCourses` for the signed-in person and each
429
+ course's ordered `topics` with their installed titles. On local Vibe64 the OS user
430
+ is the owner; on hosted Vibe64 only the workspace owner may create one, through
431
+ the existing `ownerRequired` action check.
432
+
433
+ `createCourse` adds no storage and no new record format. It accepts 1–32
434
+ different whole topics, each an exact `topicId`/`release` already pinned by an
435
+ **enabled released** catalogue course, and resolves them through those existing
436
+ lock pins and the installed snapshots. It builds an ordinary course definition
437
+ `{courseId:"custom-<name-slug>",title,release:"1.0.0",status:"released",topics}`,
438
+ generates its lock with the original `createCourseLock` and saves it with the
439
+ original `enableCourse` (same lock, revision check, 16-release limit and atomic
440
+ writer). The entry is therefore immutable like any other release and is verified
441
+ on every catalogue read. Lessons keep their exact code and hash, so saved passes
442
+ count in every course containing them; lesson content never changes. An identical
443
+ retry returns `changed:false`; the same name with a different definition returns
444
+ `VIBE64_TRAINING_COURSE_EXISTS`. Other refusals are
445
+ `VIBE64_TRAINING_COURSE_INVALID`, `VIBE64_TRAINING_COURSE_TOPIC_UNAVAILABLE`,
446
+ `VIBE64_TRAINING_COURSE_LIMIT` and the original catalogue revision/busy/save
447
+ errors. To retire a custom course, disable its exact release with
448
+ `vibe64 training disable-course custom-<name-slug> 1.0.0 <system-root> <revision>`.
449
+
450
+ Course progress in the **Courses** pane is read-only: `learning.read` adds
451
+ `lessonProgress`, one `{lessonCode,lessonHash,required,passed,completed,open}`
452
+ summary per saved lesson pin, computed from the same verified passes as
453
+ `completion`. The browser joins it with `courses.list` to show lesson statuses and
454
+ "N of M lessons complete" (required lessons, or all lessons when none is required).
455
+
315
456
  ## Private learner reservations
316
457
 
317
458
  `@local/vibe64-training/server/learner-state` exports
@@ -469,6 +610,66 @@ which preserves private bytes and validates candidates through the existing
469
610
  reservation and installed-content readers. Its fixture proof does not establish
470
611
  live fleet stopping, off-host retention or power-loss durability.
471
612
 
613
+ ## Official catalogue installation
614
+
615
+ `@local/vibe64-training/server/course-installer` exports
616
+ `createTrainingCourseInstaller({systemRoot, catalogue, repository})`. It is the
617
+ only in-app installation path and reads one GitHub repository, the official
618
+ catalogue: `mobily-enterprises/vibe64-learning-catalog` by default, or the
619
+ server's `VIBE64_LEARNING_CATALOG_REPOSITORY` (`owner/name`). The browser never
620
+ supplies a repository, commit or path.
621
+
622
+ Catalogue format (default branch):
623
+
624
+ - `domains.json`: `{schemaVersion:1, domains:[{domainId,title}]}`. The UI calls
625
+ these **topics**.
626
+ - `topics.json`: `{schemaVersion:1, topics:[{topicId, repository, domainId?,
627
+ releases:[{release,status,commit,manifestHash}]}]}`. The optional `domainId`
628
+ (one of `domains.json`) groups that topic's courses; a course is listed under
629
+ its first topic's domain, or under **Other courses** when none is declared.
630
+ - `courses/<courseId>/course.json` and `course.lock.json`: the exact descriptor
631
+ and the `publish-manifest` lock. The directory name must equal `courseId`.
632
+
633
+ `listAvailable()` shallow-fetches the default branch into a private scratch
634
+ directory, reads the files with `git cat-file` (no checkout), validates them with
635
+ the content schemas (strict fields, canonical `owner/learn-*` repositories,
636
+ 40-character commits, 64-character hashes, lock/course identity and order) and
637
+ caches the result for 60 seconds. A fetch failure is
638
+ `VIBE64_TRAINING_AVAILABLE_UNREACHABLE`; invalid content is
639
+ `VIBE64_TRAINING_AVAILABLE_INVALID`. Reading never installs anything.
640
+
641
+ `installCourse({courseId, release, actor})` rereads the catalogue, selects that
642
+ exact course/lock, and for each locked topic not already installed and verified
643
+ fetches its canonical repository at exactly the locked commit (`git init`,
644
+ `fetch --depth=1 <commit>`, detached checkout, `HEAD` check) and calls the
645
+ original `installTopic` with `topicHash = manifestHash`. That owner re-verifies
646
+ the clean commit, canonical source and every byte. It then calls
647
+ `enableCourse` with a fresh revision, retrying once on a revision conflict.
648
+ Older enabled releases of the same course are then disabled with
649
+ `disableCourse` (fresh revision; new starts only). Saved attempts keep their pin
650
+ and resume. Installs run one at a time; repeated requests for the same release
651
+ share one operation. Git runs through `runVibe64Command` as the daemon with
652
+ hooks disabled; no fetched file is executed.
653
+
654
+ Scratch sources live in `<systemRoot>/training-sources/(catalogue|topic)-<uuid>`
655
+ (mode 0700), beside the `training/` namespace that `installTopic` keeps separate
656
+ from sources, and are removed in `finally`. The managed exec helper admits the
657
+ daemon's generic commands in exactly that one-level directory under
658
+ `~/.local/state/vibe64/training-sources/`.
659
+
660
+ An already enabled exact release is a no-op. A disabled release is re-enabled
661
+ only for the workspace owner (`VIBE64_TRAINING_COURSE_DISABLED` otherwise). A new
662
+ entry beyond the installed catalogue's 16 retained releases fails before any
663
+ download with `VIBE64_TRAINING_COURSE_LIMIT`; nothing is deleted.
664
+
665
+ The actions are `vibe64.training.available.list` (`GET
666
+ /api/vibe64/training/available`) and `vibe64.training.course.install` (`POST
667
+ /api/vibe64/training/courses/install`, input `{courseId, release}`). Any signed-in
668
+ user may call them, as for `lesson.start`: they can only install hash-pinned
669
+ releases from the official catalogue, and arbitrary sources remain operator
670
+ commands. Hosts that compose `createTrainingActions` without a `courseInstaller`
671
+ return `available:false`.
672
+
472
673
  ## Local operator provisioning
473
674
 
474
675
  These commands run locally under the OS identity that owns the selected Vibe64
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jskit-ai/assistant-core",
3
- "version": "0.1.215",
3
+ "version": "0.1.236",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  "./client": "./src/client/index.js",
@@ -0,0 +1,29 @@
1
+
2
+ With the existing realtime diagnostic option (`JSKIT_REALTIME_DEBUG=1`, or
3
+ `config.realtime.debug=true`), conversation subscriptions emit one `pending`
4
+ warning if admission/snapshot reading has not returned within the client's
5
+ 10-second acknowledgement budget. The warning names the current stage and the
6
+ server-generated epoch; a conversation identity is included only after its
7
+ successful authorized open. Observer release also records the current stage and
8
+ reason. While diagnostics are enabled, every stage transition is recorded at
9
+ warning level with its duration and total elapsed time, so warning-only logs
10
+ retain the earlier admission costs as well as the step pending at timeout.
11
+ Timers are removed on acknowledgement, failure, replacement, unsubscribe
12
+ and connection close. Diagnostics contain no request body or conversation text,
13
+ and do not change authorization, subscription deadlines or model work.
14
+
15
+ Released subscriptions stop setup at the next completed phase. The existing
16
+ socket owner supplies its current subscription identity to the subscribe action;
17
+ an obsolete open cannot attach a new observer, and a late observer is detached
18
+ without starting a snapshot. Reads already in progress may finish, but cannot
19
+ acknowledge into a replacement view. Reload performs fresh authorization, and
20
+ releasing a view never stops its model turn.
21
+
22
+ Prepared application submissions may explicitly enable `queueWhileSending` to
23
+ reuse the binding's serial delivery queue while application preparation is still
24
+ running. Each queued request retains its captured payload and receipt identity.
25
+ Stop and conversation retirement cancel queued preparation through the existing
26
+ owner. A typed, definite ended-turn rejection may become one ordinary Send with
27
+ the same identity, without repeating preparation; uncertain delivery never
28
+ permits replay. With the option absent or false, prepared submissions retain
29
+ their existing non-queueing behavior.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jskit-ai/assistant-runtime",
3
- "version": "0.1.208",
3
+ "version": "0.1.230",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  "./client": "./src/client/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jskit-ai/assistant-voice",
3
- "version": "0.1.15",
3
+ "version": "0.1.37",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  "./client": "./src/client/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jskit-ai/connector-google-calendar",
3
- "version": "0.1.54",
3
+ "version": "0.1.61",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  "./shared": "./src/shared/definition.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jskit-ai/connectors-catalog",
3
- "version": "0.1.54",
3
+ "version": "0.1.61",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  "./shared/ai": "./src/shared/ai.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jskit-ai/connectors-core",
3
- "version": "0.1.54",
3
+ "version": "0.1.61",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  "./shared/configuration": "./src/shared/configuration.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jskit-ai/http-runtime",
3
- "version": "0.1.235",
3
+ "version": "0.1.242",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  "./client": "./src/client/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jskit-ai/kernel",
3
- "version": "0.1.237",
3
+ "version": "0.1.244",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  "./_testable": "./_testable/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jskit-ai/payments-core",
3
- "version": "0.1.54",
3
+ "version": "0.1.61",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  "./shared": "./src/shared/configuration.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jskit-ai/realtime",
3
- "version": "0.1.234",
3
+ "version": "0.1.242",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  "./server/RealtimeProvider": "./src/server/RealtimeProvider.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jskit-ai/resource-core",
3
- "version": "0.1.179",
3
+ "version": "0.1.186",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  "./shared/resource": "./src/shared/resource.js"
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jskit-ai/resource-crud-core",
3
- "version": "0.1.179",
3
+ "version": "0.1.186",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  "./shared/crudFieldContract": "./src/shared/crudFieldContract.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jskit-ai/uploads-runtime",
3
- "version": "0.1.212",
3
+ "version": "0.1.219",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  "./client": "./src/client/index.js",
@@ -30,6 +30,7 @@
30
30
  "./server/studioRoots": "./src/server/studioRoots.js",
31
31
  "./server/terminalWebSocketRoutes": "./src/server/terminalWebSocketRoutes.js",
32
32
  "./server/vibe64MembershipStore": "./src/server/vibe64MembershipStore.js",
33
+ "./server/watch-observations": "./src/server/watchObservations.js",
33
34
  "./server/projectState": "./src/server/projectState.js",
34
35
  "./server/projectPromptHints": "./src/server/projectPromptHints.js",
35
36
  "./server/projectRecordMetadata": "./src/server/projectRecordMetadata.js",