vibe64 0.1.39 → 0.1.40

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 (261) hide show
  1. package/bin/run.js +1942 -1846
  2. package/bin/server.js +136 -112
  3. package/bin/upgrade-state.js +5023 -4860
  4. package/dist/assets/GithubBrowserTabs-BoDkGFtY.js +1 -0
  5. package/dist/assets/LocalDatabaseServer-BWAvRlUl.css +1 -0
  6. package/dist/assets/LocalDatabaseServer-CVsGChHh.js +2 -0
  7. package/dist/assets/StudioErrorNotice-C_jbvp9V.js +1 -0
  8. package/dist/assets/VAlert-gwuhYlYb.js +1 -0
  9. package/dist/assets/VAutocomplete-D7Vk5wq_.js +1 -0
  10. package/dist/assets/VAvatar-DvRBcmqv.js +1 -0
  11. package/dist/assets/VBtn-BhVEwXLX.js +1 -0
  12. package/dist/assets/VCard-C3Hx769y.js +1 -0
  13. package/dist/assets/VCheckbox-DyCGSN0H.js +1 -0
  14. package/dist/assets/VCheckboxBtn-DCyuVH7W.css +1 -0
  15. package/dist/assets/VCheckboxBtn-DYcQU2Pn.js +1 -0
  16. package/dist/assets/VChip-VVdtjfq-.js +1 -0
  17. package/dist/assets/VDialog-CQDhjRiV.js +1 -0
  18. package/dist/assets/VDivider-Dq25WsKu.js +1 -0
  19. package/dist/assets/VExpansionPanels-C1y-myl5.js +1 -0
  20. package/dist/assets/VMenu-CDcBLYWR.js +1 -0
  21. package/dist/assets/VOverlay-Cp4rFk6g.js +1 -0
  22. package/dist/assets/VRadioGroup-CAjNZwF7.js +1 -0
  23. package/dist/assets/VRow-BskP28jR.js +1 -0
  24. package/dist/assets/VSelect-D3oLvCcB.js +2 -0
  25. package/dist/assets/VSheet-DxYEFfnM.js +1 -0
  26. package/dist/assets/VSkeletonLoader-Cync3lZZ.js +1 -0
  27. package/dist/assets/VSpacer-CgWOWvBh.js +1 -0
  28. package/dist/assets/VSwitch-BxGuGypi.js +1 -0
  29. package/dist/assets/VTextField-C0b_0cSa.js +1 -0
  30. package/dist/assets/VTextField-F6unyhrS.css +1 -0
  31. package/dist/assets/VTextarea-B7sZd1JY.js +1 -0
  32. package/dist/assets/{Vibe64AsyncModuleState-Do9EqX3S.js → Vibe64AsyncModuleState-syuPcpGx.js} +1 -1
  33. package/dist/assets/Vibe64AuthSettingsButton-CmiidAs5.js +5 -0
  34. package/dist/assets/{Vibe64AuthSettingsButton-M44SSmZ9.css → Vibe64AuthSettingsButton-D2lltUhi.css} +1 -1
  35. package/dist/assets/Vibe64CopyCommand-CYiZcy0d.js +1 -0
  36. package/dist/assets/Vibe64CopyCommand-ClbQLYZi.css +1 -0
  37. package/dist/assets/{Vibe64DashboardBackButton-BH_8j_VR.js → Vibe64DashboardBackButton-Go_MJuIK.js} +1 -1
  38. package/dist/assets/{Vibe64DashboardPageHeader-BXQR00HK.js → Vibe64DashboardPageHeader-BMrdRph6.js} +1 -1
  39. package/dist/assets/Vibe64DashboardPageHeader-CdlzsyKQ.css +1 -0
  40. package/dist/assets/Vibe64DashboardShell-MCzEQCWu.js +1 -0
  41. package/dist/assets/{Vibe64DatabaseWorkspace-CEml9BWn.js → Vibe64DatabaseWorkspace-DM9V017v.js} +3 -3
  42. package/dist/assets/{Vibe64DatabaseWorkspace-DPDMxhAW.css → Vibe64DatabaseWorkspace-DePBDUMy.css} +1 -1
  43. package/dist/assets/Vibe64OutputControls-CU9H0Dur.js +8 -0
  44. package/dist/assets/{Vibe64OutputControls-Co5YzwcK.css → Vibe64OutputControls-CeBzZPUT.css} +1 -1
  45. package/dist/assets/{Vibe64RepositoryWorkspace-Agyt4O-V.css → Vibe64RepositoryWorkspace-Bw9W691N.css} +1 -1
  46. package/dist/assets/{Vibe64RepositoryWorkspace-obZFXkoG.js → Vibe64RepositoryWorkspace-DaAChLA8.js} +2 -2
  47. package/dist/assets/{Vibe64SessionFiles-CQzs6fee.js → Vibe64SessionFiles-CM2EzXBf.js} +4 -4
  48. package/dist/assets/Vibe64SessionFiles-DsPb8hOe.css +1 -0
  49. package/dist/assets/{Vibe64TemporaryAiFixAction-BiuIE9mC.js → Vibe64TemporaryAiFixAction-CIePbdW8.js} +1 -1
  50. package/dist/assets/{Vibe64UiStoryboardView-BhKRpL0N.js → Vibe64UiStoryboardView-Bp9STItF.js} +1 -1
  51. package/dist/assets/{Vibe64UnavailableSessions-Ca5nC7KH.js → Vibe64UnavailableSessions-JBgHzM-j.js} +1 -1
  52. package/dist/assets/{_sessionId_-CKkGH3Rx.js → _sessionId_-DVHd6D5V.js} +1 -1
  53. package/dist/assets/{_sessionTool_-1V-z6Pbp.js → _sessionTool_-BV1AwpUx.js} +1 -1
  54. package/dist/assets/_slug_-DsfaE8Vh.js +25 -0
  55. package/dist/assets/_slug_-_qfQqdHb.css +1 -0
  56. package/dist/assets/{access-WlhPvPgy.js → access-BbzSuMt5.js} +1 -1
  57. package/dist/assets/app-BNh2oZg-.js +1 -0
  58. package/dist/assets/assistantRouting-DeE8jvtE.js +3 -0
  59. package/dist/assets/{changes-CHJjrZAc.js → changes-D8Koqrqg.js} +1 -1
  60. package/dist/assets/client-CybfBKCn.js +2 -0
  61. package/dist/assets/client-D6UGamrv.css +1 -0
  62. package/dist/assets/{conversation-B90ERX9h.js → conversation-DZW4-Wck.js} +2 -2
  63. package/dist/assets/{conversation-vxJGwmtW.css → conversation-TK6EmDk4.css} +1 -1
  64. package/dist/assets/{createSimpleFunctional-CZTGuNuR.js → createSimpleFunctional-zlXZooQW.js} +1 -1
  65. package/dist/assets/{dashboard-CuutW8iv.js → dashboard-DLrmf5ed.js} +1 -1
  66. package/dist/assets/definitions-DgyQJgn-.js +1 -0
  67. package/dist/assets/dialog-transition-D2vqGksQ.js +1 -0
  68. package/dist/assets/env-B5V1EC4M.css +1 -0
  69. package/dist/assets/env-rVQwLtYr.js +1 -0
  70. package/dist/assets/health-92hh8xXh.css +1 -0
  71. package/dist/assets/health-B6r9LLrd.js +1 -0
  72. package/dist/assets/{history-1_NU8azF.js → history-C6xLWUxL.js} +1 -1
  73. package/dist/assets/incoming-Bdqo8z25.css +1 -0
  74. package/dist/assets/incoming-CNwZa_yD.js +2 -0
  75. package/dist/assets/index-B9P6KjvH.js +138 -0
  76. package/dist/assets/{index-irlMYzLh.css → index-BC29JK2e.css} +1 -1
  77. package/dist/assets/{integrations-BMzWQQpa.js → integrations-CcrqPXxj.js} +10 -10
  78. package/dist/assets/integrations-Co8WvCiD.css +1 -0
  79. package/dist/assets/issues-DEjIlMdl.js +1 -0
  80. package/dist/assets/layout-B2Ap07aa.js +1 -0
  81. package/dist/assets/{lazy-NHSwD9FS.js → lazy-BjyT2XvW.js} +1 -1
  82. package/dist/assets/{learning-Bdi3XRS7.js → learning-BP1xvd8w.js} +1 -1
  83. package/dist/assets/mdi-Bt90Ns76.js +1 -0
  84. package/dist/assets/placement-CQy46H3H.js +1 -0
  85. package/dist/assets/publish-CPWnztCc.css +1 -0
  86. package/dist/assets/publish-CVXolnAG.js +3 -0
  87. package/dist/assets/pull-requests-BjwokcU0.css +1 -0
  88. package/dist/assets/pull-requests-DdgzLzY_.js +1 -0
  89. package/dist/assets/{repository-BL_2bgzC.js → repository-5S0LzRq3.js} +1 -1
  90. package/dist/assets/ripple-EFNA8EBu.js +11 -0
  91. package/dist/assets/rolldown-runtime-DBalRfVu.js +1 -0
  92. package/dist/assets/{session-BdhKrcX4.js → session-BGpiZThC.js} +1 -1
  93. package/dist/assets/{settings-1rpuL7eR.js → settings-BKP_eQ3F.js} +1 -1
  94. package/dist/assets/settings-D8x4KUqV.css +1 -0
  95. package/dist/assets/shared-DZETtWRH.js +2 -0
  96. package/dist/assets/studioGateApi-BXHVBVEc.js +1 -0
  97. package/dist/assets/studioUrls-DpSS-0z1.js +1 -0
  98. package/dist/assets/useArchivedVibe64Sessions-D8DWpcSy.js +1 -0
  99. package/dist/assets/useCommand-nWFczmJy.js +1 -0
  100. package/dist/assets/useEndpointResource-Ds8EDBZ2.js +1 -0
  101. package/dist/assets/useRealtimeEvent-DrOiU8lJ.js +1 -0
  102. package/dist/assets/{useUiFeedback-BPBF_0bp.js → useUiFeedback-CMwE4MLs.js} +1 -1
  103. package/dist/assets/useVibe64ConversationLog-D-Vkq0sK.js +1 -0
  104. package/dist/assets/{useVibe64DatabaseTools-4o6S8eXq.js → useVibe64DatabaseTools-Dpm53ruL.js} +1 -1
  105. package/dist/assets/useVibe64ProjectScope-B5ogg6jd.js +1 -0
  106. package/dist/assets/useVibe64SessionData-CGJXj3r7.js +1 -0
  107. package/dist/assets/{useVibe64SessionSelection-BzL1y_Vq.js → useVibe64SessionSelection-BEqKR412.js} +1 -1
  108. package/dist/assets/{useVibe64SystemGraph-B4RmsC9Y.js → useVibe64SystemGraph-DbSfrYF8.js} +1 -1
  109. package/dist/assets/{useVibe64Terminal-Cg3idMcy.js → useVibe64Terminal-I7Sf6xMW.js} +1 -1
  110. package/dist/assets/vibe64ProjectScope.local-B06ABkhI.js +1 -0
  111. package/dist/assets/vibe64SavedEnvValues-B_QE9aAj.js +1 -0
  112. package/dist/assets/vibe64SessionFocus-CA-sk8Ri.css +1 -0
  113. package/dist/assets/vibe64SessionFocus-tv2wz7_H.js +1 -0
  114. package/dist/assets/{vibe64SessionInfo-BuBUdL-e.js → vibe64SessionInfo-B0uItVOK.js} +1 -1
  115. package/dist/assets/{vibe64SessionToolDefinitions-BJaJH5LR.js → vibe64SessionToolDefinitions-Dsn8WYmO.js} +1 -1
  116. package/dist/index.html +56 -46
  117. package/docs/colleague-usage/account-profile-and-appearance.md +1 -1
  118. package/docs/colleague-usage/{ai-accounts-and-routing.md → ai-accounts.md} +41 -114
  119. package/docs/colleague-usage/ai-model-setups.md +159 -0
  120. package/docs/colleague-usage/ai-onboarding.md +94 -21
  121. package/docs/colleague-usage/ai-personal-use.md +41 -0
  122. package/docs/colleague-usage/auto-workflow.md +8 -3
  123. package/docs/colleague-usage/codex-context-recovery.md +2 -1
  124. package/docs/colleague-usage/coding-agent-goals.md +7 -4
  125. package/docs/colleague-usage/coding-agents.md +8 -5
  126. package/docs/colleague-usage/colleague-watches.md +15 -4
  127. package/docs/colleague-usage/colleague.md +21 -5
  128. package/docs/colleague-usage/connected-contributions.md +13 -13
  129. package/docs/colleague-usage/connected-projects.md +2 -2
  130. package/docs/colleague-usage/conversation-context.md +1 -1
  131. package/docs/colleague-usage/dashboard-navigation.md +5 -3
  132. package/docs/colleague-usage/development-env.md +21 -4
  133. package/docs/colleague-usage/file-interfaces.md +1 -1
  134. package/docs/colleague-usage/github-work.md +8 -8
  135. package/docs/colleague-usage/health-checks.md +52 -18
  136. package/docs/colleague-usage/incoming-changes.md +3 -3
  137. package/docs/colleague-usage/integrations.md +5 -3
  138. package/docs/colleague-usage/learning-course-catalogue.md +3 -3
  139. package/docs/colleague-usage/learning-environment.md +55 -47
  140. package/docs/colleague-usage/learning-mode-ui.md +13 -10
  141. package/docs/colleague-usage/learning-practice-projects.md +13 -2
  142. package/docs/colleague-usage/learning-teacher-guide.md +9 -4
  143. package/docs/colleague-usage/learning-with-colleague.md +9 -5
  144. package/docs/colleague-usage/lesson-authoring.md +12 -12
  145. package/docs/colleague-usage/lesson-step-bar.md +22 -22
  146. package/docs/colleague-usage/main-chat-approvals.md +150 -0
  147. package/docs/colleague-usage/preview-browser-checks.md +5 -1
  148. package/docs/colleague-usage/project-language-tools.md +16 -2
  149. package/docs/colleague-usage/project-settings.md +1 -1
  150. package/docs/colleague-usage/project-setup.md +17 -7
  151. package/docs/colleague-usage/publishing.md +185 -0
  152. package/docs/colleague-usage/running-vibe64-on-your-computer.md +54 -6
  153. package/docs/colleague-usage/sessions.md +18 -10
  154. package/docs/colleague-usage/set-up-linux.md +254 -0
  155. package/docs/colleague-usage/set-up-macos.md +199 -0
  156. package/docs/colleague-usage/set-up-windows.md +76 -0
  157. package/docs/colleague-usage/starter-apps.md +21 -4
  158. package/docs/colleague-usage/teaching-content.md +2 -2
  159. package/docs/colleague-usage/team-ai-access.md +108 -0
  160. package/docs/colleague-usage/temporary-chats.md +9 -7
  161. package/docs/colleague-usage/workspace-preparation.md +50 -1
  162. package/docs/templates/learn-topic/README.md +3 -3
  163. package/docs/templates/learn-topic/training/lessons/TOPIC-01/lesson.json +2 -1
  164. package/docs/training-content.md +37 -15
  165. package/node_modules/@jskit-ai/assistant-core/package.json +1 -1
  166. package/node_modules/@jskit-ai/assistant-runtime/package.json +1 -1
  167. package/node_modules/@jskit-ai/assistant-voice/package.json +1 -1
  168. package/node_modules/@jskit-ai/connector-google-calendar/package.json +1 -1
  169. package/node_modules/@jskit-ai/connectors-catalog/package.json +1 -1
  170. package/node_modules/@jskit-ai/connectors-catalog/patterns/oauth-connection/PATTERN.md +25 -0
  171. package/node_modules/@jskit-ai/connectors-core/package.json +1 -1
  172. package/node_modules/@jskit-ai/http-runtime/package.json +1 -1
  173. package/node_modules/@jskit-ai/kernel/package.json +1 -1
  174. package/node_modules/@jskit-ai/realtime/package.json +1 -1
  175. package/node_modules/@jskit-ai/resource-core/package.json +1 -1
  176. package/node_modules/@jskit-ai/resource-crud-core/package.json +1 -1
  177. package/node_modules/@jskit-ai/uploads-runtime/package.json +1 -1
  178. package/node_modules/@local/vibe64-accounts/package.json +2 -1
  179. package/node_modules/@local/vibe64-core/package.json +4 -1
  180. package/node_modules/@local/vibe64-execution/src/host/execHelper.js +82 -81
  181. package/node_modules/@local/vibe64-genesis/bin/vibe64-genesis-host-context +73 -69
  182. package/node_modules/@local/vibe64-genesis/package.json +1 -0
  183. package/node_modules/@local/vibe64-genesis/src/server/agentSpecs.js +118 -68
  184. package/node_modules/@local/vibe64-genesis/src/server/index.js +501 -415
  185. package/node_modules/@local/vibe64-genesis/src/server/packaging.js +105 -0
  186. package/node_modules/@local/vibe64-genesis/src/server/promptContext.js +143 -139
  187. package/node_modules/@local/vibe64-packaging/package.json +26 -0
  188. package/node_modules/@local/vibe64-packaging/src/server/packers/capacitor/ShellIcons.java +112 -0
  189. package/node_modules/@local/vibe64-project/package.json +3 -1
  190. package/node_modules/@local/vibe64-publishing/package.json +12 -0
  191. package/node_modules/@local/vibe64-runtime/src/server/codexAppServerProcess.js +7 -7
  192. package/node_modules/@local/vibe64-runtime/src/shared/assistantRoutingScores.json +25 -22
  193. package/node_modules/@local/vibe64-terminals/package.json +2 -1
  194. package/node_modules/@local/vibe64-terminals/src/server/sessionWorkOperationCommand.js +1340 -1300
  195. package/node_modules/@local/vibe64-training/package.json +2 -1
  196. package/package.json +19 -15
  197. package/server.bundle.mjs +42890 -40887
  198. package/dist/assets/GithubBrowserTabs-C2NO5l8g.js +0 -1
  199. package/dist/assets/StudioErrorNotice-CSrUw1QV.js +0 -1
  200. package/dist/assets/VAlert-P256xaE0.js +0 -1
  201. package/dist/assets/VAutocomplete-BDb95qJX.js +0 -1
  202. package/dist/assets/VAvatar-DPzqDH4r.js +0 -1
  203. package/dist/assets/VBtn-B2MBK2DL.js +0 -1
  204. package/dist/assets/VCard-mXy0k4aS.js +0 -1
  205. package/dist/assets/VCheckbox-C7A1ZW4D.js +0 -1
  206. package/dist/assets/VChip-CcI-Oo2J.js +0 -1
  207. package/dist/assets/VDialog-Bu3EfKb1.js +0 -1
  208. package/dist/assets/VDivider-BMEqUoAB.js +0 -1
  209. package/dist/assets/VExpansionPanels-Dgjrop0V.js +0 -1
  210. package/dist/assets/VMenu-C_x18lwb.js +0 -1
  211. package/dist/assets/VOverlay-CeMZurIN.js +0 -1
  212. package/dist/assets/VRadioGroup-CUu2-KIP.js +0 -1
  213. package/dist/assets/VRow-Cpw7OHQV.js +0 -1
  214. package/dist/assets/VSelect-DL3HaA5m.js +0 -2
  215. package/dist/assets/VSheet-DZWsu0kL.js +0 -1
  216. package/dist/assets/VSkeletonLoader-CttxM1tw.js +0 -1
  217. package/dist/assets/VSpacer-Dhmsvk4t.js +0 -1
  218. package/dist/assets/VSwitch-BRHeDJkH.js +0 -1
  219. package/dist/assets/VTextField-BR2eZeFT.js +0 -1
  220. package/dist/assets/VTextField-BiatYyd3.css +0 -1
  221. package/dist/assets/VTextarea-DbqamXJd.js +0 -1
  222. package/dist/assets/Vibe64AuthSettingsButton-fY4ZiIFF.js +0 -5
  223. package/dist/assets/Vibe64DashboardPageHeader-Gm1IvlHx.css +0 -1
  224. package/dist/assets/Vibe64DashboardShell-BSq7uXEW.js +0 -1
  225. package/dist/assets/Vibe64OutputControls-_zhGX9ne.js +0 -8
  226. package/dist/assets/Vibe64SessionFiles-Bl8wJ5Sk.css +0 -1
  227. package/dist/assets/_slug_-BclonbST.js +0 -24
  228. package/dist/assets/_slug_-CZ1bxO9C.css +0 -1
  229. package/dist/assets/app-BNP_n_Tt.js +0 -1
  230. package/dist/assets/assistantRouting-D4XpXcEf.js +0 -3
  231. package/dist/assets/client-BWV84wi2.js +0 -2
  232. package/dist/assets/client-DGrP-2AJ.css +0 -1
  233. package/dist/assets/definitions-BrMvu6yV.js +0 -1
  234. package/dist/assets/env-BzRtyO0w.css +0 -1
  235. package/dist/assets/env-D3KQGvRe.js +0 -1
  236. package/dist/assets/health-BJvooRnJ.css +0 -1
  237. package/dist/assets/health-BhoO1d4h.js +0 -1
  238. package/dist/assets/incoming-DWDrmxyH.css +0 -1
  239. package/dist/assets/incoming-DzADFGqp.js +0 -2
  240. package/dist/assets/index-dNxr4Lg9.js +0 -138
  241. package/dist/assets/integrations-Cq1x-Di9.css +0 -1
  242. package/dist/assets/issues-Bywux4s7.js +0 -1
  243. package/dist/assets/mdi-CG9pWOSj.js +0 -1
  244. package/dist/assets/placement-BF-zIEhA.js +0 -1
  245. package/dist/assets/pull-requests-CdbhyFOv.css +0 -1
  246. package/dist/assets/pull-requests-ncmKT3sS.js +0 -1
  247. package/dist/assets/ripple-BVltMmyV.js +0 -11
  248. package/dist/assets/settings-BopLnpB0.css +0 -1
  249. package/dist/assets/shared-DpMvYJO3.js +0 -2
  250. package/dist/assets/studioGateApi-DcCqiD9V.js +0 -1
  251. package/dist/assets/studioUrls-DmMMIScP.js +0 -1
  252. package/dist/assets/useArchivedVibe64Sessions-_LB2XxEa.js +0 -1
  253. package/dist/assets/useCommand-Bqxb-naz.js +0 -1
  254. package/dist/assets/useEndpointResource-DWoQ2keu.js +0 -1
  255. package/dist/assets/useRealtimeEvent-Bwapstla.js +0 -1
  256. package/dist/assets/useVibe64ConversationLog-BqUI0S5n.js +0 -1
  257. package/dist/assets/useVibe64Learning-DyqXkpLw.js +0 -1
  258. package/dist/assets/useVibe64ProjectScope-Bp1ImZlz.js +0 -1
  259. package/dist/assets/useVibe64SessionData-B686lToN.js +0 -1
  260. package/dist/assets/vibe64SessionFocus-CqZNTvYF.js +0 -1
  261. package/dist/assets/vibe64SessionFocus-OJ2toBd9.css +0 -1
