@coreframe/vite 0.3.0-next.4 → 0.3.1
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/client.d.ts +2 -0
- package/dist/managed-dev-B9iJaXCd.js +1 -0
- package/dist/overlay/managed-dev-overlay.d.ts +58 -1
- package/dist/overlay/managed-dev-overlay.js +31 -11
- package/dist/plugins/dashboard-sculpted.d.ts +22 -0
- package/dist/plugins/dashboard-sculpted.js +1 -0
- package/dist/plugins/dashboard.js +10 -4
- package/dist/plugins/dev-jobs.d.ts +3 -2
- package/dist/plugins/dev-jobs.js +1 -1
- package/dist/plugins/development-controls.d.ts +1 -2
- package/dist/plugins/development-controls.js +1 -1
- package/dist/plugins/index.d.ts +2 -2
- package/dist/plugins/index.js +1 -1
- package/dist/plugins/managed-dev.d.ts +5 -1
- package/dist/plugins/managed-dev.js +1 -1
- package/dist/plugins/preset.js +1 -1
- package/dist/plugins/routes.d.ts +2 -79
- package/dist/plugins/routes.js +1 -1
- package/dist/plugins/shell.js +1 -1
- package/dist/style.css +1 -1
- package/package.json +17 -19
- package/dist/browser/flutter-devtools.d.ts +0 -17
- package/dist/browser/flutter-devtools.js +0 -1
- package/dist/plugins/flutter-devtools.d.ts +0 -13
- package/dist/plugins/flutter-devtools.js +0 -1
- package/dist/plugins/native.d.ts +0 -1
- package/dist/plugins/native.js +0 -1
package/client.d.ts
CHANGED
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
interface ImportMetaEnv {
|
|
4
4
|
readonly COREFRAME_ENV: "development" | "preview" | "production"
|
|
5
5
|
readonly COREFRAME_MANAGED_DEV?: boolean
|
|
6
|
+
readonly COREFRAME_MANAGED_DEV_CONTEXT_JSON?: string
|
|
7
|
+
readonly COREFRAME_VERSION?: string
|
|
6
8
|
readonly DEBUG: boolean
|
|
7
9
|
readonly MOBILE_PLATFORM: "ios" | "android" | undefined
|
|
8
10
|
readonly PLATFORM: import("@coreframe/lib/shell").ShellPlatform
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{readFile as e}from"node:fs/promises";import t from"node:path";import{readProjectConfig as n}from"@coreframe/config";import{randomUUID as r}from"node:crypto";import{execFile as i}from"node:child_process";import{promisify as a}from"node:util";import{managedDevEnv as o,managedDevEvents as s,managedDevOperationPhases as c,managedDevSupervisorRecoveryErrorPrefix as l}from"@coreframe/dev-contracts/managed-dev";import{startManagedDevSession as u}from"@coreframe/dev/managed-dev";import{DevDiagnostics as d,connectDevSupervisor as f,connectExistingDevSupervisor as p,devDiagnosticError as m,devDiagnosticPhase as ee}from"@coreframe/dev/supervisor";function te(e){let t,n,r=new Map,i=e=>e<1e3?`${Math.max(0,Math.round(e))}ms`:`${Math.round(e/1e3)}s`;return a=>{let o=a.operation;if(!o)return;let s=`[managed-dev ${o.id.slice(0,8)}]`;t!==o.id&&(t=o.id,n=void 0,r.clear(),e(`${s} ${o.kind===`merge`?`Merge`:o.kind===`fast-forward`?`Sync`:`Rebase`}: ${o.source} ${o.target.slice(0,12)}`));let l=`${o.state}:${o.phase}:${o.cancellationDeferred}`;l!==n&&(n=l,e(`${s} ${o.state===`cancelled`?o.published?`Changes applied; remaining work cancelled`:`Update cancelled; prepared changes were not applied`:o.state===`failed`?`Update failed; review recovery actions in the overlay`:o.state===`interrupted`?`Update interrupted; review recovered state before retrying`:o.state===`succeeded`?`Update ready`:o.state===`cancelling`?o.cancellationDeferred?`Cancellation requested; finishing publication before stopping`:`Cancellation requested; waiting for processes and cleanup`:c[o.phase]}${o.finishedAt?` · ${i(o.finishedAt-o.startedAt)}`:``}`));let u=(t,n,i)=>{r.get(t)!==n&&(r.set(t,n),e(`${s} ${i}`))},d=o.progress;if(d){let e=d.current?.shortCommit,t=o.kind===`merge`?`${d.files?.length??0} conflicted files`:`${d.applied}/${d.total??`?`} commits applied · ${d.skipped} skipped${d.remaining===void 0?``:` · ${d.remaining} remaining`}${e?` · current ${e}`:``}${d.files?.length?` · ${d.files.length} conflicted files`:``}`;u(`progress`,t,t)}let f=new Set([`progress`,...o.steps.map(e=>e.id),...o.turns.map(e=>e.id),...o.activities.map(e=>e.id)]);for(let e of r.keys())f.has(e)||r.delete(e);for(let e of o.steps){let t=`${e.status}:${e.pulse??0}`,n=i((e.finishedAt??o.updatedAt)-e.startedAt);u(e.id,t,`${e.pulse&&e.status===`running`?`Still running: `:``}${e.label} ${e.status===`running`?`started`:e.status} · ${n}`)}for(let[e,t]of o.turns.entries())u(t.id,t.status,`AI ${t.stage===`verify`?`verification`:`resolution`} turn ${e+1} ${t.status}`);for(let e of o.activities){let t=e.command?.match(/^(?:\S*\/)?(?:bash|zsh|sh)\s+-(?:lc|c|cl)\s+(['"])([\s\S]*)\1$/)?.[2]??e.command,n=t&&/^(?:pnpm|npm|yarn|bun) (?:run )?(?:test|typecheck|build|lint|format|codegen|install(?: --frozen-lockfile)?|db (?:ensure|migrate-local|setup))$/.test(t)?t:void 0;u(e.id,e.status,`${n??e.label} ${e.status}${e.finishedAt?` · ${i(e.finishedAt-e.startedAt)}`:``}`)}}}const h=Symbol.for(`@coreframe/vite/managed-dev-session-states`),g=(()=>{let e=globalThis;return e[h]??=new Map})(),ne=[100,500,2e3],_=a(i);function v({connectSupervisor:i,env:a=process.env,projectRoot:c,recoverSupervisor:h,startSession:g=u,supervisorOnly:v=!1}={}){let b=a[o]===`1`,ae=i??p,oe=h??i??f,S,C,w,T,E,D,O,k,A,j=!1,M=!1,N=!1,P=!1,F=!1,I,L=new Map,R=new WeakMap,z=new Set,B=new Map,V=(e,t)=>{let n=R.get(e);return n||(n=r(),R.set(e,n)),`${n}:${t}`},H=(e,t)=>{let n=t?.clientId;typeof n==`string`&&/^[a-zA-Z0-9_-]{1,128}$/.test(n)&&R.set(e,n)},U=(e,t,n)=>{try{e.send(t,n)}catch(e){I?.event(`transport.delivery-failed`,{event:t,...m(e)},`warn`)}},W=(e,t)=>{B.set(V(e,t.requestId),t),B.size>100&&B.delete(B.keys().next().value),I?.event(`action.result-sent`,{operationId:t.requestId,failed:!!t.error,sessionId:t.status?.trace?.sessionId,revision:t.status?.trace?.revision,busy:!!t.status?.busy}),U(e,s.actionResult,t)},G={mode:`waiting`,warnings:[]},K=()=>{let e=C;return T?.(),T=void 0,E?.(),E=void 0,C=void 0,w=void 0,e},q=()=>A??=(async()=>{F=!0,await O,await k,P=!1;let e=S,t=C,n=w;S=void 0,K(),e&&D&&await y(D,e),t&&(n&&await t.release(n).catch(()=>void 0),t.close()),I?.event(`vite.detached`),I?.close()})();return{name:`coreframe:managed-dev`,apply:`serve`,async config(n={}){let r,i;if(b){let a=t.resolve(n.root??process.cwd()),o=await _(`git`,[`rev-parse`,`--show-toplevel`],{cwd:a,timeout:5e3}).catch(()=>void 0);i={projectRoot:a,devCwd:process.cwd(),...o?.stdout.trim()?{servedWorktree:o.stdout.trim()}:{}};let s=await e(t.join(a,`package.json`),`utf8`).catch(e=>{if(e.code!==`ENOENT`)throw e});if(s){let e=JSON.parse(s);r=e.engines?.coreframe,typeof e.name==`string`&&(i={...i,projectName:e.name})}}return{define:{"import.meta.env.COREFRAME_MANAGED_DEV":JSON.stringify(b),"import.meta.env.COREFRAME_VERSION":JSON.stringify(r)??`undefined`,"import.meta.env.COREFRAME_MANAGED_DEV_CONTEXT_JSON":JSON.stringify(JSON.stringify(i))??`undefined`}}},configureServer(e){if(!b)return;let i=t.resolve(c??e.config.root);I=new d(i,`vite`),I.event(`vite.attached`),D=i;let o=!1,u=!1,f=()=>S?.getStatus()??G,p,h=te(t=>e.config.logger.info?.(t)),_=(e,t)=>{h(e);let n=JSON.stringify([e.trace,e.mode,e.busy]);n!==p&&(p=n,I?.event(`status.sent`,{sessionId:e.trace?.sessionId,revision:e.trace?.revision,operationId:e.trace?.operationId,mode:e.mode,busy:!!e.busy,delivery:t},`debug`))},A=()=>{if(!F){let t=f();_(t,`broadcast`),U(e.ws,s.status,{status:t})}},R=()=>{if(u||F)return;u=!0,I?.event(`vite.restart-queued`);let t=f().operation;e.config.logger.info?.(`[managed-dev ${t?.id.slice(0,8)??`restart`}] Restarting Vite`),queueMicrotask(()=>{u=!1,Promise.resolve(e.restart()).catch(t=>{I?.event(`vite.restart-failed`,m(t),`error`);let n=t instanceof Error?t.message:String(t);e.config.logger.error(`Coreframe managed development restart failed: ${n}`,{error:t instanceof Error?t:void 0})})})},se=(e,t)=>{if(F||C!==e||!P||t.event!==`managed-dev`)return;if(t.kind===`status`){G=t.status,A();return}if(t.kind===`restart`){o=!0,L.size===0&&(o=!1,R());return}let n=L.get(t.requestId);!n||!t.codex||typeof t.codex!=`object`||U(n.client,s.codex,{...t.codex,requestId:n.requestId})},J=async e=>{I?.event(`supervisor.connecting`,{supervisorId:e.state?.supervisorId,supervisorPid:e.state?.pid});let t,n=!1,r=e.onEvent(t=>se(e,t)),i=e.onClose(t=>{n=!0,!F&&C===e&&M&&!N&&!k&&(P=!1,Y(t))});C=e,T=r,E=i;try{await e.subscribe([`managed-dev`]);let r=await e.acquireManagedDev({env:a});if(I?.event(`supervisor.connected`,{supervisorId:e.state?.supervisorId,leaseId:r.leaseId}),t=r.leaseId,n||F||C!==e)throw Error(`The development supervisor disconnected while managed development was attaching.`);w=r.leaseId,G=r.status,P=!0,M=!0,A()}catch(n){throw C===e?K():(r(),i()),t&&await e.release(t).catch(()=>void 0),e.close(),n}};function Y(t,n=!1){if(F||!M)return Promise.resolve();if(k)return k;P=!1,I?.event(`supervisor.recovery-started`,{explicit:n,...m(t)},`warn`),j=!1,K()?.close(),G={message:n?`Managed development supervisor retrying connection.`:`Managed development supervisor disconnected. Reconnecting…`,mode:`waiting`,warnings:[]},A();let r=(async()=>{let n=t;for(let t=0;t<4;t+=1){if(F||(t>0&&await new Promise(e=>setTimeout(e,ne[t-1]??2e3)),F))return;try{let e=await oe({cwd:i,env:a,requiredResources:[`managed-dev`]});if(!e)throw Error(`No managed development supervisor is available.`);if(F){e.close();return}await J(e),j=!1;return}catch(r){I?.event(`supervisor.recovery-failed`,{attempt:t+1,...m(r)},`warn`),n=r;let i=x(r);e.config.logger.error(`Coreframe managed development supervisor recovery attempt ${t+1} failed: ${i}`,{error:r instanceof Error?r:void 0}),t+1<4&&(G={message:`Managed development supervisor recovery is retrying (${t+2}/4).`,mode:`waiting`,warnings:[]},A())}}if(F)return;let r=x(n),o=`${l}4 attempts: ${r} Retry to reconnect managed development.`;j=!0,G={message:o,mode:`error`,warnings:[o]},e.config.logger.error(`Coreframe managed development supervisor recovery failed: ${r}`,{error:n instanceof Error?n:void 0}),A()})();return k=r,r.then(()=>{k===r&&(k=void 0)},()=>{k===r&&(k=void 0)}),r}let X=(e,t)=>{M&&C===e&&ie(t)&&(P=!1,Y(t))},Z=async(t,n)=>{H(n,t);let r=t?.requestIds;if(Array.isArray(r))for(let e of r.slice(0,100)){let t=typeof e==`string`?B.get(V(n,e)):void 0;t?(I?.event(`action.result-replayed`,{operationId:t.requestId},`debug`),U(n,s.actionResult,t)):typeof e==`string`&&!z.has(V(n,e))&&W(n,{requestId:e,errorCode:`UNKNOWN_REQUEST`,error:`The server has no result for this request. Check the current status before trying again.`})}let i=C;if(i&&P)try{G=(await i.managedDevStatus()).status}catch(t){let n=t instanceof Error?t.message:String(t);e.config.logger.error(`Coreframe managed development status failed: ${n}`,{error:t instanceof Error?t:void 0}),X(i,t)}let a=f();_(a,`response`),U(n,s.status,{status:a})},Q=e=>{if(!e||typeof e!=`object`)return;let t=e;if(![`status-received`,`action-result-received`,`connected`,`disconnected`].includes(t.type))return;let n=e=>typeof e==`string`&&/^[a-zA-Z0-9-]{1,160}$/.test(e)?e:void 0;I?.event(`overlay.${t.type}`,{operationId:n(t.requestId),sessionId:n(t.sessionId),revision:Number.isSafeInteger(t.revision)&&t.revision>=0?t.revision:void 0,busy:typeof t.busy==`boolean`?t.busy:void 0,pending:typeof t.pending==`boolean`?t.pending:void 0},`debug`)},ce=async(t,n)=>{if(t.action.type===`retry-supervisor`){try{if(!M||!j)throw Error(`Managed development supervisor recovery is not available.`);await Y(void 0,!0);let e=f();if(j)throw Error(e.message??`Managed development supervisor recovery failed.`);W(n,{requestId:t.requestId,status:e})}catch(r){let i=x(r);e.config.logger.error(`Coreframe managed development action failed: ${i}`,{error:r instanceof Error?r:void 0}),W(n,{error:i,requestId:t.requestId,status:f()})}return}let i;try{if(!P)throw Error(`Managed development is still initializing.`);let i=C;if(i){let a=r();L.set(a,{client:n,requestId:t.requestId});try{let r=await i.managedDevAction({action:t.action,requestId:a,operationId:t.requestId,requestKey:V(n,t.requestId)});r.status&&(G=r.status),r.error&&e.config.logger.error(`Coreframe managed development action failed: ${r.error}`),W(n,{...r,requestId:t.requestId}),!r.error&&o&&(o=!1,R())}catch(e){throw X(i,e),e}finally{L.delete(a)}return}let a=S;if(!a)throw Error(`Managed development is still initializing.`);let c=await a.action(t.action,{operationId:t.requestId,requestKey:V(n,t.requestId),onCodexEvent:e=>U(n,s.codex,{...e,requestId:t.requestId})});W(n,{requestId:t.requestId,...c}),o&&(o=!1,queueMicrotask(()=>{q().then(()=>e.restart()).catch(t=>{let n=t instanceof Error?t.message:String(t);e.config.logger.error(`Coreframe managed development restart failed: ${n}`,{error:t instanceof Error?t:void 0})})}));return}catch(e){i=e}let a=i instanceof Error?i.message:String(i);e.config.logger.error(`Coreframe managed development action failed: ${a}`,{error:i instanceof Error?i:void 0}),W(n,{error:a,requestId:t.requestId,status:f()})},$=async(e,t)=>{H(t,e);let n=V(t,e.requestId);if(z.has(n))return;let r=B.get(n);if(r){U(t,s.actionResult,r);return}z.add(n);try{await I.run({operationId:e.requestId,actionType:e.action.type},()=>ee(`vite.action`,()=>ce(e,t)))}finally{z.delete(n)}};e.ws.on(s.statusRequest,Z),e.ws.on(s.action,$),e.ws.on(s.diagnostic,Q),O=(async()=>{let t,r;try{if(N=!0,t=await ae({cwd:i,env:a,requiredResources:[`managed-dev`]}),t){if(F){t.close();return}await J(t);return}if(v){let e=`The managed development supervisor is unavailable.`;I?.event(`supervisor.unavailable`,{mode:`supervisor-only`},`warn`),G={message:e,mode:`error`,warnings:[e]},A();return}let e=await n({cwd:i});if(F)return;if(r=await g({config:e,cwd:i,env:a,onRestart:()=>{o=!0},onStatusChange:e=>{G=e,A()}}),S=r,G=r.getStatus(),F){S=void 0,await r.close();return}if(await re(i,r),F){S=void 0,await y(i,r);return}P=!0}catch(n){if(I?.event(`vite.initialization-failed`,m(n),`error`),t&&C===t&&(K(),t.close()),S===r&&(S=void 0),!F){let t=n instanceof Error?n.message:String(n);G={message:t,mode:`error`,warnings:[t]},e.config.logger.error(`Coreframe managed development initialization failed: ${t}`,{error:n instanceof Error?n:void 0}),A()}}finally{N=!1}})(),e.httpServer?.once(`close`,()=>{e.ws.off(s.statusRequest,Z),e.ws.off(s.action,$),e.ws.off(s.diagnostic,Q),q()})},async closeBundle(){await q()}}}async function re(e,t){await b(e,async e=>{let n=e.session;e.session=void 0,await n?.close();try{await t.activate(),e.session=t}catch(e){throw await t.close(),e}})}async function y(e,t){await b(e,async e=>{e.session===t&&(e.session=void 0),await t.close()})}async function b(e,t){let n=g.get(e);n||(n={transition:Promise.resolve()},g.set(e,n));let r=n.transition,i;n.transition=new Promise(e=>{i=()=>e()}),await r;try{await t(n)}finally{i()}}function x(e){return e instanceof Error?e.message:String(e)}function ie(e){if(!e||typeof e!=`object`)return!1;let t=e;return t.retryable===!0||t.code===`LEASE_EXPIRED`||t.code===`SUPERVISOR_STOPPING`}export{v as t};
|
|
@@ -1,6 +1,38 @@
|
|
|
1
|
+
import { ManagedDevAction, ManagedDevCodexMessage, ManagedDevCodexOptions, ManagedDevRebasedCommit, ManagedDevRecoveryAction, ManagedDevStatus } from "@coreframe/dev-contracts/managed-dev";
|
|
1
2
|
import { ReactNode } from "react";
|
|
2
3
|
|
|
3
4
|
//#region overlay/managed-dev-overlay.d.ts
|
|
5
|
+
type ActionSuccess = {
|
|
6
|
+
heading: string;
|
|
7
|
+
message: string;
|
|
8
|
+
preserveDuringStatus?: boolean;
|
|
9
|
+
};
|
|
10
|
+
type ManagedDevOverlayAction = ManagedDevAction | ManagedDevRecoveryAction;
|
|
11
|
+
type CodexState = {
|
|
12
|
+
commits: ManagedDevRebasedCommit[];
|
|
13
|
+
messages: ManagedDevCodexMessage[];
|
|
14
|
+
phase: "running" | "complete" | "error";
|
|
15
|
+
requestId: string;
|
|
16
|
+
stage: "resolve" | "verify";
|
|
17
|
+
startedAt?: number;
|
|
18
|
+
totalCommits?: number;
|
|
19
|
+
};
|
|
20
|
+
type ManagedDevOverlayDebugScenario = {
|
|
21
|
+
pendingAction?: ManagedDevOverlayAction;
|
|
22
|
+
connected?: boolean;
|
|
23
|
+
controls?: {
|
|
24
|
+
pending?: boolean;
|
|
25
|
+
error?: string;
|
|
26
|
+
success?: string;
|
|
27
|
+
};
|
|
28
|
+
codex?: CodexState;
|
|
29
|
+
description: string;
|
|
30
|
+
error?: string;
|
|
31
|
+
id: string;
|
|
32
|
+
label: string;
|
|
33
|
+
status: ManagedDevStatus;
|
|
34
|
+
success?: ActionSuccess;
|
|
35
|
+
};
|
|
4
36
|
type ManagedDevOverlayIndicatorProps = {
|
|
5
37
|
color?: string;
|
|
6
38
|
paused?: boolean;
|
|
@@ -20,6 +52,31 @@ declare function ManagedDevOverlay({
|
|
|
20
52
|
indicator,
|
|
21
53
|
rightOffset
|
|
22
54
|
}: ManagedDevOverlayProps): import("react").JSX.Element;
|
|
55
|
+
type ManagedDevOverlayDebugSnapshot = {
|
|
56
|
+
available: boolean;
|
|
57
|
+
scenarioId?: string;
|
|
58
|
+
status?: ManagedDevStatus;
|
|
59
|
+
codex?: CodexState;
|
|
60
|
+
error?: string;
|
|
61
|
+
success?: ActionSuccess;
|
|
62
|
+
errorsDismissed: boolean;
|
|
63
|
+
codexOptions: ManagedDevCodexOptions;
|
|
64
|
+
controlSuccess?: string;
|
|
65
|
+
pendingAction?: ManagedDevOverlayAction;
|
|
66
|
+
controls?: ManagedDevOverlayDebugScenario["controls"];
|
|
67
|
+
};
|
|
68
|
+
declare function ManagedDevOverlayDebug({
|
|
69
|
+
scenario: suppliedScenario,
|
|
70
|
+
onSnapshot,
|
|
71
|
+
onAction,
|
|
72
|
+
bottomOffset,
|
|
73
|
+
indicator,
|
|
74
|
+
rightOffset
|
|
75
|
+
}: Pick<ManagedDevOverlayProps, "bottomOffset" | "indicator" | "rightOffset"> & {
|
|
76
|
+
scenario?: ManagedDevOverlayDebugScenario;
|
|
77
|
+
onSnapshot?(snapshot: ManagedDevOverlayDebugSnapshot): void;
|
|
78
|
+
onAction?(action: ManagedDevOverlayAction): void;
|
|
79
|
+
}): import("react").JSX.Element;
|
|
23
80
|
declare function ManagedDevOverlayIndicator({
|
|
24
81
|
color,
|
|
25
82
|
paused,
|
|
@@ -27,4 +84,4 @@ declare function ManagedDevOverlayIndicator({
|
|
|
27
84
|
warningColor
|
|
28
85
|
}: ManagedDevOverlayIndicatorProps): import("react").JSX.Element;
|
|
29
86
|
//#endregion
|
|
30
|
-
export { ManagedDevOverlay, ManagedDevOverlayIndicator, ManagedDevOverlayIndicatorProps, ManagedDevOverlayProps, toggleManagedDevOverlay };
|
|
87
|
+
export { ManagedDevOverlay, ManagedDevOverlayDebug, ManagedDevOverlayDebugScenario, ManagedDevOverlayDebugSnapshot, ManagedDevOverlayIndicator, ManagedDevOverlayIndicatorProps, ManagedDevOverlayProps, toggleManagedDevOverlay };
|