vibe64 0.1.52 → 0.1.53

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 (52) hide show
  1. package/bin/upgrade-state.js +975 -974
  2. package/dist/assets/{GithubBrowserTabs-D7DveB8M.js → GithubBrowserTabs-DG2nCSNW.js} +1 -1
  3. package/dist/assets/{Vibe64AuthSettingsButton-DDArM5uw.js → Vibe64AuthSettingsButton-9OLqOZao.js} +1 -1
  4. package/dist/assets/{Vibe64DashboardShell-Ab65VYSS.js → Vibe64DashboardShell-hWNziCur.js} +1 -1
  5. package/dist/assets/{Vibe64DatabaseWorkspace-DHLt5bST.js → Vibe64DatabaseWorkspace-TqXOZJpI.js} +1 -1
  6. package/dist/assets/{Vibe64FileArea-DCqpclYH.js → Vibe64FileArea-BljhpApn.js} +1 -1
  7. package/dist/assets/{Vibe64OutputControls-BPDF1XfG.js → Vibe64OutputControls-Dk_DWuFb.js} +1 -1
  8. package/dist/assets/{Vibe64RepositoryWorkspace-C107tX19.js → Vibe64RepositoryWorkspace-CDnsAlIz.js} +1 -1
  9. package/dist/assets/{Vibe64SessionFiles-BKJ1Qem_.js → Vibe64SessionFiles-DjeEvtpc.js} +1 -1
  10. package/dist/assets/{Vibe64UiStoryboardView-CJajdYSt.js → Vibe64UiStoryboardView-idZz86bx.js} +1 -1
  11. package/dist/assets/{_sessionId_-BaNhTTVN.js → _sessionId_-DLLJsju9.js} +1 -1
  12. package/dist/assets/{_slug_-D7mzZsk3.css → _slug_-BRPxP_Yn.css} +1 -1
  13. package/dist/assets/{_slug_-nHO3Bg-f.js → _slug_-JgF_FQ6F.js} +7 -7
  14. package/dist/assets/{app-DbGzTUVN.js → app-Cuw9E-ru.js} +1 -1
  15. package/dist/assets/{changes-D7NjgKWf.js → changes-CoR0-8EL.js} +1 -1
  16. package/dist/assets/{conversation-DV8qCsqw.js → conversation-B1UoWMaA.js} +1 -1
  17. package/dist/assets/{dashboard-DL95BPsz.js → dashboard-DnuIxR1s.js} +1 -1
  18. package/dist/assets/{english-definitions-ChTTs3cC.js → english-definitions-By4b_Yl2.js} +1 -1
  19. package/dist/assets/{env-BdJvhqF-.js → env-KUPen-sS.js} +1 -1
  20. package/dist/assets/{history-DmGNxMVh.js → history-S_cJLehJ.js} +1 -1
  21. package/dist/assets/{index-BXZp5ztx.js → index-CNkd6O5t.js} +3 -3
  22. package/dist/assets/{integrations-DAYe7RkJ.js → integrations-Dmbbbs_A.js} +1 -1
  23. package/dist/assets/{issues-D_zOo2IW.js → issues-EeBajY3I.js} +1 -1
  24. package/dist/assets/{learning-ilyEoffw.js → learning-DDRM-FoP.js} +1 -1
  25. package/dist/assets/{project-files-CJWdFXh4.js → project-files-CQ1BLaaP.js} +1 -1
  26. package/dist/assets/{publish-D728amkk.js → publish-bvwc-KoQ.js} +1 -1
  27. package/dist/assets/{pull-requests-BsbM-5MA.js → pull-requests-Ce1ECyuL.js} +1 -1
  28. package/dist/assets/{repository-C8NwO4bj.js → repository-CK3osHmp.js} +1 -1
  29. package/dist/assets/{settings-DTLY7ZT5.js → settings-PQGw4vfn.js} +1 -1
  30. package/dist/assets/{useArchivedVibe64Sessions-Cc9GdKlD.js → useArchivedVibe64Sessions-BAQjW01a.js} +1 -1
  31. package/dist/assets/{useAssistantAttachments-DJKqt1hL.js → useAssistantAttachments-DJWb1KdF.js} +1 -1
  32. package/dist/assets/{useVibe64ConversationLog-Co0DhC3R.js → useVibe64ConversationLog-CjUZuvV7.js} +1 -1
  33. package/dist/assets/{useVibe64SessionData-D7fBm9xf.js → useVibe64SessionData-CbY_B5mC.js} +1 -1
  34. package/dist/assets/{vibe64SessionFocus-8fHAeoyU.js → vibe64SessionFocus-Bd3JuuZe.js} +1 -1
  35. package/dist/index.html +4 -4
  36. package/docs/colleague-usage/conversation-context.md +3 -1
  37. package/docs/colleague-usage/temporary-chats.md +26 -1
  38. package/docs/colleague-usage/workspace-preparation.md +17 -0
  39. package/node_modules/@jskit-ai/assistant-core/locales/en.json +1 -0
  40. package/node_modules/@jskit-ai/assistant-core/package.json +1 -1
  41. package/node_modules/@jskit-ai/assistant-runtime/package.json +1 -1
  42. package/node_modules/@jskit-ai/assistant-voice/package.json +1 -1
  43. package/node_modules/@jskit-ai/connector-google-calendar/package.json +1 -1
  44. package/node_modules/@jskit-ai/connectors-catalog/package.json +1 -1
  45. package/node_modules/@jskit-ai/connectors-core/locales/en.json +1 -0
  46. package/node_modules/@jskit-ai/connectors-core/package.json +1 -1
  47. package/node_modules/@local/vibe64-genesis/bin/vibe64-genesis-host-context +43 -43
  48. package/node_modules/@local/vibe64-genesis/src/server/index.js +189 -182
  49. package/node_modules/@local/vibe64-genesis/src/server/promptContext.js +68 -61
  50. package/node_modules/@local/vibe64-terminals/src/server/sessionWorkOperationCommand.js +532 -532
  51. package/package.json +7 -7
  52. package/server.bundle.mjs +28835 -28791
@@ -56,7 +56,9 @@ Temporary chat.
56
56
 
57
57
  Guidance sent to a working Claude chat does not interrupt it: Claude moves its
58
58
  current command to the background, where it keeps running, and reads the
59
- guidance within moments. Output already shown remains
59
+ guidance within moments. This includes a Fix it with AI repair chat whose repair
60
+ changes the project's Genesis files while it works: the message joins the running
61
+ repair, and the changed project guidance applies from the chat's next idle turn. Output already shown remains
60
62
  attached to its original request; the follow-up response belongs to the new request.
61
63
  Reloading the chat preserves that relationship and the recorded AI labels.
62
64
  After **Stop** confirms a Claude reply has stopped, text already shown remains
@@ -113,6 +115,29 @@ Senior). A merge repair chat accepts only **Fix it with AI** or **Custom**. Auto
113
115
  is Main chat only. Colleague doesn't start an Update conflict's **Fix it with AI**
114
116
  repair itself: choose that button on the Update error.
115
117
 