@@ -1,6 +1,7 @@
1
1
  # Choose a starter with ready tests
2
2
 
3
- In an empty project's onboarding, choose the JSKIT starter that matches the app:
3
+ In an empty project's onboarding, starters are grouped by technology. Choose
4
+ the JSKIT starter that matches the app:
4
5
 
5
6
  - **Basic app**: responsive shell, server/client/browser tests, no database or login.
6
7
  - **Database app**: the same shell plus MySQL migrations and isolated database
@@ -8,9 +9,25 @@ In an empty project's onboarding, choose the JSKIT starter that matches the app:
8
9
  - **Accounts app**: sign-up, login, private pages and persisted profiles, plus
9
10
  account-persistence and browser tests.
10
11
 
12
+ For another framework, each of Django, Rails, Spring Boot, Express and Next.js
13
+ offers one **Basic app**: a home page whose notes form saves to SQLite
14
+ (MySQL/MariaDB for Spring Boot), with unit and HTTP tests and the starter's own
15
+ `docs/colleague-usage/starting-app.md`. Only Rails has sign-in, with the seeded
16
+ development account `developer@example.com` / `developer`; for the others, ask
17
+ the coding agent to add accounts. These starters do not declare **Browser test
18
+ app**.
19
+
20
+ When the installation does not supply their database itself, Preview stops at
21
+ **Set up your project's environment** and names the missing value: `DB_NAME`
22
+ for Django and Next.js, `DB_DATABASE` for Rails and Express, the `DB_*` server
23
+ values for Spring Boot. Choose **Open Env**, enter an absolute SQLite file path
24
+ outside the project (or the MySQL/MariaDB details) and **Save**; preparation
25
+ then continues and the app starts.
26
+
11
27
  The same choices appear on desktop and mobile. Applying a starter imports its
