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,7 +1,7 @@
1
- # Author a lesson and publish its source
1
+ # Author a lesson and save its source
2
2
 
3
3
  Ask Colleague to coordinate a coding agent, review the lesson in the same session,
4
- and publish its source through the existing Save or pull-request workflow.
4
+ and save its source through the existing Save or pull-request workflow.
5
5
  Colleague can operate those controls when requested; it does not edit files or
6
6
  run a shell itself. Git publication, pinned course material and installation are
7
7
  separate results. The current Getting started course has four step-based lessons
@@ -32,7 +32,7 @@ text needs a new immutable topic/course pin, keeping earlier learners’ version
32
32
 
33
33
  For example: “In this lesson-authoring project and session, improve the introduction's
34
34
  wording, keep its step IDs, checks and App/diagram contracts, validate and bundle it,
35
- arrange a review, then publish the source as a draft PR. Do not install or enable it.”
35
+ arrange a review, then save the source as a draft PR. Do not install or enable it.”
36
36
  This is an example instruction, never authority to execute it without the person's
37
37
  actual request. A how-to question makes no edits, assignment or external write.
38
38
 
@@ -58,21 +58,21 @@ it does not mean published or installed. A preview can be published as preview
58
58
  source when requested. Pedagogical trial, real exercise and animation acceptance
59
59
  remain explicit requirements before claiming a reviewed course release.
60
60
 
61
- ## Publish through the native repository workflow
61
+ ## Save through the native repository workflow
62
62
 
63
63
  After coding settles, inspect **Changes** and the exact repository/branch
64
64
  reported by the session. **Save** captures ALL current work, not selected files.
65
65
  A managed Vibe64 Git Save updates its canonical project; a GitHub Save pushes to
66
66
  the reviewed repository branch. Colleague can request native Save after an explicit
67
- Save/publication instruction and passes its unchanged destination review. It
67
+ Save instruction and passes its unchanged destination review. It
68
68
  cannot bypass active-agent, stale-source, account or required-PR rules, or discard
69
- unrelated work to make publication pass. An ambiguous target stays unresolved.
69
+ unrelated work to make Save pass. An ambiguous target stays unresolved.
70
70
  On mobile, reveal the project and use its Dashboard section chooser for Changes
71
71
  or Pull requests. The same native Save/PR permissions and review apply.
72
72
 
73
73
  For a required or requested PR workflow, Colleague can use the existing PR creation
74
74
  operation with the reviewed destination and requested title/body; draft is the
75
- default. PR creation saves and publishes the session's work. An already bound PR
75
+ default. PR creation saves and pushes the session's work. An already bound PR
76
76
  is returned rather than silently edited. **Pull requests** shows actual remote
77
77
  source/base commits, checks and review blockers. Marking a draft ready or merging
78
78
  requires the person's corresponding instruction and the original fresh review;
@@ -80,10 +80,10 @@ creating a PR does not authorise merge. Use only a repository-enabled merge meth
80
80
  covered by that instruction. Save, PR creation or merge never deploys Vibe64.
81
81
 
82
82
  After success, report the actual saved destination or returned PR and current
83
- remote status. A coding agent's “pushed” message is not publication proof. After
83
+ remote status. A coding agent's “pushed” message is not proof that Save pushed. After
84
84
  an uncertain result, inspect the original operation/PR before a deliberate retry;
85
- `published_needs_reconcile` means publication happened and local reconciliation
86
- still needs recovery. Do not republish automatically. Existing **Update this
85
+ `published_needs_reconcile` means the push happened and local reconciliation
86
+ still needs recovery. Do not push again automatically. Existing **Update this
87
87
  session (rebase)** and coding-agent conflict repair apply only when requested.
88
88
 
89
89
  ## Validate, bundle and pin
@@ -190,7 +190,7 @@ In supported hosted installations, ask Colleague to admit your exact clean
190
190
  committed snapshot from the authorized authoring session. Then open Learning with
191
191
  **L**; on its **Courses** tab the **Author trial** card shows the snapshot's lesson
192
192
  and release, and **Resume author trial** opens it in the ordinary lesson reader, the page's **Lesson** tab. This saved trial has isolated progress; it is not an
193
- enabled learner course. Ordinary **Start** still requires a published lesson in
193
+ enabled learner course. Ordinary **Start lesson** still requires a published lesson in
194
194
  an enabled release. Local validation/bundling alone admits no trial. Do not change
195
195
  a draft's status to bypass that guard or report a trial as published progress.
196
196
 
