vibe64 0.1.40 → 0.1.41

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 (67) hide show
  1. package/bin/run.js +1841 -1837
  2. package/bin/upgrade-state.js +2693 -2685
  3. package/dist/assets/{GithubBrowserTabs-BoDkGFtY.js → GithubBrowserTabs-YvIe2BdE.js} +1 -1
  4. package/dist/assets/{Vibe64AuthSettingsButton-CmiidAs5.js → Vibe64AuthSettingsButton-DLdfT68V.js} +1 -1
  5. package/dist/assets/{Vibe64DashboardShell-MCzEQCWu.js → Vibe64DashboardShell-DMPz6fIx.js} +1 -1
  6. package/dist/assets/{Vibe64DatabaseWorkspace-DM9V017v.js → Vibe64DatabaseWorkspace-BCEIOlSg.js} +1 -1
  7. package/dist/assets/{Vibe64OutputControls-CU9H0Dur.js → Vibe64OutputControls-DMoqL0VD.js} +1 -1
  8. package/dist/assets/{Vibe64RepositoryWorkspace-DaAChLA8.js → Vibe64RepositoryWorkspace-BdwRwbxp.js} +1 -1
  9. package/dist/assets/{Vibe64SessionFiles-CM2EzXBf.js → Vibe64SessionFiles-ChJWUOqm.js} +1 -1
  10. package/dist/assets/{_sessionId_-DVHd6D5V.js → _sessionId_-Bw0KfJeR.js} +1 -1
  11. package/dist/assets/_slug_-CAmuBm-M.css +1 -0
  12. package/dist/assets/_slug_-q9prK_gX.js +25 -0
  13. package/dist/assets/{access-BbzSuMt5.js → access-C05Nkq6r.js} +1 -1
  14. package/dist/assets/{app-BNh2oZg-.js → app-D1CGY9Xm.js} +1 -1
  15. package/dist/assets/{changes-D8Koqrqg.js → changes-D17XpgGz.js} +1 -1
  16. package/dist/assets/{client-CybfBKCn.js → client-BxGiylrJ.js} +1 -1
  17. package/dist/assets/{client-D6UGamrv.css → client-C8jwAMY9.css} +1 -1
  18. package/dist/assets/{dashboard-DLrmf5ed.js → dashboard-BXXgeQ0Q.js} +1 -1
  19. package/dist/assets/{definitions-DgyQJgn-.js → definitions-SNvFDEFS.js} +1 -1
  20. package/dist/assets/{env-rVQwLtYr.js → env-sXAQqKWk.js} +1 -1
  21. package/dist/assets/{health-B6r9LLrd.js → health-Cr34pf2p.js} +1 -1
  22. package/dist/assets/{history-C6xLWUxL.js → history-N1iRZaab.js} +1 -1
  23. package/dist/assets/{index-BC29JK2e.css → index-B17d4wpZ.css} +1 -1
  24. package/dist/assets/index-Mxalhei8.js +138 -0
  25. package/dist/assets/{integrations-CcrqPXxj.js → integrations-BmwFvHgZ.js} +1 -1
  26. package/dist/assets/{issues-DEjIlMdl.js → issues-BbiG7dCV.js} +1 -1
  27. package/dist/assets/{learning-BP1xvd8w.js → learning-CUCuuoHM.js} +1 -1
  28. package/dist/assets/{publish-CVXolnAG.js → publish-4r_4K5IY.js} +1 -1
  29. package/dist/assets/{publish-CPWnztCc.css → publish-BFTsAMCF.css} +1 -1
  30. package/dist/assets/{pull-requests-DdgzLzY_.js → pull-requests-DY9jg3cE.js} +1 -1
  31. package/dist/assets/{repository-5S0LzRq3.js → repository-DhXdoMP6.js} +1 -1
  32. package/dist/assets/{settings-BKP_eQ3F.js → settings-Cj4u-76p.js} +1 -1
  33. package/dist/assets/{useArchivedVibe64Sessions-D8DWpcSy.js → useArchivedVibe64Sessions-BXNg8oES.js} +1 -1
  34. package/dist/assets/{useVibe64ConversationLog-D-Vkq0sK.js → useVibe64ConversationLog-C1xjhFtS.js} +1 -1
  35. package/dist/assets/{useVibe64DatabaseTools-Dpm53ruL.js → useVibe64DatabaseTools-H6H-YJQX.js} +1 -1
  36. package/dist/assets/{useVibe64SessionData-CGJXj3r7.js → useVibe64SessionData-CnDOFFHb.js} +1 -1
  37. package/dist/assets/{useVibe64SessionSelection-BEqKR412.js → useVibe64SessionSelection-J87nJ9p5.js} +1 -1
  38. package/dist/assets/{vibe64SessionFocus-tv2wz7_H.js → vibe64SessionFocus-DlN8NwcE.js} +1 -1
  39. package/dist/index.html +5 -5
  40. package/docs/colleague-usage/ai-onboarding.md +3 -1
  41. package/docs/colleague-usage/learning-environment.md +39 -25
  42. package/docs/colleague-usage/learning-mode-ui.md +18 -9
  43. package/docs/colleague-usage/learning-practice-projects.md +2 -2
  44. package/docs/colleague-usage/learning-teacher-guide.md +2 -1
  45. package/docs/colleague-usage/learning-with-colleague.md +3 -3
  46. package/docs/colleague-usage/lesson-authoring.md +1 -1
  47. package/docs/colleague-usage/lesson-step-bar.md +38 -24
  48. package/docs/colleague-usage/preview-starting-application.md +10 -1
  49. package/docs/colleague-usage/project-setup.md +2 -2
  50. package/docs/colleague-usage/publishing.md +3 -1
  51. package/docs/colleague-usage/starter-apps.md +2 -2
  52. package/docs/training-content.md +2 -2
  53. package/node_modules/@jskit-ai/assistant-core/package.json +1 -1
  54. package/node_modules/@jskit-ai/assistant-runtime/package.json +1 -1
  55. package/node_modules/@jskit-ai/assistant-voice/package.json +1 -1
  56. package/node_modules/@jskit-ai/connectors-catalog/package.json +1 -1
  57. package/node_modules/@jskit-ai/realtime/package.json +1 -1
  58. package/node_modules/@local/vibe64-genesis/bin/vibe64-genesis-host-context +77 -80
  59. package/node_modules/@local/vibe64-genesis/src/server/agentSpecs.js +6 -6
  60. package/node_modules/@local/vibe64-genesis/src/server/index.js +195 -194
  61. package/node_modules/@local/vibe64-genesis/src/server/promptContext.js +144 -149
  62. package/node_modules/@local/vibe64-terminals/src/server/sessionWorkOperationCommand.js +8 -7
  63. package/package.json +8 -8
  64. package/server.bundle.mjs +14269 -14252
  65. package/dist/assets/_slug_-DsfaE8Vh.js +0 -25
  66. package/dist/assets/_slug_-_qfQqdHb.css +0 -1
  67. package/dist/assets/index-B9P6KjvH.js +0 -138