12
- source. Finish **Prepare workspace** to install dependencies and provision its
13
- declared resources and migrations; a failed preparation offers **Retry**.
28
+ source and starts **Prepare workspace** at once: it installs dependencies,
29
+ provisions the declared resources (an installation that supplies the database
30
+ does so here) and runs migrations; a failed preparation offers **Retry**.
14
31
  The coding agent can then follow the first feature request using the existing
15
32
  test commands documented in the starter's `docs/colleague-usage/testing.md`.
16
33
 
@@ -25,6 +42,6 @@ managed projects use the provided browser rather than installing another one.
25
42
  Colleague can explain the choices and offer coding-agent help. A how-to question
26
43
  alone does not authorize starter import, resource preparation or fixture reset.
27
44
  Applying to an existing application is unavailable; it does not replace authored
28
- source. These are three complete starters; optional packs are not part of this flow.
45
+ source. These are complete starters; optional packs are not part of this flow.
29
46
  OpenCode's generated, ignored plugin-install files alone do not make a blank
30
47
  project an existing application. Custom OpenCode files still prevent import.
@@ -3,7 +3,7 @@
3
3
  This topic explains verified lesson content, private progress and owner recovery.
4
4
  For host-registered learner controls and assessment, read **Learn with Colleague**
5
5
  (`learning-with-colleague`). For authoring and Git publication, read **Author a