@@ -198,7 +198,7 @@ Internal snapshot acquisition also retains the authoring session's normal
198
198
  source protections: AI work, pending review or cleanup, and Workspace setup
199
199
  must finish before its committed content can be captured. A closing, renewing
200
200
  or unavailable source is refused. The saved trial control captures no source,
201
- automatically stops no work and does not publish the source.
201
+ automatically stops no work and does not save or push the source.
202
202
 
203
203
  A workspace operator can now provision approved local lesson content through the
204
204
  terminal commands documented in [Local operator provisioning](../training-content.md#local-operator-provisioning).
@@ -1,21 +1,21 @@
1
1
  # The lesson step bar
2
2
 
3
3
  The yellow lesson step bar above the project page plays the current lesson
4
- step: its position, beats, **Step** and **Courses**. The rest of
4
+ step: its position, beats, **Lesson** and **Courses**. The rest of
5
5
  Learn mode is in [The Learning environment](learning-environment.md).
6
6
 
7
7
  In Learn mode, while your lesson is loaded, a yellow bar above the project page
8
8
  names the lesson and shows **Step N of M** with the step's title and status.
9
9
  **Previous step** and **Next step** (arrow buttons) move through the steps.
10
- **Step** (the ≡ button) opens the whole current step right under the bar, in
11
- place, with everything the Lesson tab offers for it: its text, diagram and
12
- **Play**, **Done**, **Mark as done**, its question or **Check now**, **Show me**,
13
- **Teach me** and **Previous step**/**Next step**. It covers the top of the page
14
- (at most about two thirds of the screen, scrolling inside); **Step** again or
15
- Escape closes it, and **Show me** closes it so the place it shows is in view.
16
- This tab remembers whether it is open. To read the step in the page's
17
- **Lesson** tab, select that tab (see [The Lesson tab](learning-environment.md#the-lesson-tab));
18
- the bar has no separate Open button. **Courses**, at its right end (a book icon
10
+ **Lesson** (a school-cap icon), on a lesson with a practice project, shows the
11
+ lesson in the project pane at its current step, with everything for it: its
12
+ text, diagram and **Play**, **Done**, **Mark as done**, its question or **Check
13
+ now**, **Show me**, **Teach me**, **I'm stuck** and **Previous step**/**Next
14
+ step** (see [The Lesson pane](learning-environment.md#the-lesson-pane)). It
15
+ stays pressed while the lesson shows, and the header's **Preview** or **Dash**
16
+ leaves it. On a lesson without a practice project the lesson is already the
17
+ whole page, so the bar has no **Lesson** button.
18
+ **Courses**, at its right end (a book icon
19
19
  on a phone), opens the Courses overlay to choose another lesson. The bar is
20
20
  always shown in full; it cannot be collapsed or hidden. On a phone the lesson
21
21
  name is hidden.
@@ -50,8 +50,8 @@ current one), then the beat's line:
50
50
  it opens the place (or the file), reveals and focuses the coding chat, opens
51
51
  Courses or Colleague (without asking it anything), reloads the Preview, or
52
52
  sends the line's quoted prompt as your next message in the practice
53
- project's Main chat. That message shows a **Sent by the lesson** chip under
54
- it. On a **Save** line it only points at **Save**: saving stays yours. On a
53
+ project's Main chat (for a team member, on the team AI, with no owner
54
+ approval). That message shows a **Sent by the lesson** chip under it. On a **Save** line it only points at **Save**: saving stays yours. On a
55
55
  line about waiting for the agent, pressing the App's button, minimising
56
56
  Colleague or pressing **L** there is no Do it for me (for **L** it shows
57
57
  where the button is). If it cannot be done here (for example the chat cannot take a
@@ -66,21 +66,21 @@ current one), then the beat's line:
66
66
  step at either end.
67
67
  - After the last beat the bar shows the step's own control: **Done**, **Mark as
68
68
  done**, **Check my work** (an automatic check, or a review; a check that does
69
- not pass says why under the line) or **Answer in Step** for a question, which opens the
70
- step under the bar. When the step has passed it shows **Next step**. **I'm stuck**
69
+ not pass says why under the line) or **Answer in Lesson** for a question, which shows the
70
+ step in the Lesson pane. When the step has passed it shows **Next step**. **I'm stuck**
71
71
  (on a *do* line, and after the last beat of a step that **Check my work**
72
- decides, until the step passes; also in **Step** beside **Teach me**) opens
72
+ decides, until the step passes; also in the Lesson pane beside **Teach me**) opens
73
73
  Colleague and asks it for help with this step (see `learning-with-colleague`).