@@ -4,7 +4,7 @@ The **L** button switches between **Develop** (your own projects) and
4
4
  **Learn** (lessons); see [The Learning environment (L)](learning-environment.md).
5
5
  In Learn mode the app bar turns yellow, and **Courses** (at the right of the
6
6
  lesson step bar, or in the project menu beside **L**) opens the Courses overlay, the catalogue where
7
- lessons are chosen; a lesson itself is read in the page's **Lesson** tab. This
7
+ lessons are chosen; a lesson itself is read in the page's **Lesson** sheet (the **Lesson** toggle). This
8
8
  guide describes the overlay's **Courses** tab. Its **In progress** and
9
9
  **Archived** tabs are described in
10
10
  [Practice projects](learning-practice-projects.md).
@@ -17,7 +17,15 @@ its dots mirror the course's lessons, ticked when complete), a chip saying
17
17
  whether it is **Enabled**, a **Preview course** or **Disabled for new lessons**
18
18
  (plus **Lesson in progress** or **Course complete** when true), the title, its ID and
19
19
  release, topic and lesson counts, "N of M lessons complete" with a progress ring,
20
- and the next lesson.
20
+ and the next lesson. The banner counts the courses and lessons on the cards
21
+ shown (an older release an update replaced is not counted).
22
+
23
+ An installed lesson this version of Vibe64 cannot teach (for example it names a
24
+ screen this Vibe64 no longer has) is left out of its course, and the card and
25
+ course page say "One lesson is not shown because this version of Vibe64 can't
26
+ teach it: <title>". The rest of the course works as usual. **Update** the
27
+ course when Courses offers an update; starting that lesson is refused with the
28
+ same reason.
21
29
 
22
30
  A lesson is complete when every required step has passed in your saved progress
23
31
  (required assessments, for a lesson in the earlier format). Only required
@@ -39,9 +47,10 @@ project. **Back to courses** returns to the list. On a phone the cards stack in
39
47
  one column and the course page scrolls in the same pane.
40
48
 
41
49
  The lesson card above the course cards is headed "Lesson in progress · code"
42
- with the lesson title and, once reported, a ring of required steps passed with
43
- "N of M required steps passed. This lesson is complete." or "Continue the
44
- remaining steps." **Continue lesson** opens that exact attempt. Disabled,
50
+ with the lesson title and, once reported, a ring reading **N of M required done**, and
51
+ "N of M required steps done. This lesson is complete." or "Continue the
52
+ remaining steps." It counts only the required steps, so it can differ from
53
+ the step bar's **Step N of M**, which counts every step. **Continue lesson** opens that exact attempt. Disabled,
45
54
  unavailable, loading and error states are shown on the same page. **Refresh
46
55
  courses** rereads installed courses, progress and the course catalogue; after a
47
56
  step result is saved, Courses refreshes that lesson's progress by itself. If
@@ -67,8 +76,8 @@ lesson: Creating your practice project. This can take a while; the lesson opens
67
76
  by itself when it is ready.** Other start buttons stay disabled until the
68
77
  request settles. If the start fails, the card says **The lesson did not start**
69
78
  with the reason. As soon as the start is
70
- confirmed, Courses closes by itself and the lesson opens in the **Lesson** tab
71
- of its practice project; you do not need **Continue lesson**. A practice project's Workspace setup can
79
+ confirmed, Courses closes by itself and the lesson opens (its **Lesson** toggle on)
80
+ over its practice project; you do not need **Continue lesson**. A practice project's Workspace setup can
72
81
  continue afterwards and the lesson becomes ready when setup succeeds (see
73
82
  [Practice projects](learning-practice-projects.md)). **Starting lessons is
74
83
  unavailable in this installation** appears only when the installation cannot
@@ -96,8 +105,8 @@ in progress, and **L** returns to it. When every required step has passed, the
96
105
  (see [The Learning environment (L)](learning-environment.md)).
97
106
 
98
107
  Starting or continuing a lesson, or **Open** under **In progress**, closes
