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.
- package/bin/run.js +1942 -1846
- package/bin/server.js +136 -112
- package/bin/upgrade-state.js +5023 -4860
- package/dist/assets/GithubBrowserTabs-BoDkGFtY.js +1 -0
- package/dist/assets/LocalDatabaseServer-BWAvRlUl.css +1 -0
- package/dist/assets/LocalDatabaseServer-CVsGChHh.js +2 -0
- package/dist/assets/StudioErrorNotice-C_jbvp9V.js +1 -0
- package/dist/assets/VAlert-gwuhYlYb.js +1 -0
- package/dist/assets/VAutocomplete-D7Vk5wq_.js +1 -0
- package/dist/assets/VAvatar-DvRBcmqv.js +1 -0
- package/dist/assets/VBtn-BhVEwXLX.js +1 -0
- package/dist/assets/VCard-C3Hx769y.js +1 -0
- package/dist/assets/VCheckbox-DyCGSN0H.js +1 -0
- package/dist/assets/VCheckboxBtn-DCyuVH7W.css +1 -0
- package/dist/assets/VCheckboxBtn-DYcQU2Pn.js +1 -0
- package/dist/assets/VChip-VVdtjfq-.js +1 -0
- package/dist/assets/VDialog-CQDhjRiV.js +1 -0
- package/dist/assets/VDivider-Dq25WsKu.js +1 -0
- package/dist/assets/VExpansionPanels-C1y-myl5.js +1 -0
- package/dist/assets/VMenu-CDcBLYWR.js +1 -0
- package/dist/assets/VOverlay-Cp4rFk6g.js +1 -0
- package/dist/assets/VRadioGroup-CAjNZwF7.js +1 -0
- package/dist/assets/VRow-BskP28jR.js +1 -0
- package/dist/assets/VSelect-D3oLvCcB.js +2 -0
- package/dist/assets/VSheet-DxYEFfnM.js +1 -0
- package/dist/assets/VSkeletonLoader-Cync3lZZ.js +1 -0
- package/dist/assets/VSpacer-CgWOWvBh.js +1 -0
- package/dist/assets/VSwitch-BxGuGypi.js +1 -0
- package/dist/assets/VTextField-C0b_0cSa.js +1 -0
- package/dist/assets/VTextField-F6unyhrS.css +1 -0
- package/dist/assets/VTextarea-B7sZd1JY.js +1 -0
- package/dist/assets/{Vibe64AsyncModuleState-Do9EqX3S.js → Vibe64AsyncModuleState-syuPcpGx.js} +1 -1
- package/dist/assets/Vibe64AuthSettingsButton-CmiidAs5.js +5 -0
- package/dist/assets/{Vibe64AuthSettingsButton-M44SSmZ9.css → Vibe64AuthSettingsButton-D2lltUhi.css} +1 -1
- package/dist/assets/Vibe64CopyCommand-CYiZcy0d.js +1 -0
- package/dist/assets/Vibe64CopyCommand-ClbQLYZi.css +1 -0
- package/dist/assets/{Vibe64DashboardBackButton-BH_8j_VR.js → Vibe64DashboardBackButton-Go_MJuIK.js} +1 -1
- package/dist/assets/{Vibe64DashboardPageHeader-BXQR00HK.js → Vibe64DashboardPageHeader-BMrdRph6.js} +1 -1
- package/dist/assets/Vibe64DashboardPageHeader-CdlzsyKQ.css +1 -0
- package/dist/assets/Vibe64DashboardShell-MCzEQCWu.js +1 -0
- package/dist/assets/{Vibe64DatabaseWorkspace-CEml9BWn.js → Vibe64DatabaseWorkspace-DM9V017v.js} +3 -3
- package/dist/assets/{Vibe64DatabaseWorkspace-DPDMxhAW.css → Vibe64DatabaseWorkspace-DePBDUMy.css} +1 -1
- package/dist/assets/Vibe64OutputControls-CU9H0Dur.js +8 -0
- package/dist/assets/{Vibe64OutputControls-Co5YzwcK.css → Vibe64OutputControls-CeBzZPUT.css} +1 -1
- package/dist/assets/{Vibe64RepositoryWorkspace-Agyt4O-V.css → Vibe64RepositoryWorkspace-Bw9W691N.css} +1 -1
- package/dist/assets/{Vibe64RepositoryWorkspace-obZFXkoG.js → Vibe64RepositoryWorkspace-DaAChLA8.js} +2 -2
- package/dist/assets/{Vibe64SessionFiles-CQzs6fee.js → Vibe64SessionFiles-CM2EzXBf.js} +4 -4
- package/dist/assets/Vibe64SessionFiles-DsPb8hOe.css +1 -0
- package/dist/assets/{Vibe64TemporaryAiFixAction-BiuIE9mC.js → Vibe64TemporaryAiFixAction-CIePbdW8.js} +1 -1
- package/dist/assets/{Vibe64UiStoryboardView-BhKRpL0N.js → Vibe64UiStoryboardView-Bp9STItF.js} +1 -1
- package/dist/assets/{Vibe64UnavailableSessions-Ca5nC7KH.js → Vibe64UnavailableSessions-JBgHzM-j.js} +1 -1
- package/dist/assets/{_sessionId_-CKkGH3Rx.js → _sessionId_-DVHd6D5V.js} +1 -1
- package/dist/assets/{_sessionTool_-1V-z6Pbp.js → _sessionTool_-BV1AwpUx.js} +1 -1
- package/dist/assets/_slug_-DsfaE8Vh.js +25 -0
- package/dist/assets/_slug_-_qfQqdHb.css +1 -0
- package/dist/assets/{access-WlhPvPgy.js → access-BbzSuMt5.js} +1 -1
- package/dist/assets/app-BNh2oZg-.js +1 -0
- package/dist/assets/assistantRouting-DeE8jvtE.js +3 -0
- package/dist/assets/{changes-CHJjrZAc.js → changes-D8Koqrqg.js} +1 -1
- package/dist/assets/client-CybfBKCn.js +2 -0
- package/dist/assets/client-D6UGamrv.css +1 -0
- package/dist/assets/{conversation-B90ERX9h.js → conversation-DZW4-Wck.js} +2 -2
- package/dist/assets/{conversation-vxJGwmtW.css → conversation-TK6EmDk4.css} +1 -1
- package/dist/assets/{createSimpleFunctional-CZTGuNuR.js → createSimpleFunctional-zlXZooQW.js} +1 -1
- package/dist/assets/{dashboard-CuutW8iv.js → dashboard-DLrmf5ed.js} +1 -1
- package/dist/assets/definitions-DgyQJgn-.js +1 -0
- package/dist/assets/dialog-transition-D2vqGksQ.js +1 -0
- package/dist/assets/env-B5V1EC4M.css +1 -0
- package/dist/assets/env-rVQwLtYr.js +1 -0
- package/dist/assets/health-92hh8xXh.css +1 -0
- package/dist/assets/health-B6r9LLrd.js +1 -0
- package/dist/assets/{history-1_NU8azF.js → history-C6xLWUxL.js} +1 -1
- package/dist/assets/incoming-Bdqo8z25.css +1 -0
- package/dist/assets/incoming-CNwZa_yD.js +2 -0
- package/dist/assets/index-B9P6KjvH.js +138 -0
- package/dist/assets/{index-irlMYzLh.css → index-BC29JK2e.css} +1 -1
- package/dist/assets/{integrations-BMzWQQpa.js → integrations-CcrqPXxj.js} +10 -10
- package/dist/assets/integrations-Co8WvCiD.css +1 -0
- package/dist/assets/issues-DEjIlMdl.js +1 -0
- package/dist/assets/layout-B2Ap07aa.js +1 -0
- package/dist/assets/{lazy-NHSwD9FS.js → lazy-BjyT2XvW.js} +1 -1
- package/dist/assets/{learning-Bdi3XRS7.js → learning-BP1xvd8w.js} +1 -1
- package/dist/assets/mdi-Bt90Ns76.js +1 -0
- package/dist/assets/placement-CQy46H3H.js +1 -0
- package/dist/assets/publish-CPWnztCc.css +1 -0
- package/dist/assets/publish-CVXolnAG.js +3 -0
- package/dist/assets/pull-requests-BjwokcU0.css +1 -0
- package/dist/assets/pull-requests-DdgzLzY_.js +1 -0
- package/dist/assets/{repository-BL_2bgzC.js → repository-5S0LzRq3.js} +1 -1
- package/dist/assets/ripple-EFNA8EBu.js +11 -0
- package/dist/assets/rolldown-runtime-DBalRfVu.js +1 -0
- package/dist/assets/{session-BdhKrcX4.js → session-BGpiZThC.js} +1 -1
- package/dist/assets/{settings-1rpuL7eR.js → settings-BKP_eQ3F.js} +1 -1
- package/dist/assets/settings-D8x4KUqV.css +1 -0
- package/dist/assets/shared-DZETtWRH.js +2 -0
- package/dist/assets/studioGateApi-BXHVBVEc.js +1 -0
- package/dist/assets/studioUrls-DpSS-0z1.js +1 -0
- package/dist/assets/useArchivedVibe64Sessions-D8DWpcSy.js +1 -0
- package/dist/assets/useCommand-nWFczmJy.js +1 -0
- package/dist/assets/useEndpointResource-Ds8EDBZ2.js +1 -0
- package/dist/assets/useRealtimeEvent-DrOiU8lJ.js +1 -0
- package/dist/assets/{useUiFeedback-BPBF_0bp.js → useUiFeedback-CMwE4MLs.js} +1 -1
- package/dist/assets/useVibe64ConversationLog-D-Vkq0sK.js +1 -0
- package/dist/assets/{useVibe64DatabaseTools-4o6S8eXq.js → useVibe64DatabaseTools-Dpm53ruL.js} +1 -1
- package/dist/assets/useVibe64ProjectScope-B5ogg6jd.js +1 -0
- package/dist/assets/useVibe64SessionData-CGJXj3r7.js +1 -0
- package/dist/assets/{useVibe64SessionSelection-BzL1y_Vq.js → useVibe64SessionSelection-BEqKR412.js} +1 -1
- package/dist/assets/{useVibe64SystemGraph-B4RmsC9Y.js → useVibe64SystemGraph-DbSfrYF8.js} +1 -1
- package/dist/assets/{useVibe64Terminal-Cg3idMcy.js → useVibe64Terminal-I7Sf6xMW.js} +1 -1
- package/dist/assets/vibe64ProjectScope.local-B06ABkhI.js +1 -0
- package/dist/assets/vibe64SavedEnvValues-B_QE9aAj.js +1 -0
- package/dist/assets/vibe64SessionFocus-CA-sk8Ri.css +1 -0
- package/dist/assets/vibe64SessionFocus-tv2wz7_H.js +1 -0
- package/dist/assets/{vibe64SessionInfo-BuBUdL-e.js → vibe64SessionInfo-B0uItVOK.js} +1 -1
- package/dist/assets/{vibe64SessionToolDefinitions-BJaJH5LR.js → vibe64SessionToolDefinitions-Dsn8WYmO.js} +1 -1
- package/dist/index.html +56 -46
- package/docs/colleague-usage/account-profile-and-appearance.md +1 -1
- package/docs/colleague-usage/{ai-accounts-and-routing.md → ai-accounts.md} +41 -114
- package/docs/colleague-usage/ai-model-setups.md +159 -0
- package/docs/colleague-usage/ai-onboarding.md +94 -21
- package/docs/colleague-usage/ai-personal-use.md +41 -0
- package/docs/colleague-usage/auto-workflow.md +8 -3
- package/docs/colleague-usage/codex-context-recovery.md +2 -1
- package/docs/colleague-usage/coding-agent-goals.md +7 -4
- package/docs/colleague-usage/coding-agents.md +8 -5
- package/docs/colleague-usage/colleague-watches.md +15 -4
- package/docs/colleague-usage/colleague.md +21 -5
- package/docs/colleague-usage/connected-contributions.md +13 -13
- package/docs/colleague-usage/connected-projects.md +2 -2
- package/docs/colleague-usage/conversation-context.md +1 -1
- package/docs/colleague-usage/dashboard-navigation.md +5 -3
- package/docs/colleague-usage/development-env.md +21 -4
- package/docs/colleague-usage/file-interfaces.md +1 -1
- package/docs/colleague-usage/github-work.md +8 -8
- package/docs/colleague-usage/health-checks.md +52 -18
- package/docs/colleague-usage/incoming-changes.md +3 -3
- package/docs/colleague-usage/integrations.md +5 -3
- package/docs/colleague-usage/learning-course-catalogue.md +3 -3
- package/docs/colleague-usage/learning-environment.md +55 -47
- package/docs/colleague-usage/learning-mode-ui.md +13 -10
- package/docs/colleague-usage/learning-practice-projects.md +13 -2
- package/docs/colleague-usage/learning-teacher-guide.md +9 -4
- package/docs/colleague-usage/learning-with-colleague.md +9 -5
- package/docs/colleague-usage/lesson-authoring.md +12 -12
- package/docs/colleague-usage/lesson-step-bar.md +22 -22
- package/docs/colleague-usage/main-chat-approvals.md +150 -0
- package/docs/colleague-usage/preview-browser-checks.md +5 -1
- package/docs/colleague-usage/project-language-tools.md +16 -2
- package/docs/colleague-usage/project-settings.md +1 -1
- package/docs/colleague-usage/project-setup.md +17 -7
- package/docs/colleague-usage/publishing.md +185 -0
- package/docs/colleague-usage/running-vibe64-on-your-computer.md +54 -6
- package/docs/colleague-usage/sessions.md +18 -10
- package/docs/colleague-usage/set-up-linux.md +254 -0
- package/docs/colleague-usage/set-up-macos.md +199 -0
- package/docs/colleague-usage/set-up-windows.md +76 -0
- package/docs/colleague-usage/starter-apps.md +21 -4
- package/docs/colleague-usage/teaching-content.md +2 -2
- package/docs/colleague-usage/team-ai-access.md +108 -0
- package/docs/colleague-usage/temporary-chats.md +9 -7
- package/docs/colleague-usage/workspace-preparation.md +50 -1
- package/docs/templates/learn-topic/README.md +3 -3
- package/docs/templates/learn-topic/training/lessons/TOPIC-01/lesson.json +2 -1
- package/docs/training-content.md +37 -15
- package/node_modules/@jskit-ai/assistant-core/package.json +1 -1
- package/node_modules/@jskit-ai/assistant-runtime/package.json +1 -1
- package/node_modules/@jskit-ai/assistant-voice/package.json +1 -1
- package/node_modules/@jskit-ai/connector-google-calendar/package.json +1 -1
- package/node_modules/@jskit-ai/connectors-catalog/package.json +1 -1
- package/node_modules/@jskit-ai/connectors-catalog/patterns/oauth-connection/PATTERN.md +25 -0
- package/node_modules/@jskit-ai/connectors-core/package.json +1 -1
- package/node_modules/@jskit-ai/http-runtime/package.json +1 -1
- package/node_modules/@jskit-ai/kernel/package.json +1 -1
- package/node_modules/@jskit-ai/realtime/package.json +1 -1
- package/node_modules/@jskit-ai/resource-core/package.json +1 -1
- package/node_modules/@jskit-ai/resource-crud-core/package.json +1 -1
- package/node_modules/@jskit-ai/uploads-runtime/package.json +1 -1
- package/node_modules/@local/vibe64-accounts/package.json +2 -1
- package/node_modules/@local/vibe64-core/package.json +4 -1
- package/node_modules/@local/vibe64-execution/src/host/execHelper.js +82 -81
- package/node_modules/@local/vibe64-genesis/bin/vibe64-genesis-host-context +73 -69
- package/node_modules/@local/vibe64-genesis/package.json +1 -0
- package/node_modules/@local/vibe64-genesis/src/server/agentSpecs.js +118 -68
- package/node_modules/@local/vibe64-genesis/src/server/index.js +501 -415
- package/node_modules/@local/vibe64-genesis/src/server/packaging.js +105 -0
- package/node_modules/@local/vibe64-genesis/src/server/promptContext.js +143 -139
- package/node_modules/@local/vibe64-packaging/package.json +26 -0
- package/node_modules/@local/vibe64-packaging/src/server/packers/capacitor/ShellIcons.java +112 -0
- package/node_modules/@local/vibe64-project/package.json +3 -1
- package/node_modules/@local/vibe64-publishing/package.json +12 -0
- package/node_modules/@local/vibe64-runtime/src/server/codexAppServerProcess.js +7 -7
- package/node_modules/@local/vibe64-runtime/src/shared/assistantRoutingScores.json +25 -22
- package/node_modules/@local/vibe64-terminals/package.json +2 -1
- package/node_modules/@local/vibe64-terminals/src/server/sessionWorkOperationCommand.js +1340 -1300
- package/node_modules/@local/vibe64-training/package.json +2 -1
- package/package.json +19 -15
- package/server.bundle.mjs +42890 -40887
- package/dist/assets/GithubBrowserTabs-C2NO5l8g.js +0 -1
- package/dist/assets/StudioErrorNotice-CSrUw1QV.js +0 -1
- package/dist/assets/VAlert-P256xaE0.js +0 -1
- package/dist/assets/VAutocomplete-BDb95qJX.js +0 -1
- package/dist/assets/VAvatar-DPzqDH4r.js +0 -1
- package/dist/assets/VBtn-B2MBK2DL.js +0 -1
- package/dist/assets/VCard-mXy0k4aS.js +0 -1
- package/dist/assets/VCheckbox-C7A1ZW4D.js +0 -1
- package/dist/assets/VChip-CcI-Oo2J.js +0 -1
- package/dist/assets/VDialog-Bu3EfKb1.js +0 -1
- package/dist/assets/VDivider-BMEqUoAB.js +0 -1
- package/dist/assets/VExpansionPanels-Dgjrop0V.js +0 -1
- package/dist/assets/VMenu-C_x18lwb.js +0 -1
- package/dist/assets/VOverlay-CeMZurIN.js +0 -1
- package/dist/assets/VRadioGroup-CUu2-KIP.js +0 -1
- package/dist/assets/VRow-Cpw7OHQV.js +0 -1
- package/dist/assets/VSelect-DL3HaA5m.js +0 -2
- package/dist/assets/VSheet-DZWsu0kL.js +0 -1
- package/dist/assets/VSkeletonLoader-CttxM1tw.js +0 -1
- package/dist/assets/VSpacer-Dhmsvk4t.js +0 -1
- package/dist/assets/VSwitch-BRHeDJkH.js +0 -1
- package/dist/assets/VTextField-BR2eZeFT.js +0 -1
- package/dist/assets/VTextField-BiatYyd3.css +0 -1
- package/dist/assets/VTextarea-DbqamXJd.js +0 -1
- package/dist/assets/Vibe64AuthSettingsButton-fY4ZiIFF.js +0 -5
- package/dist/assets/Vibe64DashboardPageHeader-Gm1IvlHx.css +0 -1
- package/dist/assets/Vibe64DashboardShell-BSq7uXEW.js +0 -1
- package/dist/assets/Vibe64OutputControls-_zhGX9ne.js +0 -8
- package/dist/assets/Vibe64SessionFiles-Bl8wJ5Sk.css +0 -1
- package/dist/assets/_slug_-BclonbST.js +0 -24
- package/dist/assets/_slug_-CZ1bxO9C.css +0 -1
- package/dist/assets/app-BNP_n_Tt.js +0 -1
- package/dist/assets/assistantRouting-D4XpXcEf.js +0 -3
- package/dist/assets/client-BWV84wi2.js +0 -2
- package/dist/assets/client-DGrP-2AJ.css +0 -1
- package/dist/assets/definitions-BrMvu6yV.js +0 -1
- package/dist/assets/env-BzRtyO0w.css +0 -1
- package/dist/assets/env-D3KQGvRe.js +0 -1
- package/dist/assets/health-BJvooRnJ.css +0 -1
- package/dist/assets/health-BhoO1d4h.js +0 -1
- package/dist/assets/incoming-DWDrmxyH.css +0 -1
- package/dist/assets/incoming-DzADFGqp.js +0 -2
- package/dist/assets/index-dNxr4Lg9.js +0 -138
- package/dist/assets/integrations-Cq1x-Di9.css +0 -1
- package/dist/assets/issues-Bywux4s7.js +0 -1
- package/dist/assets/mdi-CG9pWOSj.js +0 -1
- package/dist/assets/placement-BF-zIEhA.js +0 -1
- package/dist/assets/pull-requests-CdbhyFOv.css +0 -1
- package/dist/assets/pull-requests-ncmKT3sS.js +0 -1
- package/dist/assets/ripple-BVltMmyV.js +0 -11
- package/dist/assets/settings-BopLnpB0.css +0 -1
- package/dist/assets/shared-DpMvYJO3.js +0 -2
- package/dist/assets/studioGateApi-DcCqiD9V.js +0 -1
- package/dist/assets/studioUrls-DmMMIScP.js +0 -1
- package/dist/assets/useArchivedVibe64Sessions-_LB2XxEa.js +0 -1
- package/dist/assets/useCommand-Bqxb-naz.js +0 -1
- package/dist/assets/useEndpointResource-DWoQ2keu.js +0 -1
- package/dist/assets/useRealtimeEvent-Bwapstla.js +0 -1
- package/dist/assets/useVibe64ConversationLog-BqUI0S5n.js +0 -1
- package/dist/assets/useVibe64Learning-DyqXkpLw.js +0 -1
- package/dist/assets/useVibe64ProjectScope-Bp1ImZlz.js +0 -1
- package/dist/assets/useVibe64SessionData-B686lToN.js +0 -1
- package/dist/assets/vibe64SessionFocus-CqZNTvYF.js +0 -1
- package/dist/assets/vibe64SessionFocus-OJ2toBd9.css +0 -1
|
@@ -17,8 +17,8 @@ opt/vibe64/runtime-packs/python/bin","/opt/vibe64/runtime-packs/ruby/bin","/opt/
|
|
|
17
17
|
4/runtime-packs/java/bin","/opt/vibe64/runtime-packs/kotlin/bin","/opt/vibe64/runtime-packs/csharp/bin","/opt/vibe64/run\
|
|
18
18
|
time-packs/rust/bin","/opt/vibe64/runtime-packs/mariadb/bin","/opt/vibe64/runtime-packs/postgresql/bin","/opt/vibe64/run\
|
|
19
19
|
time-packs/sqlite/bin","/opt/vibe64/runtime-packs/playwright/bin","/opt/vibe64/runtime-packs/guard-bin","/usr/local/sbin",
|
|
20
|
-
"/usr/local/bin","/usr/sbin","/usr/bin","/sbin","/bin"].join(":"),
|
|
21
|
-
64d_",
|
|
20
|
+
"/usr/local/bin","/usr/sbin","/usr/bin","/sbin","/bin"].join(":"),lt=/^[a-z][a-z0-9_-]{0,61}[a-z0-9]$/u,j="vibe64",re="v\
|
|
21
|
+
64d_",mt="/var/lib/vibe64",dt=new Set(["root"]),pt=/^[a-f0-9]{8}-[a-f0-9]{4}-[1-8][a-f0-9]{3}-[89ab][a-f0-9]{3}-[a-f0-9]{12}$/iu,
|
|
22
22
|
ft=new Set(["assistant","browser","control","job","preview","service","terminal"]),wt=new Set(["capture","detached","pty"]),
|
|
23
23
|
F=64*1024*1024,$e=1024*1024*1024*1024,yt=256*1024*1024,we=1024*1024*1024*1024,de=8,pe=8192,gt=15e3;import.meta.main&&ht().
|
|
24
24
|
catch(e=>{w.stderr.write(`${String(e?.message||e)}
|
|
@@ -29,8 +29,8 @@ Ht(e);return}if(t==="managed-service"){Kt(e);return}if(t==="managed-execution"){
|
|
|
29
29
|
if(t==="create-system-user"||t==="enable-system-user"){Wt(t,e,r);return}Se(r);let n=String(e.command||"").trim();if(!je.
|
|
30
30
|
has(n))throw new Error("Vibe64 exec helper rejected an unknown command.");let o=X(r);ne("uid",e.uid,o.uid),ne("gid",e.gid,
|
|
31
31
|
o.gid);let i=q();Ke(i,r),Ue(o.username,j);let s=Fe(e.cwd||"",i.username,{operation:t,targetUser:o}),a=be(e.env||{},o,i.username,
|
|
32
|
-
t),c=Array.isArray(e.args)?e.args.map(
|
|
33
|
-
w.umask(7);let p=Et(o,n,c,{cwd:s,env:a,...
|
|
32
|
+
t),c=Array.isArray(e.args)?e.args.map(m=>String(m)):[],l=e.inputBase64?Buffer.from(String(e.inputBase64),"base64"):void 0;
|
|
33
|
+
w.umask(7);let p=Et(o,n,c,{cwd:s,env:a,...l===void 0?{stdio:"inherit"}:{input:l,stdio:["pipe","inherit","inherit"]}});if(p.
|
|
34
34
|
error)throw p.error;w.exit(typeof p.status=="number"?p.status:1)}function Et(e,t,r,n){return I("/usr/sbin/runuser",["-u",
|
|
35
35
|
e.username,"--","/usr/bin/env","--",`PATH=${n.env.PATH}`,t,...r],{...n,env:{...n.env,PATH:ie}})}function St(e={},t=""){let r=q();
|
|
36
36
|
vt(t,r),ae(j);let n=String(e.action||"").trim();if(n.startsWith("workflow-")){let O=Ot(e,r);w.stdout.write(`${JSON.stringify(
|
|
@@ -39,11 +39,11 @@ O)}
|
|
|
39
39
|
i,o,r);return}if(n!=="start")throw new Error("Vibe64 exec helper rejected an unknown managed execution action.");let s=It(
|
|
40
40
|
e.mode),a=Tt(e.kind),c=String(e.lifecycle||"").trim();if(c!==(s==="capture"?"finite":s==="pty"?"interactive":"service"))
|
|
41
41
|
throw new Error("Vibe64 exec helper rejected a managed execution lifecycle mismatch.");let p=Re(e.controllerLeaseName,c),
|
|
42
|
-
|
|
42
|
+
m=Nt(e,r),d=String(e.commandOperation||"").trim(),f=Fe(e.cwd||"",r.username,{operation:d,targetUser:m}),g=String(e.command||
|
|
43
43
|
"").trim();if(!g||/[\r\n]/u.test(g))throw new Error("Vibe64 exec helper rejected an invalid managed execution command.");
|
|
44
|
-
if(
|
|
45
|
-
managed command.");let x=Array.isArray(e.args)?e.args.map(O=>String(O)):[],M=be(e.env||{},
|
|
46
|
-
if(s!=="capture"||
|
|
44
|
+
if(m.username!==r.username&&!je.has(u.basename(g)))throw new Error("Vibe64 exec helper rejected an unsupported real-user\
|
|
45
|
+
managed command.");let x=Array.isArray(e.args)?e.args.map(O=>String(O)):[],M=be(e.env||{},m,r.username,d),y="";if(e.releaseEnvironmentFile){
|
|
46
|
+
if(s!=="capture"||m.username!==r.username)throw new Error("Release environment requires finite owner execution.");y=ee(e.
|
|
47
47
|
releaseEnvironmentFile,r,"environmentFile");let O=fe(y),B=u.join(u.dirname(u.dirname(y)),"workspace");if(u.basename(y)!==
|
|
48
48
|
"environment"||u.basename(u.dirname(y))!=="service"||!O.isFile()||O.uid!==r.uid||(O.mode&63)!==0||te(y)!==y||te(f)!==f||
|
|
49
49
|
f!==B&&C(B,f).length===0)throw new Error("Release environment must belong to the selected private release.")}let D=U(e.memoryMaxBytes,
|
|
@@ -52,12 +52,12 @@ workTasksMax,de,pe,"work-slice task limit");if(D>H||V>v)throw new Error("Vibe64
|
|
|
52
52
|
above its work-slice limit.");let k=he(r);if(e.workflow){let O=Ce(e.workflow,r),B=P(O);if(B.activeState!=="active"||!B.controlGroup||
|
|
53
53
|
B.finishedAt)throw new Error("Vibe64 exec helper rejected an execution without its active workflow group.");if(D>B.memoryMaxBytes||
|
|
54
54
|
V>B.tasksMax)throw new Error("Vibe64 exec helper rejected an execution limit above its workflow limit.");k=O.unitName}else
|
|
55
|
-
Mt(r,{memoryMaxBytes:H,tasksMax:v});jt(r);let J=Ee(r,o),Z=u.join(J,"command.json");_e(J,{mode:448,recursive:!0}),xe(J,
|
|
56
|
-
uid,
|
|
55
|
+
Mt(r,{memoryMaxBytes:H,tasksMax:v});jt(r);let J=Ee(r,o),Z=u.join(J,"command.json");_e(J,{mode:448,recursive:!0}),xe(J,m.
|
|
56
|
+
uid,m.gid),oe(Z,`${JSON.stringify({args:x,command:g,controllerLeaseName:p,cwd:f,env:M,inputBase64:String(e.inputBase64||
|
|
57
57
|
""),inputPresent:e.inputPresent===!0,...y?{releaseEnvironment:!0}:{},executionId:o,schema:"vibe64.managed-execution.comm\
|
|
58
58
|
and",schemaVersion:1})}
|
|
59
|
-
`,{flag:"wx",mode:384}),Je(Z,384),xe(Z,
|
|
60
|
-
ype=exec",`--slice=${k}`,`--property=Description=Vibe64 ${a} execution`,`--property=User=${
|
|
59
|
+
`,{flag:"wx",mode:384}),Je(Z,384),xe(Z,m.uid,m.gid);let Xe=u.resolve(w.argv[1]),qe=["--quiet",`--unit=${i}`,"--service-t\
|
|
60
|
+
ype=exec",`--slice=${k}`,`--property=Description=Vibe64 ${a} execution`,`--property=User=${m.username}`,`--property=Grou\
|
|
61
61
|
p=${j}`,"--property=SupplementaryGroups=nix-users","--property=UMask=0007",`--property=WorkingDirectory=${f}`,...y?[`--p\
|
|
62
62
|
roperty=EnvironmentFile=${y}`]:[],"--property=KillMode=control-group","--property=ExitType=cgroup","--property=OOMPolicy\
|
|
63
63
|
=stop","--property=MemoryAccounting=yes","--property=IOAccounting=yes","--property=TasksAccounting=yes",`--property=Memo\
|
|
@@ -69,15 +69,15 @@ length!==1)throw new Error("Vibe64 exec helper rejected an unsafe managed execut
|
|
|
69
69
|
let t=u.resolve(String(e||"")),r=h(t,"utf8");G(t);let n=JSON.parse(r);if(n?.schema!=="vibe64.managed-execution.command"||
|
|
70
70
|
n?.schemaVersion!==1)throw new Error("Vibe64 managed execution runner rejected an invalid payload.");let o=String(n.command||
|
|
71
71
|
"").trim();if(!o||/[\r\n]/u.test(o))throw new Error("Vibe64 managed execution runner rejected an invalid command.");let i=Re(
|
|
72
|
-
n.controllerLeaseName,n.controllerLeaseName?"service":""),s=i?await xt(i):null;w.umask(7);let a=null,c=null,
|
|
73
|
-
|
|
72
|
+
n.controllerLeaseName,n.controllerLeaseName?"service":""),s=i?await xt(i):null;w.umask(7);let a=null,c=null,l=!1,p=()=>{
|
|
73
|
+
l=!0,a&&c===null&&(c=Me(a))};s?.once("close",p);let m=new Date().toISOString();try{a=Ye(o,Array.isArray(n.args)?n.args.map(
|
|
74
74
|
String):[],{cwd:String(n.cwd||"/"),detached:!!s,env:n.releaseEnvironment===!0?be({...w.env,...n.env},{username:n.env.USER,
|
|
75
75
|
home:n.env.HOME},n.env.USER):n.env&&typeof n.env=="object"&&!Array.isArray(n.env)?n.env:{},stdio:n.inputPresent===!0?["p\
|
|
76
76
|
ipe","inherit","inherit"]:"inherit"}),n.inputPresent===!0&&a.stdin.end(Buffer.from(String(n.inputBase64||""),"base64")),
|
|
77
|
-
|
|
78
|
-
a.once("close",(y,D)=>g({signal:D,status:y,exitObservedAt:M}))}),f=typeof
|
|
79
|
-
{...Dt(),executionId:W(n.executionId),startedAt:
|
|
80
|
-
execMainStatus:
|
|
77
|
+
l&&(c=Me(a));let d=await new Promise((g,x)=>{let M="";a.once("exit",()=>{M=new Date().toISOString()}),a.once("error",x),
|
|
78
|
+
a.once("close",(y,D)=>g({signal:D,status:y,exitObservedAt:M}))}),f=typeof d.status=="number"?d.status:1;Ct(u.dirname(t),
|
|
79
|
+
{...Dt(),executionId:W(n.executionId),startedAt:m,exitObservedAt:d.exitObservedAt,execMainCode:d.signal?"killed":"exited",
|
|
80
|
+
execMainStatus:d.signal||String(f),result:d.signal?"signal":f===0?"success":"exit-code",signal:String(d.signal||"")}),w.
|
|
81
81
|
exitCode=f}finally{c!==null&&clearTimeout(c),s?.off("close",p),s?.destroy()}}function Re(e="",t=""){let r=String(e||"");
|
|
82
82
|
if(t!=="service"){if(r)throw new Error("Vibe64 exec helper rejected a controller lease on a finite execution.");return""}
|
|
83
83
|
if(!/^\0vibe64-resource-controller-[a-z][a-z0-9-]{0,62}$/u.test(r))throw new Error("Vibe64 exec helper rejected an inval\
|
|
@@ -113,7 +113,7 @@ r.MemoryMax),tasksMax:E(r.TasksMax),...ge(n?u.join("/sys/fs/cgroup",n):"")};t.st
|
|
|
113
113
|
"string"&&/^[0-9]+$/u.test(e.trim())&&Number.isSafeInteger(Number(e))?Number(e):null}function ge(e=""){function t(a){if(!e)
|
|
114
114
|
return"";try{return h(u.join(e,a),"utf8")}catch(c){if(c.code==="ENOENT"||c.code==="ENODEV")return"";throw c}}function r(a){
|
|
115
115
|
return Object.fromEntries(t(a).trim().split(`
|
|
116
|
-
`).map(c=>{let[
|
|
116
|
+
`).map(c=>{let[l,p]=c.trim().split(/\s+/u);return[l,E(p)]}))}let n=r("memory.events"),o=r("memory.stat"),i=r("cgroup.eve\
|
|
117
117
|
nts"),s=t("memory.pressure");return{sampledAt:new Date().toISOString(),sampledMonotonicMs:Number(w.hrtime.bigint()/1000000n),
|
|
118
118
|
scopeEmpty:i.populated===0?!0:i.populated===1?!1:null,memoryCurrentBytes:E(t("memory.current")),memoryPeakBytes:E(t("mem\
|
|
119
119
|
ory.peak")),memorySwapCurrentBytes:E(t("memory.swap.current")),memoryAnonBytes:o.anon??null,memoryFileBytes:o.file??null,
|
|
@@ -137,35 +137,35 @@ empty",...o};At(r,{...o,finishedAt:new Date().toISOString()})}let i=A("systemctl
|
|
|
137
137
|
"inactive"||s.controlGroup||s.scopeEmpty!==!0)throw new Error(String(i.stderr||"Managed workflow group did not stop.").trim());
|
|
138
138
|
return{ok:!0,...s}}throw new Error("Vibe64 exec helper rejected an unknown workflow action.")}function ue(e,t,r,n){let o=Object.
|
|
139
139
|
fromEntries(S("systemctl",["show",e,"--no-pager","--property=ActiveState,ControlGroup,MemoryMax"]).split(`
|
|
140
|
-
`).map(c=>{let
|
|
140
|
+
`).map(c=>{let l=c.indexOf("=");return[c.slice(0,l),c.slice(l+1)]}));if(o.ActiveState!=="active"||o.ControlGroup!==t)throw new Error(
|
|
141
141
|
"Memory growth requires the same active, owned accounting group.");let i=E(h(u.join("/sys/fs/cgroup",t,"memory.max"),"ut\
|
|
142
142
|
f8")),s=E(o.MemoryMax);if(s===null||i!==Math.floor(s/r)*r)throw new Error("The effective memory limit could not be verif\
|
|
143
143
|
ied.");let a=h(u.join("/sys/fs/cgroup",t,"memory.high"),"utf8").trim();if(a!=="max"&&(E(a)===null||n>Number(a)))throw Object.
|
|
144
144
|
assign(new Error("Memory growth is blocked by the target's memory.high limit."),{limitingGroup:{controlGroup:t,limit:"me\
|
|
145
145
|
mory.high",maximumBytes:E(a),requestedBytes:n??null}});return{unitName:e,controlGroup:t,memoryMaxBytes:s,effectiveMemoryMaxBytes:i,
|
|
146
|
-
memoryHighBytes:a==="max"?null:E(a)}}function
|
|
146
|
+
memoryHighBytes:a==="max"?null:E(a)}}function le(e,t){let r=[];for(let n=u.posix.dirname(e);n!=="/";n=u.posix.dirname(n)){
|
|
147
147
|
let o={controlGroup:n};for(let[i,s]of[["memory.max","memoryMaxBytes"],["memory.high","memoryHighBytes"]]){let a=h(u.join(
|
|
148
148
|
"/sys/fs/cgroup",n,i),"utf8").trim(),c=a==="max"?null:E(a);if(a!=="max"&&(c===null||t>c))throw Object.assign(new Error(`\
|
|
149
149
|
Memory growth is blocked by an ancestor ${i} limit.`),{limitingGroup:{controlGroup:n,limit:i,maximumBytes:c,requestedBytes:t}});
|
|
150
|
-
o[s]=c}r.push(o)}return r}function _t(e,t,r){let n=e.action==="workflow-limits",o=!1,i=[],s=[],a=[],c=[],
|
|
150
|
+
o[s]=c}r.push(o)}return r}function _t(e,t,r){let n=e.action==="workflow-limits",o=!1,i=[],s=[],a=[],c=[],l=null;try{let p=P(
|
|
151
151
|
t);if(p.activeState!=="active"||!p.controlGroup||p.finishedAt)throw new Error("Memory growth requires an active workflow\
|
|
152
|
-
.");let
|
|
153
|
-
"Memory growth requires a bounded list of owned executions.");if(
|
|
152
|
+
.");let m=U(e.memoryMaxBytes,F,we,"workflow memory limit");if(!Array.isArray(e.executions)||e.executions.length>128)throw new Error(
|
|
153
|
+
"Memory growth requires a bounded list of owned executions.");if(l=E(S("getconf",["PAGESIZE"])),!l||l>F)throw new Error(
|
|
154
154
|
"The kernel memory limit granularity is unavailable.");a=[{unitName:t.unitName,controlGroup:p.controlGroup,memoryMaxBytes:Math.
|
|
155
|
-
floor(
|
|
156
|
-
unitName===f))throw new Error("Duplicate memory growth execution.");let g=U(
|
|
157
|
-
t");if(g>
|
|
158
|
-
controlGroup}/${f}`,memoryMaxBytes:Math.floor(g/
|
|
159
|
-
|
|
160
|
-
p.controlGroup)};for(let[
|
|
161
|
-
throw new Error("Memory growth cannot lower a live limit or apply to stale limits.");c=
|
|
162
|
-
for(let[
|
|
163
|
-
`MemoryMax=${f.memoryMaxBytes}`]));if(s=a.map(
|
|
164
|
-
memoryMaxBytes),!s.every((
|
|
165
|
-
match the requested limits.");return{ok:!0,id:t.id,changeState:o?"applied":"unchanged",pageSizeBytes:
|
|
166
|
-
ancestors:c}}catch(p){let
|
|
167
|
-
|
|
168
|
-
id,code:"workflow_memory_growth_failed",changeState:
|
|
155
|
+
floor(m/l)*l,expectedMemoryMaxBytes:e.expectedMemoryMaxBytes}];for(let d of e.executions){let f=De(d?.id,r);if(a.some(x=>x.
|
|
156
|
+
unitName===f))throw new Error("Duplicate memory growth execution.");let g=U(d.memoryMaxBytes,F,$e,"execution memory limi\
|
|
157
|
+
t");if(g>m)throw new Error("Execution memory growth exceeds its workflow allowance.");a.push({unitName:f,controlGroup:`${p.
|
|
158
|
+
controlGroup}/${f}`,memoryMaxBytes:Math.floor(g/l)*l,expectedMemoryMaxBytes:d.expectedMemoryMaxBytes})}if(i=a.map(d=>ue(
|
|
159
|
+
d.unitName,d.controlGroup,l,n?void 0:d.memoryMaxBytes)),n)return{ok:!0,id:t.id,pageSizeBytes:l,before:i,after:i,ancestors:le(
|
|
160
|
+
p.controlGroup)};for(let[d,f]of a.entries())if(f.expectedMemoryMaxBytes!==i[d].memoryMaxBytes||f.memoryMaxBytes<i[d].effectiveMemoryMaxBytes)
|
|
161
|
+
throw new Error("Memory growth cannot lower a live limit or apply to stale limits.");c=le(p.controlGroup,a[0].memoryMaxBytes);
|
|
162
|
+
for(let[d,f]of a.entries())i[d].memoryMaxBytes!==f.memoryMaxBytes&&(o=!0,S("systemctl",["set-property","--runtime",f.unitName,
|
|
163
|
+
`MemoryMax=${f.memoryMaxBytes}`]));if(s=a.map(d=>ue(d.unitName,d.controlGroup,l,d.memoryMaxBytes)),c=le(p.controlGroup,a[0].
|
|
164
|
+
memoryMaxBytes),!s.every((d,f)=>d.memoryMaxBytes===a[f].memoryMaxBytes))throw new Error("Memory growth readback did not \
|
|
165
|
+
match the requested limits.");return{ok:!0,id:t.id,changeState:o?"applied":"unchanged",pageSizeBytes:l,before:i,after:s,
|
|
166
|
+
ancestors:c}}catch(p){let m="unchanged";return o&&(s=a.map(d=>{try{return ue(d.unitName,d.controlGroup,l)}catch{return null}}),
|
|
167
|
+
m=s.some(d=>d===null)?"unknown":s.every((d,f)=>d.memoryMaxBytes===i[f].memoryMaxBytes)?"unchanged":"partial"),{ok:!1,id:t.
|
|
168
|
+
id,code:"workflow_memory_growth_failed",changeState:m,error:String(p?.message||p),limitingGroup:p?.limitingGroup??null,pageSizeBytes:l,
|
|
169
169
|
before:i,after:s,ancestors:c}}}function Nt(e={},t={}){let r=N(e.username||t.username),n=X(r);return ne("uid",e.uid,n.uid),
|
|
170
170
|
ne("gid",e.gid,n.gid),n.username!==t.username&&(Se(n.username),Ke(t,n.username)),Ue(n.username,j),n}function W(e=""){let t=String(
|
|
171
171
|
e||"").trim();if(!pt.test(t))throw new Error("Vibe64 exec helper rejected an invalid managed execution id.");return t.toLowerCase()}
|
|
@@ -201,51 +201,51 @@ pager","--timestamp=us+utc","--property=LoadState,ActiveState,SubState,Result,Ex
|
|
|
201
201
|
imestamp,ExecMainExitTimestamp,MainPID,ControlGroup,MemoryCurrent,MemoryPeak,MemorySwapCurrent,TasksCurrent,TasksMax,CPU\
|
|
202
202
|
UsageNSec,IOReadBytes,IOWriteBytes"]),s={};for(let M of String(i.stdout||"").split(/\r?\n/u)){let y=M.indexOf("=");y>0&&
|
|
203
203
|
(s[M.slice(0,y)]=M.slice(y+1))}s.LoadState==="not-found"&&(s={LoadState:"not-found"});let a=String(s.ControlGroup||"").trim(),
|
|
204
|
-
c=a?u.join("/sys/fs/cgroup",a.replace(/^\/+/,"")):"",
|
|
205
|
-
""),f=Number.isFinite(
|
|
206
|
-
g)&&g>0&&g<=Date.now()?new Date(g).toISOString():"";return{resourceCounters:
|
|
207
|
-
(
|
|
208
|
-
ExecMainCode||
|
|
209
|
-
f:"",ioReadBytes:R(s.IOReadBytes,
|
|
210
|
-
s.LoadState!=="not-found"?s.LoadState:
|
|
211
|
-
s.MemoryCurrent,
|
|
212
|
-
oomKillCount:R(
|
|
213
|
-
""),scopeEmpty:p,startedAt:s.ExecMainStartTimestamp||
|
|
214
|
-
s.TasksCurrent,
|
|
204
|
+
c=a?u.join("/sys/fs/cgroup",a.replace(/^\/+/,"")):"",l=ge(c),p=c&&T(c)?l.scopeEmpty:!0,m=t?o(r,t):{},d=Date.parse(m.exitObservedAt||
|
|
205
|
+
""),f=Number.isFinite(d)?"runner":"systemd",g=Number.isFinite(d)?d:Date.parse(s.ExecMainExitTimestamp||""),x=Number.isFinite(
|
|
206
|
+
g)&&g>0&&g<=Date.now()?new Date(g).toISOString():"";return{resourceCounters:m.resourceCounters||l,activeState:String(s.ActiveState||
|
|
207
|
+
(m.executionId?"inactive":"unknown")),controlGroup:a,cpuUsageNSec:R(s.CPUUsageNSec,m.cpuUsageNSec),execMainCode:String(s.
|
|
208
|
+
ExecMainCode||m.execMainCode||""),execMainStatus:String(s.ExecMainStatus||m.execMainStatus||""),exitObservedAt:x,exitTimeSource:x?
|
|
209
|
+
f:"",ioReadBytes:R(s.IOReadBytes,m.ioReadBytes),ioWriteBytes:R(s.IOWriteBytes,m.ioWriteBytes),loadState:String(s.LoadState&&
|
|
210
|
+
s.LoadState!=="not-found"?s.LoadState:m.executionId?"recorded":"not-found"),mainPid:String(s.MainPID||"0"),memoryCurrent:R(
|
|
211
|
+
s.MemoryCurrent,m.memoryCurrent),memoryPeak:R(s.MemoryPeak,m.memoryPeak),memorySwapCurrent:R(s.MemorySwapCurrent,m.memorySwapCurrent),
|
|
212
|
+
oomKillCount:R(m.oomKillCount),taskLimit:m.taskLimit||Be(c),result:String(s.Result||m.result||""),signal:String(m.signal||
|
|
213
|
+
""),scopeEmpty:p,startedAt:s.ExecMainStartTimestamp||m.startedAt||"",subState:String(s.SubState||"unknown"),tasksCurrent:R(
|
|
214
|
+
s.TasksCurrent,m.tasksCurrent),tasksPeak:R(m.tasksPeak),tasksMax:String(s.TasksMax||"0"),unitName:e}}function R(...e){return String(
|
|
215
215
|
e.reduce((t,r)=>{let n=Number(r);return Number.isFinite(n)&&n>t?n:t},0))}function Pt(e="",t="",r={}){let n=K(e,t,r),o=null,
|
|
216
216
|
i=n.taskLimit,s=Date.parse(n.startedAt),a=Date.parse(n.exitObservedAt);if((n.result==="oom-kill"||Number(n.oomKillCount)>
|
|
217
|
-
0)&&s>0&&a>=s){let c=Math.min(Date.now(),a+1e3),
|
|
217
|
+
0)&&s>0&&a>=s){let c=Math.min(Date.now(),a+1e3),l=I("journalctl",["-k","--boot=0","--no-pager","--output=json","--output\
|
|
218
218
|
-fields=__REALTIME_TIMESTAMP,__SEQNUM_ID,__SEQNUM,_BOOT_ID,_SOURCE_MONOTONIC_TIMESTAMP,MESSAGE","--lines=65","--case-sen\
|
|
219
219
|
sitive=yes",`--since=@${s/1e3}`,`--until=@${c/1e3}`,`--grep=^oom-kill:|^/[^,]*/${e.replaceAll(".","\\.")}(?:/[^,]*)?,tas\
|
|
220
|
-
k=`],{encoding:"utf8",timeout:2e3,maxBuffer:128*1024});!
|
|
221
|
-
username),startedAt:s,until:c}))}if(!i&&n.result&&n.result!=="success"&&s>0&&a>=s){let c=Math.min(Date.now(),a+1e3),
|
|
220
|
+
k=`],{encoding:"utf8",timeout:2e3,maxBuffer:128*1024});!l.error&&l.status===0&&(o=Vt(l.stdout,{unitName:e,workspace:$(r.
|
|
221
|
+
username),startedAt:s,until:c}))}if(!i&&n.result&&n.result!=="success"&&s>0&&a>=s){let c=Math.min(Date.now(),a+1e3),l=I(
|
|
222
222
|
"journalctl",["-k","--boot=0","--no-pager","--output=json","--output-fields=__REALTIME_TIMESTAMP,MESSAGE","--lines=65","\
|
|
223
223
|
--case-sensitive=yes",`--since=@${s/1e3}`,`--until=@${c/1e3}`,`--grep=^cgroup: fork rejected by pids controller in /.*${e.
|
|
224
|
-
replaceAll(".","\\.")}(?:/|$)`],{encoding:"utf8",timeout:2e3,maxBuffer:128*1024});!
|
|
224
|
+
replaceAll(".","\\.")}(?:/|$)`],{encoding:"utf8",timeout:2e3,maxBuffer:128*1024});!l.error&&l.status===0&&(i=Ut(l.stdout,
|
|
225
225
|
{unitName:e,workspace:$(r.username),startedAt:s,until:c}))}w.stdout.write(`${JSON.stringify({executionId:t,ok:!0,...n,oomBoundary:o,
|
|
226
226
|
taskLimit:i})}
|
|
227
227
|
`)}function Ut(e,{unitName:t,workspace:r,startedAt:n,until:o}){if(typeof e!="string"||Buffer.byteLength(e)>128*1024)return null;
|
|
228
228
|
let i=e.trim().split(/\r?\n/u);if(i.length>64)return null;for(let s of i){let a;try{a=JSON.parse(s)}catch{continue}let c=Number(
|
|
229
|
-
a?.__REALTIME_TIMESTAMP)/1e3;if(!Number.isFinite(c)||c<n||c>o)continue;let
|
|
230
|
-
exec(a.MESSAGE)?.[1];if(!
|
|
231
|
-
|
|
229
|
+
a?.__REALTIME_TIMESTAMP)/1e3;if(!Number.isFinite(c)||c<n||c>o)continue;let l=typeof a.MESSAGE=="string"&&/^cgroup: fork rejected by pids controller in (\/[a-zA-Z0-9_./-]{1,2048})$/u.
|
|
230
|
+
exec(a.MESSAGE)?.[1];if(!l)continue;let p=l.split("/"),m=p.indexOf(`vibe64-${r}-work.slice`);if(!(p[1]!=="vibe64.slice"||
|
|
231
|
+
m<2||p.indexOf(t)<=m||p.some((d,f)=>f>0&&(!d||d==="."||d===".."))))return{source:"kernel-journal",scope:"unknown",count:null,
|
|
232
232
|
recordedAt:new Date(c).toISOString()}}return null}function Vt(e,{unitName:t,workspace:r,startedAt:n,until:o}){if(typeof e!=
|
|
233
233
|
"string"||Buffer.byteLength(e)>128*1024)return null;let i=e.trim().split(/\r?\n/u);if(i.length>64)return null;let s=i.flatMap(
|
|
234
|
-
c=>{try{return[JSON.parse(c)]}catch{return[]}}),a=null;for(let c of s){let
|
|
235
|
-
isFinite(
|
|
234
|
+
c=>{try{return[JSON.parse(c)]}catch{return[]}}),a=null;for(let c of s){let l=Number(c?.__REALTIME_TIMESTAMP)/1e3;if(!Number.
|
|
235
|
+
isFinite(l)||l<n||l>o)continue;let p=c.MESSAGE;if(typeof p=="string"&&p.startsWith("oom-kill:")&&p.endsWith(",task_memcg\
|
|
236
236
|
=")){let v=s.find(k=>/^[a-f0-9]{32}$/u.test(c.__SEQNUM_ID||"")&&k?.__SEQNUM_ID===c.__SEQNUM_ID&&k?._BOOT_ID===c._BOOT_ID&&
|
|
237
237
|
/^[a-f0-9]{32}$/u.test(c._BOOT_ID||"")&&Number.isSafeInteger(Number(c.__SEQNUM))&&Number(k.__SEQNUM)===Number(c.__SEQNUM)+
|
|
238
238
|
1&&Number(k._SOURCE_MONOTONIC_TIMESTAMP)>=Number(c._SOURCE_MONOTONIC_TIMESTAMP)&&Number(k._SOURCE_MONOTONIC_TIMESTAMP)-Number(
|
|
239
239
|
c._SOURCE_MONOTONIC_TIMESTAMP)<=1e6&&/^\/[a-zA-Z0-9_./-]+,task=[^,]+,pid=\d+,uid=\d+$/u.test(k.MESSAGE||""));v&&(p+=v.MESSAGE)}
|
|
240
|
-
let
|
|
241
|
-
if(!
|
|
242
|
-
ce"||y<2||D<=y||M.some((v,k)=>k>0&&(v==="."||v===".."||!/^[a-zA-Z0-9_.-]+$/u.test(v))))continue;let V;if(
|
|
243
|
-
_NONE"&&g)V="host";else if(
|
|
240
|
+
let m=typeof p=="string"&&p.match(/^oom-kill:constraint=(CONSTRAINT_[A-Z_]+),.*?,(?:oom_memcg=(\/[^,]+)|(global_oom)),task_memcg=(\/[^,]+),task=/u);
|
|
241
|
+
if(!m)continue;let[,d,f,g,x]=m,M=x.split("/"),y=M.indexOf(`vibe64-${r}-work.slice`),D=M.indexOf(t);if(M[1]!=="vibe64.sli\
|
|
242
|
+
ce"||y<2||D<=y||M.some((v,k)=>k>0&&(v==="."||v===".."||!/^[a-zA-Z0-9_.-]+$/u.test(v))))continue;let V;if(d==="CONSTRAINT\
|
|
243
|
+
_NONE"&&g)V="host";else if(d==="CONSTRAINT_MEMCG"&&f&&(x===f||x.startsWith(`${f}/`))){let v=f.split("/").at(-1),k=M.slice(
|
|
244
244
|
0,D+1).join("/");V=f===k||f.startsWith(`${k}/`)?"execution":v===`vibe64-${r}-work.slice`?"workspace_work":v===`vibe64-${r}\
|
|
245
245
|
.slice`?"workspace":v==="vibe64.slice"?"platform":/-work-p[a-f0-9]{64}-s[a-f0-9]{64}-w[a-f0-9]{32}\.slice$/u.test(v)?"wo\
|
|
246
246
|
rkflow":/-work-p[a-f0-9]{64}-s[a-f0-9]{64}\.slice$/u.test(v)?"session":/-work-p[a-f0-9]{64}\.slice$/u.test(v)?"project":
|
|
247
|
-
"ancestor"}else return null;let H=f||"";if(a&&a.cgroup!==H)return null;(!a||
|
|
248
|
-
nel-journal",scope:V,cgroup:H,recordedAt:new Date(
|
|
247
|
+
"ancestor"}else return null;let H=f||"";if(a&&a.cgroup!==H)return null;(!a||l>Date.parse(a.recordedAt))&&(a={source:"ker\
|
|
248
|
+
nel-journal",scope:V,cgroup:H,recordedAt:new Date(l).toISOString()})}return a}function Gt(e="",t="",r={}){let n=K(e,t,r);
|
|
249
249
|
n.scopeEmpty||A("systemctl",["stop",e]);let o=Date.now()+gt,i=K(e,t,r),s=new Int32Array(new SharedArrayBuffer(4));for(;!i.
|
|
250
250
|
scopeEmpty&&Date.now()<o;)Atomics.wait(s,0,0,25),i=K(e,t,r);i.scopeEmpty||(A("systemctl",["kill","--kill-who=all","--sig\
|
|
251
251
|
nal=SIGKILL",e]),A("systemctl",["stop",e]),i=K(e,t,r)),i.scopeEmpty&&(Te(Ee(r,t),{force:!0,recursive:!0}),A("systemctl",
|
|
@@ -257,24 +257,24 @@ r,String(t.password||"")):X(r),rr(r,j)}function Ht(e={}){let t=q();ae(j);let r=S
|
|
|
257
257
|
if(r==="inspect"){zt(n);return}if(r==="remove"){Yt(n);return}if(r!=="install-start")throw new Error("Vibe64 exec helper \
|
|
258
258
|
rejected an unknown deployment service action.");let o=ee(e.workingDirectory,t,"workingDirectory"),i=ee(e.environmentFile,
|
|
259
259
|
t,"environmentFile"),s=ee(e.startScript,t,"startScript"),a=[...new Set((Array.isArray(e.requiredUnits)?e.requiredUnits:[]).
|
|
260
|
-
map(p=>ve(p,t)))],c=We(n),
|
|
261
|
-
Pe({activation:"restart",unit:
|
|
260
|
+
map(p=>ve(p,t)))],c=We(n),l=sr({environmentFile:i,owner:t,requiredUnits:a,startScript:s,unitName:n,workingDirectory:o});
|
|
261
|
+
Pe({activation:"restart",unit:l,unitName:n,unitPath:c})}function zt(e=""){ce(e);let t=S("systemctl",["show",e,"--no-page\
|
|
262
262
|
r","--property=ActiveState,SubState,Result,ExecMainCode,ExecMainStatus,NRestarts"]),r=A("journalctl",["--unit",e,"--no-p\
|
|
263
263
|
ager","--output=cat","--lines=80"]),n=String(r.stdout||r.stderr||"").trim();w.stdout.write(["Service state:",t,...n?["",
|
|
264
264
|
"Recent service output:",n]:[]].join(`
|
|
265
265
|
`)+`
|
|
266
266
|
`)}function Kt(e={}){let t=q();ae(j);let r=String(e.action||"").trim(),n=ve(e.unitName,t);if(r!=="install-start")throw new Error(
|
|
267
267
|
"Vibe64 exec helper rejected an unknown managed service action.");let o=Oe(e.workingDirectory,t,"workingDirectory"),i=Oe(
|
|
268
|
-
e.startScript,t,"startScript"),s=Le(e.processModel),a=s==="forking"?Ge(e.pidFile,t):"",c=ir(n,t),
|
|
269
|
-
processModel:s,startScript:i,unitName:n,workingDirectory:o});Ft({owner:t,pidFile:a,unitName:n}),Pe({activation:"start",unit:
|
|
268
|
+
e.startScript,t,"startScript"),s=Le(e.processModel),a=s==="forking"?Ge(e.pidFile,t):"",c=ir(n,t),l=ar({owner:t,pidFile:a,
|
|
269
|
+
processModel:s,startScript:i,unitName:n,workingDirectory:o});Ft({owner:t,pidFile:a,unitName:n}),Pe({activation:"start",unit:l,
|
|
270
270
|
unitName:n,unitPath:c})}function Ft({owner:e={},pidFile:t="",unitName:r=""}={}){if(!t||!T(t))return;let n=String(h(t,"ut\
|
|
271
271
|
f8")||"").trim();if(!/^[1-9][0-9]*$/u.test(n))throw new Error("Vibe64 managed service PID file is invalid.");let o=Number(
|
|
272
|
-
n);if(!Number.isSafeInteger(o)||o<=1)throw new Error("Vibe64 managed service PID is invalid.");if(!
|
|
272
|
+
n);if(!Number.isSafeInteger(o)||o<=1)throw new Error("Vibe64 managed service PID is invalid.");if(!me(o)){Q(t,n);return}
|
|
273
273
|
let i=Xt(o);if(i===null){Q(t,n);return}if(i!==e.uid)throw new Error("Vibe64 managed service PID belongs to another OS us\
|
|
274
274
|
er.");if(qt(o,r))return;try{w.kill(o,"SIGTERM")}catch(c){if(c?.code==="ESRCH"){Q(t,n);return}throw c}let s=Date.now()+3e4,
|
|
275
|
-
a=new Int32Array(new SharedArrayBuffer(4));for(;
|
|
275
|
+
a=new Int32Array(new SharedArrayBuffer(4));for(;me(o)&&Date.now()<s;)Atomics.wait(a,0,0,100);if(me(o))throw new Error("V\
|
|
276
276
|
ibe64 managed service process did not stop cleanly during ownership transfer.");Q(t,n)}function Q(e="",t=""){T(e)&&String(
|
|
277
|
-
h(e,"utf8")||"").trim()===t&&G(e)}function
|
|
277
|
+
h(e,"utf8")||"").trim()===t&&G(e)}function me(e=0){try{return w.kill(e,0),!0}catch(t){if(t?.code==="ESRCH")return!1;throw t}}
|
|
278
278
|
function Xt(e=0){let t="";try{t=h(`/proc/${e}/status`,"utf8")}catch(o){if(o?.code==="ENOENT")return null;throw o}let r=String(
|
|
279
279
|
t||"").match(/^Uid:\s+([0-9]+)/mu),n=Number(r?.[1]);if(!Number.isSafeInteger(n))throw new Error("Vibe64 managed service \
|
|
280
280
|
process UID is unavailable.");return n}function qt(e=0,t=""){let r=`/${t}`,n="";try{n=h(`/proc/${e}/cgroup`,"utf8")}catch(o){
|
|
@@ -293,7 +293,7 @@ push(Buffer.from(t.subarray(0,i)))}catch(i){if(i?.code==="EINTR")continue;if((i?
|
|
|
293
293
|
Date.now()<n){Atomics.wait(r,0,0,nt);continue}throw i?.code==="EAGAIN"||i?.code==="EWOULDBLOCK"?new Error("Vibe64 exec h\
|
|
294
294
|
elper timed out waiting for its payload."):i}return Buffer.concat(e,o).toString("utf8")}function N(e=""){let t=String(e||
|
|
295
295
|
"").trim();if(!t||/[/:\\\r\n]/u.test(t))throw new Error("Vibe64 exec helper rejected an unsafe username.");return t}function Qt(e=""){
|
|
296
|
-
if(!
|
|
296
|
+
if(!lt.test(e))throw new Error("Vibe64 exec helper rejected an unsupported username.")}function Se(e=""){if(Qt(e),e.startsWith(
|
|
297
297
|
re))throw new Error("Vibe64 daemon Unix accounts cannot be managed as app users.");if(dt.has(e))throw new Error("Privile\
|
|
298
298
|
ged Unix accounts cannot be managed as Vibe64 app users.")}function X(e=""){let t=I("getent",["passwd",e],{encoding:"utf\
|
|
299
299
|
8"});if(t.status!==0)throw new Error(`OS user was not found: ${e}`);let n=String(t.stdout||"").split(/\r?\n/u)[0].split(
|
|
@@ -352,21 +352,22 @@ return Y(t);if(r==="workspace-cache-command"){let i=u.join(n.home,".local/state/
|
|
|
352
352
|
s);if(n.username!==t||b(i)!==i||s!==e||a.length!==1||!/^[a-z][a-z0-9-]*-[A-Za-z0-9]{6}$/u.test(a[0]))throw new Error("Ca\
|
|
353
353
|
che maintenance requires an owned workspace scratch directory.");return s}let o=String(e||"").trim();if(!o)return"/";if(r===
|
|
354
354
|
"account-auth-terminal"||r==="account-status"||r==="github-api-command")return ur(o,n);if(r==="vibe64-command"&&n.username===
|
|
355
|
-
t){let i=b(o),s=u.join(n.home,".local","state","vibe64","projects");if(T(s)){let
|
|
356
|
-
sep}`))return i}let a=u.join(n.home,".local","state","vibe64","colleague");if(T(a)){let
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
355
|
+
t){let i=b(o),s=u.join(n.home,".local","state","vibe64","projects");if(T(s)){let l=b(s);if(i===l||i.startsWith(`${l}${u.
|
|
356
|
+
sep}`))return i}let a=u.join(n.home,".local","state","vibe64","colleague");if(T(a)){let l=C(b(a),i),p=l.at(-1)||"",m=l.length===
|
|
357
|
+
4&&l[1]==="learn"&&/^(lobby|[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12})$/u.test(l[2]);if((l.length===2||
|
|
358
|
+
m)&&/^[A-Za-z0-9_-]+$/u.test(l[0])&&/^colleague_[a-f0-9]{32}$/u.test(p))return i}let c=u.join(n.home,".local","state","v\
|
|
359
|
+
ibe64","training-sources");if(T(c)){let l=C(b(c),i);if(l.length===1&&/^(catalogue|topic)-[a-f0-9]{8}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{4}-[a-f0-9]{12}$/u.
|
|
360
|
+
test(l[0]))return i}}if(r==="codex-app-server"||r==="opencode-app-server"){let i=b(o),s=Number(n.uid),a=[se({username:t})];
|
|
361
|
+
Number.isSafeInteger(s)&&s>=0&&a.push(u.join("/run/user",String(s)));for(let c of a){let l=u.join(c,"vibe64","agent-prov\
|
|
362
|
+
iders");if(!T(l))continue;let p=b(l),m=C(p,i),d=m[0],f=r==="opencode-app-server"?d==="opencode":d==="codex-app-server"||
|
|
363
|
+
/^codex-app-server-[a-f0-9]{12}$/u.test(d),g=r==="codex-app-server"&&m.length===1,x=m.length===2&&m[1]==="workspace";if(f&&
|
|
363
364
|
(g||x))return i}}return cr(o,t)}function cr(e="",t=""){let r=String(e||"").trim();if(!r)throw new Error("Vibe64 exec hel\
|
|
364
365
|
per rejected an empty managed project path.");let n=b(r),o=b(u.join("/var/lib/vibe64",$(t),"projects"));if(n.startsWith(
|
|
365
366
|
`${o}${u.sep}`))return n;throw new Error("Vibe64 exec helper rejected a command path outside the owner project root.")}function ur(e="",t={}){
|
|
366
367
|
let r=String(e||"").trim(),n=String(t.home||"").trim();if(!r||!n)throw new Error("Vibe64 exec helper rejected an empty u\
|
|
367
368
|
ser command path.");let o=b(r),i=b(n);if(o===i||o.startsWith(`${i}${u.sep}`))return o;throw new Error("Vibe64 exec helpe\
|
|
368
369
|
r rejected a command path outside the target user home.")}function $(e=""){return e.startsWith(re)?e.slice(re.length):e}
|
|
369
|
-
function Y(e=""){return u.join(
|
|
370
|
+
function Y(e=""){return u.join(mt,$(N(e)),"tmp")}function be(e={},t={},r="",n=""){let o={PATH:ie,TERM:w.env.TERM||"xterm\
|
|
370
371
|
-256color"};for(let[i,s]of Object.entries(e))!ct.test(i)||ut.has(i)||i.startsWith("LD_")||i.startsWith("DYLD_")||(o[i]=String(
|
|
371
372
|
s));if(n==="opencode-app-server"){let i=u.join(se({username:r}),"vibe64","agent-providers","opencode");for(let s of["HOM\
|
|
372
373
|
E","XDG_CACHE_HOME","XDG_CONFIG_HOME","XDG_DATA_HOME","XDG_STATE_HOME"]){let a=String(e[s]||"").trim();if(!u.isAbsolute(
|
|
@@ -560,12 +560,12 @@ startTimeTicks,version:c}}return Object.freeze({normalize:N,isValid:F,normalizeI
|
|
|
560
560
|
isProcessAlive:x})}var Tt=(t,e,r,n={})=>Object.freeze({id:t,contextWindow:e,variants:Object.freeze(r),...n}),Ga=Object.freeze([Object.freeze(
|
|
561
561
|
{id:"deepseek",baseUrl:"https://api.deepseek.com/",claudeBaseUrl:"https://api.deepseek.com/anthropic",claudeAutoCompactWindow:786432,
|
|
562
562
|
webSearch:!1,models:Object.freeze([Tt("deepseek-flash",1048576,["low","high","max"],{images:!0,freeformPatch:!0,codexHistoryRouting:!0}),
|
|
563
|
-
Tt("deepseek-v4-pro",1048576,["low","high","max"],{freeformPatch:!0})])}),Object.freeze({id:"zai
|
|
564
|
-
|
|
565
|
-
freeze([Tt("glm-5.3",1048576,["low","high","max"],{freeformPatch:!0,codexHistoryRouting:!0})])}),
|
|
566
|
-
baseUrl:"https://api.z.ai/api/v1",claudeBaseUrl:"https://api.z.ai/api/anthropic",claudeAutoCompactWindow:1e6,
|
|
567
|
-
models:Object.freeze([Tt("glm-5.3",1048576,["low","high","max"],{freeformPatch:!0,codexHistoryRouting:!0})])})]);
|
|
568
|
-
return Ga.find(e=>e.id===t)||null}var lp=32*1024*1024,pp=Object.freeze({chatgpt:"https://chatgpt.com/backend-api/codex",apiKey:"https://api.openai.com/v1",
|
|
563
|
+
Tt("deepseek-v4-pro",1048576,["low","high","max"],{freeformPatch:!0,codexHistoryRouting:!0})])}),Object.freeze({id:"zai-\
|
|
564
|
+
coding-plan",baseUrl:"https://api.z.ai/api/v1",claudeBaseUrl:"https://api.z.ai/api/anthropic",claudeAutoCompactWindow:1e6,
|
|
565
|
+
webSearch:!1,models:Object.freeze([Tt("glm-5.3",1048576,["low","high","max"],{freeformPatch:!0,codexHistoryRouting:!0})])}),
|
|
566
|
+
Object.freeze({id:"zai",baseUrl:"https://api.z.ai/api/v1",claudeBaseUrl:"https://api.z.ai/api/anthropic",claudeAutoCompactWindow:1e6,
|
|
567
|
+
webSearch:!1,models:Object.freeze([Tt("glm-5.3",1048576,["low","high","max"],{freeformPatch:!0,codexHistoryRouting:!0})])})]);
|
|
568
|
+
function Ie(t){return Ga.find(e=>e.id===t)||null}var lp=32*1024*1024,pp=Object.freeze({chatgpt:"https://chatgpt.com/backend-api/codex",apiKey:"https://api.openai.com/v1",
|
|
569
569
|
deepseek:Ie("deepseek").baseUrl.replace(/\/$/u,""),"zai-coding-plan":Ie("zai-coding-plan").baseUrl,zai:Ie("zai").baseUrl});var vp=new URL("./../../../@jskit-ai/assistant-core/src/server/conversation/codexProcess.js",import.meta.url).href;var bp=Object.freeze({HELPER:"helper",INTERACTIVE:"interactive"}),_p=mr();var Ka=Object.freeze({UNIX:"unix"});var Ap=process.platform==="linux"?107:103,Cp=Object.freeze({MISSING:"missing",RESPONSIVE:"responsive",TIMEOUT:"timeout",
|
|
570
570
|
UNREACHABLE:"unreachable"}),Ep=Object.freeze({EXITED:"exited",INCOMPATIBLE:"incompatible",LIVE:"live",MISSING:"missing",
|
|
571
571
|
SUSPECT:"suspect"}),Ja=Object.freeze({RUNNING:"running",STOPPED:"stopped"}),Op=Object.freeze({ABSENT:"absent",AMBIGUOUS:"\
|
|
@@ -990,69 +990,73 @@ nce.","When adopting an authenticated app, or when its login blocks Preview insp
|
|
|
990
990
|
ith `vibe64-helper preview status`; prefer `vibe64-helper preview browser identity <configured-name>` to requesting pass\
|
|
991
991
|
words. If unconfigured, ask which existing accounts (email/login/user ID) represent admin and other required roles, and \
|
|
992
992
|
the default. Reuse prior answers; wait for their choices before configuring access. Never infer admin rights from names \
|
|
993
|
-
or the Vibe64 viewer.","
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
,
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
`vibe64-helper playwright
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
.
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
|
|
1055
|
-
|
|
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.
|
|
1056
1060
|
has(s));if(o.length>0)throw new TypeError(`${r} contains unsupported fields: ${o.join(", ")}.`)}function qu(t){if(rt(t,[
|
|
1057
1061
|
"conversationKind","scope","session","hostGuidance"],"Vibe64 session context"),t.hostGuidance!==void 0&&(typeof t.hostGuidance!=
|
|
1058
1062
|
"string"||Buffer.byteLength(t.hostGuidance,"utf8")>1024))throw new TypeError("Vibe64 host guidance must be bounded text \
|
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
"exports": {
|
|
7
7
|
"./server": "./src/server/index.js",
|
|
8
8
|
"./server/agentSpecs": "./src/server/agentSpecs.js",
|
|
9
|
+
"./server/packaging": "./src/server/packaging.js",
|
|
9
10
|
"./server/promptContext": "./src/server/promptContext.js",
|
|
10
11
|
"./shared/connectedPackageTypes": "./src/shared/connectedPackageTypes.js"
|
|
11
12
|
}
|