74
74
  On a phone a *do* line keeps only **Do it for me** on the bar; **I'm stuck**
75
- is then in **Step**.
75
+ is then in the Lesson pane.
76
76
  A step never moves on by itself.
77
- - **Show me** on such a step (in the bar's step or the Lesson tab) plays its
77
+ - **Show me** on such a step (in the Lesson pane) plays its
78
78
  beats again from the first one.
79
79
 
80
80
  **Check my work on a reviewed step.** Some steps are checked by a review of
81
- your work: the bar's line (and the step under **Step**) shows what the review
82
- looks for. **Check my work** uses your own AI (the Lesson review route in AI
83
- Accounts → Model routing) to look at the changes in your practice project
81
+ your work: the bar's line (and the step in the Lesson pane) shows what the review
82
+ looks for. **Check my work** uses your own AI (the **Explain & check** model in
83
+ AI Accounts → Models) to look at the changes in your practice project
84
84
  (and, when the step says so, your coding chat); the line says **Checking your
85
85
  work with your AI…** for up to about a minute, without a Cancel. **Passed ✓**
86
86
  with the reviewer's comment passes the step for good. **Not yet:** says what
@@ -93,6 +93,6 @@ runs a review or passes a step for you.
93
93
 
94
94
  This tab remembers the beat and the pause; another tab or device starts the
95
95
  step at its first beat. On a phone the bar has two lines: the position and arrows above,
96
- the beat's line and its one button below; **Step** and **Courses** show only
97
- their icons, and the open step fills the width. A step without beats shows its title
96
+ the beat's line and its one button below; **Courses** shows only its icon
97
+ and **Lesson** its icon and name. A step without beats shows its title
98
98
  and status as before, and **Show me** when it can point at a place.
@@ -0,0 +1,150 @@
1
+ # Main chat messages that wait for the owner's approval
2
+
3
+ A project's Main chat always runs on the workspace owner's AI. When a team
4
+ member writes in Main chat, the message does not reach the assistant straight
5
+ away: it waits in **Messages for approval** until the owner approves, edits or
6
+ declines it. The owner's own messages are sent as usual and never wait.
7
+
8
+ Temporary chats, Colleague and the other assistants a member uses run on that
9
+ member's own team setup; only Main chat waits for approval.
10
+
11
+ A team member's own lesson is the exception. A practice project is private to
12
+ its learner, so its Main chat runs on the team setup and the member's messages
13
+ (and the lesson's **Do it for me** prompts) are sent straight away, with no
14
+ approval. The composer then reads "Message your lesson's AI — *model* (team
15
+ AI)". See **Lessons** in [Team AI access](team-ai-access.md). The owner's own
16
+ lessons are unchanged. Messages sent by
17
+ another session (project messages) are not person requests and never wait.
18
+
19
+ ## Send a message as a team member
20
+
21
+ 1. Open the project's coding session. Main chat shows the hint
22
+ "Main chat runs on {owner}'s AI. {owner} approves each message." and the
23
+ placeholder "Message main chat — {owner} approves before it's sent".
24
+ 2. Type the message and choose **Send for approval**. The button keeps that
25
+ label while the assistant is working; members have no separate Steer button.
26
+ 3. A card appears directly above the composer: **You** with the time, the line
27
+ "Waiting for {owner} to approve", the message and a **Waiting** chip.
28
+
29
+ Messages for approval are text only: the member composer has no attachment
30
+ button. A request that carries attachments is refused with "Messages for
31
+ approval are text only. Remove the attachments and send again."
32
+
33
+ You can have up to 5 messages waiting in one session. A sixth is refused with
34
+ "You have 5 messages waiting. Wait for {owner} to review them, or withdraw one."
35
+
36
+ If the assistant was working when you sent the message, the card adds: "Sent
37
+ while the assistant was working. It joins the current turn if it's still running
38
+ when {owner} approves." Otherwise the approved message starts a new request.
39
+
40
+ ### Change or withdraw a waiting message
41
+
42
+ - **Edit** replaces the text with a box. Change it and choose **Save**, or
43
+ **Cancel** to keep the original. An empty text is refused with "Write a
44
+ message, or withdraw it."
45
+ - **Withdraw** removes the message from the queue. It stays as the one-line row
46
+ "Withdrawn by you".
47
+
48
+ Only the sender can edit or withdraw, and only while the message is waiting.
49
+ If the owner has already decided, the change fails with "This message was
50
+ already sent." (or declined or withdrawn); if it is being sent, with "This
51
+ message is being sent."
52
+
53
+ ### What you see after the owner decides
54
+
55
+ While the chat is open you get a snackbar: "{owner} approved and sent your
56
+ message" or "{owner} declined your message". The card becomes a one-line row:
57
+
58
+ - **Sent by {owner} · time**, with "· Edited by {owner}" when the owner changed
59
+ the text first, and **Show in chat**, which scrolls the conversation to the
60
+ delivered message.
61
+ - **Declined by {owner} · time**, with the owner's note quoted underneath when
62
+ they wrote one.
63
+
64
+ Under each row is the start of the message on one line. On a declined or
65
+ withdrawn row, select it to show the whole text, to copy, rework and send it
66
+ again.
67
+
68
+ The delivered message appears in Main chat as an ordinary user message with the
69
+ line "{sender} · approved by {owner}" under its text. The assistant's reply is
70
+ visible to everyone with access to the project.
71
+
72
+ Decided rows stay for 24 hours; at most three show at once and the rest are
73
+ behind **Show earlier (n)**.
74
+
75
+ ## Review messages as the owner
76
+
77
+ New messages announce themselves in several places:
78
+
79
+ - In any open tab where you have that project's Main chat open, a snackbar
80
+ "{sender} sent a message for your approval in {project}" with **Review**,
81
+ which selects the session and scrolls to the waiting messages.
82
+ - A **{n} waiting** chip in the Main chat header; choose it to reveal the queue.
83
+ - The browser tab title starts with "({n}) " while any messages wait.
84
+ - Project lists that support it show a **{n} waiting** badge on the project.
85
+
86
+ Each waiting card shows "{sender} wants to send · time", the message and these
87
+ actions:
88
+
89
+ - **Approve & send** sends the message unchanged.
90
+ - **Edit then send** opens a box with the message. Change it and choose **Send**,
91
+ or **Cancel**. The sender sees "Edited by {owner}" on the Sent row.
92
+ - **Decline** opens "Add a note for {sender} (optional)", up to 500 characters.
93
+ Choose **Decline** to confirm, or **Cancel**.
94
+
95
+ While your approval is being delivered the chip reads **Sending…** and the
96
+ buttons are disabled. The owner cannot edit or withdraw a member's message other than by
97
+ approving it with edited text.
98
+
99
+ ### How an approved message is delivered
100
+
101
+ Approving sends the message exactly as if you had sent it yourself, on your AI:
102
+
103
+ - No turn running: it starts a new request (in Auto, the Router classifies it).
104
+ - A turn is running that accepts guidance (including Auto working or an active
105
+ goal): it joins that turn as guidance.
106
+ - A turn is running that cannot take guidance, a delivery is uncertain, or
107
+ recovery is in progress: the send fails, the message goes back to **Waiting**
108
+ and the card shows "Couldn't send: {error} Try again." Choose
109
+ **Approve & send** again when the turn finishes.
110
+
111
+ If a page reload interrupts a send, the card may stay on **Sending…** with
112
+ **Send again**. Sending again reuses the same delivery, so the message is never
113
+ delivered twice. Its text can't be edited while it is sending; an edited text
114
+ is always a new delivery.
115
+
116
+ If the sender edited the message after you opened it, your action fails with
117
+ "{sender} changed this message. Review it again." Read the new text and decide
118
+ again.
119
+
120
+ ## Other team members
121
+
122
+ Members who did not send a message see the same cards, headed "{sender}", with
123
+ "Waiting for {owner} to approve" and no actions.
124
+
125
+ ## Phone
126
+
127
+ On a phone the queue collapses to a bar above the composer, "{n} messages
128
+ waiting for approval" (or "Messages for approval" when only decided rows
129
+ remain). Tap it to open the **Messages for approval** sheet with the same cards;
130
+ buttons stack full width and Edit or Decline open inside the sheet. Close the
131
+ sheet with its close button or by tapping outside it.
132
+
133
+ ## What Colleague can do
134
+
135
+ Colleague can explain all of this. When a team member asks Colleague to send a
136
+ message to Main chat, it goes through the same queue and waits for the owner;
137
+ Colleague must say so rather than claim it was delivered. In the member's own
138
+ lesson there is no queue: the message is sent to the lesson's team AI. Approving, editing,
139
+ declining and withdrawing are human-only: Colleague cannot do them, so it should
140
+ point the person to the buttons above.
141
+
142
+ ## Errors
143
+
144
+ | Message | Meaning |
145
+ |---|---|
146
+ | Only the workspace owner can approve messages. | A member tried to approve or decline. |
147
+ | Only {sender} can change this message. | Someone else tried to edit or withdraw it. |
148
+ | {sender} changed this message. Review it again. | The text changed since you looked. |
149
+ | This message was already sent. / declined. / withdrawn. | It has been decided. |
150
+ | This message is being sent. | Delivery is in progress; wait for it. |
@@ -49,7 +49,11 @@ matching managed runtime. A version error is a test-runtime blocker; interactive
49
49
  checks can use the existing managed Preview browser. Report the exact required