118
+ ## Repairs check the saved version first
119
+
120
+ Every **Fix it with AI** turn (setup, Update, Save, preview identity and the
121
+ others) tells the AI whether this session is behind its saved version and lists
122
+ the incoming versions, read again for each message. Before it changes
123
+ dependencies or ports code, the AI checks whether the saved version already
124
+ contains the change; if it does, the change arrives with Update and is not
125
+ redone in the session.
126
+
127
+ When local work is superseded by the saved version, such as a stale or partial
128
+ dependency bump that the saved version completes, the repair takes the saved
129
+ version and says so in one sentence. It does not ask you to choose between the
130
+ versions, because Vibe64's checkpoint keeps your original. It asks only about
131
+ real product decisions.
132
+
133
+ While the session's Update has failed, is running or is waiting, Update is the
134
+ one repair for the session. A setup, workspace preparation or verification
135
+ repair that is already open tells you the session must be brought up to date
136
+ first, then stops. Use **Fix it with AI** on the Update notice. After that
137
+ repair, Vibe64 checks Update again, and setup is checked again against the
138
+ updated session. See
139
+ [Project setup waits for Update](workspace-preparation.md#project-setup-waits-for-update).
140
+
116
141
  ## Work elsewhere while a chat runs
117
142
 
118
143
  Select **Main chat** or another temporary tab to continue elsewhere. The hidden
@@ -95,6 +95,23 @@ The same recovery applies on desktop and mobile. Colleague can explain the
95
95
  warning and offer the supported repair flow; source edits and terminal commands
96
96
  belong to the coding assistant or the person, not Colleague.
97
97
 
98
+ ## Project setup waits for Update
99
+
100
+ When the session's Update has failed, is running or is waiting (the session is
101
+ behind its saved version), **Project setup needs attention** shows why, for
102
+ example *This session's Update needs repair first*. It does not offer
103
+ **Fix it with AI** for setup, and workspace preparation's **Fix it with AI** is
104
+ unavailable. Setup is often blocked only by local work that the saved version
105
+ already supersedes, such as a partial dependency bump, and repairing it here
106
+ would redo that work.
107
+
108
+ Bring the session up to date first: choose **Update**, or **Fix it with AI** on
109
+ the Update notice when Update needs help. When the repair finishes, Vibe64 checks Update
110
+ again. When Update succeeds, Vibe64 prepares the workspace again and
111
+ rechecks setup. Setup repair is offered again only if setup still needs
112
+ attention. Colleague's onboarding read reports the same `updateFirst` state and
113
+ offers no setup repair while it is present.
114
+
98
115
  ## Competing Stack proposals
99
116
 
100
117
  When two selected technologies propose different bodies for the same section,
@@ -333,6 +333,7 @@
333
333
  "compactWhileWorking": "Claude is still working. Wait for it to finish before freeing its context.",
334
334
  "noActiveTurn": "Claude has no active turn for this message.",
335
335
  "steeringUnavailable": "This Claude turn cannot accept steering now.",
336
+ "settingsChangeWhileWorking": "Stop the current Claude turn before changing its settings.",
336
337
  "notConnected": "Claude Code is not connected.",
337
338
  "accountStatusInvalid": "Claude Code returned an invalid account status."
338
339
  },
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jskit-ai/assistant-core",
3
- "version": "0.2.8",
3
+ "version": "0.2.10",
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.2.10",
3
+ "version": "0.2.12",
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.2.10",
3
+ "version": "0.2.12",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  "./client": "./src/client/index.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jskit-ai/connector-google-calendar",
3
- "version": "0.2.4",
3
+ "version": "0.2.5",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  "./shared": "./src/shared/english-definition.js",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jskit-ai/connectors-catalog",
3
- "version": "0.2.4",
3
+ "version": "0.2.5",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  "./shared/ai": "./src/shared/english-ai.js",
@@ -27,6 +27,7 @@
27
27
  "schemaVersionUnsupported": "Use numeric schemaVersion 1; other versions require an explicit migration.",
28
28
  "scopeRequired": "Select at least one permission.",
29
29
  "scopeUnsupported": "A selected permission is not supported by this provider configuration.",
30
+ "secretReference": "Use a reference such as env:VARIABLE_NAME.",
30
31
  "serviceAccountPerUser": "A service account cannot connect as each app user.",
31
32
  "serviceAccountRegistration": "Service-account credentials do not use a browser OAuth registration.",
32
33
  "stableName": "Use a stable lowercase name containing letters, digits and hyphens.",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jskit-ai/connectors-core",