99
- Courses and opens the lesson in the **Lesson** tab of its practice project; its
100
- **Preview** and **Dashboard** tabs are beside it. Setup repair there is ordinary project work
108
+ Courses and opens the lesson over its practice project, with the **Lesson**
109
+ toggle on beside the **Preview** | **Dash** switch; press it again to hide the lesson. Setup repair there is ordinary project work
101
110
  (ask that session's agent or use Workspace setup recovery); it is not a learner
102
111
  answer or a passed step.
103
112
 
@@ -87,7 +87,7 @@ lesson…** or **Loading archived lessons…** instead of staying blank.
87
87
  practice project's name (or **No practice project**). Without one it says
88
88
  **No lesson in progress. Start one from Courses.** The row has three buttons:
89
89
 
90
- - **Open** closes Courses and opens the lesson in the **Lesson** tab of its
90
+ - **Open** closes Courses and opens the lesson (its **Lesson** toggle on) over its
91
91
  practice project (or, for a lesson without one, of the page with no project
92
92
  selected).
93
93
  - **Restart** turns into **Archive and restart**; press that to archive this
@@ -121,7 +121,7 @@ projects.
121
121
  ## Finishing a lesson
122
122
 
123
123
  When every required step has passed, the lesson's **Lesson finished** screen,
124
- in the page's **Lesson** tab, finishes it: the lesson counts as completed for good, and the attempt is
124
+ in the page's **Lesson** sheet, finishes it: the lesson counts as completed for good, and the attempt is
125
125
  archived as one bundle (its record, practice project and conversation). The
126
126
  screen then offers **Next lesson** and **Back to courses**. **Start lesson** on
127
127
  the course page starts a new attempt with a fresh project, teacher and results; the
@@ -72,7 +72,8 @@ passes a lesson step. When a lesson asks you to find a place, click it yourself.
72
72
 
73
73
  ## Opening your lesson
74
74
 
75
- Colleague can show your current lesson step in the Learn page's **Lesson** pane,
75
+ Colleague can show your current lesson step in the Learn page's **Lesson** pane
76
+ (turning the **Lesson** toggle on),
76
77
  and open the **Courses** catalogue or close it so you can see the app, without
77
78
  ending the lesson. While the lesson is going, the **Step N/M** button in
78
79
  Colleague's header shows the current step in the Lesson pane (on a phone,
@@ -35,7 +35,7 @@ each, and the one you see always follows the mode:
35
35
 
36
36
  In Learn mode, **Courses** (on the lesson step bar, or in the project menu beside **L**) is the catalogue
37
37
  where you choose and start lessons; your current lesson is read on the Learn
38
- page itself, in its **Lesson** tab beside Colleague (see `learning-environment`).
38
+ page itself, in its **Lesson** sheet beside Colleague (the **Lesson** toggle) (see `learning-environment`).
39
39
  You can read lessons yourself without AI. Choose **Teach me** on a lesson step,
40
40
  or ask Colleague about your lesson, and Colleague teaches the current step.
41
41
  **Teach me** opens Colleague beside the step and sends "Teach me this step.";
@@ -51,12 +51,12 @@ passes the step for you:
51
51
  arrive in pages; Colleague reads every page before claiming a step's text is
52
52
  missing.
53
53
  - It points at, or with "show me" opens, the real Vibe64 places the step uses,
54
- replays the step's diagram, can show your current step in the **Lesson** tab,
54
+ replays the step's diagram, can show your current step in the **Lesson** sheet (turning the toggle on),
55
55
  and can open **Courses** or close it so you see the app. Courses keeps its
56
56
  place while closed.
57
57
  - In Learn mode with a lesson in progress, Colleague's header shows a small
58
58
  yellow **Step N/M** button (a check once the step passed). Pressing it shows
59
- that step in the page's **Lesson** tab (see `learning-environment`); on a
59
+ that step in the page's **Lesson** sheet (see `learning-environment`); on a
60
60
  phone Colleague's full-screen chat also minimises so the step is visible, and
61
61
  its avatar button brings Colleague back. It appears on the desktop panel, the
62
62
  phone's full-screen chat and during voice chat. Develop shows no step button.
@@ -189,7 +189,7 @@ own snapshots, and for disabling a release.
189
189
  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
- 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
192
+ and release, and **Resume author trial** opens it in the ordinary lesson reader, the page's **Lesson** sheet. This saved trial has isolated progress; it is not an
193
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.
@@ -1,31 +1,44 @@
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, **Lesson** and **Courses**. The rest of
4
+ step: its position, beats, **Back** and **Next**, 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
- names the lesson and shows **Step N of M** with the step's title and status.
9
- **Previous step** and **Next step** (arrow buttons) move through the steps.
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
- on a phone), opens the Courses overlay to choose another lesson. The bar is
20
- always shown in full; it cannot be collapsed or hidden. On a phone the lesson
21
- name is hidden.
8
+ names the lesson and shows **Step N of M** (this step's number among all the
9
+ lesson's steps) with the step's title and status.
10
+
11
+ **Moving through the lesson.** One labelled pair of buttons, with the same
12
+ names for screen readers and the keyboard:
13
+
14
+ - **Back** goes back one part of this step, or into the previous step from its
15
+ first part. It is greyed out at the very start of the lesson.
16
+ - The forward button says exactly what it does: **Next** while this step has
17
+ more parts, **Next step** on its last part (and on a step without parts),
18
+ and **Finish** on the last step once every required step is done (it shows
19
+ the **Lesson finished** screen). On the last step before that there is no
20
+ forward button. There is no second **Next step** button.
21
+
22
+ On a practice project the **Lesson** toggle is in the header beside **Preview**
23
+ | **Dash** (see [The Lesson pane](learning-environment.md#the-lesson-pane)); on
24
+ Management and other screens outside any project it is on the bar, between
25
+ the forward button and **Courses**. Press it to show the lesson (it turns
26
+ yellow with its switch on); press it again to hide it. On a lesson without a
27
+ practice project the lesson is already the whole page, so there is no toggle.
28
+
29
+ Away from the lesson's practice project (for example on Management), the bar
30
+ also offers **Open practice project**, which goes back to that project's
31
+ editor. **Courses**, at its right end (a book icon on a phone), opens the
32
+ Courses overlay to choose another lesson. The bar is always shown in full; it
33
+ cannot be collapsed or hidden. On a phone the lesson name is hidden.
22
34
 
23
35
  ### Steps with beats
24
36
 
25
37
  Some steps walk you through the real page from the bar itself, one short line
26
38
  (a *beat*) at a time, while the lesson stays where it is. The bar then shows
27
- the lesson name, **N/M** (the step) and a dot per beat (the filled dot is the
28
- current one), then the beat's line:
39
+ the lesson name, **Step N of M** and a dot per beat, the parts of this step
40
+ (the filled dot is the current one; hovering the dots says, for example,
41
+ **This step: part 2 of 4**), then the beat's line:
29
42
 
30
43
  - A *show* line rings the place it names (for example the **Preview** tab or the
31
44
  coding chat) and moves on by itself after a few seconds; a thin line under
@@ -62,12 +75,12 @@ current one), then the beat's line:
62
75
  **Set up your AI**; see `learning-mode-ui`.
63
76
  - On a step you would finish with **Done**, doing every *do* line of it marks
64
77
  the step done by itself.
65
- - **Back** and **Next** (arrows) move one beat, and into the previous or next
66
- step at either end.
78
+ - **Back** and **Next** move one beat; on the step's last beat the forward
79
+ button reads **Next step** and goes into the next step.
67
80
  - After the last beat the bar shows the step's own control: **Done**, **Mark as
68
81
  done**, **Check my work** (an automatic check, or a review; a check that does
69
82
  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**
83
+ step in the Lesson pane, beside a quieter **Next step**. **I'm stuck**
71
84
  (on a *do* line, and after the last beat of a step that **Check my work**
72
85
  decides, until the step passes; also in the Lesson pane beside **Teach me**) opens
73
86
  Colleague and asks it for help with this step (see `learning-with-colleague`).
@@ -92,7 +105,8 @@ why, nothing is recorded, and you can press **Check again**. Colleague never
92
105
  runs a review or passes a step for you.
93
106
 
94
107
  This tab remembers the beat and the pause; another tab or device starts the
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; **Courses** shows only its icon
97
- and **Lesson** its icon and name. A step without beats shows its title
98
- and status as before, and **Show me** when it can point at a place.
108
+ step at its first beat. On a phone the bar has three tidy rows: the position
109
+ with the icon buttons (**Courses**, **Open practice project** and, off a
110
+ project, **Lesson**), then the beat's line and its one button, then **Back**
111
+ at the left and the forward button at the right. A step without beats shows
112
+ its title and status as before, and **Show me** when it can point at a place.
@@ -3,7 +3,7 @@
3
3
  This continues [Previewing a web application](preview.md).
4
4
 
5
5
  In an empty project's **Preview**, choose **Use this starter** on the desired
6
- Basic, Database, or Accounts app. On mobile, open **Show project** first. Import
6
+ starter, such as Basic app, App with no users, but a database, or App with users. On mobile, open **Show project** first. Import
7
7
  adds source to this session; review it and use **Save** to keep it in the project.
8
8
  Setup and running the app are separate operations.
9
9
 
@@ -19,6 +19,15 @@ apply one. After you choose a starter and accept its offer or directly request
19
19
  it, Colleague can use the existing onboarding action and recheck the result.
20
20
  A successful import does not mean dependencies are prepared or Preview is running.
21
21
 
22
+ When a starter needs a resource such as its database, Preview waits for it and
23
+ says so instead of starting. Where the host supplies that resource (hosted
24
+ Vibe64's managed databases), Preview says "Vibe64 is still setting up this
25
+ app's database" until workspace setup finishes; press **Check again** then.
26
+ Where you supply it, Preview names the variables to set, for example "set
27
+ DB_DATABASE in Env (in Dash, under Development)": open **Dash → Env**, choose
28
+ **Development**, add the value (see [Development Env](development-env.md)) and
29
+ press **Check again**.
30
+
22
31
  For recurring **Preview could not load an application resource** errors, enable
23
32
  Preview diagnostics in the affected Studio browser before reproducing: add
24
33
  `vibe64_preview_debug=1` to the page URL, or set
@@ -58,8 +58,8 @@ work. Public applications and non-web projects do not need preview accounts.
58
58
  1. Open the project and create or select its coding session. At **What would you
59
59
  like to build with?**, review the available starter cards, grouped by
60
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**
61
+ (no accounts or database), **JSKIT · App with no users, but a database** (MySQL) and
62
+ **JSKIT · App with users** (sign-up, login and MySQL). Then one **Basic app**
63
63
  each for Django, Rails, Spring Boot, Express and Next.js: a small notes form
64
64
  saved to SQLite (MySQL/MariaDB for Spring Boot), with ready tests. Only the
65
65
  Rails starter has sign-in, with a seeded development account
@@ -42,7 +42,9 @@ afterwards **Unlock** it for 15 minutes when you add accounts or publish, and
42
42
  address, so targets using it keep working with the new token.
43
43
  - **Recovery kit**: **Save kit** (or **Manage**) downloads every key as one file under a second
44
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.
45
+ new computer and says how many came back ("Restored 1 key."). When a key is
46
+ newer than your last kit, the panel reads "Your recovery kit is out of date",
47
+ says when it was last saved, and offers **Save kit**.
46
48
 
47
49
  ### Add a target
48
50
 
@@ -4,9 +4,9 @@ In an empty project's onboarding, starters are grouped by technology. Choose
4
4
  the JSKIT starter that matches the app:
5
5
 
6
6
  - **Basic app**: responsive shell, server/client/browser tests, no database or login.
7
- - **Database app**: the same shell plus MySQL migrations and isolated database
7
+ - **App with no users, but a database**: the same shell plus MySQL migrations and isolated database
8
8
  tests, without accounts.
9
- - **Accounts app**: sign-up, login, private pages and persisted profiles, plus
9
+ - **App with users**: sign-up, login, private pages and persisted profiles, plus
10
10
  account-persistence and browser tests.
11
11
 
12
12
  For another framework, each of Django, Rails, Spring Boot, Express and Next.js
@@ -83,7 +83,7 @@ declare them.
83
83
  A v3 `lesson.json` declares `schemaVersion: 3` and everything v2 has, plus
84
84
  `stage`: `"project"` for a lesson taught in its practice project (it needs its
85
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
86
+ (its Lesson sheet lies over the page while the Lesson toggle is on). Learn mode opens a lesson where its
87
87
  stage says.
88
88
 
89
89
  A step may check a fact: `"check": { "kind": "fact", "fact": "ai-ready" }`,
@@ -200,7 +200,7 @@ One beat per line: `<show|do|check> <target>[ <path>]: <text>`.
200
200
  step's `check.rubric` from `lesson.json`, its single source.
201
201
  - Places: `preview`, `dashboard`, `database-erd`, `database-data`, `files`,
202
202
  `changes`, `git-log`, `session-info`, `architecture`, `learning` (the **L**
203
- button), `lesson` (the step bar's **Lesson** button), `chat` (the coding chat), `colleague`,
203
+ button), `lesson` (the **Lesson** toggle), `chat` (the coding chat), `colleague`,
204
204
  `courses`, `lesson-bar` (the bar itself), `save` and `reload-preview`.
205
205
  `dashboard` and `lesson-bar` can only be shown.
206
206
  - 1–8 beats. Only `lesson`, `lesson-bar`, `courses`, `learning`,
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jskit-ai/assistant-core",
3
- "version": "0.1.239",
3
+ "version": "0.1.240",
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.233",
3
+ "version": "0.1.234",
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.40",
3
+ "version": "0.1.41",
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/connectors-catalog",
3
- "version": "0.1.63",
3
+ "version": "0.1.64",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  "./shared/ai": "./src/shared/ai.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jskit-ai/realtime",
3
- "version": "0.1.243",
3
+ "version": "0.1.244",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  "./server/RealtimeProvider": "./src/server/RealtimeProvider.js",
@@ -988,86 +988,83 @@ Possible answers:
988
988
  start a duplicate or replacement server. If it is unavailable, report that blocker. Describe only rendered browser evide\
989
989
  nce.","When adopting an authenticated app, or when its login blocks Preview inspection, inspect identity support/names w\
990
990
  ith `vibe64-helper preview status`; prefer `vibe64-helper preview browser identity <configured-name>` to requesting pass\
991
- words. If unconfigured, ask which existing accounts (email/login/user ID) represent admin and other required roles, and \
992
- the default. Reuse prior answers; wait for their choices before configuring access. Never infer admin rights from names \
993
- or the Vibe64 viewer.","A web app with login accounts has an application-owned adapter declared in the Outputs `#### Pre\
994
- view identity` block (`vibe64-helper spec outputs` and `vibe64-helper spec preview-identity-command`); when it is missin\
995
- g, set it up from the app framework's own pattern as part of the work instead of merely offering it. Save the named sele\
996
- ctors the person gives or confirms with `vibe64-helper preview identities save` (`vibe64-helper spec preview-identities`\
997
- ); you may propose them from existing app accounts, then verify each with `vibe64-helper preview browser identity <name>\
998
- `. Use existing sessions/permissions, reject missing/disabled accounts, and disable the adapter without Vibe64\u2019s per-run\
999
- enable flag and secret. Do not create users, change roles, reset passwords or weaken production auth for import. Verify\
1000
- the selected account\u2019s actual Preview access; a saved selector is insufficient. If account choices are deferred/decline\
1001
- d, explain access remains unconfigured and continue independent setup work without repeated credential requests. Public/\
1002
- non-web apps need no adapter.","Use `vibe64-helper preview status`, `screenshot`, `logs`, and `browser eval` (Playwright\
1003
- code on stdin) for rendered inspection.","The top Preview toolbar Stop and `vibe64-helper preview stop` stop this sessi\
1004
- on's application and managed browser, not chat or source. Status reports the saved stopped choice. A status read, screen\
1005
- shot, browser inspection, source edit or session reopening is not permission to restart it; use `vibe64-helper preview e\
1006
- nsure --wait` only for a deliberate Start. Scoped browser tests restore the prior stopped choice.","For interactive navi\
1007
- gation, use the proxy URL from `vibe64-helper preview inspect-url` or status `currentPage.url` / `endpoints.browser.url`\
1008
- . Inside browser eval, use `await page.goto(new URL('/your-path', preview.url).href)`. The direct application endpoint u\
1009
- nder diagnostics bypasses Preview identity and is not a browser-navigation URL.","Use the managed preview browser for in\
1010
- teractive browsing and `vibe64-helper playwright` only for an existing configured project suite; report a platform or pr\
1011
- oject-test blocker rather than installing another browser or changing its dependencies.","For browser evidence, batch re\
1012
- lated actions and assertions, return only needed values and inspect relevant locators or regions; screenshot at meaningf\
1013
- ul visual checkpoints or failures, not after every click. Reuse the managed browser when test isolation permits. Preserv\
1014
- e required viewport, identity and security checks; use existing automated cases for repeat verification.","For browser t\
1015
- ests that write or reset data, inspect `vibe64-helper preview targets --json` and the project's `genesis/stack.md` Outpu\
1016
- ts. Run `vibe64-helper playwright --target <declared-test-target> test <suite arguments>` or `vibe64-helper playwright -\
1017
- -target <declared-test-target> npm-run <script>`. Vibe64 starts that web target, waits for readiness, uses its declared \
1018
- application identity, and restores the previous Preview when the command finishes or is cancelled; report restoration fa\
1019
- ilures.","A target name is not proof of test isolation. Before running a destructive suite, the application must verify \
1020
- the server's actual test database and suppress real email, invoices, payments, and other external effects. Keep managed \
1021
- Env unchanged. The test launcher and its preview-identity command must use the same database. Follow the application's d\
1022
- eclared test resources and never invent a database name. Never spoof safety checks by changing only the test runner's en\
1023
- vironment.","If no suitable test target exists, add one through the project's existing Outputs contract and application-\
1024
- owned test scripts within authorized scope, keeping normal Preview as default. Validate the exact disposable database be\
1025
- fore resetting it, prepare fixtures before reporting readiness, and make Playwright use the started target's URL, which \
1026
- Vibe64 supplies as PLAYWRIGHT_BASE_URL, without starting another server. If the required test resources or external-effe\
1027
- ct controls are missing, report that specific blocker. Use `vibe64-helper preview ensure --target <id> --wait --json` on\
1028
- ly to deliberately select an interactive target; it stays selected until changed. If browser startup is slow, measure mi\
1029
- grations, fixtures and server startup before retrying or extending deadlines.","Keep test output small: run relevant fil\
1030
- es/cases, save stdout/stderr to local artifacts and preserve exit status. Report counts, duration, failed cases, actiona\
1031
- ble errors and artifact paths. Read only needed failure excerpts, not full passing/JSON/TAP/request/trace/image output. \
1032
- Retain startup, resource and Preview-restoration errors even if tests pass, and trailing wrapper diagnostics separately \
1033
- from JSON. Do not rerun for output or reread unchanged logs; inspect on new output, changed state or a concrete blocker.",
1034
- "Batch related browser tests in one managed suite (one Preview switch and restore). Suites and live Preview actions are \
1035
- sequential: no browser actions, ensure/restart or target changes during a suite or restoration. Wait on the original exe\
1036
- cution, including background runs, through cleanup/restoration (empty polls: yield_time_ms: 30000 where supported; short\
1037
- er only for interactive input or an immediate check); read-only status/logs stay available. Before live inspection, conf\
1038
- irm `vibe64-helper playwright status` has no active run and `vibe64-helper preview status` is ready on the restored targ\
1039
- et. To stop, read suite status then run `vibe64-helper playwright cancel <run-id>`, which waits for cleanup/restoration;\
1040
- retry it if cleanup needs attention. Never kill individual test/Preview PIDs or change locks. Launcher exit alone does \
1041
- not prove tests stopped. Recheck current status before reporting a busy blocker.","If a managed command reports kernel t\
1042
- ask denials or a resource incident, retain its diagnostic and incident ID when reporting the blocker. Ask the platform o\
1043
- perator to inspect that resource evidence before retrying; do not increase test timeouts or weaken assertions to work ar\
1044
- ound a process/thread limit. A generic browser timeout without resource evidence does not establish a platform cause."]),
1045
- C_=Object.freeze(["Each managed shell command receives current development Env from Vibe64, including declared resource \
1046
- bindings; use them in ordinary commands. Do not build environment injection or copy managed credentials into source. Res\
1047
- ource provisioning and application migrations remain separate preparation steps.","Use `vibe64-helper env status [develo\
1048
- pment|production|all]` to inspect configured key names without revealing values.","Pipe an available value to `vibe64-he\
1049
- lper env set <development|production> <KEY> [--secret]`; never put values in arguments, logs, or repository files. Use e\
1050
- mpty stdin only when the user requested an empty value.","When the person refers to a saved key, account or accounts hub\
1051
- , run `vibe64-helper env saved` (names, descriptions and fields, never values) and link the matching field to the variab\
1052
- le the application reads with `vibe64-helper env link <development|production> <KEY> <saved-id> <field-id>` instead of a\
1053
- sking for the value.","Keep development and production values separate. Never invent credentials, copy a value between s\
1054
- copes without explicit direction, or edit Vibe64 runtime/session storage.","After an Env mutation, report only the affec\
1055
- ted scope and key names, never their values, and claim success only when the command succeeded.","Store a secret the app\
1056
- lication needs generated (such as an application key) by generating it with the framework's own generator and piping it \
1057
- to `vibe64-helper env set <scope> <KEY> --secret`. Never write it into a generated `.env` file: Vibe64 regenerates that \
1058
- file from Env."]);function Zr(t=""){return String(t??"").trim()}function en(t,e){if(!t||typeof t!="object"||Array.isArray(
1059
- t))throw new TypeError(`${e} must be an object.`);return t}function rt(t,e,r){let n=new Set(e),o=Object.keys(t).filter(s=>!n.
1060
- has(s));if(o.length>0)throw new TypeError(`${r} contains unsupported fields: ${o.join(", ")}.`)}function qu(t){if(rt(t,[
1061
- "conversationKind","scope","session","hostGuidance"],"Vibe64 session context"),t.hostGuidance!==void 0&&(typeof t.hostGuidance!=
1062
- "string"||Buffer.byteLength(t.hostGuidance,"utf8")>1024))throw new TypeError("Vibe64 host guidance must be bounded text \
1063
- supplied by the host.");if(!$u.includes(t.conversationKind))throw new TypeError("Vibe64 session context has an unknown c\
1064
- onversationKind.");let e=en(t.session,"Vibe64 session capabilities");rt(e,Gs,"Vibe64 session capabilities");let r=Object.
1065
- fromEntries(Gs.map(n=>{if(typeof e[n]!="boolean")throw new TypeError(`Vibe64 session capability ${n} must be boolean.`);
1066
- return[n,e[n]]}));return{conversationKind:t.conversationKind,scope:"session",...t.hostGuidance?{hostGuidance:t.hostGuidance}:
1067
- {},session:r}}function Bu(t){rt(t,["scope","stableContext"],"Vibe64 ephemeral context");let e=String(t.stableContext||"").
1068
- trim();if(!e||e.length>Uu)throw new TypeError("Vibe64 ephemeral context requires bounded stableContext.");return{scope:"\
1069
- ephemeral",stableContext:e}}function Hu(t){if(t.scope==="session")return qu(t);if(t.scope==="ephemeral")return Bu(t);throw new TypeError(
1070
- "The Vibe64 driver supports session and ephemeral scopes only.")}async function Ws(t={},{readRegistry:e=Fu,workdir:r=""}={}){let n=en(t,"Vibe64 host resolver request");if(rt(n,["data","\
991
+ words. If unconfigured, ask which existing accounts (email/login/user ID) represent admin, other required roles and the \
992
+ default; reuse prior answers and wait for their choices before configuring access. Never infer admin rights from names o\
993
+ r the Vibe64 viewer.","A web app with login accounts has an application-owned adapter in the Outputs `#### Preview ident\
994
+ ity` block (`vibe64-helper spec outputs`, `vibe64-helper spec preview-identity-command`); when it is missing, set it up \
995
+ from the app framework's own pattern as part of the work instead of merely offering it. Save selectors the person gives \
996
+ or confirms (you may propose existing app accounts) with `vibe64-helper preview identities save` (`vibe64-helper spec pr\
997
+ eview-identities`), then verify each with `vibe64-helper preview browser identity <name>`; a saved selector alone proves\
998
+ no access. Use existing sessions/permissions, reject missing/disabled accounts, and disable the adapter without Vibe64\u2019\
999
+ s per-run enable flag and secret. Do not create users, change roles, reset passwords or weaken production auth for impor\
1000
+ t. If choices are deferred/declined, say access stays unconfigured and continue independent setup work without repeated \
1001
+ credential requests. Public/non-web apps need no adapter.","Use `vibe64-helper preview status`, `screenshot`, `logs`, an\
1002
+ d `browser eval` (Playwright code on stdin) for rendered inspection.","The top Preview toolbar Stop and `vibe64-helper p\
1003
+ review stop` stop this session's application and managed browser, not chat or source. Status reports the saved stopped c\
1004
+ hoice. A status read, screenshot, browser inspection, source edit or session reopening is not permission to restart it; \
1005
+ use `vibe64-helper preview ensure --wait` only for a deliberate Start. Scoped browser tests restore the prior stopped ch\
1006
+ oice.","For interactive navigation, use the proxy URL from `vibe64-helper preview inspect-url` or status `currentPage.ur\
1007
+ l` / `endpoints.browser.url`. Inside browser eval, use `await page.goto(new URL('/your-path', preview.url).href)`. The d\
1008
+ irect application endpoint under diagnostics bypasses Preview identity and is not a browser-navigation URL.","Use the ma\
1009
+ naged preview browser for interactive browsing and `vibe64-helper playwright` only for an existing configured project su\
1010
+ ite; report a platform or project-test blocker rather than installing another browser or changing its dependencies.","Fo\
1011
+ r browser evidence, batch related actions and assertions, return only needed values and inspect relevant locators or reg\
1012
+ ions; screenshot at meaningful checkpoints or failures, not after every click. Reuse the managed browser when isolation \
1013
+ permits, keep required viewport, identity and security checks, and use existing automated cases for repeat verification.",
1014
+ "For browser tests that write or reset data, inspect `vibe64-helper preview targets --json` and the project's `genesis/s\
1015
+ tack.md` Outputs. Run `vibe64-helper playwright --target <declared-test-target> test <suite arguments>` (or `npm-run <sc\
1016
+ ript>` in place of `test`). Vibe64 starts that web target, waits for readiness, uses its declared application identity, \
1017
+ and restores the previous Preview when the command finishes or is cancelled; report restoration failures.","A target nam\
1018
+ e is not proof of test isolation. Before running a destructive suite, the application must verify the server's actual te\
1019
+ st database and suppress real email, invoices, payments, and other external effects. Keep managed Env unchanged. The tes\
1020
+ t launcher and its preview-identity command must use the same database. Follow the application's declared test resources\
1021
+ and never invent a database name. Never spoof safety checks by changing only the test runner's environment.","If no sui\
1022
+ table test target exists, add one through the project's existing Outputs contract and application-owned test scripts wit\
1023
+ hin authorized scope; normal Preview stays the default. Validate the exact disposable database before resetting it, prep\
1024
+ are fixtures before reporting readiness, and make Playwright use PLAYWRIGHT_BASE_URL (the started target's URL) without \
1025
+ starting another server. If test resources or external-effect controls are missing, report that blocker. `vibe64-helper \
1026
+ preview ensure --target <id> --wait --json` deliberately selects an interactive target until changed. If browser startup\
1027
+ is slow, measure migrations, fixtures and server startup before retrying or extending deadlines.","Keep test output sma\
1028
+ ll: run relevant files/cases, save stdout/stderr to local artifacts and keep exit status. Report counts, duration, faile\
1029
+ d cases, actionable errors and artifact paths, reading only needed failure excerpts. Retain startup, resource and Previe\
1030
+ w-restoration errors even if tests pass, and trailing wrapper diagnostics separately from JSON. Do not rerun for output \
1031
+ or reread unchanged logs.","Batch related browser tests in one managed suite (one Preview switch and restore). Suites an\
1032
+ d live Preview actions are sequential: no browser actions, ensure/restart or target changes during a suite or restoratio\
1033
+ n. Wait on the original execution, including background runs, through cleanup/restoration (empty polls: yield_time_ms: 3\
1034
+ 0000 where supported; shorter only for interactive input); read-only status/logs stay available. Before live inspection,\
1035
+ confirm `vibe64-helper playwright status` shows no active run and `vibe64-helper preview status` is ready on the restor\
1036
+ ed target. To stop, run `vibe64-helper playwright cancel <run-id>`, which waits for cleanup/restoration; retry if cleanu\
1037
+ p needs attention. Never kill test/Preview PIDs or change locks; launcher exit alone does not prove tests stopped. Reche\
1038
+ ck status before reporting a busy blocker.","If a managed command reports kernel task denials or a resource incident, re\
1039
+ port the blocker with its diagnostic and incident ID and ask the platform operator to inspect that evidence before retry\
1040
+ ing; never raise test timeouts or weaken assertions to work around a process/thread limit. A generic browser timeout wit\
1041
+ hout resource evidence does not establish a platform cause."]),C_=Object.freeze(["Each managed shell command receives cu\
1042
+ rrent development Env from Vibe64, including declared resource bindings; use them in ordinary commands. Do not build env\
1043
+ ironment injection or copy managed credentials into source. Resource provisioning and application migrations remain sepa\
1044
+ rate preparation steps.","Use `vibe64-helper env status [development|production|all]` to inspect configured key names wi\
1045
+ thout revealing values.","Pipe an available value to `vibe64-helper env set <development|production> <KEY> [--secret]`; \
1046
+ never put values in arguments, logs, or repository files. Use empty stdin only when the user requested an empty value.",
1047
+ "When the person refers to a saved key, account or accounts hub, run `vibe64-helper env saved` (names, descriptions and \
1048
+ fields, never values) and link the matching field to the variable the application reads with `vibe64-helper env link <de\
1049
+ velopment|production> <KEY> <saved-id> <field-id>` instead of asking for the value.","Keep development and production va\
1050
+ lues separate. Never invent credentials, copy a value between scopes without explicit direction, or edit Vibe64 runtime/\
1051
+ session storage.","After an Env mutation, report only the affected scope and key names, never their values, and claim su\
1052
+ ccess only when the command succeeded.","Store a secret the application needs generated (such as an application key) by \
1053
+ generating it with the framework's own generator and piping it to `vibe64-helper env set <scope> <KEY> --secret`. Never \
1054
+ write it into a generated `.env` file: Vibe64 regenerates that file from Env."]);function Zr(t=""){return String(t??"").
1055
+ trim()}function en(t,e){if(!t||typeof t!="object"||Array.isArray(t))throw new TypeError(`${e} must be an object.`);return t}
1056
+ function rt(t,e,r){let n=new Set(e),o=Object.keys(t).filter(s=>!n.has(s));if(o.length>0)throw new TypeError(`${r} contai\
1057
+ ns unsupported fields: ${o.join(", ")}.`)}function qu(t){if(rt(t,["conversationKind","scope","session","hostGuidance"],"\
1058
+ Vibe64 session context"),t.hostGuidance!==void 0&&(typeof t.hostGuidance!="string"||Buffer.byteLength(t.hostGuidance,"ut\
1059
+ f8")>1024))throw new TypeError("Vibe64 host guidance must be bounded text supplied by the host.");if(!$u.includes(t.conversationKind))
1060
+ throw new TypeError("Vibe64 session context has an unknown conversationKind.");let e=en(t.session,"Vibe64 session capabi\
1061
+ lities");rt(e,Gs,"Vibe64 session capabilities");let r=Object.fromEntries(Gs.map(n=>{if(typeof e[n]!="boolean")throw new TypeError(
1062
+ `Vibe64 session capability ${n} must be boolean.`);return[n,e[n]]}));return{conversationKind:t.conversationKind,scope:"s\
1063
+ ession",...t.hostGuidance?{hostGuidance:t.hostGuidance}:{},session:r}}function Bu(t){rt(t,["scope","stableContext"],"Vib\
1064
+ e64 ephemeral context");let e=String(t.stableContext||"").trim();if(!e||e.length>Uu)throw new TypeError("Vibe64 ephemera\
1065
+ l context requires bounded stableContext.");return{scope:"ephemeral",stableContext:e}}function Hu(t){if(t.scope==="sessi\
1066
+ on")return qu(t);if(t.scope==="ephemeral")return Bu(t);throw new TypeError("The Vibe64 driver supports session and ephem\
1067
+ eral scopes only.")}async function Ws(t={},{readRegistry:e=Fu,workdir:r=""}={}){let n=en(t,"Vibe64 host resolver request");if(rt(n,["data","\
1071
1068
  providerSessionId","parentSessionIds","scope"],"Vibe64 host resolver request"),!["session","turn"].includes(n.scope))throw new TypeError(
1072
1069
  "The Vibe64 host resolver scope must be session or turn.");if(n.scope==="turn")return null;let o=en(n.data,"Vibe64 host \
1073
1070
  resolver data");rt(o,["registryPath"],"Vibe64 host resolver data");let s=Zr(o.registryPath);if(!Qr.isAbsolute(s))throw new TypeError(