50
50
  version to the platform operator instead of installing a separate browser.
51
51
  On a computer without managed browser runtimes, the agent runs the project's own
52
- Playwright (`npx playwright test`). If that browser is missing, the agent reports
52
+ Playwright (`npx playwright test`). Interactive Preview checks (screenshot, eval)
53
+ use the project's own Playwright, or else the `playwright` command installed on
54
+ this computer, so a project in another language needs no Playwright package. If
55
+ neither exists, the agent asks you to install Playwright on the computer rather
56
+ than adding it to a non-Node.js project. If that browser is missing, the agent reports
53
57
  it and asks you before running `npx playwright install chromium`; installing it
54
58
  is your decision.
55
59
 
@@ -20,7 +20,16 @@ onboarding does not offer PostgreSQL variants yet (for example
20
20
  `django-postgresql`); it offers the MySQL or SQLite variant instead.
21
21
 
22
22
  If **Preparing workspace** fails, expand its output, correct the reported cause
23
- and choose **Retry**. If Preview cannot start, use **Show run output**. On mobile,
23
+ and choose **Retry**. On your own computer, the panel also lists the tools that
24
+ step uses: each one that runs shows its version and where it was found; one that
25
+ is missing or didn't start shows one sentence, the install command for this
26
+ computer with a copy button, **Check again** and **Other ways**. Language
27
+ runtimes install with mise (`mise use -g ruby@3.4`, `mise use -g python@3.13`,
28
+ `mise use -g java@temurin-25`), which needs no administrator password; build
29
+ tools and libraries for native packages (`cpp`) use `sudo apt install …` on
30
+ Debian/Ubuntu or `brew install …` on macOS. **Other ways** opens the setup
31
+ guide for this computer ([Linux](set-up-linux.md), including Fedora and Arch,
32
+ or [macOS](set-up-macos.md)), which also explains adding mise to your shell. Coming back to the tab checks again. If Preview cannot start, use **Show run output**. On mobile,
24
33
  open **Show project** first. A missing runtime needs installation by the host