3
- "version": "0.2.4",
3
+ "version": "0.2.5",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  "./shared/configuration": "./src/shared/configuration.js",
@@ -284,11 +284,11 @@ o.auth&&!n.headers.authorization&&(n.headers.authorization="Basic "+Buffer.from(
284
284
  t._redirects&&t.emit("redirect",t.url,x)}else x=t._req=m(o);o.timeout&&x.on("timeout",()=>{H(t,x,"Opening handshake has \
285
285
  timed out")}),x.on("error",T=>{x===null||x[Lo]||(x=t._req=null,jt(t,T))}),x.on("response",T=>{let O=T.headers.location,P=T.
286
286
  statusCode;if(O&&o.followRedirects&&P>=300&&P<400){if(++t._redirects>o.maxRedirects){H(t,x,"Maximum redirects exceeded");
287
- return}x.abort();let N;try{N=new Or(O,e)}catch{let L=new SyntaxError(`Invalid URL: ${O}`);jt(t,L);return}Fo(t,N,r,n)}else
287
+ return}x.abort();let D;try{D=new Or(O,e)}catch{let L=new SyntaxError(`Invalid URL: ${O}`);jt(t,L);return}Fo(t,D,r,n)}else
288
288
  t.emit("unexpected-response",x,T)||H(t,x,`Unexpected server response: ${T.statusCode}`)}),x.on("upgrade",(T,O,P)=>{if(t.
289
- emit("upgrade",T),t.readyState!==k.CONNECTING)return;x=t._req=null;let N=T.headers.upgrade;if(N===void 0||N.toLowerCase()!==
290
- "websocket"){H(t,O,"Invalid Upgrade header");return}let D=Wa("sha1").update(l+Za).digest("base64");if(T.headers["sec-web\
291
- socket-accept"]!==D){H(t,O,"Invalid Sec-WebSocket-Accept header");return}let L=T.headers["sec-websocket-protocol"],J;if(L!==
289
+ emit("upgrade",T),t.readyState!==k.CONNECTING)return;x=t._req=null;let D=T.headers.upgrade;if(D===void 0||D.toLowerCase()!==
290
+ "websocket"){H(t,O,"Invalid Upgrade header");return}let j=Wa("sha1").update(l+Za).digest("base64");if(T.headers["sec-web\
291
+ socket-accept"]!==j){H(t,O,"Invalid Sec-WebSocket-Accept header");return}let L=T.headers["sec-websocket-protocol"],J;if(L!==
292
292
  void 0?p.size?p.has(L)||(J="Server sent an invalid subprotocol"):J="Server sent a subprotocol but none was requested":p.
293
293
  size&&(J="Server sent no subprotocol"),J){H(t,O,J);return}L&&(t._protocol=L);let B=T.headers["sec-websocket-extensions"];
294
294
  if(B!==void 0){if(!v){H(t,O,"Server sent a Sec-WebSocket-Extensions header but no extension was requested");return}let q;
@@ -383,7 +383,7 @@ l","Content-Length":Buffer.byteLength(r),...n},t.once("finish",t.destroy),t.end(
383
383
  `+r)}function xe(t,e,r,n,o,s){if(t.listenerCount("wsClientError")){let i=new Error(o);Error.captureStackTrace(i,xe),t.emit(
384
384
  "wsClientError",i,r,e)}else ot(r,n,o,s)}});function I(t){return String(t??"").trim()}function It(t){if(!t||typeof t!="object"||Array.isArray(t))return!1;let e=Object.getPrototypeOf(t);return e===Object.prototype||
385
385
  e===null}var jp=Object.freeze(["none","pending","committed","rolledBack","unknown"]);function C(t,{fallback:e=""}={}){return String(t||"").trim()||e}function E(t){return!!(t&&typeof t=="object"&&!Array.isArray(t))}function V(t,{fallback:e=0}={}){let r=Number(t);return!Number.isInteger(r)||r<1?e:r}var Lp=Object.freeze({interrupted:Object.freeze({text:"Stopped.",messageCode:"assistant.turn.stopped"}),failed:Object.freeze(
386
- {text:"Assistant stopped with an error.",messageCode:"assistant.turn.failed"})});function St(t){return E(t)?{...t}:{}}var j=class extends Error{constructor(e,r,n={}){super(r,n.cause===void 0?void 0:{cause:n.cause}),this.name="AppError",this.
386
+ {text:"Assistant stopped with an error.",messageCode:"assistant.turn.failed"})});function St(t){return E(t)?{...t}:{}}var N=class extends Error{constructor(e,r,n={}){super(r,n.cause===void 0?void 0:{cause:n.cause}),this.name="AppError",this.
387
387
  status=Number(e)||500,this.statusCode=this.status,this.code=n.code||"APP_ERROR",this.params=St(n.params),n.messageCode&&
388
388
  (this.messageCode=String(n.messageCode),this.messageParams=St(n.messageParams)),this.details=n.details,this.headers=n.headers||
389
389
  {}}};var mf=new Set(["contextcompaction",...["context","thread","conversation"].flatMap(t=>["compact","compacted","compaction",
@@ -395,16 +395,16 @@ JSKIT_EXECUTION_RUNTIME_TOKEN",commandHashEnvironmentName:e="JSKIT_EXECUTION_COM
395
395
  native_process_identity_unavailable",platform:o=process.platform,ps:s=ra}={}){let a=o==="darwin"?100:25,c=1,d=Object.freeze(
396
396
  {linux:"linux-proc",darwin:"darwin"}),l=d[o]||"",m=Object.freeze({RUNNING:"running",STOPPED:"stopped"}),p=Object.freeze(
397
397
  {ABSENT:"absent",AMBIGUOUS:"ambiguous",EXACT:"exact",INVALID:"invalid",MISMATCH:"mismatch"});function v(w={}){return!!(Number.
398
- isSafeInteger(Number(w.pid))&&Number(w.pid)>0&&D(w.processIdentity)&&[m.RUNNING,m.STOPPED].includes(w.processState))}function x(w){
398
+ isSafeInteger(Number(w.pid))&&Number(w.pid)>0&&j(w.processIdentity)&&[m.RUNNING,m.STOPPED].includes(w.processState))}function x(w){
399
399
  let u=Number(w);if(!Number.isSafeInteger(u)||u<=0)return!1;try{return process.kill(u,0),!0}catch{return!1}}function T(w){
400
400
  let u=Number(w);if(!Number.isSafeInteger(u)||u<=0)return!1;if(process.platform==="win32")return x(u);try{return process.
401
401
  kill(-u,0),!0}catch{return!1}}function O(w,u){let f=Number(w),h=process.platform==="win32"?f:-f;try{return process.kill(
402
402
  h,u),!0}catch(g){if(!["ESRCH","EPERM"].includes(String(g?.code||"")))throw g;return!1}}function P(w=""){let u=String(w||
403
403
  ""),f=u.lastIndexOf(")");if(f<0)return null;let h=u.slice(f+1).trim().split(/\s+/u),g=String(h[0]||""),y=Number(h[1]),S=Number(
404
404
  h[2]),b=String(h[19]||"");return!/^[A-Z]$/u.test(g)||!Number.isSafeInteger(y)||y<0||!Number.isSafeInteger(S)||S<=0||!/^\d+$/u.
405
- test(b)?null:{parentPid:y,processGroupId:S,startTimeTicks:b,state:g}}function N(w={}){let u=E(w)?w:{};return{commandHash:I(
405
+ test(b)?null:{parentPid:y,processGroupId:S,startTimeTicks:b,state:g}}function D(w={}){let u=E(w)?w:{};return{commandHash:I(
406
406
  u.commandHash),platform:I(u.platform),runtimeToken:I(u.runtimeToken),startTimeTicks:I(u.startTimeTicks),version:Number(u.
407
- version||0)}}function D(w={}){let u=N(w);return!!(u.version===c&&Object.values(d).includes(u.platform)&&/^[a-f0-9]{12}$/u.
407
+ version||0)}}function j(w={}){let u=D(w);return!!(u.version===c&&Object.values(d).includes(u.platform)&&/^[a-f0-9]{12}$/u.
408
408
  test(u.commandHash)&&/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/iu.test(u.runtimeToken)&&/^\d+$/u.
409
409
  test(u.startTimeTicks))}function L(w=[],u=""){let f=w.find(h=>h.startsWith(`${u}=`));return f?f.slice(u.length+1):""}async function J(){
410
410
  let w=[],u=await Qi("/proc",{withFileTypes:!0}).catch(()=>[]);for(let f of u){if(!f.isDirectory()||!/^\d+$/u.test(f.name))
@@ -452,10 +452,10 @@ let S=[p.ABSENT,p.MISMATCH].includes(g.status);return{descendantProcessGroups:y.
452
452
  status,pid:Number(w.pid),processExitVerified:S,signaledProcessGroups:y,stopped:S&&y.length>0}}async function ir(w){if(o!==
453
453
  "darwin")return P(await lr(`/proc/${w}/stat`,"utf8").catch(()=>""));let u=String(await s(["-o","pgid=,lstart=","-p",String(
454
454
  w)]).catch(()=>"")),f=/^\s*(\d+)\s+(.+?)\s*$/u.exec(u);return f?{processGroupId:Number(f[1]),startTimeTicks:q(f[2])}:null}
455
- async function ar({commandHash:w="",pid:u=null,reportedIdentity:f=null,runtimeToken:h=""}={}){let g=I(w),y=I(h),S=N(f);if(D(
455
+ async function ar({commandHash:w="",pid:u=null,reportedIdentity:f=null,runtimeToken:h=""}={}){let g=I(w),y=I(h),S=D(f);if(j(
456
456
  S)&&S.commandHash===g&&S.runtimeToken===y)return S;let b=Number(u),R=l&&Number.isSafeInteger(b)&&b>0?await ir(b):null;if(!R?.
457
457
  startTimeTicks||R.processGroupId!==b){let A=new Error(`${r} process identity could not be captured.`);throw A.code=n,A}return{
458
- commandHash:g,platform:l,runtimeToken:y,startTimeTicks:R.startTimeTicks,version:c}}return Object.freeze({normalize:N,isValid:D,
458
+ commandHash:g,platform:l,runtimeToken:y,startTimeTicks:R.startTimeTicks,version:c}}return Object.freeze({normalize:D,isValid:j,
459
459
  normalizeInspection:gt,capture:ar,inspect:he,stop:sr,isProcessAlive:x})}import{execFile as oa}from"node:child_process";import{promisify as sa}from"node:util";var Ff=Object.freeze(["plugins","apps","daemon_auto_start"]);var Uf=Object.freeze([[".tmp",/^(?:plugins(?:$|[.-])|git-|bundled-marketplaces$)/u],["cache",/^(?:remote_plugin_catalog|codex_apps_tools|codex_apps_server_info|codex_app_directory|bundled_plugin_exclusions)$/u]]);var Gf=sa(oa);function ge(t=""){return Array.from(String(t)).some(e=>{let r=e.codePointAt(0);return r<=31||r===127})}var _t=(t,e,r,n={})=>Object.freeze({id:t,contextWindow:e,variants:Object.freeze(r),...n}),ia=Object.freeze([Object.freeze(
460
460
  {id:"deepseek",baseUrl:"https://api.deepseek.com/",claudeBaseUrl:"https://api.deepseek.com/anthropic",claudeAutoCompactWindow:786432,
461
461
  webSearch:!1,models:Object.freeze([_t("deepseek-flash",1048576,["low","high","max"],{images:!0,freeformPatch:!0,codexHistoryRouting:!0}),
@@ -493,11 +493,11 @@ currentHelperExecutionContext!="function")throw p("Codex helper execution requir
493
493
  currentHelperExecutionContext(),h=I(f?.cwd),g=I(f?.accountIdentitySignature);if(f?.executionMode!=="helper"||!h||!ad.isAbsolute(
494
494
  h)||!/^sha256:[a-f0-9]{64}$/u.test(g))throw p("Codex helper runtime isolation could not be verified.");return Object.freeze(
495
495
  {accountIdentitySignature:g,cwd:h,executionMode:"helper"})}function P(u=""){let f=I(u).match(/^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)$/u);
496
- if(!f)return null;let h=f.slice(1).map(g=>Number.parseInt(g,10));return h.every(Number.isSafeInteger)?h:null}function N(u=""){
496
+ if(!f)return null;let h=f.slice(1).map(g=>Number.parseInt(g,10));return h.every(Number.isSafeInteger)?h:null}function D(u=""){
497
497
  let f=I(u);if(!f||f.length>n||ge(f))return null;let h=`${t}/`;if(!f.startsWith(h))return null;let g=f.slice(h.length).match(
498
- /^((?:0|[1-9]\d*)\.(?:0|[1-9]\d*)\.(?:0|[1-9]\d*))(?:$|[ \t].*$)/u);return g?P(g[1]):null}function D(u){if(typeof u?.currentServerInfo!=
498
+ /^((?:0|[1-9]\d*)\.(?:0|[1-9]\d*)\.(?:0|[1-9]\d*))(?:$|[ \t].*$)/u);return g?P(g[1]):null}function j(u){if(typeof u?.currentServerInfo!=
499
499
  "function")throw p("Codex helper execution cannot verify the app-server version. Update Codex and retry.",{minimumVersion:e});
500
- let f=I(u.currentServerInfo()?.userAgent),h=N(f);if(!h)throw p("Codex helper execution received an unrecognised app-serv\
500
+ let f=I(u.currentServerInfo()?.userAgent),h=D(f);if(!h)throw p("Codex helper execution received an unrecognised app-serv\
501
501
  er version. Update Codex and retry.",{minimumVersion:e});let g=h.join("."),y=P(e),S=h.findIndex((b,R)=>b!==y[R]);if(S!==
502
502
  -1&&h[S]<y[S])throw p(`Codex helper execution requires app-server ${e} or newer; current version is ${g}. Update Codex a\
503
503
  nd retry.`,{actualVersion:g,minimumVersion:e});return Object.freeze({minimumVersion:e,version:g})}function L(u=null){if(!It(
@@ -522,7 +522,7 @@ fromEntries(g.map(b=>[b,{enabled:!1}])),memories:{dedicated_tools:!1,generate_me
522
522
  mcp:{enabled:!1},skills:{enabled:!1}},project_doc_max_bytes:0,shell_environment_policy:{inherit:"none",set:{}},skills:{include_instructions:!1},
523
523
  tools:{experimental_request_user_input:{enabled:!1},update_plan:{enabled:!1}},web_search:"disabled"},S=xs(y);return v.add(
524
524
  S),S}function q(u,f,h,{effort:g="",summary:y=""}={}){let S=L(u),b=J(f,h);return{mcpServerNames:S,hookState:b,config:B({effort:g,
525
- summary:y,hookKeys:b.hookKeys,mcpServerNames:S})}}async function ae(u,{effort:f="",summary:h=""}={}){if(D(u),typeof u?.readConfig!=
525
+ summary:y,hookKeys:b.hookKeys,mcpServerNames:S})}}async function ae(u,{effort:f="",summary:h=""}={}){if(j(u),typeof u?.readConfig!=
526
526
  "function"||typeof u?.listHooks!="function")throw p("Codex helper execution cannot inventory configuration and hooks.");
527
527
  let g=await O(u),y=T(u),S=await u.readConfig({cwd:g.cwd,includeLayers:!1});if(T(u)!==y)throw p("Codex app-server reconne\
528
528
  cted during helper policy verification.");let b=await u.listHooks([g.cwd]);if(T(u)!==y)throw p("Codex app-server reconne\
@@ -551,7 +551,7 @@ return{...u,sessionStartSource:"startup",threadSource:f}}function ar(u){return{a
551
551
  baseInstructions,config:u.config,cwd:u.cwd,systemPrompt:u.systemPrompt,model:u.model,runtimeWorkspaceRoots:u.runtimeWorkspaceRoots,
552
552
  sandbox:u.sandbox}}function w({approvalPolicy:u,cwd:f,effectiveSettings:h,outputSchema:g}){let y={approvalPolicy:u,cwd:f,
553
553
  environments:[],model:h.model,outputSchema:g,runtimeWorkspaceRoots:[],sandboxPolicy:{networkAccess:!1,type:"readOnly"},summary:"\
554
- none"};return h.request.reasoning&&(y.effort=h.thinking),y}return Object.freeze({assertCompatibility:D,executionContext:O,
554
+ none"};return h.request.reasoning&&(y.effort=h.thinking),y}return Object.freeze({assertCompatibility:j,executionContext:O,
555
555
  inspect:ae,configuration:yt,hasConfiguration:Ee,threadSettings:sr,threadStartSettings:ir,threadResumeSettings:ar,turnSettings:w,
556
556
  start:he,resume:wt})}var Tv=ud();var By=Object.freeze({PROVIDER_FAILURE:"provider_failure",RESPONSE_DELIVERY_FAILURE:"response_delivery_failure",SERVICE_RESTART:"\
557
557
  service_restart",USER_CANCELLED:"user_cancelled",CONTROL_RECONFIGURATION:"control_reconfiguration",INTERRUPTED:"interrup\
@@ -569,9 +569,9 @@ in the record show it happened. Ignore plans, offers, questions, advice, facts a
569
569
  pened earlier in the conversation, and descriptions of what a file or app contains.",'Reply with JSON only: {"unsupporte\
570
570
  d": ["short quote of each unsupported claim"]}, with [] when every claim is supported.'].join(`
571
571
  `);var ZI=64*1024;var Vd="the app",sS=Qr(Vd);var aS=16*1024*1024;var lS=new URL("./../../../@jskit-ai/assistant-core/src/server/conversation/commandWrapper.js",import.meta.url).href;var Zd=Object.freeze({streaming:!1,instructions:!1,configuration:!1,goals:!1,goalBudgets:!1,goalCommands:Object.freeze({}),
572
- attachments:!1,tools:!1,nativeTools:!1});var zx=Object.freeze({goals:!0,goalBudgets:!1,goalCommands:Object.freeze({set:Object.freeze({delivery:"message",interruptsTurn:!1}),
572
+ attachments:!1,tools:!1,nativeTools:!1});var Lx=Object.freeze({goals:!0,goalBudgets:!1,goalCommands:Object.freeze({set:Object.freeze({delivery:"message",interruptsTurn:!1}),
573
573
  resume:Object.freeze({delivery:"message",interruptsTurn:!1}),pause:Object.freeze({delivery:"control",interruptsTurn:!0}),
574
- cancel:Object.freeze({delivery:"message",interruptsTurn:!0})})}),Lx=Object.freeze({});var fT=new URL("./../../../@jskit-ai/assistant-core/src/server/conversation/codexRuntime.js",import.meta.url).href;import{createHash as Ds}from"node:crypto";import{open as vu}from"node:fs/promises";import js from"node:path";var an=1024*1024,wu=256*1024,zs=512,yu=128,Iu=16*1024;function cn({errorPrefix:t="",identityNamespace:e="codex-account-v\
574
+ cancel:Object.freeze({delivery:"message",interruptsTurn:!0})})}),Fx=Object.freeze({});var mT=new URL("./../../../@jskit-ai/assistant-core/src/server/conversation/codexRuntime.js",import.meta.url).href;import{createHash as Ds}from"node:crypto";import{open as vu}from"node:fs/promises";import js from"node:path";var an=1024*1024,wu=256*1024,zs=512,yu=128,Iu=16*1024;function cn({errorPrefix:t="",identityNamespace:e="codex-account-v\
575
575
  1",secretNamespace:r="codex-auth-secret-v1"}={}){function n(d="",l=""){let m=new Error(I(l)||"Codex helper authenticatio\
576
576
  n is unavailable. Reconnect Codex and retry.");return m.code=I(d)||`${t}codex_helper_auth_unavailable`,m}function o(d,{label:l="\
577
577
  Codex authentication value",maxLength:m=0}={}){if(typeof d!="string"||d.length===0||d.length>m)throw n(`${t}codex_helper\
@@ -593,9 +593,9 @@ return Object.freeze({accessToken:T,accountId:x,authMode:"chatgpt",identitySigna
593
593
  T)})}if(["apikey","api_key"].includes(p)){let v=o(m.OPENAI_API_KEY,{label:"Codex API key",maxLength:Iu});return Object.freeze(
594
594
  {apiKey:v,authMode:"apiKey",identitySignature:s("apiKey",v),secretSignature:i(v)})}throw n(`${t}codex_helper_auth_invali\
595
595
  d`,"The selected Codex authentication mode is unsupported. Reconnect Codex and retry.")}return Object.freeze({error:n,identitySignature:s,
596
- readRecord:a,readSelected:c})}var NT=Object.freeze({label:"Checking the Codex sign-in",operationId:"codex-auth-preflight"});var qT=cn().error;var lb=4*1024*1024;var S_=Object.freeze({goals:!0,goalBudgets:!0,goalCommands:Object.freeze({set:Object.freeze({delivery:"control",interruptsTurn:!1}),
596
+ readRecord:a,readSelected:c})}var DT=Object.freeze({label:"Checking the Codex sign-in",operationId:"codex-auth-preflight"});var $T=cn().error;var pb=4*1024*1024;var x_=Object.freeze({goals:!0,goalBudgets:!0,goalCommands:Object.freeze({set:Object.freeze({delivery:"control",interruptsTurn:!1}),
597
597
  resume:Object.freeze({delivery:"control",interruptsTurn:!1}),pause:Object.freeze({delivery:"control",interruptsTurn:!0}),
598
- cancel:Object.freeze({delivery:"control",interruptsTurn:!1})})});var E_=2*1024*1024,A_=32*1024*1024,O_=2*1024*1024;function U(t){if(t===null||typeof t!="object")return!1;let e=Object.getPrototypeOf(t);return e===Object.prototype||e===null||
598
+ cancel:Object.freeze({delivery:"control",interruptsTurn:!1})})});var A_=2*1024*1024,O_=32*1024*1024,R_=2*1024*1024;function U(t){if(t===null||typeof t!="object")return!1;let e=Object.getPrototypeOf(t);return e===Object.prototype||e===null||
599
599
  Ru(e)}function Ru(t){return t!==null&&typeof t=="object"&&Object.getPrototypeOf(t)===null&&Reflect.ownKeys(t).length===0}function ln(t){return t!==null&&typeof t=="object"&&U(t.structure)&&U(t.operations)&&typeof t.validateWith=="function"&&
600
600
  typeof t.toJsonSchema=="function"&&typeof t.cleanup=="function"}function Wt(t,e){if(!Object.hasOwn(e,"items"))return null;
601
601
  let{items:r}=e;if(ln(r))return{kind:"schema",schema:r};if(!U(r)||typeof r.type!="string")throw new Error(`Array field "${t}\
@@ -805,9 +805,9 @@ c,e[c],r,a,n,o,d);this._mergeErrors(i,l)}return{validatedObject:a,errors:i}}_val
805
805
  hasOwn(this.structure,e))return{};let c=this.structure[e],d=r.self===!0,l=ii(r);if(this._fieldToBeSkipped(a,s))return{};
806
806
  let m=Object.hasOwn(n,e),p=n[e],v={};if(!m){if(d&&i.enforceRequired&&c.required&&!this._paramToBeSkipped("required",s.skipParams,
807
807
  a)&&this._mergeErrors(v,this._singleErrorMap({field:a,code:"REQUIRED",message:"Field is required",params:{}})),d&&i.applyDefaults&&
808
- c.defaultTo!==void 0){let P=typeof c.defaultTo=="function"?c.defaultTo():c.defaultTo,N=this._normalizeDefault(c,P,{fieldPath:a,
809
- currentObject:o,containerKey:e,objectBeforeCast:n,options:s,settings:i});this._mergeErrors(v,N.errors),Object.keys(N.errors).
810
- length===0&&_(o,e,N.value)}return v}if(p===void 0)return d&&i.rejectExplicitUndefined?this._singleErrorMap(this._typeError(
808
+ c.defaultTo!==void 0){let P=typeof c.defaultTo=="function"?c.defaultTo():c.defaultTo,D=this._normalizeDefault(c,P,{fieldPath:a,
809
+ currentObject:o,containerKey:e,objectBeforeCast:n,options:s,settings:i});this._mergeErrors(v,D.errors),Object.keys(D.errors).
810
+ length===0&&_(o,e,D.value)}return v}if(p===void 0)return d&&i.rejectExplicitUndefined?this._singleErrorMap(this._typeError(
811
811
  a).errorObject):{};let x={[e]:p};if(d){let P=this._normalizeAndValidateValue(c,p,a,x,e,n,s,i);return Object.hasOwn(x,e)&&
812
812
  x[e]!==void 0?_(o,e,x[e]):x[e]===null&&_(o,e,null),P}if(!l)return{};let T=this._castValue(c,p,a,x,e,n,s,i);if(Object.keys(
813
813
  T.errors).length>0)return T.errors;if(!T.shouldContinue)return{};let O=this._validateSelectedDescendants(c,r.children,a,
@@ -824,11 +824,11 @@ if(P===void 0){T&&a.rejectExplicitUndefined&&_(l,v,this._typeError(v).errorObjec
824
824
  let q=o.schema._validateWithOperation("replace",o.schema.operations.replace,P,He(i,v));Zt(q.validatedObject)&&_(c,p,q.validatedObject),
825
825
  this._mergeErrors(l,$e(q.errors,v));continue}if(!O)continue;let B=o.schema._validateSelectedTree(x.children,P,He(i,v),{...a,
826
826
  operationName:"replace",operation:o.schema.operations.replace,defaultedFields:new Set});Zt(B.validatedObject)&&_(c,p,B.validatedObject),
827
- this._mergeErrors(l,$e(B.errors,v));continue}let N=this._buildArrayItemSettings(o.definition,a),D=[P];if(T){let B=this._normalizeAndValidateValue(
828
- o.definition,P,v,D,0,d,i,N);Object.hasOwn(D,0)&&D[0]!==void 0?_(c,p,D[0]):D[0]===null&&_(c,p,null),this._mergeErrors(l,B);
829
- continue}if(!O)continue;let L=this._castValue(o.definition,P,v,D,0,d,i,N);if(Object.keys(L.errors).length>0){this._mergeErrors(
830
- l,L.errors);continue}if(!L.shouldContinue)continue;let J=this._validateSelectedDescendants(o.definition,x.children,v,D,0,
831
- i,N);Zt(D[0])&&_(c,p,D[0]),this._mergeErrors(l,J)}return l}validateWith(e,r,n={}){if(!Object.hasOwn(this.operations,e))throw new Error(
827
+ this._mergeErrors(l,$e(B.errors,v));continue}let D=this._buildArrayItemSettings(o.definition,a),j=[P];if(T){let B=this._normalizeAndValidateValue(
828
+ o.definition,P,v,j,0,d,i,D);Object.hasOwn(j,0)&&j[0]!==void 0?_(c,p,j[0]):j[0]===null&&_(c,p,null),this._mergeErrors(l,B);
829
+ continue}if(!O)continue;let L=this._castValue(o.definition,P,v,j,0,d,i,D);if(Object.keys(L.errors).length>0){this._mergeErrors(
830
+ l,L.errors);continue}if(!L.shouldContinue)continue;let J=this._validateSelectedDescendants(o.definition,x.children,v,j,0,
831
+ i,D);Zt(j[0])&&_(c,p,j[0]),this._mergeErrors(l,J)}return l}validateWith(e,r,n={}){if(!Object.hasOwn(this.operations,e))throw new Error(
832
832
  `Unknown operation "${e}".`);let o=this.operations[e];return this._assertPlainObjectInput(e,r),this._validateWithOperation(
833
833
  e,o,r,n)}validateAt(e,r,n={}){this._assertPlainObjectInput("validateAt",r);let o=_n(e),{operationName:s,operation:i,validationOptions:a}=this.
834
834
  _resolvePathValidationRequest(n),c=this._validateSelectedTree(ci([e]),r,a,this._buildOperationSettings(s,i,r));return{validatedValue:al(
@@ -840,7 +840,7 @@ _buildOperationSettings(o,s,r))}_installOperationMethods(){for(let e of Object.k
840
840
  return oi(this,e)}getFieldDefinitions(){return Tn(this.structure)}getFieldDefinition(e){if(typeof e!="string"||e.trim()===
841
841
  "")throw new Error("Field path must be a non-empty string.");let r=Cn(this,_n(e.trim()));return r===null?null:Tn(r)}getFieldMessages(e){
842
842
  let r=this.getFieldDefinition(e);return!r||typeof r.messages!="object"||r.messages===null?Object.freeze({}):Tn(r.messages)}cleanup(e,r){
843
- let n={};for(let o of Object.keys(e))Object.hasOwn(this.structure,o)&&this.structure[o][r]&&_(n,o,e[o]);return n}};var{parse:cC,stringify:ml}=JSON,{keys:dC}=Object,hl=String,gl="string";var mi="object",vl=(t,e)=>e;var hi=(t,e,r)=>{let n=hl(e.push(r)-1);return t.set(r,n),n};var gi=(t,e,r)=>{let n=e&&typeof e===mi?(l,m)=>l===""||-1<e.indexOf(l)?m:void 0:e||vl,o=new Map,s=[],i=[],a=+hi(o,s,n.call(
843
+ let n={};for(let o of Object.keys(e))Object.hasOwn(this.structure,o)&&this.structure[o][r]&&_(n,o,e[o]);return n}};var{parse:dC,stringify:ml}=JSON,{keys:uC}=Object,hl=String,gl="string";var mi="object",vl=(t,e)=>e;var hi=(t,e,r)=>{let n=hl(e.push(r)-1);return t.set(r,n),n};var gi=(t,e,r)=>{let n=e&&typeof e===mi?(l,m)=>l===""||-1<e.indexOf(l)?m:void 0:e||vl,o=new Map,s=[],i=[],a=+hi(o,s,n.call(
844
844
  {"":t},"",t)),c=!a;for(;a<s.length;)c=!0,i[a]=ml(s[a++],d,r);return"["+i.join(",")+"]";function d(l,m){if(c)return c=!c,
845
845
  m;let p=n.call(this,l,m);switch(typeof p){case mi:if(p===null)return p;case gl:return o.get(p)||hi(o,s,p)}return p}};var yl=new Set(["true","1","yes","y","on"]),Il=new Set(["false","0","no","n","off"]);function Sl(t){return t!==null&&(typeof t==
846
846
  "object"||typeof t=="function")&&typeof t.then=="function"}function vi(t){if(typeof t=="number")return Number.isFinite(t)?
@@ -913,7 +913,7 @@ ust be schema instances or schema factories created by json-rest-schema.");Ii(o,
913
913
  ator")}return{types:o,validators:s}}function bi({types:t={},validators:e={},installCore:r=!0}={}){let n=tr(t),o=tr(e),s=(i,a={})=>{
914
914
  let c=new Be(i,n,o,a.operations);return yi(c,n,o),c};return yi(s,n,o),s.addType=(i,a)=>{Tl(n,i,a)},s.addValidator=(i,a)=>{
915
915
  bl(o,i,a)},s.use=i=>{_l(i,{addType:s.addType,addValidator:s.addValidator})},s.createFactory=(...i)=>{let a=Ol(n,o,i);return bi(
916
- {types:a.types,validators:a.validators,installCore:!1})},r&&s.use(wi),s}var Q=bi({installCore:!0});var RC=Object.freeze({schema:Q({}),mode:"replace"});var _i=/^[a-z][a-z0-9_.-]*$/u,Pl=/^[A-Za-z_$][A-Za-z0-9_$]*$/u;function Ci(t,e){let r=String(t||"").trim().toLowerCase();
916
+ {types:a.types,validators:a.validators,installCore:!1})},r&&s.use(wi),s}var Q=bi({installCore:!0});var PC=Object.freeze({schema:Q({}),mode:"replace"});var _i=/^[a-z][a-z0-9_.-]*$/u,Pl=/^[A-Za-z_$][A-Za-z0-9_$]*$/u;function Ci(t,e){let r=String(t||"").trim().toLowerCase();
917
917
  if(!_i.test(r))throw new TypeError(`${e} must match ${_i.toString()}.`);return r}function On(t,e){if(t==null)return Object.
918
918
  freeze({});if(!E(t))throw new TypeError(`${e} must be an object mapping local names to capability ids.`);let r={},n=new Set;
919
919
  for(let[o,s]of Object.entries(t)){let i=String(o||"").trim();if(!Pl.test(i))throw new TypeError(`${e} local name "${i}" \
@@ -943,7 +943,7 @@ unction when provided.`);return Object.freeze({id:e,handle:t.handle,matches:t.ma
943
943
  throw new Error(`Event listener "${a.id}" is duplicated.`);return e.add(a.id),t.push(a),s}async function n(i){let a=jl(i);
944
944
  for(let c of t)c.matches&&c.matches(a)!==!0||await c.handle(a);return a}function o(){return Object.freeze({listenerIds:Object.
945
945
  freeze(t.map(i=>i.id))})}let s=Object.freeze({register:r,publish:n,diagnostics:o});return s}var zl=rr({id:"runtime.events",provides:{events:"runtime.events"},setup(){return{events:Mn()}}});function Ce(t,e=new WeakSet){if(!t||typeof t!="object"||e.has(t))return t;e.add(t);for(let r of Object.getOwnPropertyNames(
946
- t))Ce(t[r],e);return Object.freeze(t)}var IE=Object.freeze({REQUIRED:{messageKey:"required",code:"kernel.validation.field.required"},TYPE_CAST_FAILED:{messageKey:"\
946
+ t))Ce(t[r],e);return Object.freeze(t)}var SE=Object.freeze({REQUIRED:{messageKey:"required",code:"kernel.validation.field.required"},TYPE_CAST_FAILED:{messageKey:"\
947
947
  default",code:"kernel.validation.field.typeCastFailed"},NOT_NULLABLE:{messageKey:"default",code:"kernel.validation.field\
948
948
  .notNullable"},MIN_LENGTH:{messageKey:"minLength",code:"kernel.validation.field.minLength"},MAX_LENGTH:{messageKey:"maxL\
949
949
  ength",code:"kernel.validation.field.maxLength"},MIN_VALUE:{messageKey:"min",code:"kernel.validation.field.minValue"},MAX_VALUE:{
@@ -951,10 +951,10 @@ messageKey:"max",code:"kernel.validation.field.maxValue"},PATTERN:{messageKey:"p
951
951
  ttern"},ENUM_VALUE:{messageKey:"enum",code:"kernel.validation.field.enumValue"},FIELD_NOT_ALLOWED:{messageKey:"additiona\
952
952
  lProperties",code:"kernel.validation.field.notAllowed"},CUSTOM_VALIDATOR_FAILED:{messageKey:"validator",code:""},STRICT_BOOLEAN:{
953
953
  messageKey:"default",code:"kernel.validation.field.strictBoolean"},RANGE_EXCEEDED:{messageKey:"default",code:"kernel.val\
954
- idation.field.rangeExceeded"},NOT_EMPTY:{messageKey:"default",code:"kernel.validation.field.notEmpty"}}),SE=Object.freeze(
955
- {code:"kernel.validation.invalid",message:"Invalid value."}),xE=Object.freeze(["create","replace","patch","toJsonSchema"]);var ql=Q({cursor:{type:"id",required:!1},limit:{type:"number",required:!1,min:1,unsigned:!0}}),$l=Object.freeze({schema:ql,
954
+ idation.field.rangeExceeded"},NOT_EMPTY:{messageKey:"default",code:"kernel.validation.field.notEmpty"}}),xE=Object.freeze(
955
+ {code:"kernel.validation.invalid",message:"Invalid value."}),TE=Object.freeze(["create","replace","patch","toJsonSchema"]);var ql=Q({cursor:{type:"id",required:!1},limit:{type:"number",required:!1,min:1,unsigned:!0}}),$l=Object.freeze({schema:ql,
956
956
  mode:"patch"});var Ri=Object.freeze({type:"string",pattern:"^(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d)?$",minLength:5}),Hl=Object.freeze(
957
- {...Ri,nullable:!0});var WE=new Map([{keyword:"required",code:"kernel.validation.required"},{keyword:"type",code:"kernel.validation.type"},{keyword:"\
957
+ {...Ri,nullable:!0});var KE=new Map([{keyword:"required",code:"kernel.validation.required"},{keyword:"type",code:"kernel.validation.type"},{keyword:"\
958
958
  minLength",code:"kernel.validation.minLength"},{keyword:"maxLength",code:"kernel.validation.maxLength"},{keyword:"minimu\
959
959
  m",code:"kernel.validation.minimum"},{keyword:"maximum",code:"kernel.validation.maximum"},{keyword:"exclusiveMinimum",code:"\
960
960
  kernel.validation.exclusiveMinimum"},{keyword:"exclusiveMaximum",code:"kernel.validation.exclusiveMaximum"},{keyword:"mu\
@@ -968,7 +968,7 @@ kernel.validation.propertyNames"},{keyword:"oneOf",code:"kernel.validation.oneOf
968
968
  ion.anyOf"},{keyword:"not",code:"kernel.validation.not"},{keyword:"if",code:"kernel.validation.if"}].map(({keyword:t,code:e})=>[
969
969
  t,e]));var Pi="^[1-9][0-9]*$",Nn=Ce({type:"string",minLength:1,pattern:Pi}),Vl=Ce({...Nn,nullable:!0}),Gl=Ce({schema:Q({recordId:{
970
970
  ...Nn,required:!0,messages:{pattern:{code:"kernel.validation.recordIdInvalid",message:"Record id must be a canonical pos\
971
- itive integer string."}}}}),mode:"patch"});var ki=20,$A=32*1024,HA=48*1024,Dn=Object.freeze({search:"assistant_action_search",contract:"assistant_action_contract",
971
+ itive integer string."}}}}),mode:"patch"});var ki=20,HA=32*1024,BA=48*1024,Dn=Object.freeze({search:"assistant_action_search",contract:"assistant_action_contract",
972
972
  execute:"assistant_action_execute"}),jn=Object.freeze({type:"object",additionalProperties:!0}),Jl=Object.freeze({type:"o\
973
973
  bject",additionalProperties:!1,properties:{query:{type:"string",maxLength:200,description:"Optional literal words or act\
974
974
  ion-id fragments; every word must match. Use short resource or operation terms such as list. Omit query to browse all av\
@@ -990,8 +990,8 @@ le records. Search before claiming a capability is unavailable. If terminology d
990
990
  query to browse. Returns compact paged matches without schemas; follow nextCursor when more discovery is needed.",parameters:Jl,
991
991
  outputSchema:Xl}),Object.freeze({name:Dn.contract,description:"Load the exact input and output contract for one availabl\
992
992
  e action before executing it.",parameters:Yl,outputSchema:Zl}),Object.freeze({name:Dn.execute,description:"Execute one a\
993
- vailable action after loading its exact contract in this turn. The action result is returned in result.",parameters:Ql,outputSchema:ep})]);var JO=new URL("./../../../@jskit-ai/assistant-core/src/server/conversation/openCodeProcess.js",import.meta.url).href;var tR=256*1024;var rR=2*1024*1024;var nR=Mi.map(({name:t,description:e,parameters:r})=>({type:"function",function:{name:t,description:e,parameters:r}}));var MR=Object.freeze({});var VR=Object.freeze([]);var vp=Object.freeze({resolve(){throw new j(400,"File attachments are not configured for this conversation.",{code:"conv\
994
- ersation_attachments_not_configured",messageCode:"assistant.conversation.attachmentsNotConfigured"})}});var eP=Object.freeze([{message:"This conversation exceeds the configured API history limit. Start another conversation o\
993
+ vailable action after loading its exact contract in this turn. The action result is returned in result.",parameters:Ql,outputSchema:ep})]);var XO=new URL("./../../../@jskit-ai/assistant-core/src/server/conversation/openCodeProcess.js",import.meta.url).href;var rR=256*1024;var nR=2*1024*1024;var oR=Mi.map(({name:t,description:e,parameters:r})=>({type:"function",function:{name:t,description:e,parameters:r}}));var NR=Object.freeze({});var GR=Object.freeze([]);var vp=Object.freeze({resolve(){throw new N(400,"File attachments are not configured for this conversation.",{code:"conv\
994
+ ersation_attachments_not_configured",messageCode:"assistant.conversation.attachmentsNotConfigured"})}});var tP=Object.freeze([{message:"This conversation exceeds the configured API history limit. Start another conversation o\
995
995
  r increase the limit.",messageCode:"assistant.conversation.apiHistoryLimit"},{message:"The model reached its output toke\
996
996
  n limit before completing the answer. Increase maxOutputTokens in the conversation limits.",messageCode:"assistant.conve\
997
997
  rsation.outputTokenLimit"},{message:"The model stream ended without confirming its application tool calls.",messageCode:"\
@@ -1010,21 +1010,21 @@ t be saved. Restore storage access and retry saving.",messageCode:"assistant.con
1010
1010
  Conversation progress could not be saved. Restore access to its storage before continuing.",messageCode:"assistant.conve\
1011
1011
  rsation.progressUnsaved"},{message:"The conversation request exceeded its time limit.",messageCode:"assistant.conversati\
1012
1012
  on.requestTimedOut"},{message:"Work stopped.",messageCode:"assistant.conversation.workStopped"},{message:"Stopped by use\
1013
- r.",messageCode:"assistant.conversation.stoppedByUser"}]);var Ge=Object.freeze({text:16e3,toolName:256,arguments:256*1024,toolProgress:280});var zP=Q({kind:{type:"string",enum:["reply","tool"],required:!0},text:{type:"string",maxLength:Ge.text,required:!1},toolName:{
1014
- type:"string",maxLength:Ge.toolName,required:!1},arguments:{type:"string",maxLength:Ge.arguments,required:!1}}),LP={type:"\
1013
+ r.",messageCode:"assistant.conversation.stoppedByUser"}]);var Ge=Object.freeze({text:16e3,toolName:256,arguments:256*1024,toolProgress:280});var LP=Q({kind:{type:"string",enum:["reply","tool"],required:!0},text:{type:"string",maxLength:Ge.text,required:!1},toolName:{
1014
+ type:"string",maxLength:Ge.toolName,required:!1},arguments:{type:"string",maxLength:Ge.arguments,required:!1}}),FP={type:"\
1015
1015
  object",additionalProperties:!1,required:["kind","text","toolName","arguments"],properties:{kind:{type:"string",enum:["r\
1016
1016
  eply","tool"]},text:{type:"string",maxLength:Ge.text,description:"The final reply, or a brief progress sentence for the \
1017
1017
  first tool request; empty for subsequent tool requests."},toolName:{type:"string",maxLength:Ge.toolName},arguments:{type:"\
1018
- string",maxLength:Ge.arguments}}};var L0=Object.freeze({});function Ep(){throw new TypeError("Hook delivery requires an instruction resolver.")}function Bn({resolveConversation:t,
1018
+ string",maxLength:Ge.arguments}}};var F0=Object.freeze({});function Ep(){throw new TypeError("Hook delivery requires an instruction resolver.")}function Bn({resolveConversation:t,
1019
1019
  readInstructions:e=Ep}){if(typeof t!="function")throw new TypeError("Conversation hook delivery requires a binding resol\
1020
1020
  ver.");return async function(n){if(n.scope!=="session")return{kind:"unclaimed"};let o=await t(n);if(!o)return{kind:"uncl\
1021
1021
  aimed"};if(o.delivery==="native")return{kind:"delivery",text:""};if(o.delivery!=="hook")throw new TypeError("Unknown con\
1022
1022
  versation instruction delivery mode.");let s=await e(o,n);if(typeof s!="string"||!s.trim())throw new TypeError("Managed \
1023
- conversation instructions are unavailable.");return{kind:"delivery",text:s}}}var q0=Object.freeze({codex:Object.freeze({requiresWriterExclusion:!1}),claude:Object.freeze({requiresWriterExclusion:!0,
1023
+ conversation instructions are unavailable.");return{kind:"delivery",text:s}}}var $0=Object.freeze({codex:Object.freeze({requiresWriterExclusion:!1}),claude:Object.freeze({requiresWriterExclusion:!0,
1024
1024
  allowsManagedServer:!1,matchesProcess:({executable:t,commandLine:e})=>/(?:^|[\0/])claude(?:\0|$)|@anthropic-ai\/claude-code\//u.
1025
1025
  test(`${t||""}\0${e}`)}),opencode:Object.freeze({requiresWriterExclusion:!0,allowsManagedServer:!0,matchesProcess:({executable:t,
1026
1026
  commandLine:e})=>/(?:^|[\0/])opencode(?:\0|$)/u.test(`${t||""}\0${e}`)})});import{readFile as Ap}from"node:fs/promises";import Vn from"node:path";function or(t){return String(t||"").trim()}var Op=Object.freeze(["main","temporary"]),qi=Object.freeze(["managedDatabaseRefresh","managedEnvironment","managedGit",
1027
- "managedPreview"]),Rp=64*1024,yM=Object.freeze(["When user input is necessary, ask no more than three concise, high-impa\
1027
+ "managedPreview"]),Rp=64*1024,IM=Object.freeze(["When user input is necessary, ask no more than three concise, high-impa\
1028
1028
  ct questions at once.","Put multiple questions on separate lines as `[1] Question`, `[2] Question`, and so on.","For a s\
1029
1029
  mall fixed set of useful choices, put `Possible answers:` and a short bullet list directly beneath its own question, bef\
1030
1030
  ore the next one; never collect several questions' answers into one trailing list.","Each bullet is one distinct, comple\
@@ -1037,7 +1037,7 @@ Possible answers:
1037
1037
  [2] Tell the main agent before changes?
1038
1038
  Possible answers:
1039
1039
  - Yes, tell main first
1040
- - No, proceed independently`]),IM=Object.freeze(["The Vibe64-managed preview is the canonical application server; never \
1040
+ - No, proceed independently`]),SM=Object.freeze(["The Vibe64-managed preview is the canonical application server; never \
1041
1041
  start a duplicate or replacement server. If it is unavailable, report that blocker. Describe only rendered browser evide\
1042
1042
  nce.","When adopting an authenticated app, or when its login blocks Preview inspection, inspect identity support/names w\
1043
1043
  ith `vibe64-helper preview status`; prefer `vibe64-helper preview browser identity <configured-name>` to requesting pass\
@@ -1091,7 +1091,7 @@ tatus` is ready on the restored target. To stop, run `vibe64-helper playwright c
1091
1091
  ot prove tests stopped. Recheck status before reporting a busy blocker.","If a managed command reports kernel task denia\
1092
1092
  ls or a resource incident, report the blocker with its diagnostic and incident ID and ask the platform operator to inspe\
1093
1093
  ct that evidence before retrying; never raise test timeouts or weaken assertions to work around a process/thread limit. \
1094
- A generic browser timeout without resource evidence does not establish a platform cause."]),SM=Object.freeze(["Each mana\
1094
+ A generic browser timeout without resource evidence does not establish a platform cause."]),xM=Object.freeze(["Each mana\
1095
1095
  ged shell command receives current development Env from Vibe64, including declared resource bindings; use them in ordina\
1096
1096
  ry commands. Do not build environment injection or copy managed credentials into source. Resource provisioning and appli\
1097
1097
  cation migrations remain separate preparation steps.","Use `vibe64-helper env status [development|production|all]` to in\