@coreframe/dev 0.1.10 → 0.1.12
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/dist/managed-dev.js +1 -1
- package/package.json +4 -4
package/dist/managed-dev.js
CHANGED
|
@@ -3,5 +3,5 @@ import{managedDevCodexHighArgs as e,managedDevCodexMaxArgs as t,managedDevCodexM
|
|
|
3
3
|
`)}\n`}})};try{await r(!0)}catch(i){if(!t.devTarget)throw i;let a;try{a=await Promise.all([q(e,[`rev-parse`,T]),J(e,[`rev-parse`,E])])}catch{throw i}let[o,s]=a;if(o!==n||s===t.devTarget)throw i;await r(!1)}}async function P(e,t,n,r,i,a,o=0){try{await K(e,n,{env:{GIT_EDITOR:`true`}});return}catch(n){let s=await R(e);if(s.length===0)throw n;try{for(;s.length>0;){await F(e,t,r,s,a?await I(e,a):[],o,i),await K(e,[`diff`,`--check`]),await K(e,[`add`,`--all`]);let n=await R(e);if(n.length>0)throw Error(`Codex left unresolved paths: ${n.join(`, `)}`);try{await K(e,[r,`--continue`],{env:{GIT_EDITOR:`true`}})}catch(t){if(s=await R(e),s.length===0)throw t;i({commits:a?await I(e,a):[],phase:`progress`,totalCommits:o});continue}i({commits:a?await I(e,a):[],phase:`progress`,totalCommits:o}),s=await R(e)}return}catch(t){throw await K(e,[r,`--abort`]).catch(()=>void 0),Error(`Codex could not resolve ${r} conflicts: ${Z(t)}`)}}}async function F(e,r,i,a,o,s,c){let l=`Resolve the current Git ${i} conflicts cleanly. Edit only files needed for the resolution, preserve intended behavior from both sides, and remove all conflict markers. Do not run pnpm test or any other test suite; managed development will run pnpm test after you finish and report any failures. You may run pnpm typecheck and pnpm format if useful. Do not stage files or run Git continuation commands. Conflicted paths: ${a.join(`, `)}`;c({commits:o,message:{kind:`user`,text:l},phase:`start`,totalCommits:s});let u=g(`codex`,[`exec`,...t,`--ephemeral`,`--ignore-user-config`,`--json`,`--sandbox`,`workspace-write`,`--cd`,e,l],{cwd:e,env:r,stdin:`ignore`}),d=``,f=[];try{await Promise.all([L(u.stdout,e=>{let t=ge(e,n);t&&(t.kind===`agent`&&(d=t.text),c({message:t,phase:`message`}))}),L(u.stderr,e=>f.push(e))])}catch(e){c({phase:`error`});let t=f.join(`
|
|
4
4
|
`).trim();throw t?Error(`${Z(e)}\n${t}`):e}c({finalMessage:d||`Codex resolved the conflicts.`,phase:`complete`})}async function I(e,t){let n=await q(e,[`log`,`--reverse`,`--format=%H%x00%s`,`${t}..HEAD`]);return n?n.split(`
|
|
5
5
|
`).map(e=>{let[t,n=``]=e.split(`\0`,2);return{commit:t,shortCommit:t.slice(0,12),subject:n}}):[]}function ge(e,t){let n;try{n=JSON.parse(e)}catch{throw Error(`Codex emitted invalid JSONL output.`)}if(!n||typeof n!=`object`)return;let r=n.item;if(n.type!==`item.completed`||!r||typeof r!=`object`)return;let{text:i,type:a}=r;if(!(typeof i!=`string`||!i.trim())){if(a===`reasoning`)return{kind:`thought`,text:i};if(a===`agent_message`)return{author:t,kind:`agent`,text:i}}}async function L(e,t){for await(let n of e)t(n)}async function R(e){return Y(await q(e,[`diff`,`--name-only`,`--diff-filter=U`,`-z`]))}async function _e(e,t,n){await g(X(),[n],{cwd:e,env:t})}function ve(e){let t=z(e);if(t){let e=C(t).trim();if(e)return e}return C(Z(e))}function z(e){if(typeof e!=`object`||!e)return;let t=e;if(typeof t.output==`string`&&t.output.trim())return t.output;let n=[t.stdout,t.stderr].filter(e=>typeof e==`string`&&e.length>0);return n.length>0?n.join(`
|
|
6
|
-
`):void 0}async function ye({config:e,cwd:t,env:n}){if(!e.database)return;let r=await B({config:e,cwd:t,env:n});try{await g(X(),[`db`,`migrate-local`],{cwd:t,env:n})}catch(e){throw await r.restore(),e}await r.discard().catch(e=>{console.warn(`Could not remove the managed-development database snapshot: ${Z(e)}`)}),await d(r.directory,{force:!0,recursive:!0})}async function B({config:e,cwd:t,env:n}){let r=m.join(t,`.coreframe`,`managed-dev-backups`);await o(r,{recursive:!0});let i=await s(m.join(r,`refresh-`));if(e.database?.dialect===`sqlite`){let e=[`turso.db`,`turso.db-wal`,`turso.db-shm`],n=new Set;for(let r of e)await be(m.join(t,`.coreframe`,r),m.join(i,r))&&n.add(r);return{directory:i,async discard(){},async restore(){for(let r of e){let e=m.join(t,`.coreframe`,r);n.has(r)?await a(m.join(i,r),e):await d(e,{force:!0})}}}}if(!n.DATABASE_URL)throw Error(`DATABASE_URL is required to snapshot local PostgreSQL.`);let c=await xe(t);if(c)return Se({directory:i,connectionString:n.DATABASE_URL,postgres:c});let l=m.join(i,`database.dump`),u=G(n,n.DATABASE_URL);return await g(`pg_dump`,[`--format=custom`,`--file`,l],{cwd:t,env:u,stdin:`ignore`}),{directory:i,async discard(){},async restore(){await g(`pg_restore`,[`--clean`,`--if-exists`,`--no-owner`,`--dbname`,u.PGDATABASE,l],{cwd:t,env:u,stdin:`ignore`})}}}async function be(e,t){try{return await a(e,t),!0}catch(e){if(!(e instanceof Error&&`code`in e&&e.code===`ENOENT`))throw e;return!1}}async function xe(e){let t=JSON.parse(await l(m.join(e,`package.json`),`utf8`));if(!(!t.dependencies?.pg&&!t.devDependencies?.pg&&!t.optionalDependencies?.pg))try{return await import(w(`pg`,S(m.join(e,`package.json`)).href))}catch(e){if(e instanceof Error&&`code`in e&&e.code===`ERR_MODULE_NOT_FOUND`)return;throw e}}async function Se({directory:e,connectionString:t,postgres:n}){let r=new URL(t),i=decodeURIComponent(r.pathname.slice(1));if(!i)throw Error(`DATABASE_URL must name a PostgreSQL database to snapshot.`);let a=`coreframe_backup_${x(6).toString(`hex`)}`,o=`${a}_failed`,s=new URL(r);s.pathname=i===`postgres`?`/template1`:`/postgres`;let c=new n.Client({connectionString:s.href});await c.connect();try{await H(c,i,!1),await U(c,i),await c.query(`CREATE DATABASE ${W(a)} WITH TEMPLATE ${W(i)}`),await H(c,a,!0)}finally{await H(c,i,!0).catch(()=>void 0),await c.end()}return{directory:e,async discard(){await V(n,s.href,async e=>{await U(e,a),await e.query(`DROP DATABASE ${W(a)}`)})},async restore(){await V(n,s.href,async e=>{await H(e,i,!1),await U(e,i),await e.query(`ALTER DATABASE ${W(i)} RENAME TO ${W(o)}`);try{await e.query(`ALTER DATABASE ${W(a)} RENAME TO ${W(i)}`)}catch(t){throw await e.query(`ALTER DATABASE ${W(o)} RENAME TO ${W(i)}`).catch(()=>void 0),await H(e,i,!0).catch(()=>void 0),t}await U(e,o),await e.query(`DROP DATABASE ${W(o)}`)})}}}async function V(e,t,n){let r=new e.Client({connectionString:t});await r.connect();try{return await n(r)}finally{await r.end()}}async function H(e,t,n){await e.query(`ALTER DATABASE ${W(t)} ALLOW_CONNECTIONS ${n?`true`:`false`}`)}async function U(e,t){await e.query(`SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = $1 AND pid <> pg_backend_pid()`,[t])}function W(e){return`"${e.replaceAll(`"`,`""`)}"`}function G(e,t){let n=new URL(t);return{...e,PGDATABASE:decodeURIComponent(n.pathname.slice(1)),PGHOST:n.hostname,PGPASSWORD:decodeURIComponent(n.password),PGPORT:n.port||`5432`,PGUSER:decodeURIComponent(n.username)}}function Ce(e){return e.some(e=>m.basename(e)===`package.json`||m.basename(e).endsWith(`lock.yaml`)||m.basename(e)===`pnpm-workspace.yaml`)}function we(e){return e.some(e=>Ce([e])||/(^|\/)(panda\.config|vite|coreframe|tsconfig|drizzle)\.[^/]+$/.test(e)||/(^|\/)(drizzle|scripts|src\/api
|
|
6
|
+
`):void 0}async function ye({config:e,cwd:t,env:n}){if(!e.database)return;let r=await B({config:e,cwd:t,env:n});try{await g(X(),[`db`,`migrate-local`],{cwd:t,env:n})}catch(e){throw await r.restore(),e}await r.discard().catch(e=>{console.warn(`Could not remove the managed-development database snapshot: ${Z(e)}`)}),await d(r.directory,{force:!0,recursive:!0})}async function B({config:e,cwd:t,env:n}){let r=m.join(t,`.coreframe`,`managed-dev-backups`);await o(r,{recursive:!0});let i=await s(m.join(r,`refresh-`));if(e.database?.dialect===`sqlite`){let e=[`turso.db`,`turso.db-wal`,`turso.db-shm`],n=new Set;for(let r of e)await be(m.join(t,`.coreframe`,r),m.join(i,r))&&n.add(r);return{directory:i,async discard(){},async restore(){for(let r of e){let e=m.join(t,`.coreframe`,r);n.has(r)?await a(m.join(i,r),e):await d(e,{force:!0})}}}}if(!n.DATABASE_URL)throw Error(`DATABASE_URL is required to snapshot local PostgreSQL.`);let c=await xe(t);if(c)return Se({directory:i,connectionString:n.DATABASE_URL,postgres:c});let l=m.join(i,`database.dump`),u=G(n,n.DATABASE_URL);return await g(`pg_dump`,[`--format=custom`,`--file`,l],{cwd:t,env:u,stdin:`ignore`}),{directory:i,async discard(){},async restore(){await g(`pg_restore`,[`--clean`,`--if-exists`,`--no-owner`,`--dbname`,u.PGDATABASE,l],{cwd:t,env:u,stdin:`ignore`})}}}async function be(e,t){try{return await a(e,t),!0}catch(e){if(!(e instanceof Error&&`code`in e&&e.code===`ENOENT`))throw e;return!1}}async function xe(e){let t=JSON.parse(await l(m.join(e,`package.json`),`utf8`));if(!(!t.dependencies?.pg&&!t.devDependencies?.pg&&!t.optionalDependencies?.pg))try{return await import(w(`pg`,S(m.join(e,`package.json`)).href))}catch(e){if(e instanceof Error&&`code`in e&&e.code===`ERR_MODULE_NOT_FOUND`)return;throw e}}async function Se({directory:e,connectionString:t,postgres:n}){let r=new URL(t),i=decodeURIComponent(r.pathname.slice(1));if(!i)throw Error(`DATABASE_URL must name a PostgreSQL database to snapshot.`);let a=`coreframe_backup_${x(6).toString(`hex`)}`,o=`${a}_failed`,s=new URL(r);s.pathname=i===`postgres`?`/template1`:`/postgres`;let c=new n.Client({connectionString:s.href});await c.connect();try{await H(c,i,!1),await U(c,i),await c.query(`CREATE DATABASE ${W(a)} WITH TEMPLATE ${W(i)}`),await H(c,a,!0)}finally{await H(c,i,!0).catch(()=>void 0),await c.end()}return{directory:e,async discard(){await V(n,s.href,async e=>{await U(e,a),await e.query(`DROP DATABASE ${W(a)}`)})},async restore(){await V(n,s.href,async e=>{await H(e,i,!1),await U(e,i),await e.query(`ALTER DATABASE ${W(i)} RENAME TO ${W(o)}`);try{await e.query(`ALTER DATABASE ${W(a)} RENAME TO ${W(i)}`)}catch(t){throw await e.query(`ALTER DATABASE ${W(o)} RENAME TO ${W(i)}`).catch(()=>void 0),await H(e,i,!0).catch(()=>void 0),t}await U(e,o),await e.query(`DROP DATABASE ${W(o)}`)})}}}async function V(e,t,n){let r=new e.Client({connectionString:t});await r.connect();try{return await n(r)}finally{await r.end()}}async function H(e,t,n){await e.query(`ALTER DATABASE ${W(t)} ALLOW_CONNECTIONS ${n?`true`:`false`}`)}async function U(e,t){await e.query(`SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = $1 AND pid <> pg_backend_pid()`,[t])}function W(e){return`"${e.replaceAll(`"`,`""`)}"`}function G(e,t){let n=new URL(t);return{...e,PGDATABASE:decodeURIComponent(n.pathname.slice(1)),PGHOST:n.hostname,PGPASSWORD:decodeURIComponent(n.password),PGPORT:n.port||`5432`,PGUSER:decodeURIComponent(n.username)}}function Ce(e){return e.some(e=>m.basename(e)===`package.json`||m.basename(e).endsWith(`lock.yaml`)||m.basename(e)===`pnpm-workspace.yaml`)}function we(e){return e.some(e=>Ce([e])||/(^|\/)(panda\.config|vite|coreframe|tsconfig|drizzle)\.[^/]+$/.test(e)||/(^|\/)(drizzle|scripts|src\/api)(\/|$)/.test(e))}function Te(e){return e.some(e=>e===`src-flutter`||e.startsWith(`src-flutter/`))}async function Ee(e,t,n,r){return{commit:n,commits:(await q(e,[`log`,`--reverse`,`--format=%H%x00%s`,`${t}..${n}`])).split(`
|
|
7
7
|
`).filter(Boolean).map(e=>{let[t,n]=e.split(`\0`);return{commit:t,shortCommit:t.slice(0,12),subject:n}}),shortCommit:n.slice(0,12),source:r,subject:await q(e,[`show`,`-s`,`--format=%s`,n])}}async function De(e){try{let t=await c(e,`wx`);await t.writeFile(`${h.pid}\n`),await t.close()}catch(t){if(!(t instanceof Error&&`code`in t&&t.code===`EEXIST`))throw t;let n=(await l(e,`utf8`).catch(()=>`unknown`)).trim(),r=Number(n);if(Number.isInteger(r)&&!Oe(r)){await f(e).catch(()=>void 0),await De(e);return}throw Error(`Managed development is already owned by PID ${n}.`)}}function Oe(e){try{return h.kill(e,0),!0}catch(e){return!(e instanceof Error&&`code`in e&&e.code===`ESRCH`)}}async function ke(e){e&&(await l(e,`utf8`).catch(()=>void 0))?.trim()===String(h.pid)&&await f(e).catch(()=>void 0)}async function K(e,t,{env:n}={}){return g(`git`,t,{cwd:e,env:n,stdin:`ignore`})}async function q(e,t){return(await K(e,t)).stdout.trim()}async function J(e,t){try{return await q(e,t)||void 0}catch(e){if(e instanceof _&&e.exitCode&&e.exitCode>0)return;throw e}}async function Ae(e,t,n){try{return await K(e,[`merge-base`,`--is-ancestor`,t,n]),!0}catch(e){if(e instanceof _&&e.exitCode===1)return!1;throw e}}function je(e,t){return e.length===t.length&&[...e].sort().every((e,n)=>e===[...t].sort()[n])}function Y(e){return e.split(`\0`).filter(Boolean)}function Me(e){return e.split(/\r?\n/,1)[0]??``}function Ne(e){return e.type===`acknowledge-codex`?`Acknowledging Codex result`:e.type===`dismiss-check`?`Dismissing managed development check`:e.type===`message`?`Generating commit message`:e.type===`commit`?`Committing local changes`:e.type===`apply`?`Integrating accepted update`:e.type===`prepare`?`Reviewing working tree`:e.type===`retry-codegen`?`Retrying Panda codegen`:e.type===`retry-install`?`Retrying dependency installation`:e.type===`reset-database`?`Resetting local database`:`Aborting refresh`}function X(){return h.platform===`win32`?`pnpm.cmd`:`pnpm`}function Z(e){return e instanceof Error?e.message:String(e)}export{D as isManagedDevCheckout,O as isPrimaryCheckout,A as startManagedDevSession};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@coreframe/dev",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.12",
|
|
4
4
|
"description": "Development workflow utilities for Coreframe apps",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -40,10 +40,10 @@
|
|
|
40
40
|
"dependencies": {
|
|
41
41
|
"import-meta-resolve": "^4.2.0",
|
|
42
42
|
"nano-spawn": "^2.1.0",
|
|
43
|
-
"@coreframe/config": "^0.1.
|
|
44
|
-
"@coreframe/db": "^0.1.
|
|
43
|
+
"@coreframe/config": "^0.1.8",
|
|
44
|
+
"@coreframe/db": "^0.1.9",
|
|
45
45
|
"@coreframe/dev-contracts": "^0.1.5",
|
|
46
|
-
"@coreframe/dev-supervisor": "^0.1.
|
|
46
|
+
"@coreframe/dev-supervisor": "^0.1.8"
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
49
49
|
"@types/node": "^26.1.0",
|