25
34
  administrator; changing the declaration to `shell` does not supply the missing
26
35
  tool. Standalone users install/configure the missing tool in their own environment
@@ -31,6 +40,11 @@ interpreter installed does not prove that the project consumes the selected
31
40
  library: the project's declared verification must demonstrate that. Normal
32
41
  release inputs and unrelated sessions keep their own source selection.
33
42
 
43
+ When a runtime is missing, the coding agent stops and says which one, pointing
44
+ to the tool row's command. It never runs `sudo` and never installs a runtime into
45
+ the project folder (for example with `mise use` without `-g`).
46
+
34
47
  Colleague can explain preparation errors and offer its supported status/retry
35
- actions. These instructions do not give it shell access or permission to install
48
+ actions. On your own computer it can also check whether a named tool runs now,
49
+ for example after you ran an install command. These instructions do not give it shell access or permission to install
36
50
  host software. The coding agent can repair project commands after being asked.
@@ -19,7 +19,7 @@ Gradle, NuGet (.NET) or custom; it is independent of the relationship.
19
19
  Custom requires a Preparation script path relative to this project, with its
20
20
  runtime declared in Stack. Every other type disables and clears the script; the
21
21
  project's own declared Verify command, not Vibe64, treats that source.
22
- Use **Save connected projects** for the list; ordinary project Save publishes
22
+ Use **Save connected projects** for the list; ordinary project Save pushes
23
23
  that source edit. See **Configure connected projects** for access and recovery.
24
24
 
25
25
  Hosted repository settings can also specify whether GitHub Save permits direct
@@ -34,8 +34,9 @@ which should be the default. Supply an email, login or user ID, not a password.
34
34
  The agent should reuse answers you already gave and wait for your choices.
35
35
  Choosing a name such as “admin” does not grant that account administrator rights.
36
36
 
37
- The coding agent can implement the application's Preview identity adapter after
38
- you accept that work. It can also save the named accounts you give or confirm
37
+ An application with login accounts gets a Preview identity adapter by
38
+ default: when it is missing, the coding agent sets it up as part of the work
39
+ rather than asking first. It can also save the named accounts you give or confirm
39
40
  (for example `admin` and `user` with their emails) and then verify each in Preview;