6
- lesson and publish its source** (`lesson-authoring`). The underlying facilities
6
+ lesson and save its source** (`lesson-authoring`). The underlying facilities
7
7
  below do not by themselves add learner controls or grant Colleague source access;
8
8
  available operations depend on the host registrations described in those topics.
9
9
 
@@ -49,7 +49,7 @@ The application also has a server-side verified-snapshot installation facility.
49
49
  For official catalogue courses it is reached through **Install** and **Update**
50
50
  in Learning's **Courses** pane, or Colleague's `course.install` on a direct
51
51
  request (see [Installing and updating Learning courses](learning-course-catalogue.md)).
52
- For other content, the local operator commands in **Author a lesson and publish its source**
52
+ For other content, the local operator commands in **Author a lesson and save its source**
53
53
  invoke the original installation owner.
54
54
  An admitted owner operation must select the canonical local source and exact
55
55
  course pin. Colleague can explain this boundary and offer to help contact the
@@ -0,0 +1,108 @@
1
+ # Team AI access: when team members can open projects
2
+
3
+ A workspace can have one owner and other people (team members). Team members
4
+ never use the owner's AI directly: main chat runs on the owner's setup (a team
5
+ member's messages wait for approval), and everything else a team member does
6
+ with AI (their Colleague, Fix it with AI, Explain & check and the quick
7
+ helpers) runs on the **team setup**, the second setup in AI setup. A team
8
+ member's own lesson is the one place where main chat runs on the team setup
9
+ too; see **Lessons** below. The team setup may use only **Workspace-use** models,
10
+ never a personal plan such as the owner's Claude or ChatGPT subscription (see
11
+ [Personal-use AI subscriptions](ai-personal-use.md)).
12
+
13
+ So that a team member is never dropped into a project whose AI cannot work for
14
+ them, Vibe64 checks one thing when they open a project: **does the team setup
15
+ have at least one Workspace-use model?** Until it does, team members cannot
16
+ open any project in the workspace.
17
+
18
+ ## Who is checked
19
+
20
+ - **Team members** are checked every time they open a project, including
21
+ practice (Learning) projects.
22
+ - **The workspace owner is never checked.** The owner can always open every
23
+ project, whatever the team setup holds.
24
+ - On Vibe64 running on your own computer there is only you, the owner, so the
25
+ check never applies.
26
+ - Work that runs without a person (an AI turn already running, scheduled
27
+ checks) is not checked.
28
+
29
+ ## What counts as ready
30
+
31
+ The team setup is ready when at least one of its roles (Colleague, Fix it with
32
+ AI, Explain & check, Quick helper) uses a model whose connection is Workspace
33
+ use and currently connected, for example DeepSeek through an API key. A role set
34
+ to **Same as** another role counts as the model of the role it follows. A role
35
+ that is off, a role that follows an empty role, a personal plan, or a
36
+ disconnected connection does not count.
37
+
38
+ The fastest way to get there is the team card in AI setup: **Let your team use
39
+ this workspace: add a DeepSeek key (runs inside Claude Code)**. One key fills
40
+ the team setup with the recommended DeepSeek models.
41
+
42
+ ## What a team member sees
43
+
44
+ Opening a project before the team setup is ready shows **Team AI isn't set up
45
+ yet** instead of the project:
46
+
47
+ - "*Owner* needs to set up AI for team members before you can open projects
48
+ here." (*Owner* is the owner's name, or "The workspace owner" when the
49
+ workspace has no name for them.)
50
+ - A highlighted line to pass on: **Ask *owner* to set up AI for team members.**
51
+ - **Check again** re-reads the project once the owner says it is done. It opens
52
+ the project as soon as the team setup is ready.
53
+ - **Back to projects** returns to the project list, where the workspace has one.
54
+
55
+ The screen is the same on a phone, with the buttons full width and stacked.
56
+ Nothing about the project changes while a team member waits, and their Account
57
+ and AI Accounts pages stay open to them.
58
+
59
+ ## What the owner sees
60
+
61
+ While the workspace has team members and the team setup is not ready, the
62
+ owner's project list (where the workspace has one) shows **Team members can't
63
+ open projects yet — Set up AI for team members so they can work here.** with
64
+ **Set up team AI**, which opens AI setup at the team setup. The prompt disappears once the team setup has a
65
+ Workspace-use model, or when the workspace has no team members.
66
+
67
+ Project rows in the list can also show **N waiting**: messages team members
68
+ sent to main chat that wait for the owner's approval.
69
+
70
+ ## Inside a project
71
+
72
+ Once a team member is in, their AI work uses the team setup, and their messages
73
+ to main chat wait for the owner's approval before they are sent (see
74
+ [Main chat messages that wait for the owner's approval](main-chat-approvals.md)). If the owner
75
+ later removes the last Workspace-use model, the team member's next project
76
+ open shows the waiting screen again.
77
+
78
+ ## Lessons
79
+
80
+ A lesson's practice project is private to its learner, so a team member's
81
+ lesson does not wait for the owner. In their own practice project, a team
82
+ member's main chat runs on the team setup and their messages go straight to it:
83
+
84
+ - **Senior** and **Junior** use the team **Colleague** model, and Auto's Router
85
+ uses the team **Quick helper** model. **Custom** in **Chat mode** lists only
86
+ Workspace-use models, so the member may choose any of them for the lesson.
87
+ - The composer says which AI it is: the placeholder "Message your lesson's AI —
88
+ *model* (team AI)" and, in **Chat mode**, "This lesson runs on the team AI:
89
+ *model*. Only you see this chat."
90
+ - **Do it for me** (which sends a line's prompt to the lesson's main chat),
91
+ Check my work reviews and the lesson's Colleague use the same team setup.
92
+ - A personal plan, such as the owner's Claude or ChatGPT subscription, is never
93
+ used, even when the team setup has no Colleague model. Then main chat says
94
+ "The workspace owner hasn't chosen a Colleague model for team members yet."
95
+ and the owner adds one in AI setup.
96
+ - The owner's own lessons run on the owner's setup as before. Main chat in
97
+ every ordinary project still waits for the owner's approval.
98
+
99
+ ## What Colleague can do
100
+
101
+ Colleague can explain this screen and the team setup. It cannot change the team
102
+ setup for a team member: only the owner edits AI setup. A team member's Colleague
103
+ itself needs the team setup, so Colleague can answer only once the team setup is
104
+ ready; until then, ask the owner directly.
105
+
106
+ Related topics: [AI model setups](ai-model-setups.md),
107
+ [Personal-use AI subscriptions](ai-personal-use.md),
108
+ [AI onboarding](ai-onboarding.md) and [Colleague](colleague.md).
@@ -9,9 +9,11 @@ first chat. If another temporary or host conversation was selected, it stays
9
9
  selected with its draft intact. Dismissing the dialog has the same effect; no
10
10
  chat is created and no message is sent. This applies on desktop and narrow screens.
11
11
 
12
- Ordinary temporary chats offer **Custom**, **Senior** and **Junior**. Choose
13
- **Custom** to open the **Orchestrator**, **Model** and **Thinking** fields. Select
14
- an available connection and model, then **Apply**. The next message uses that
12
+ Ordinary temporary chats offer **Fix it with AI**, **Custom**, **Senior** and
13
+ **Junior**; a team member's offer **Fix it with AI** and **Custom**. **Fix it with
14
+ AI** uses the model AI setup chose for fixes, which may run in a different tool
15
+ from Main chat. Choose **Custom** to open the **Orchestrator**, **Model** and
16
+ **Thinking** fields. Select an available connection and model, then **Apply**. The next message uses that
15
17
  choice and the existing conversation history. Main chat's selection is unchanged.
16
18
 
17
19
  ## Rename a temporary chat
@@ -70,10 +72,10 @@ message; uncertain delivery is checked before any resend.
70
72
 
71
73
  ## Hand a merge repair to another model
72
74
 
73
- **Fix it with AI** for an Update conflict opens a temporary repair using Senior
74
- and sends the repair instructions once. Its reply appears in that temporary
75
- chat; Main chat's history is unchanged.
76
- Merge repair always retains the Senior role. To hand it to Codex:
75
+ **Fix it with AI** for an Update conflict opens a temporary repair on the Fix it
76
+ with AI model and sends the repair instructions once. Its reply appears in that
77
+ temporary chat; Main chat's history is unchanged.
78
+ Merge repair stays in Fix it with AI mode or on a model you choose. To hand it to Codex:
77
79
 
78
80
  1. If it is still working, press **Stop** and wait for it to stop.
79
81
  2. Open its **Chat mode** icon and choose **Choose model**.
@@ -7,7 +7,7 @@ steps come from the project's setup contract.
7
7
 
8
8
  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
- Preparation does not publish the project.
10
+ Preparation does not save or push the project.
11
11
 
12
12
  To rerun preparation after success, select **Prepare workspace** (the wrench)
13
13
  in the session header. On narrow screens, open **Session actions** (three dots)
@@ -99,6 +99,55 @@ Colleague can explain this recovery; installing a local tool and restarting the
99
99
  local editor require the person to use their terminal.
100
100
 
101
101
 
102
+ ## A tool the step needs
103
+
104
+ When a step fails because a program it runs isn't installed, the failed step
105
+ says so in one sentence ("Vibe64 couldn't find bundle on this computer, so this
106
+ step couldn't run.") and **This step needs a tool that isn't working** lists the
107
+ missing runtime with its install command, **Check again** and **Other ways**.
108
+ A long failure (a stack trace) shows as three lines; **Expand** shows all of it.
109
+ The database server panel below waits until no tool is missing, so there is one
110
+ thing to fix at a time.
111
+
112
+ ## A database server you run
113
+
114
+ When the project's Stack declares a MySQL/MariaDB or PostgreSQL database and
115
+ this computer supplies none itself, the person runs that server: one they
116
+ already have, or one they install. After a preparation step fails, a
117
+ **database server** panel appears under the failed step. It says whether
118
+ Vibe64 could sign in, in one sentence: nothing answering at the host and port,
119
+ a wrong user or password, a user that can only sign in from the computer's
120
+ administrator account (such as `root` on a fresh MariaDB, or `postgres`), a
121
+ missing database, or no access to it.
122
+
123
+ The panel's fields are the project's Env values under the exact names the
124
+ Stack declares (for example `DB_HOST`, `DB_PORT`, `DB_NAME` or `DB_DATABASE`,
125
+ `DB_USER` or `DB_USERNAME`, `DB_PASSWORD`). **Save and check** saves them in
126
+ Env and signs in for real with the drivers Vibe64 bundles; **Check again**
127
+ repeats the sign-in. A saved password is never shown or sent back; an empty
128
+ password field keeps it. Env values always win over the Stack's defaults, and a
129
+ variable exported in the shell that started Vibe64 does not count.
130
+
131
+ **Install or start** shows the command for this computer (Debian, Ubuntu and
132
+ WSL, or macOS with Homebrew); its link opens the Databases step of the setup
133
+ guide, which also has the Fedora and Arch lines ([Linux](set-up-linux.md#databases),
134
+ [macOS](set-up-macos.md#databases)). **Create a login and
135
+ database** shows one command that creates a project user, its database and,
136
+ for PostgreSQL, the right to create test databases. **Suggest a user and
137
+ password** fills in a project user and a strong password first; the command
138
+ shows the password as dots but copies the real one. The person runs these
139
+ commands in their own terminal; Vibe64 never starts a database server or runs
140
+ them. While nothing answers, the panel leads with **Install or start** and
141
+ folds the settings into one line, "Looking for it at host:port · database ·
142
+ user", with **Change** to edit them. When the panel says connected, choose
143
+ **Finish preparing** on it (or **Retry** on the failed step).
144
+
145
+ Colleague can explain the panel and each message. When asked, it can check the
146
+ server again with the current values and save the non-secret ones the person
147
+ gives (host, port, database name, user name) in Env. It must not ask for,
148
+ repeat or save a password, and it never runs `sudo` or creates databases
149
+ itself; the password goes in the panel's password field.
150
+
102
151
  ## Resource recovery after a daemon restart
103
152
 
104
153
  When the host supports database preservation checks, reopening a previously
@@ -1,6 +1,6 @@
1
1
  # Copyable teaching topic template
2
2
 
3
- This is a complete directory template for an **incomplete draft topic**. It has one draft lesson in lesson format v2 (schemaVersion `2`): optional notes and three steps — a reading step (`none`), a multiple-choice step (`choice`) and a learner-ticked step (`self`) — with no exercise, automatic check or visual. Do not teach it or mark it published before human review. Check verdicts are final and come from each step's declared check (a lesson with an exercise may also use a `review` check, the learner's own AI judging their work against a rubric); Colleague never passes a step.
3
+ This is a complete directory template for an **incomplete draft topic**. It has one draft lesson in lesson format v3 (schemaVersion `3`, stage `studio`: taught outside any project, since it has no exercise): optional notes and three steps — a reading step (`none`), a multiple-choice step (`choice`) and a learner-ticked step (`self`) — with no exercise, automatic check or visual. Do not teach it or mark it published before human review. Check verdicts are final and come from each step's declared check (a lesson with an exercise may also use a `review` check, the learner's own AI judging their work against a rubric); Colleague never passes a step.
4
4
 
5
5
  ## Copy and adapt
6
6
 
@@ -11,7 +11,7 @@ This is a complete directory template for an **incomplete draft topic**. It has
11
11
  ```
12
12
 
13
13
  Work in the copy. No dependency install or new application framework is needed for these content files.
14
- 2. In the copied `package.json`, replace `name` with your `learn-` repository name, `vibe64Training.topicId` with a permanent topic ID, `domainId` with the intended domain ID, and `title` with the topic title. Keep version `0.1.0`, the topic manifest's schemaVersion `1` and status `preview` while drafting (lessons declare their own schemaVersion `2`). IDs start with a letter, contain only letters, digits or hyphens, and have at most 64 characters.
14
+ 2. In the copied `package.json`, replace `name` with your `learn-` repository name, `vibe64Training.topicId` with a permanent topic ID, `domainId` with the intended domain ID, and `title` with the topic title. Keep version `0.1.0`, the topic manifest's schemaVersion `1` and status `preview` while drafting (lessons declare their own schemaVersion `3` and `stage`). IDs start with a letter, contain only letters, digits or hyphens, and have at most 64 characters.
15
15
  3. Replace `TOPIC-01` with your permanent first lesson code: rename its directory and update the root manifest's `lessons[0].code` and `descriptor`, the lesson descriptor's `code`, the notes title and outline row. Keep the root entry `draft` and `required:true`.
16
16
  4. Write the outline's learner, prerequisites, final ability and lesson outcomes. Replace `notes.md` and each `steps/*.md` body with real text a learner can follow without AI. Edit `steps` in `lesson.json`: each step has a unique `id`, `title`, `body`, `check` and `required`. Use `choice` (`question`, 2–8 `options`, `answer` as 0-based option indexes), `self` (learner ticks **Done**), `none` (reading only, never required) or `auto` (a declared check; needs an exercise). At least one step must be required. Optional `guide` points at a real Vibe64 place and optional `visual` plays declared commands. Instead of a guide, a step body may end with a fenced `beats` block that the lesson step bar plays one line at a time (for example `show lesson-bar: This bar walks you through each step.`); see "Beats" in `docs/training-content.md`.
17
17
  5. To add lessons, copy the lesson directory to a new permanent code, update its code, title and steps, and append a `draft` entry with the correct descriptor path to the root manifest and outline. Declare earlier lesson prerequisites as `{ "code": "YOUR-01" }` and topic prerequisites as `{ "topicId": "another-topic" }`. Referenced lessons must exist, precede their dependants and have no cycles. A published lesson cannot require a draft lesson.
@@ -28,7 +28,7 @@ This is a complete directory template for an **incomplete draft topic**. It has
28
28
  ```
29
29
 
30
30
  Validation and bundling do not execute content, publish Git, install a topic or make drafts teachable. In a public Vibe64 development checkout, `node bin/run.js training ...` accepts the same arguments; run it from that checkout with the copied topic's absolute path.
31
- 7. Add an exercise, an `auto` step or a visual only when you have a real source and a working check. Follow the installed `docs/training-content.md` reference (section **Lesson format v2: steps**) for exercise/check/visual descriptors, exact relative paths and declared auxiliary `assets`. Never point a step body, notes, visual or exercise at `lesson.json`: it holds the choice answers and is refused. Do not add fake readiness or capabilities to make a draft appear runnable.
31
+ 7. Add an exercise (then set the lesson's `stage` to `project`), an `auto` step or a visual only when you have a real source and a working check. Follow the installed `docs/training-content.md` reference (sections **Lesson format v3: stage and facts** and **Lesson format v2: steps**) for exercise/check/visual descriptors, exact relative paths and declared auxiliary `assets`. Never point a step body, notes, visual or exercise at `lesson.json`: it holds the choice answers and is refused. Do not add fake readiness or capabilities to make a draft appear runnable.
32
32
  8. Trial and review the lesson with a human learner, including mistakes, assistance, recovery and relevant desktop/mobile controls. Only then change its root entry to `published`. Keep the topic `preview` until every required lesson is reviewed and published. A `released` topic cannot contain required draft lessons.
33
33
 
34
34
  Before generating a course lock, add the real source repository as root `repository.url` in the format `https://github.com/<owner>/learn-<topic>.git`, commit the intended topic and leave it clean. Use the installed publishing guide for `vibe64 training publish-manifest`; local lock generation does not create or publish a remote repository. A course chooses this whole topic, not a subset of its lessons.
@@ -1,7 +1,8 @@
1
1
  {
2
- "schemaVersion": 2,
2
+ "schemaVersion": 3,
3
3
  "code": "TOPIC-01",
4
4
  "title": "Replace with the learner task",
5
+ "stage": "studio",
5
6
  "notes": "notes.md",
6
7
  "prerequisites": [],
7
8
  "estimatedMinutes": 15,
@@ -36,11 +36,13 @@ entry declares `code`, `descriptor`, `status` (`draft` or `published`) and
36
36
  `required`. A released topic cannot contain required draft lessons. Draft content
37
37
  is validated but remains unavailable for teaching until published and installed.
38
38
 
39
- Lessons use lesson format v2 (see **Lesson format v2: steps** below). Format 1
40
- is retired: `vibe64-training validate` and `publish-manifest` refuse a v1 lesson
41
- ("Lesson X uses retired lesson format 1. Author it in format 2 with steps."), so
42
- no new course release can contain one. Installed v1 lessons, and `bundle`, which
43
- the installer uses, still read and verify them so earlier results stay valid.
39
+ Lessons use lesson format v3: format v2 (see **Lesson format v2: steps**
40
+ below) plus a required `stage` (see **Lesson format v3: stage and facts**).
41
+ Formats 1 and 2 are retired: `vibe64-training validate` and `publish-manifest`
42
+ refuse them ("Lesson X uses retired lesson format N. Author it in format 3 with
43
+ steps and its stage."), so no new course release can contain one, and a lesson
44
+ in a retired format cannot be started. Installed older lessons, and `bundle`,
45
+ which the installer uses, still read and verify them.
44
46
  The topic manifest itself stays schema version 1.
45
47
 
46
48
  For reading existing content, a v1 lesson descriptor declares schema version 1, `code`, `title`, `document`,
@@ -76,13 +78,33 @@ lesson but no current reader consumes them (they labelled the retired Learning
76
78
  watch's hints); they never grade, and a lesson without an exercise cannot
77
79
  declare them.
78
80
 
81
+ ### Lesson format v3: stage and facts
82
+
83
+ A v3 `lesson.json` declares `schemaVersion: 3` and everything v2 has, plus
84
+ `stage`: `"project"` for a lesson taught in its practice project (it needs its
85
+ `exercise`), or `"studio"` for one taught on the screens outside any project
86
+ (its Lesson pane docks beside the page). Learn mode opens a lesson where its
87
+ stage says.
88
+
89
+ A step may check a fact: `"check": { "kind": "fact", "fact": "ai-ready" }`,
90
+ with a final `check fact` beat when the step has beats. The installation reads
91
+ the fact for the learner when they press **Check now**; built in, `ai-ready`
92
+ holds once their AI is set up for Colleague. A topic may declare names its
93
+ lessons use that only some installations provide, in optional `places`,
94
+ `activities` and `facts` lists in `topic.json`. A step whose places, activities
95
+ and facts are all available here, and whose places this person may open, is
96
+ shown; the others are left out of the lesson, and completion counts only the
97
+ required steps shown. A lesson with a required step left out is left out of
98
+ Courses here (and cannot start), as is a topic left without lessons. A course
99
+ may name its `orientation`, one of its published lessons.
100
+
79
101
  ### Lesson format v2: steps
80
102
 
81
103
  A v2 `lesson.json` declares `schemaVersion: 2` and keeps `code`, `title`,
82
104
  `prerequisites`, `estimatedMinutes`, `visuals`, `exercise`, `checks` and
83
105
  `appRoutes` exactly as above. It has no `document` and no `assessments`:
84
106
  an optional `notes` file (background reading) and 1–32 ordered `steps` replace
85
- them. The fixture `tests/fixtures/training/steps-v2/` is a complete, validating
107
+ them. The fixture `tests/fixtures/training/steps-v3/` is a complete, validating
86
108
  topic with every step kind; the copyable template is `docs/templates/learn-topic/`.
87
109
 
88
110
  ```json
@@ -178,7 +200,7 @@ One beat per line: `<show|do|check> <target>[ <path>]: <text>`.
178
200
  step's `check.rubric` from `lesson.json`, its single source.
179
201
  - Places: `preview`, `dashboard`, `database-erd`, `database-data`, `files`,
180
202
  `changes`, `git-log`, `session-info`, `architecture`, `learning` (the **L**
181
- button), `lesson` (the Lesson tab), `chat` (the coding chat), `colleague`,
203
+ button), `lesson` (the step bar's **Lesson** button), `chat` (the coding chat), `colleague`,
182
204
  `courses`, `lesson-bar` (the bar itself), `save` and `reload-preview`.
183
205
  `dashboard` and `lesson-bar` can only be shown.
184
206
  - 1–8 beats. Only `lesson`, `lesson-bar`, `courses`, `learning`,
@@ -192,8 +214,8 @@ step's check kind, a second or non-final check, a block that is not closed or
192
214
  does not end the body, and beats together with a `guide`. Back and Next in the
193
215
  bar move by beat into the neighbouring steps; after the last beat the bar shows
194
216
  the step's own verdict control (Done, Mark as done, Check my work, or Answer in
195
- Step for a choice) and Next step. **Step** (≡) on the bar opens the whole step
196
- text under it in one click, so a beat never needs to repeat the body. Steps never advance by themselves.
217
+ Lesson for a choice) and Next step. **Lesson** on the bar shows the whole step
218
+ text in the Lesson pane in one click, so a beat never needs to repeat the body. Steps never advance by themselves.
197
219
 
198
220
  **Check verdicts are final.** Verdicts come from the step's declared check: an
199
221
  automatic check, the choice comparator, a review check (the learner's own AI
@@ -229,8 +251,8 @@ heading is green and nothing else broke":
229
251
  40,000 characters). Work the coding agent did at the learner's request
230
252
  counts unless the rubric says the learner must do it themselves.
231
253
  - **Check my work** runs only from the learner's own browser, on the
232
- learner's own AI account: the Helper route of their workflow in **AI
233
- Accounts → Model routing** (workload `lesson_review`, input at most 160,000
254
+ learner's own AI account: their **Explain & check** model in **AI
255
+ Accounts → Models** (workload `lesson_review`, input at most 160,000
234
256
  characters, 180 seconds). Vibe64 never pays for or resells it.
235
257
  - The reviewer returns Passed or Not yet, a comment (at most 600
236
258
  characters), a hint for Not yet (at most 300) and up to six rubric points.
@@ -258,7 +280,7 @@ cannot be any v2 lesson descriptor of the topic (for example, an exercise
258
280
 
259
281
  A code question is an `auto` step whose `check` names a code check and whose
260
282
  `files` name the exercise files the learner edits (the fixture
261
- `tests/fixtures/training/steps-v2/` contains one):
283
+ `tests/fixtures/training/steps-v3/` contains one):
262
284
 
263
285
  ```json
264
286
  "exercise": { "kind": "bundled", "source": "app", "reuse": "attempt" },
@@ -367,9 +389,9 @@ is rejected. A released course requires released topics with no required drafts.
367
389
  A preview course is for the workspace owner to review: `lesson.start` admits its
368
390
  published lessons only when the actor is the workspace owner (on local Vibe64,
369
391
  the OS user), and refuses everyone else with `VIBE64_TRAINING_COURSE_PREVIEW`.
370
- `courses.list` reports `canTryPreviews`, and Courses shows the owner **Try
371
- preview**. The started attempt is an ordinary saved lesson. Releasing the course
372
- offers **Start** to everyone; draft lessons and disabled courses stay refused.
392
+ `courses.list` reports `canTryPreviews`, and Courses shows the owner the usual
393
+ start buttons beside the **Preview course** chip. The started attempt is an
394
+ ordinary saved lesson. Releasing the course offers **Start lesson** to everyone; draft lessons and disabled courses stay refused.
373
395
 
374
396
  Run `vibe64 training publish-manifest <course.json> <committed-topic-directory...>`
375
397
  with one canonical repository root for each selected topic. Each topic's package
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jskit-ai/assistant-core",
3
- "version": "0.1.238",
3
+ "version": "0.1.239",
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-runtime",
3
- "version": "0.1.232",
3
+ "version": "0.1.233",
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.39",
3
+ "version": "0.1.40",
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.61",
3
+ "version": "0.1.62",
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.62",
3
+ "version": "0.1.63",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  "./shared/ai": "./src/shared/ai.js",
@@ -181,6 +181,31 @@ comma-separated permissions. Oura handles reduced callback scopes and rotated
181
181
  refresh tokens. Some providers do not return a refresh token; expired access
182
182
  then needs consent again. Provider PKCE enforcement needs provider evidence.
183
183
 
184
+ ## Shared connection from an Env refresh token
185
+
186
+ When the application's host already holds a long-lived grant for the shared
187
+ account (the owner connected it once with the same OAuth client), skip consent
188
+ in the app: add `refreshTokenRef` to a `shared` oauth2 integration whose
189
+ registration uses the authorization-code flow.
190
+
191
+ ```json
192
+ "authentication": {
193
+ "method": "oauth2",
194
+ "registrationRef": "google",
195
+ "refreshTokenRef": "env:GOOGLE_REFRESH_TOKEN"
196
+ }
197
+ ```
198
+
199
+ The Env value is a seed. On first use, and whenever the value or the OAuth
200
+ client changes, the runtime replaces the shared connection with one built from
201
+ that refresh token. From then on it refreshes and stores rotated tokens in the
202
+ application's own store as usual. `status()` reports `source: "env"` (show it as
203
+ "Connected from Env"). `beginAuthorization()` and `disconnect()` refuse with
204
+ `connector_env_managed`: "This connection comes from an Env value; unlink or
205
+ replace that value instead." A revoked token fails with "The refresh token in
206
+ Env no longer works; replace that Env value." The refresh token must come from
207
+ the same client as `registrationRef`; non-JSKIT apps read the variable directly.
208
+
184
209
  ## Twitch composition
185
210
 
186
211
  Use `twitchProvider` from `@jskit-ai/connectors-catalog/server/twitch` in the
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jskit-ai/connectors-core",
3
- "version": "0.1.61",
3
+ "version": "0.1.62",
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.242",
3
+ "version": "0.1.243",
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.244",
3
+ "version": "0.1.245",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  "./_testable": "./_testable/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jskit-ai/realtime",
3
- "version": "0.1.242",
3
+ "version": "0.1.243",
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.186",
3
+ "version": "0.1.187",
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.186",
3
+ "version": "0.1.187",
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.219",
3
+ "version": "0.1.220",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  "./client": "./src/client/index.js",
@@ -19,6 +19,7 @@
19
19
  "./server/completedDiscussionPlanUpgrade": "./src/server/completedDiscussionPlanUpgrade.js",
20
20
  "./server/providerCredentialsUpgrade": "./src/server/providerCredentialsUpgrade.js",
21
21
  "./server/freeModelRetirementUpgrade": "./src/server/freeModelRetirementUpgrade.js",
22
- "./server/assistantPlanUpgrade": "./src/server/assistantPlanUpgrade.js"
22
+ "./server/assistantPlanUpgrade": "./src/server/assistantPlanUpgrade.js",
23
+ "./server/teamSetupRoutingUpgrade": "./src/server/teamSetupRoutingUpgrade.js"
23
24
  }
24
25
  }
@@ -46,9 +46,12 @@
46
46
  "./server/envUserValues": "./src/server/envUserValues.js",
47
47
  "./shared": "./src/shared/index.js",
48
48
  "./server/assistantRoutingStore": "./src/server/assistantRoutingStore.js",
49
+ "./server/workspaceTeam": "./src/server/workspaceTeam.js",
50
+ "./server/teamAiGate": "./src/server/teamAiGate.js",
49
51
  "./shared/curatedCodexProviders": "./src/shared/curatedCodexProviders.js",
50
52
  "./server/codexProviderConnections": "./src/server/codexProviderConnections.js",
51
53
  "./server/stateUpgrades/routingV2Format": "./src/server/stateUpgrades/routingV2Format.js",
52
- "./server/stateUpgrades/routingV3Format": "./src/server/stateUpgrades/routingV3Format.js"
54
+ "./server/stateUpgrades/routingV3Format": "./src/server/stateUpgrades/routingV3Format.js",
55
+ "./server/stateUpgrades/routingV4Format": "./src/server/stateUpgrades/routingV4Format.js"
53
56
  }
54
57
  }