40
41
  it never creates accounts or changes roles for this. To configure them yourself,
41
42
  open **Dashboard > App access** and use **Managed app access > Add identity**. Enter **Name**, **App identifier**
@@ -55,15 +56,24 @@ work. Public applications and non-web projects do not need preview accounts.
55
56
  ## New project
56
57
 
57
58
  1. Open the project and create or select its coding session. At **What would you
58
- like to build with?**, review the available starter cards. The installed JSKIT
59
- starters include **JSKIT · Public app** (no accounts or database) and
60
- **JSKIT · Accounts and database** (sign-up, login and MySQL persistence).
61
- Available starters depend on the installation; do not assume an absent card exists.
59
+ like to build with?**, review the available starter cards, grouped by
60
+ technology. The official catalogue lists JSKIT first: **JSKIT · Basic app**
61
+ (no accounts or database), **JSKIT · Database app** (MySQL, no accounts) and
62
+ **JSKIT · Accounts app** (sign-up, login and MySQL). Then one **Basic app**
63
+ each for Django, Rails, Spring Boot, Express and Next.js: a small notes form
64
+ saved to SQLite (MySQL/MariaDB for Spring Boot), with ready tests. Only the
65
+ Rails starter has sign-in, with a seeded development account
66
+ (`developer@example.com` / `developer`); for the others, ask the agent to add
67
+ accounts. Available starters depend on the installation; do not assume an
68
+ absent card exists.
62
69
  2. Choose **Use this starter →** on the intended card only when it matches the
63
70
  product you want. Preparation adds it to this session; use the session's
64
71
  **Save** control to keep the work in the project. A failed application reports
65
72
  its error and preserves existing work.
66
- 3. Alternatively, choose **Start through conversation** to open Temporary AI for
73
+ 3. You can also describe the app directly in the session's main chat. In an
74
+ empty folder that was never set up, the coding agent first initializes Genesis,
75
+ then proposes a Blueprint and the matching Stack components for your answer.
76
+ 4. Alternatively, choose **Start through conversation** to open Temporary AI for
67
77
  project creation. Discuss what you want, who uses it and its first useful
68
78
  outcome before choosing technology. If no starters are configured, this
69
79
  conversation route is still offered when a coding assistant is available.
@@ -0,0 +1,185 @@
1
+ # Publish your project as an app or package (Publish)
2
+
3
+ **Dashboard → Publish** is where a project becomes something people install: an
4
+ app on your own phone, or a package on a registry. On a phone, open Dashboard,
5
+ then choose **Publish** from the **Dashboard section** menu.
6
+
7
+ The page has four parts:
8
+
9
+ - **Releases use your saved work**: the saved commit and branch a release
10
+ would use, whether it is pushed, whether the project's checks passed on it,
11
+ and each package from Packaging with its current version.
12
+ - **Targets**: one card per place a release goes, followed by an **Add
13
+ target** tile. With no targets yet, the page offers the destinations, those
14
+ this project can use first: **Install on my phone**, **GitHub Releases**,
15
+ **npm** and **PyPI**. One that cannot be used yet says why (for example
16
+ "Needs a Python package in Packaging" or "Needs this project's repository
17
+ on GitHub"). Each shows what it needs, how long the first and later releases
18
+ take, and what it costs.
19
+ - **History**: every release and dry run with each step, each target's outcome
20
+ and its proof, and **Full log**. A running release updates live; you can
21
+ leave the page and it carries on.
22
+ - **Accounts & keys** (top right) and **Release** (top right).
23
+
24
+ If the project has no `## Packaging` section yet, the page says **Tell Vibe64
25
+ what to build** instead of showing targets. Ask Colleague or a coding
26
+ conversation, for example "Set up packaging so I can install this app on my
27
+ phone", review the change and Save it.
28
+
29
+ ### Publishing keys and accounts
30
+
31
+ **Accounts & keys** keeps every sign-in and install key Vibe64 uses for
32
+ publishing in one file in your home folder, encrypted under a passphrase of at
33
+ least 12 characters (an `age` file any age tool can open). Create it once;
34
+ afterwards **Unlock** it for 15 minutes when you add accounts or publish, and
35
+ **Lock** it any time. Vibe64 cannot recover a forgotten passphrase.
36
+
37
+ - **Add account**: npm (an access token and the registry address), PyPI (an
38
+ API token and the upload address) or GitHub (**Use my GitHub CLI sign-in**,
39
+ or paste a token). Tokens go straight into the keys file; the page and
40
+ Colleague only ever see the account's name and address.
41
+ - **Replace token** (the key icon on an account) keeps the account's name and
42
+ address, so targets using it keep working with the new token.
43
+ - **Recovery kit**: **Save kit** (or **Manage**) downloads every key as one file under a second
44
+ passphrase; keep both off this computer. **Restore** brings them back on a
45
+ new computer. The panel says when a key is newer than your last kit.
46
+
47
+ ### Add a target
48
+
49
+ **Add target** (or a destination tile) asks where the release goes, then which
50
+ package (only packages that destination can publish are offered) and which
51
+ account. **What it needs** marks what this project and your keys already have.
52
+ npm also takes an optional tag such as `next`; empty means `latest`. When the
53
+ dialog asks for an account, **Add account** opens Accounts & keys and, when you
54
+ press Done, comes back to the same target. A card's **⋮** menu switches the
55
+ target to another account of the same kind or removes it. Targets are kept by
56
+ Vibe64 for this project on this computer, not in the project's files.
57
+
58
+ ### Release
59
+
60
+ 1. **Release → Version**: each package offers its saved version **as saved**
61
+ while no release has published it, then the next patch, minor and major.
62
+ Releasing as saved needs no session. A new version needs one: **Write
63
+ 1.4.3** puts the version bump and a `CHANGELOG.md` entry (drafted from the
64
+ saved commits in **What's new**) into the session as an ordinary change;
65
+ review it and **Save** it. Without a session the dialog says so and offers
66
+ **Release as saved** while the saved version is still unpublished.
67
+ 2. **Review & publish**: choose targets, unlock your keys if asked, and read
68
+ **Before publishing**: saved and pushed work, Packaging, tags still free,
69
+ checks passed, every sign-in valid, install key and recovery kit, Android
70
+ requirements. What needs attention comes first; the rest folds into **All
71
+ N checks passed**. A red line stops the release and the footer says so; an
72
+ amber one (a changed toolchain) needs **I understand**. Failed checks name
73
+ the check, **Show output** shows the end of its output and **Run again**
74
+ reruns it; a refused sign-in offers **Fix sign-in**; saved work that is
75
+ not on the remote yet offers **Push to origin** (fast-forward only, never
76
+ forced; it is the person's button, not a Colleague tool). **What happens** lists
77
+ the steps in order: build each package once, tag the saved commit, publish
78
+ to each target (with its account and address), under a short plan id such
79
+ as `Plan 3f9c`.
80
+ 3. **Dry run** builds once and asks each destination what would happen;
81
+ nothing is tagged or uploaded. It appears in History as a dry run.
82
+ 4. **Publish…** opens the confirmation: exactly which package goes where at
83
+ which version, the saved commit and tag. **Publish** there (with your
84
+ passphrase if the keys locked meanwhile) builds each package once, then
85
+ tags the saved commit and pushes the tag, then sends the same files to
86
+ every target and reads each back. A failed build therefore leaves no tag
87
+ behind. If the saved work, targets, the account a target signs in with, or
88
+ tools changed since you reviewed, it refuses and shows the new plan. Builds use the saved commit without the
89
+ project's Genesis and agent folders (`genesis/`, `.genesis/`, `.agents/`,
90
+ `.claude/`, `.codex/`, `.opencode/`), so packages never ship them. Builds
91
+ and **Run checks** run the project's own code the way Vibe64 runs any other
92
+ project command, with a throwaway home folder and none of your sign-ins.
93
+
94
+ While a release runs each of its target cards shows **Publishing 1.4.3…**;
95
+ afterwards a card shows the version people get, **Live · published …** and a
96
+ **Verified** checksum read back from the destination: npm's integrity value,
97
+ or for PyPI and GitHub Releases each file's own sha256 (the value pip and the
98
+ release page show). The Publish page's
99
+ **Checks** line runs the checks on the saved commit at any time and, when they
100
+ fail, shows which check failed with **Show output**.
101
+
102
+ When a build or upload fails, the target card says **Last release failed**
103
+ with the reason; pressing it opens that release in History with the tool's
104
+ own error output (credentials removed) and **Full log**. A release where some
105
+ targets failed shows **Partly published**; fix the cause and **Finish this
106
+ release** retries only the unfinished targets of the same plan (published
107
+ targets are not sent again). If the fix changed the saved work, the button
108
+ reads **Release the new saved work** and starts a new release instead; if the
109
+ plan itself changed (for example a check or setting), **Finish this release**
110
+ opens a new release with a note saying why. Long tool output keeps its start
111
+ and end. Checks that fail without blocking show in amber. Errors appear as a
112
+ short message at the bottom of the page.
113
+
114
+ ### Colleague and publishing
115
+
116
+ Colleague can read the Publish state, suggest and write a version bump into
117
+ the session, read the plan and preflight, start a dry run, read history and
118
+ logs, and **ask** to publish. Asking only shows a banner, **Your Colleague asked
119
+ to publish plan …**, with **Review** and **Dismiss**; **Review** opens the same
120
+ confirmation. Only your **Publish** press publishes. Colleague never sees a
121
+ token, key, passphrase or file path, and cannot add accounts, unlock keys,
122
+ accept a licence or confirm.
123
+
124
+ How publishing works underneath:
125
+
126
+ Package registries Vibe64 releases to:
127
+
128
+ - **npm**: an `npm` package is packed once with `npm pack`; a dry run shows the
129
+ exact files and what changed since the version people install today. Proof
130
+ is the registry's own integrity value. Undo means moving `latest` back to an
131
+ earlier version (npm versions cannot be replaced).
132
+ - **PyPI** (or TestPyPI): a `python-dist` package's sdist and wheel pass
133
+ `twine check` first. Versions use PyPI's spelling, so `1.5.0-rc.1` is
134
+ published as `1.5.0rc1`. Undo means yanking the release on pypi.org, which
135
+ Vibe64 links to; a file name can never be reused.
136
+ - **GitHub Releases**: the built files are attached to the release of the tag
137
+ Vibe64 put on your saved commit, as draft, prerelease or latest. Undo means
138
+ making an earlier release latest again.
139
+ - Re-running a release that already reached a registry is safe: the same
140
+ version with the same files counts as done. The same version with different
141
+ files is refused; choose a new version instead.
142
+ - A project that already versions with Changesets, release-please,
143
+ setuptools-scm or similar keeps that tool; its Packaging says
144
+ `Version from: external` and Vibe64 only reads the version.
145
+
146
+ **Install on my phone** (Android, no store account):
147
+
148
+ - The app's web client is a `web-bundle` package and the phone app a
149
+ `capacitor` package with an id such as `com.example.notes` (permanent once
150
+ people install it), a name, a 1024×1024 PNG icon with no transparency, and
151
+ one `Permission` line with a plain reason per capability (camera,
152
+ microphone, location, notifications, photos, contacts, calendar, bluetooth,
153
+ vibration). Native plugins are ordinary dependencies of the client at the
154
+ exact versions in its `package-lock.json`, on Capacitor 8; Vibe64 builds
155
+ with exactly those and stops if the lockfile disagrees.
156
+ - The build needs Java 21 and the Android SDK (platform 36). Vibe64 shows the
157
+ Android SDK licence; only after **you** accept it does it download the SDK
158
+ into a folder in your home directory. It never accepts the licence for you.
159
+ The first build downloads about 2 GB in all and needs about 2 GB of free
160
+ memory; later builds take a minute or two.
161
+ - The card lists three one-time tasks in order. **Android build tools → Set
162
+ up** shows Google's licence in full; **Accept and download** records your
163
+ acceptance and downloads Java and the SDK into your user cache folder.
164
+ **Install key → Create** makes the app's **install key** in your publishing
165
+ keys. **Recovery kit → Save kit** downloads a kit that includes it. Preflight
166
+ stops a phone release until all three are done.
167
+ - Phones install an update only when it is signed with the same install key: a
168
+ lost key (and no recovery kit) means everyone must uninstall and reinstall.
169
+ On the command line, `vibe64-publish keygen app --out <folder>` creates a key
170
+ as two private files.
171
+ - Every build gets a build number one higher than the last; it is never stored
172
+ in the project. After a release the card shows **Install on phone**: a QR
173
+ code your phone scans on the same Wi-Fi. Opened on an Android phone itself,
174
+ it offers **Download** directly, with **Show a QR code for another phone**. This computer shares only that one
175
+ APK, at an unguessable address, for 10 minutes or until you close the
176
+ dialog. **Download APK** saves it here instead; History offers both for
177
+ earlier releases.
178
+ - Phones that installed this APK must uninstall it before installing the same
179
+ app from Google Play later (a different signing line). Since 30 September
180
+ 2026, phones in Brazil, Indonesia, Singapore and Thailand install apps only
181
+ from developers verified by Google; this goes worldwide in 2027. Preflight
182
+ says so before a release.
183
+
184
+ Colleague can open **Publish** for you and explain these steps. It cannot
185
+ publish, confirm a release or see any credential.