@unbrained/pm-cli 2026.10.5 → 2026.10.6
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/.claude-plugin/marketplace.json +2 -2
- package/CHANGELOG.md +26 -1
- package/dist/cli/register-setup.js +1 -1
- package/dist/cli/runtime/projection-retry.js +1 -1
- package/dist/cli-bundle/bundle-manifest.json +158 -158
- package/dist/cli-bundle/chunks/{chunk-Z66DWDAU.js → chunk-25EW53VO.js} +39 -38
- package/dist/cli-bundle/chunks/{chunk-YVBRASXO.js → chunk-3CCVTV6Q.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-5MNOWZPN.js → chunk-3REXBTST.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-4WB55TBC.js +80 -0
- package/dist/cli-bundle/chunks/{chunk-OOLYASYJ.js → chunk-6STTPXOC.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-AJ7H6XUF.js → chunk-ATB4ZZBQ.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-N4YGSG6F.js → chunk-D4G43LBV.js} +38 -38
- package/dist/cli-bundle/chunks/{chunk-HRJ6G6ZG.js → chunk-K6D6DMRT.js} +28 -28
- package/dist/cli-bundle/chunks/chunk-KIRHWPZB.js +2 -0
- package/dist/cli-bundle/chunks/chunk-O67BH435.js +6 -0
- package/dist/cli-bundle/chunks/{chunk-3CYOBJUK.js → chunk-RJHLD64E.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-WFZ4UEOB.js → chunk-TUKO5NF7.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-VZ63DEVJ.js → chunk-XJD47LUH.js} +2 -2
- package/dist/cli-bundle/chunks/{register-list-query-75QXHIFH.js → register-list-query-53WYLNZT.js} +2 -2
- package/dist/cli-bundle/chunks/{register-mutation-YS54SCHG.js → register-mutation-34XXUBVI.js} +2 -2
- package/dist/cli-bundle/chunks/{register-operations-6KHZQSYJ.js → register-operations-WANO6EIM.js} +2 -2
- package/dist/cli-bundle/chunks/register-setup-WT37UPBQ.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-GITOYRUW.js → chunk-6KFKQD2D.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-UDYRVBOZ.js → chunk-FOHRPFIT.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-DDRN42PB.js → chunk-GRQXL5G5.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-ABV67XCC.js → chunk-JZ4WGUVH.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-B5RSLVE6.js → chunk-NM3PM6O6.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-OT7HK7SG.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-2CVX3KR3.js → chunk-PCLU34KB.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-5C3IDDW7.js → chunk-QQIE4L42.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-RPUNVKXK.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-LE4JUCRR.js → chunk-RXSVJPZ7.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-SPN5QTZ3.js +30 -0
- package/dist/cli-bundle/focused-chunks/{chunk-CLDPTMQY.js → chunk-SUZJNPGB.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-YMU42COG.js → chunk-W4BG5HHS.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-C224METM.js → chunk-Y5HXFDTZ.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-ECBOPEJE.js → chunk-ZK5SOOPC.js} +61 -61
- package/dist/cli-bundle/focused-chunks/chunk-ZQK2XUSS.js +12 -0
- package/dist/cli-bundle/main.js +21 -21
- package/dist/cli-bundle/sdk-authoring.js +1 -1
- package/dist/cli-bundle/sdk-contracts.js +1 -1
- package/dist/cli-bundle/sdk-core.js +31 -30
- package/dist/cli-bundle/sdk-governance.js +1 -1
- package/dist/cli-bundle/sdk-graph.js +1 -1
- package/dist/cli-bundle/sdk-merge.js +42 -42
- package/dist/cli-bundle/sdk-query.js +1 -1
- package/dist/cli-bundle/sdk-runtime.js +1 -1
- package/dist/cli-bundle/sdk-testing.js +1 -1
- package/dist/cli-bundle/sdk.js +2 -2
- package/dist/core/extensions/extension-types.d.ts +2 -0
- package/dist/core/extensions/extension-types.js +1 -1
- package/dist/sdk/cli-bootstrap.d.ts +5 -1
- package/dist/sdk/cli-bootstrap.js +1 -1
- package/dist/sdk/cli-contracts/flag-contracts.js +1 -1
- package/dist/sdk/cli-contracts/flag-lexicon-contracts.js +1 -1
- package/dist/sdk/cli-contracts/tool-parameter-tables.js +1 -1
- package/dist/sdk/cli-contracts/tool-schema.d.ts +2 -2
- package/dist/sdk/cli-contracts/tool-schema.js +1 -1
- package/dist/sdk/extension/managed-state.d.ts +2 -0
- package/dist/sdk/extension/managed-state.js +1 -1
- package/dist/sdk/extension/managed-update-status.d.ts +3 -0
- package/dist/sdk/extension/managed-update-status.js +2 -0
- package/dist/sdk/extension/source-resolution.d.ts +2 -6
- package/dist/sdk/extension/source-resolution.js +1 -1
- package/dist/sdk/extension/update-check.d.ts +10 -0
- package/dist/sdk/extension/update-check.js +1 -1
- package/dist/sdk/extension-command-context.js +2 -1
- package/dist/sdk/extension.d.ts +4 -0
- package/dist/sdk/extension.js +1 -1
- package/dist/sdk/generated/generated-error-code-catalog-part-1.js +1 -1
- package/dist/sdk/generated/generated-error-code-catalog-part-2.js +1 -1
- package/dist/sdk/public-surface.json +1 -1
- package/dist/sdk/query/get.js +1 -1
- package/dist/sdk/read-output-contracts.js +1 -1
- package/dist/sdk/runtime-input.js +1 -1
- package/dist/sdk/test/execution.d.ts +2 -1
- package/dist/sdk/test/execution.js +3 -3
- package/docs/DEVELOPMENT_DEPENDENCY_SECURITY.md +36 -0
- package/docs/GET_READ_EVIDENCE.md +17 -1
- package/docs/OUTPUT_PROJECTION_CONTRACTS.md +23 -0
- package/docs/PR_REVIEW_LOOP.md +21 -4
- package/docs/README.md +1 -0
- package/docs/RELEASING.md +18 -0
- package/docs/SDK_CONFIGURATION_SAFETY.md +123 -0
- package/docs/generated/FLAG_LEXICON_BUDGETS.md +3 -3
- package/docs/generated/REFUSAL_CLOSURE_CENSUS.md +4 -3
- package/marketplace.json +2 -2
- package/package.json +3 -3
- package/packages/pm-beads/package.json +1 -1
- package/packages/pm-calendar/package.json +1 -1
- package/packages/pm-command-kit/package.json +1 -1
- package/packages/pm-digital-twin/package.json +1 -1
- package/packages/pm-governance-audit/package.json +1 -1
- package/packages/pm-guide-shell/package.json +1 -1
- package/packages/pm-kanban/package.json +1 -1
- package/packages/pm-lifecycle-hooks/package.json +1 -1
- package/packages/pm-linked-test-adapters/package.json +1 -1
- package/packages/pm-search-advanced/package.json +1 -1
- package/packages/pm-templates/package.json +1 -1
- package/packages/pm-todos/package.json +1 -1
- package/packages/pm-vcs/package.json +1 -1
- package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
- package/plugins/pm-claude/package.json +2 -2
- package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
- package/plugins/pm-codex/package.json +2 -2
- package/plugins/pm-codex/plugin.json +1 -1
- package/dist/cli-bundle/chunks/chunk-D332RXZ7.js +0 -80
- package/dist/cli-bundle/chunks/chunk-KRVI56QE.js +0 -6
- package/dist/cli-bundle/chunks/chunk-TGMONGWX.js +0 -2
- package/dist/cli-bundle/chunks/register-setup-RTATEN2M.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-DOVTUKJQ.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-GUIF3WVC.js +0 -30
- package/dist/cli-bundle/focused-chunks/chunk-RHIH6XIW.js +0 -12
- package/dist/cli-bundle/focused-chunks/chunk-XV5RV4ZT.js +0 -2
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{$a as we,Ub as _e,Vb as ge,Xb as C,_b as Ee,a as ee,ac as ve,bc as Se,xc as Te}from"./chunk-Z66DWDAU.js";import{b as pe,c as N}from"./chunk-D332RXZ7.js";import{Ai as de,B,Cc as Z,Dc as Q,Go as ye,Jo as he,Lg as ie,Nl as me,Pl as fe,Tb as X,Ua as V,ba as J,bb as Y,dg as te,ea as v,fg as re,gg as ne,ha as K,hi as se,jg as oe,kh as ae,ma as q,na as p,nk as le,pa as d,tk as ue,vb as H,yi as ce,z as $}from"./chunk-N4YGSG6F.js";(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="4175f7f5-a689-5d05-982a-f92e21bc83e7")}catch{}})();import Ve from"node:crypto";(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="62e0ef49-30c8-56e0-985e-49c83d14695e")}catch{}})();var U=["op","id","reason","options"],Ae=[...U,"ref"],Re=["schema_version","mutations"],Ne="[a-z][a-z0-9._-]{0,63}",Ie=new RegExp(`^${Ne}$`,"u"),Ce=new RegExp(`(^|,)id=@(${Ne})(?=,|$)`,"gu"),be=e=>e.slice(2).replaceAll(/-([a-z])/gu,(t,n)=>n.toUpperCase()),T=["item","linked","schedule","claim_state","children","omission_receipt","row_contract","context_intent"],Ue=new Set(["created_at","updated_at","closed_at","version","format_version","path","author","collection_counts","notes_count","tests_count"]),Ye=new Set([...Ue,"completed_at","id"]),S=new Set(["id","title","description","type","status","priority","tags","body","deadline","estimated_minutes","acceptance_criteria","definition_of_ready","order","rank","assignee",...J,"affected_version","fixed_version","component","regression","customer_impact","close_reason","completed_at","dependencies","comments","notes","learnings","files","tests","docs","reminders","events","type_options"]),Me={create:ye.map(e=>e.target),update:he.map(e=>e.target),close:le.map(e=>be(e.flag)).filter(e=>e!=="reason"),release:ue.map(e=>be(e.flag))};function hr(e){let t={},n=e.createCompensation;if(n!==void 0){if(n!=="close"&&n!=="delete")throw new d("createCompensation must be close or delete.",p.USAGE);t.createCompensation=n}for(let r of["lockTtlSeconds","lockWaitMs"]){let o=e[r];if(o===void 0)continue;let i=typeof o=="number"||typeof o=="string"&&o.trim().length>0?Number(o):Number.NaN;if(!Number.isSafeInteger(i)||i<=0)throw new d(`${r} must be a positive safe integer.`,p.USAGE);t[r]=i}return t}function f(e){if(typeof e!="object"||e===null||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function A(e,t){let n=Math.max(1,Math.min(3,Math.floor(e.length/4)+1)),r;for(let o of t){let i=H(e,o,n);i!==null&&(r===void 0||i<r.distance)&&(r={key:o,distance:i})}return r?.key}function w(e,t,n){let r=A(t,n);return new d(r===void 0?`${e} does not recognize key "${t}". Allowed keys: ${n.join(", ")}.`:`${e} does not recognize key "${t}". Did you mean "${r}"?`,p.USAGE,{code:"stdin_json_unknown_key",required:`Use documented ${e} keys only.`,why:"Strict structured input prevents silent typos from creating incomplete or unintended mutations.",nextSteps:[r===void 0?`Remove or correct "${t}".`:`Replace "${t}" with "${r}".`]})}function D(e,t){try{return JSON.parse(e)}catch(n){let r=n instanceof Error?n.message:String(n);throw new d(`${t} must be valid JSON: ${r}`,p.USAGE,{code:"stdin_json_invalid",required:`Pipe one valid JSON ${t.toLowerCase()} into stdin.`,why:"Structured mutation input must parse deterministically before any tracker write begins."})}}function He(e,t){if(!f(e))throw new d(`Mutation ${t+1} must be an object.`,p.USAGE);for(let n of Object.keys(e))if(!U.includes(n))throw w(`mutation ${t+1}`,n,U);return e}function Xe(e,t,n){if(e!==void 0){if(!f(e))throw new d(`Mutation ${n+1} options must be an object.`,p.USAGE);for(let r of Object.keys(e))if(!Me[t].includes(r))throw w(`mutation ${n+1} ${t} options`,r,Me[t]);return e}}function Ze(e,t){let n=He(e,t),{op:r,id:o,reason:i}=n;if(r!=="create"&&r!=="update"&&r!=="close"&&r!=="release")throw new d(`Mutation ${t+1} op must be create, update, close, or release.`,p.USAGE);let a=Xe(n.options,r,t);if(typeof o!="string"||o.trim().length===0)throw new d(`Mutation ${t+1} requires a non-empty id.`,p.USAGE);let s=o.trim();if(r==="close"){if(typeof i!="string"||i.trim().length===0)throw new d(`Mutation ${t+1} close requires a non-empty reason.`,p.USAGE);return{op:r,id:s,reason:i.trim(),...a===void 0?{}:{options:a}}}if(r==="release")return{op:r,id:s,...a===void 0?{}:{options:a}};if(!f(a))throw new d(`Mutation ${t+1} ${r} requires an options object.`,p.USAGE);return{op:r,id:s,options:a}}function De(e){let t=D(e,"Mutation batch"),n=Array.isArray(t)?t:f(t)&&Array.isArray(t.mutations)?t.mutations:void 0;if(n===void 0||n.length===0)throw new d("Mutation batch must be a non-empty JSON array or an object with a non-empty mutations array.",p.USAGE);return n.map((r,o)=>{let i=Ze(r,o);return i.options!==void 0&&me(i.options),i})}function Qe(e,t,n){let r=Ve.createHash("sha256").update(e).update("\0").update(t).digest("hex"),o=BigInt(`0x${r.slice(0,16)}`).toString(36).padStart(13,"0").slice(-12);return`${ce(n)}${o}`}function Oe(e,t){if(typeof e!="string"||!e.startsWith("@"))return e;let n=e.slice(1),r=t[n];if(r===void 0)throw new d(`Unknown mutation reference "${e}".`,p.USAGE);return r}function ke(e,t){if(typeof e!="string")return e;let n=e.replace(Ce,(r,o,i)=>{let a=t[i];if(a===void 0)throw new d(`Unknown mutation reference "@${i}".`,p.USAGE);return`${o}id=${a}`});if(/(^|,)id=@/u.test(n))throw new d(`Malformed mutation reference in dependency "${e}".`,p.USAGE);return n}function et(e){return typeof e!="string"?[]:e.startsWith("@")?[e.slice(1)]:[...e.matchAll(Ce)].map(t=>t[1]).filter(t=>t!==void 0)}function tt(e){let t=new Map;for(let i of e){if(i.op!=="create"||typeof i.ref!="string")continue;let a=f(i.options)?i.options:{},s=Array.isArray(a.dep)?a.dep:a.dep===void 0?[]:[a.dep];t.set(i.ref,[a.parent,a.blockedBy,...s].flatMap(et))}let n=new Set,r=new Set,o=i=>{if(n.has(i))throw new d(`Mutation reference cycle includes "@${i}".`,p.USAGE);if(!r.has(i)){n.add(i);for(let a of t.get(i))t.has(a)&&o(a);n.delete(i),r.add(i)}};for(let i of t.keys())o(i)}function rt(e){let t=D(e,"Mutation document"),n=Array.isArray(t)?{schema_version:1,mutations:t}:t;if(!f(n))throw new d("Mutation document must be a JSON array or object.",p.USAGE);for(let r of Object.keys(n))if(!Re.includes(r))throw w("mutation document",r,Re);if(n.schema_version!==void 0&&n.schema_version!==1)throw new d("Mutation document schema_version must be 1.",p.USAGE);if(!Array.isArray(n.mutations)||n.mutations.length===0)throw new d("Mutation document requires a non-empty mutations array.",p.USAGE);return n.mutations.map((r,o)=>{if(!f(r))throw new d(`Mutation ${o+1} must be an object.`,p.USAGE);for(let i of Object.keys(r))if(!Ae.includes(i))throw w(`mutation ${o+1}`,i,Ae);return{...r}})}function nt(e,t){let n=Object.create(null);for(let[r,o]of e.entries())if(o.ref!==void 0){if(o.op!=="create")throw new d(`Mutation ${r+1} ref is only valid for create operations.`,p.USAGE);if(typeof o.ref!="string"||!Ie.test(o.ref))throw new d(`Mutation ${r+1} ref must match ${Ie.source}.`,p.USAGE);if(n[o.ref]!==void 0)throw new d(`Duplicate mutation ref "${o.ref}".`,p.USAGE);n[o.ref]=typeof o.id=="string"&&o.id.trim().length>0?de(o.id,t.idPrefix):Qe(t.transactionId,o.ref,t.idPrefix)}return n}function wr(e,t){let n=rt(e),r=nt(n,t);tt(n);let o=n.map(s=>{let c={...s},u=typeof c.ref=="string"?c.ref:void 0;if(delete c.ref,u!==void 0?c.id=r[u]:c.id=Oe(c.id,r),f(c.options)){let m={...c.options};for(let y of["parent","blockedBy"])m[y]!==void 0&&(m[y]=Oe(m[y],r));Array.isArray(m.dep)?m.dep=m.dep.map(y=>ke(y,r)):m.dep!==void 0&&(m.dep=ke(m.dep,r)),c.options=m}return c}),i=De(JSON.stringify(o)),a=i.filter(s=>s.op==="create").map(s=>s.id);if(new Set(a).size!==a.length)throw new d("Duplicate resolved create id in mutation document.",p.USAGE);return{schema_version:1,mutations:i,references:r}}function je(e,t){return t.filter(n=>e[n]!==void 0&&e[n]!==null).map(n=>{let r=String(e[n]);return`${n}=${/[",\n\r\\]/u.test(r)?JSON.stringify(r):r}`}).join(",")}function ot(e,t,n){if(e!==void 0){if(!Array.isArray(e)||!e.every(f))throw new d(`${n} must be an array of objects.`,p.USAGE);return e.map(r=>je(r,t))}}function it(e,t){return e==="tags"&&Array.isArray(t)&&t.every(n=>typeof n=="string")?JSON.stringify(t):typeof t=="number"||typeof t=="boolean"?String(t):t}function $e(e,t,n=!1){let r=[["dependencies","dep",["id","kind","created_at","author","source_kind"]],["comments","comment",["text","created_at","author"]],["notes","note",["text","created_at","author"]],["learnings","learning",["text","created_at","author"]],["files","file",["path","scope","note"]],["tests","test",["command","scope","timeout_seconds"]],["docs","doc",["path","scope","note"]],["reminders","reminder",["at","text","created_at"]],["events","event",["start_at","end_at","title","location"]],["type_options","typeOption",["key","value"]]];for(let[o,i,a]of r){let s=t[o],c=ot(n&&["comments","notes","learnings"].includes(o)&&Array.isArray(s)?s.filter(u=>!f(u)||u.created_at===void 0):s,a,o);c!==void 0&&c.length>0&&(e[i]=c)}}function at(e,t){for(let n of Object.keys(e)){if(t){if(!T.includes(n))throw w("item envelope",n,T);continue}if(!S.has(n)&&A(n,[...S])===void 0&&A(n,T)==="item")throw w("item envelope",n,T)}}function st(e){let t=Object.hasOwn(e,"item");at(e,t);let n=t?e.item:e;if(!f(n))throw new d("Item document item must be an object.",p.USAGE);return{item:n,...t&&f(e.linked)?{linked:e.linked}:{}}}function ct(e,t,n,r){if(!(r==="update"?Ye:Ue).has(t)){if(!S.has(t)){if(A(t,[...S])!==void 0)throw w("item document",t,[...S]);let o=Array.isArray(e.field)?e.field:[];o.push(je({key:t,value:typeof n=="string"?n:JSON.stringify(n)},["key","value"])),e.field=o;return}["dependencies","comments","notes","learnings","files","tests","docs","reminders","events","type_options"].includes(t)||(e[t.replaceAll(/_([a-z])/gu,(o,i)=>i.toUpperCase())]=it(t,n))}}function _r(e,t,n={}){let r=D(e,"Item document");if(!f(r))throw new d("Item document must be a JSON object.",p.USAGE);let{item:o,linked:i}=st(r),a={};for(let[s,c]of Object.entries(o))ct(a,s,c,t);if($e(a,o,t==="update"),i!==void 0&&$e(a,i),t==="update"){let s=Object.fromEntries(["comments","notes","learnings"].filter(c=>Object.hasOwn(o,c)).map(c=>[c,o[c].filter(u=>f(u)&&u.created_at!==void 0)]));Object.keys(s).length>0&&(a.documentAnnotationSnapshot=s)}return{...a,...Object.fromEntries(Object.entries(n).filter(([,s])=>s!==void 0)),stdinJson:void 0}}function gr(e){return De(JSON.stringify(e))}import L from"node:crypto";import{constants as j}from"node:fs";import{cp as dt,lstat as Pe,mkdir as pt,mkdtemp as lt,open as ut,readdir as mt,realpath as ft,rm as yt,stat as Ge,writeFile as Fe}from"node:fs/promises";import{tmpdir as ht}from"node:os";import l from"node:path";(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="2f198564-f7a1-5a58-a046-c1003e2fbc6c")}catch{}})();function b(e,t){let n={...e,...t};return e===void 0?n:fe(e,n)}async function h(e,t){try{let n=(await we(t,{},{pmRoot:e})).item;return{id:n.id,closedAt:n.closed_at,updatedAt:n.updated_at,assignee:n.assignee,claimPrincipal:n.claim_principal}}catch(n){if(n instanceof d&&n.exitCode===p.NOT_FOUND)return;throw n}}function W(e,t){let n=e.id.replaceAll(/[^a-zA-Z0-9._-]/gu,"_"),r=L.createHash("sha256").update(X(e)).digest("hex").slice(0,12);return`${t+1}-${e.op}-${n}-${r}`}function wt(e,t){let n=e.id.replaceAll(/[^a-zA-Z0-9._-]/gu,"_");return`${t+1}-${e.op}-${n}`}function _(e,t,n){return`bulk-item-transaction ${e} ${t} ${n}`}async function M(e,t,n,r){let o=await ae(l.join(e,"history",`${t}.jsonl`),t),i=_(n,r,"apply"),a=_(n,r,"compensate");for(let s=o.length-1;s>=0;s-=1){let c=o[s].message;if(c===i)return!0;if(c===a)return!1}return!1}async function x(e,t){let n=await h(e,t.id);if(n?.updatedAt===void 0)throw new d(`Bulk ${t.op} target ${t.id} does not exist or has no restorable version`,p.NOT_FOUND);return{target_updated_at:n.updatedAt}}async function O(e,t,n,r){let o=r!==null&&typeof r=="object"&&!Array.isArray(r)?r.target_updated_at:void 0;typeof o=="string"&&await h(e.pmRoot,t)!==void 0&&await Se(t,o,{force:!0,author:e.author,message:_(e.transactionId,n,"compensate")},{pmRoot:e.pmRoot})}function Le(e,t,n){return{id:n,async inspect(){let r=await h(e.pmRoot,t.id);return r===void 0?{state:"pending"}:{state:"applied",result:{id:r.id,op:"create"}}},async apply(){let r=(await _e(b(t.options,{author:e.author,id:t.id}),{pmRoot:e.pmRoot})).item;return{id:String(r.id),op:"create"}},async compensate(){let r=await h(e.pmRoot,t.id);if(r!==void 0){if(e.createCompensation==="delete"){await ve(t.id,{force:!0,author:e.author,message:`Compensate interrupted bulk transaction ${e.transactionId}`},{pmRoot:e.pmRoot});return}r.closedAt===void 0&&await C(t.id,`Compensated: interrupted bulk transaction ${e.transactionId}`,{force:!0,author:e.author},{pmRoot:e.pmRoot})}}}}function _t(e,t,n){return{id:n,async inspect(){let r=await h(e.pmRoot,t.id);return r===void 0?{state:"pending"}:await M(e.pmRoot,r.id,e.transactionId,n)?{state:"applied",result:{id:r.id,op:"update"}}:{state:"pending"}},async prepareCompensation(){return x(e.pmRoot,t)},async apply(){let r=(await ge(t.id,b(t.options,{author:e.author,message:_(e.transactionId,n,"apply")}),{pmRoot:e.pmRoot})).item;return{id:String(r.id),op:"update"}},async compensate(r){await O(e,t.id,n,r)}}}function gt(e,t,n){return{id:n,async inspect(){let r=await h(e.pmRoot,t.id);return r===void 0?{state:"pending"}:await M(e.pmRoot,r.id,e.transactionId,n)?{state:"applied",result:{id:r.id,op:"close"}}:r.closedAt===void 0?{state:"pending"}:{state:"applied",result:{id:r.id,op:"close"}}},async prepareCompensation(){return x(e.pmRoot,t)},async apply(){let r=(await C(t.id,t.reason,b(t.options,{author:e.author,message:_(e.transactionId,n,"apply")}),{pmRoot:e.pmRoot})).item;return{id:String(r.id),op:"close"}},async compensate(r){await O(e,t.id,n,r)}}}function Et(e,t,n){return{id:n,async inspect(){let r=await h(e.pmRoot,t.id);return r===void 0?{state:"pending"}:await M(e.pmRoot,r.id,e.transactionId,n)?{state:"applied",result:{id:r.id,op:"release"}}:r.assignee!==void 0||r.claimPrincipal!==void 0?{state:"pending"}:{state:"applied",result:{id:r.id,op:"release"}}},async prepareCompensation(){return x(e.pmRoot,t)},async apply(){let r=(await Ee(t.id,b(t.options,{author:e.author,message:_(e.transactionId,n,"apply")}),{pmRoot:e.pmRoot})).item;return{id:String(r.id),op:"release"}},async compensate(r){await O(e,t.id,n,r)}}}function We(e,t,n){let r=W(t,n);switch(t.op){case"create":return Le(e,t,r);case"update":return _t(e,t,r);case"close":return gt(e,t,r);case"release":return Et(e,t,r)}}function xe(e,t){if(e===null||typeof e!="object"||Array.isArray(e))throw new TypeError(`Bulk mutation ${t+1} must be an object`);if(!["create","update","close","release"].includes(e.op))throw new TypeError(`Bulk mutation ${t+1} op must be create, update, close, or release`);if(typeof e.id!="string"||e.id.trim().length===0)throw new TypeError(`Bulk mutation ${t+1} requires a non-empty id`);if(e.op==="close"&&(typeof e.reason!="string"||e.reason.trim().length===0))throw new TypeError(`Bulk close mutation ${t+1} requires a non-empty reason`)}async function P(e,t,n){try{return await n()}catch(r){throw r instanceof d?new d(r.message,r.exitCode,{...r.context,transaction_operation:{index:t,op:e.op,id:e.id}}):r}}function ze(e,t,n,r){let o=l.relative(e,t);return["locks","runtime","search"].includes(o.split(l.sep)[0])?r.some(i=>o===i||o.startsWith(`${i}${l.sep}`)||i.startsWith(`${o}${l.sep}`)):o===""||n===void 0||n.some(i=>o===i||o.startsWith(`${i}${l.sep}`)||i.startsWith(`${o}${l.sep}`))}async function I(e){let t=await Pe(e);if(t.isSymbolicLink())await Ge(e);else if(t.isDirectory()||t.isFile())return t;throw new TypeError(`Transaction preview requires regular files and directories: ${e}`)}async function vt(e){let t=await ut(e,j.O_RDONLY|j.O_NOFOLLOW|j.O_NONBLOCK);try{let n=await t.stat();if(!n.isFile())throw new TypeError(`Transaction preview requires regular files and directories: ${e}`);let r=L.createHash("sha256");if(n.size>0)for await(let o of t.createReadStream({highWaterMark:64*1024,end:n.size-1,autoClose:!1}))r.update(o);return r.digest()}finally{await t.close()}}async function G(e,t,n){let r=L.createHash("sha256");async function o(i){for(let a of(await mt(i)).sort()){let s=l.join(i,a);ze(e,s,t,n)&&((await I(s)).isDirectory()?await o(s):(r.update(JSON.stringify(l.relative(e,s))),r.update(await vt(s))))}}return await o(e),r.digest("hex")}function F(){return new d("Tracker changed while preparing the transaction preview; retry against stable state.",p.CONFLICT,{code:"transaction_preview_snapshot_changed"})}async function Be(e){if(!$(e))return!1;let t=e.path;if(typeof t!="string")return!1;let n=l.resolve(t),r=n;for(;;)try{let o=await Pe(r);return r!==n&&o.isDirectory()}catch(o){if(!$(o))return!1;let i=l.dirname(r);if(i===r)return!1;r=i}}async function R(e,t){let n=l.join(e,t);try{let r=e;for(let o of t.split(l.sep).slice(0,-1))r=l.join(r,o),await I(r);if(!(await I(n)).isFile())throw new TypeError(`Transaction preview requires regular files and directories: ${n}`);return await B(n,`Transaction preview requires regular files and directories: ${n}`)}catch(r){if(await Be(r))return;throw r}}async function St(e,t,n){let r=new Map,o=await R(e,v);r.set(v,o);let i;try{i=JSON.parse(o??"null")}catch{i=null}let a=se(i),s=a.success?a.data:void 0,c=re(s?.schema);for(let[E,qe]of Object.entries(c.files)){let g=l.relative(e,ne(e,qe,te[E]));if(g===""||!l.resolve(e,g).startsWith(l.join(e,l.sep)))throw new d("Transaction preview requires schema files inside the selected tracker root; relocate the configured schema file before retrying.",p.USAGE,{code:"transaction_preview_external_schema",field:`schema.files.${E}`});c.files[E]=g;let k=await R(e,g);if(r.set(g,k),k!==void 0){let z=l.join(t,g);await pt(l.dirname(z),{recursive:!0}),await Fe(z,k)}}let u=l.relative(e,ie(e));r.set(u,await R(e,u));let m=await oe(t,c),y=V({...q,item_types:{definitions:[...s?.item_types?.definitions??[],...m.type_definitions_from_file??[]]}},n),Je=Y(e)===e?[...K.filter(Boolean),v,ee,"transactions",...y.folders,...r.keys()].map(E=>l.normalize(E)):void 0,Ke=s===void 0?void 0:JSON.stringify({...i,schema:{...s.schema,files:c.files}});return{configuration:r,ownedPaths:Je,stagedSettings:Ke,registryFolders:y.folders}}async function Tt(e,t,n){await Ge(e);try{let r=await ft(e),o=await St(r,l.join(l.dirname(t),"configuration"),n),i=[...o.configuration.keys(),...o.registryFolders].map(u=>l.normalize(u)),a=await G(r,o.ownedPaths,i);await dt(r,t,{recursive:!0,dereference:!1,filter:async u=>ze(r,u,o.ownedPaths,i)?(await I(u),!0):!1});let[s,c]=await Promise.all([G(r,o.ownedPaths,i),G(t,o.ownedPaths,i)]);if(a!==s||a!==c)throw F();for(let[u,m]of o.configuration)if(await R(t,u)!==m)throw F();o.stagedSettings!==void 0&&await Fe(l.join(t,v),o.stagedSettings)}catch(r){throw await Be(r)?F():r}}async function Wr(e){let t=pe(e),n=[...e.mutations];if(n.length===0)throw new TypeError("Bulk item transaction requires at least one mutation");for(let[a,s]of n.entries())xe(s,a);let r=Q(),o=await lt(l.join(ht(),"pm-transaction-preview-")),i=l.join(o,"tracker");try{await Tt(t.pmRoot,i,r);let a=!1;return await Te({path:i,noExtensions:!0},async()=>{Z(r);let s={...t,pmRoot:i,createCompensation:"close"},c=n.map((u,m)=>{let y=We(s,u,m);return{...y,inspect:()=>P(u,m,()=>y.inspect()),prepareCompensation:()=>P(u,m,async()=>y.prepareCompensation?.()),apply:()=>P(u,m,()=>y.apply())}});await N({...t,pmRoot:i,steps:c,onTransition:({transition:u})=>{u==="committed"&&(a=!0)}})}),{validated:a,state:a?"staged_snapshot":"replayed_committed_plan",unresolved_commit_constraints:["concurrent_tracker_changes","extension_mutation_guards_and_hooks"]}}finally{await yt(o,{recursive:!0,force:!0})}}async function At(e){let t=[...e.mutations];if(t.length===0)throw new TypeError("Bulk item transaction requires at least one mutation");for(let[a,s]of t.entries())xe(s,a);let n=e.createCompensation??"close";if(!["close","delete"].includes(n))throw new TypeError("Bulk item transaction createCompensation must be close or delete");let r={pmRoot:e.pmRoot,author:e.author,transactionId:e.transactionId,createCompensation:n},o=await N({pmRoot:e.pmRoot,transactionId:e.transactionId,author:e.author,steps:t.map((a,s)=>We(r,a,s)),...e.lockTtlSeconds===void 0?{}:{lockTtlSeconds:e.lockTtlSeconds},...e.lockWaitMs===void 0?{}:{lockWaitMs:e.lockWaitMs},...e.onTransition===void 0?{}:{onTransition:e.onTransition}}),i={};for(let[a,s]of t.entries()){let c=W(s,a),u=o.results[c];i[wt(s,a)]=u}return{transactionId:o.transactionId,status:"committed",recovered:o.recovered,results:i}}function Rt(e){let t=[];return e.evidence!==void 0&&Object.keys(e.evidence).length>0&&t.push({op:"update",id:e.id,options:e.evidence}),t.push({op:"close",id:e.id,reason:e.reason,...e.closeOptions===void 0?{}:{options:e.closeOptions}},{op:"release",id:e.id,...e.releaseOptions===void 0?{}:{options:e.releaseOptions}}),t}function xr(e){return At({pmRoot:e.pmRoot,transactionId:e.transactionId,author:e.author,mutations:Rt(e),...e.lockTtlSeconds===void 0?{}:{lockTtlSeconds:e.lockTtlSeconds},...e.lockWaitMs===void 0?{}:{lockWaitMs:e.lockWaitMs},...e.onTransition===void 0?{}:{onTransition:e.onTransition}})}var zr={buildCreateStep:Le,bulkHistoryMarker:_,compensateByRestore:O,deriveStepId:W,isUpdateMarkerApplied:M,readItemSnapshot:h};export{hr as a,De as b,wr as c,_r as d,gr as e,Wr as f,At as g,Rt as h,xr as i,zr as j};
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{Rb as _e,Sb as ge,Ub as C,Xb as Ee,Ya as we,Zb as ve,_b as Se,a as ee,uc as Te}from"./chunk-25EW53VO.js";import{b as pe,c as N}from"./chunk-4WB55TBC.js";import{Ai as de,B,Cc as Z,Dc as Q,Go as ye,Jo as he,Lg as ie,Nl as me,Pl as fe,Tb as X,Ua as V,ba as J,bb as Y,dg as te,ea as v,fg as re,gg as ne,ha as K,hi as se,jg as oe,kh as ae,ma as q,na as p,nk as le,pa as d,tk as ue,vb as H,yi as ce,z as $}from"./chunk-D4G43LBV.js";(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="4175f7f5-a689-5d05-982a-f92e21bc83e7")}catch{}})();import Ve from"node:crypto";(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="62e0ef49-30c8-56e0-985e-49c83d14695e")}catch{}})();var U=["op","id","reason","options"],Ae=[...U,"ref"],Re=["schema_version","mutations"],Ne="[a-z][a-z0-9._-]{0,63}",Ie=new RegExp(`^${Ne}$`,"u"),Ce=new RegExp(`(^|,)id=@(${Ne})(?=,|$)`,"gu"),be=e=>e.slice(2).replaceAll(/-([a-z])/gu,(t,n)=>n.toUpperCase()),T=["item","linked","schedule","claim_state","children","omission_receipt","row_contract","context_intent"],Ue=new Set(["created_at","updated_at","closed_at","version","format_version","path","author","collection_counts","notes_count","tests_count"]),Ye=new Set([...Ue,"completed_at","id"]),S=new Set(["id","title","description","type","status","priority","tags","body","deadline","estimated_minutes","acceptance_criteria","definition_of_ready","order","rank","assignee",...J,"affected_version","fixed_version","component","regression","customer_impact","close_reason","completed_at","dependencies","comments","notes","learnings","files","tests","docs","reminders","events","type_options"]),Me={create:ye.map(e=>e.target),update:he.map(e=>e.target),close:le.map(e=>be(e.flag)).filter(e=>e!=="reason"),release:ue.map(e=>be(e.flag))};function hr(e){let t={},n=e.createCompensation;if(n!==void 0){if(n!=="close"&&n!=="delete")throw new d("createCompensation must be close or delete.",p.USAGE);t.createCompensation=n}for(let r of["lockTtlSeconds","lockWaitMs"]){let o=e[r];if(o===void 0)continue;let i=typeof o=="number"||typeof o=="string"&&o.trim().length>0?Number(o):Number.NaN;if(!Number.isSafeInteger(i)||i<=0)throw new d(`${r} must be a positive safe integer.`,p.USAGE);t[r]=i}return t}function f(e){if(typeof e!="object"||e===null||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function A(e,t){let n=Math.max(1,Math.min(3,Math.floor(e.length/4)+1)),r;for(let o of t){let i=H(e,o,n);i!==null&&(r===void 0||i<r.distance)&&(r={key:o,distance:i})}return r?.key}function w(e,t,n){let r=A(t,n);return new d(r===void 0?`${e} does not recognize key "${t}". Allowed keys: ${n.join(", ")}.`:`${e} does not recognize key "${t}". Did you mean "${r}"?`,p.USAGE,{code:"stdin_json_unknown_key",required:`Use documented ${e} keys only.`,why:"Strict structured input prevents silent typos from creating incomplete or unintended mutations.",nextSteps:[r===void 0?`Remove or correct "${t}".`:`Replace "${t}" with "${r}".`]})}function D(e,t){try{return JSON.parse(e)}catch(n){let r=n instanceof Error?n.message:String(n);throw new d(`${t} must be valid JSON: ${r}`,p.USAGE,{code:"stdin_json_invalid",required:`Pipe one valid JSON ${t.toLowerCase()} into stdin.`,why:"Structured mutation input must parse deterministically before any tracker write begins."})}}function He(e,t){if(!f(e))throw new d(`Mutation ${t+1} must be an object.`,p.USAGE);for(let n of Object.keys(e))if(!U.includes(n))throw w(`mutation ${t+1}`,n,U);return e}function Xe(e,t,n){if(e!==void 0){if(!f(e))throw new d(`Mutation ${n+1} options must be an object.`,p.USAGE);for(let r of Object.keys(e))if(!Me[t].includes(r))throw w(`mutation ${n+1} ${t} options`,r,Me[t]);return e}}function Ze(e,t){let n=He(e,t),{op:r,id:o,reason:i}=n;if(r!=="create"&&r!=="update"&&r!=="close"&&r!=="release")throw new d(`Mutation ${t+1} op must be create, update, close, or release.`,p.USAGE);let a=Xe(n.options,r,t);if(typeof o!="string"||o.trim().length===0)throw new d(`Mutation ${t+1} requires a non-empty id.`,p.USAGE);let s=o.trim();if(r==="close"){if(typeof i!="string"||i.trim().length===0)throw new d(`Mutation ${t+1} close requires a non-empty reason.`,p.USAGE);return{op:r,id:s,reason:i.trim(),...a===void 0?{}:{options:a}}}if(r==="release")return{op:r,id:s,...a===void 0?{}:{options:a}};if(!f(a))throw new d(`Mutation ${t+1} ${r} requires an options object.`,p.USAGE);return{op:r,id:s,options:a}}function De(e){let t=D(e,"Mutation batch"),n=Array.isArray(t)?t:f(t)&&Array.isArray(t.mutations)?t.mutations:void 0;if(n===void 0||n.length===0)throw new d("Mutation batch must be a non-empty JSON array or an object with a non-empty mutations array.",p.USAGE);return n.map((r,o)=>{let i=Ze(r,o);return i.options!==void 0&&me(i.options),i})}function Qe(e,t,n){let r=Ve.createHash("sha256").update(e).update("\0").update(t).digest("hex"),o=BigInt(`0x${r.slice(0,16)}`).toString(36).padStart(13,"0").slice(-12);return`${ce(n)}${o}`}function Oe(e,t){if(typeof e!="string"||!e.startsWith("@"))return e;let n=e.slice(1),r=t[n];if(r===void 0)throw new d(`Unknown mutation reference "${e}".`,p.USAGE);return r}function ke(e,t){if(typeof e!="string")return e;let n=e.replace(Ce,(r,o,i)=>{let a=t[i];if(a===void 0)throw new d(`Unknown mutation reference "@${i}".`,p.USAGE);return`${o}id=${a}`});if(/(^|,)id=@/u.test(n))throw new d(`Malformed mutation reference in dependency "${e}".`,p.USAGE);return n}function et(e){return typeof e!="string"?[]:e.startsWith("@")?[e.slice(1)]:[...e.matchAll(Ce)].map(t=>t[1]).filter(t=>t!==void 0)}function tt(e){let t=new Map;for(let i of e){if(i.op!=="create"||typeof i.ref!="string")continue;let a=f(i.options)?i.options:{},s=Array.isArray(a.dep)?a.dep:a.dep===void 0?[]:[a.dep];t.set(i.ref,[a.parent,a.blockedBy,...s].flatMap(et))}let n=new Set,r=new Set,o=i=>{if(n.has(i))throw new d(`Mutation reference cycle includes "@${i}".`,p.USAGE);if(!r.has(i)){n.add(i);for(let a of t.get(i))t.has(a)&&o(a);n.delete(i),r.add(i)}};for(let i of t.keys())o(i)}function rt(e){let t=D(e,"Mutation document"),n=Array.isArray(t)?{schema_version:1,mutations:t}:t;if(!f(n))throw new d("Mutation document must be a JSON array or object.",p.USAGE);for(let r of Object.keys(n))if(!Re.includes(r))throw w("mutation document",r,Re);if(n.schema_version!==void 0&&n.schema_version!==1)throw new d("Mutation document schema_version must be 1.",p.USAGE);if(!Array.isArray(n.mutations)||n.mutations.length===0)throw new d("Mutation document requires a non-empty mutations array.",p.USAGE);return n.mutations.map((r,o)=>{if(!f(r))throw new d(`Mutation ${o+1} must be an object.`,p.USAGE);for(let i of Object.keys(r))if(!Ae.includes(i))throw w(`mutation ${o+1}`,i,Ae);return{...r}})}function nt(e,t){let n=Object.create(null);for(let[r,o]of e.entries())if(o.ref!==void 0){if(o.op!=="create")throw new d(`Mutation ${r+1} ref is only valid for create operations.`,p.USAGE);if(typeof o.ref!="string"||!Ie.test(o.ref))throw new d(`Mutation ${r+1} ref must match ${Ie.source}.`,p.USAGE);if(n[o.ref]!==void 0)throw new d(`Duplicate mutation ref "${o.ref}".`,p.USAGE);n[o.ref]=typeof o.id=="string"&&o.id.trim().length>0?de(o.id,t.idPrefix):Qe(t.transactionId,o.ref,t.idPrefix)}return n}function wr(e,t){let n=rt(e),r=nt(n,t);tt(n);let o=n.map(s=>{let c={...s},u=typeof c.ref=="string"?c.ref:void 0;if(delete c.ref,u!==void 0?c.id=r[u]:c.id=Oe(c.id,r),f(c.options)){let m={...c.options};for(let y of["parent","blockedBy"])m[y]!==void 0&&(m[y]=Oe(m[y],r));Array.isArray(m.dep)?m.dep=m.dep.map(y=>ke(y,r)):m.dep!==void 0&&(m.dep=ke(m.dep,r)),c.options=m}return c}),i=De(JSON.stringify(o)),a=i.filter(s=>s.op==="create").map(s=>s.id);if(new Set(a).size!==a.length)throw new d("Duplicate resolved create id in mutation document.",p.USAGE);return{schema_version:1,mutations:i,references:r}}function je(e,t){return t.filter(n=>e[n]!==void 0&&e[n]!==null).map(n=>{let r=String(e[n]);return`${n}=${/[",\n\r\\]/u.test(r)?JSON.stringify(r):r}`}).join(",")}function ot(e,t,n){if(e!==void 0){if(!Array.isArray(e)||!e.every(f))throw new d(`${n} must be an array of objects.`,p.USAGE);return e.map(r=>je(r,t))}}function it(e,t){return e==="tags"&&Array.isArray(t)&&t.every(n=>typeof n=="string")?JSON.stringify(t):typeof t=="number"||typeof t=="boolean"?String(t):t}function $e(e,t,n=!1){let r=[["dependencies","dep",["id","kind","created_at","author","source_kind"]],["comments","comment",["text","created_at","author"]],["notes","note",["text","created_at","author"]],["learnings","learning",["text","created_at","author"]],["files","file",["path","scope","note"]],["tests","test",["command","scope","timeout_seconds"]],["docs","doc",["path","scope","note"]],["reminders","reminder",["at","text","created_at"]],["events","event",["start_at","end_at","title","location"]],["type_options","typeOption",["key","value"]]];for(let[o,i,a]of r){let s=t[o],c=ot(n&&["comments","notes","learnings"].includes(o)&&Array.isArray(s)?s.filter(u=>!f(u)||u.created_at===void 0):s,a,o);c!==void 0&&c.length>0&&(e[i]=c)}}function at(e,t){for(let n of Object.keys(e)){if(t){if(!T.includes(n))throw w("item envelope",n,T);continue}if(!S.has(n)&&A(n,[...S])===void 0&&A(n,T)==="item")throw w("item envelope",n,T)}}function st(e){let t=Object.hasOwn(e,"item");at(e,t);let n=t?e.item:e;if(!f(n))throw new d("Item document item must be an object.",p.USAGE);return{item:n,...t&&f(e.linked)?{linked:e.linked}:{}}}function ct(e,t,n,r){if(!(r==="update"?Ye:Ue).has(t)){if(!S.has(t)){if(A(t,[...S])!==void 0)throw w("item document",t,[...S]);let o=Array.isArray(e.field)?e.field:[];o.push(je({key:t,value:typeof n=="string"?n:JSON.stringify(n)},["key","value"])),e.field=o;return}["dependencies","comments","notes","learnings","files","tests","docs","reminders","events","type_options"].includes(t)||(e[t.replaceAll(/_([a-z])/gu,(o,i)=>i.toUpperCase())]=it(t,n))}}function _r(e,t,n={}){let r=D(e,"Item document");if(!f(r))throw new d("Item document must be a JSON object.",p.USAGE);let{item:o,linked:i}=st(r),a={};for(let[s,c]of Object.entries(o))ct(a,s,c,t);if($e(a,o,t==="update"),i!==void 0&&$e(a,i),t==="update"){let s=Object.fromEntries(["comments","notes","learnings"].filter(c=>Object.hasOwn(o,c)).map(c=>[c,o[c].filter(u=>f(u)&&u.created_at!==void 0)]));Object.keys(s).length>0&&(a.documentAnnotationSnapshot=s)}return{...a,...Object.fromEntries(Object.entries(n).filter(([,s])=>s!==void 0)),stdinJson:void 0}}function gr(e){return De(JSON.stringify(e))}import L from"node:crypto";import{constants as j}from"node:fs";import{cp as dt,lstat as Pe,mkdir as pt,mkdtemp as lt,open as ut,readdir as mt,realpath as ft,rm as yt,stat as Ge,writeFile as Fe}from"node:fs/promises";import{tmpdir as ht}from"node:os";import l from"node:path";(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{},t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="2f198564-f7a1-5a58-a046-c1003e2fbc6c")}catch{}})();function b(e,t){let n={...e,...t};return e===void 0?n:fe(e,n)}async function h(e,t){try{let n=(await we(t,{},{pmRoot:e})).item;return{id:n.id,closedAt:n.closed_at,updatedAt:n.updated_at,assignee:n.assignee,claimPrincipal:n.claim_principal}}catch(n){if(n instanceof d&&n.exitCode===p.NOT_FOUND)return;throw n}}function W(e,t){let n=e.id.replaceAll(/[^a-zA-Z0-9._-]/gu,"_"),r=L.createHash("sha256").update(X(e)).digest("hex").slice(0,12);return`${t+1}-${e.op}-${n}-${r}`}function wt(e,t){let n=e.id.replaceAll(/[^a-zA-Z0-9._-]/gu,"_");return`${t+1}-${e.op}-${n}`}function _(e,t,n){return`bulk-item-transaction ${e} ${t} ${n}`}async function M(e,t,n,r){let o=await ae(l.join(e,"history",`${t}.jsonl`),t),i=_(n,r,"apply"),a=_(n,r,"compensate");for(let s=o.length-1;s>=0;s-=1){let c=o[s].message;if(c===i)return!0;if(c===a)return!1}return!1}async function x(e,t){let n=await h(e,t.id);if(n?.updatedAt===void 0)throw new d(`Bulk ${t.op} target ${t.id} does not exist or has no restorable version`,p.NOT_FOUND);return{target_updated_at:n.updatedAt}}async function O(e,t,n,r){let o=r!==null&&typeof r=="object"&&!Array.isArray(r)?r.target_updated_at:void 0;typeof o=="string"&&await h(e.pmRoot,t)!==void 0&&await Se(t,o,{force:!0,author:e.author,message:_(e.transactionId,n,"compensate")},{pmRoot:e.pmRoot})}function Le(e,t,n){return{id:n,async inspect(){let r=await h(e.pmRoot,t.id);return r===void 0?{state:"pending"}:{state:"applied",result:{id:r.id,op:"create"}}},async apply(){let r=(await _e(b(t.options,{author:e.author,id:t.id}),{pmRoot:e.pmRoot})).item;return{id:String(r.id),op:"create"}},async compensate(){let r=await h(e.pmRoot,t.id);if(r!==void 0){if(e.createCompensation==="delete"){await ve(t.id,{force:!0,author:e.author,message:`Compensate interrupted bulk transaction ${e.transactionId}`},{pmRoot:e.pmRoot});return}r.closedAt===void 0&&await C(t.id,`Compensated: interrupted bulk transaction ${e.transactionId}`,{force:!0,author:e.author},{pmRoot:e.pmRoot})}}}}function _t(e,t,n){return{id:n,async inspect(){let r=await h(e.pmRoot,t.id);return r===void 0?{state:"pending"}:await M(e.pmRoot,r.id,e.transactionId,n)?{state:"applied",result:{id:r.id,op:"update"}}:{state:"pending"}},async prepareCompensation(){return x(e.pmRoot,t)},async apply(){let r=(await ge(t.id,b(t.options,{author:e.author,message:_(e.transactionId,n,"apply")}),{pmRoot:e.pmRoot})).item;return{id:String(r.id),op:"update"}},async compensate(r){await O(e,t.id,n,r)}}}function gt(e,t,n){return{id:n,async inspect(){let r=await h(e.pmRoot,t.id);return r===void 0?{state:"pending"}:await M(e.pmRoot,r.id,e.transactionId,n)?{state:"applied",result:{id:r.id,op:"close"}}:r.closedAt===void 0?{state:"pending"}:{state:"applied",result:{id:r.id,op:"close"}}},async prepareCompensation(){return x(e.pmRoot,t)},async apply(){let r=(await C(t.id,t.reason,b(t.options,{author:e.author,message:_(e.transactionId,n,"apply")}),{pmRoot:e.pmRoot})).item;return{id:String(r.id),op:"close"}},async compensate(r){await O(e,t.id,n,r)}}}function Et(e,t,n){return{id:n,async inspect(){let r=await h(e.pmRoot,t.id);return r===void 0?{state:"pending"}:await M(e.pmRoot,r.id,e.transactionId,n)?{state:"applied",result:{id:r.id,op:"release"}}:r.assignee!==void 0||r.claimPrincipal!==void 0?{state:"pending"}:{state:"applied",result:{id:r.id,op:"release"}}},async prepareCompensation(){return x(e.pmRoot,t)},async apply(){let r=(await Ee(t.id,b(t.options,{author:e.author,message:_(e.transactionId,n,"apply")}),{pmRoot:e.pmRoot})).item;return{id:String(r.id),op:"release"}},async compensate(r){await O(e,t.id,n,r)}}}function We(e,t,n){let r=W(t,n);switch(t.op){case"create":return Le(e,t,r);case"update":return _t(e,t,r);case"close":return gt(e,t,r);case"release":return Et(e,t,r)}}function xe(e,t){if(e===null||typeof e!="object"||Array.isArray(e))throw new TypeError(`Bulk mutation ${t+1} must be an object`);if(!["create","update","close","release"].includes(e.op))throw new TypeError(`Bulk mutation ${t+1} op must be create, update, close, or release`);if(typeof e.id!="string"||e.id.trim().length===0)throw new TypeError(`Bulk mutation ${t+1} requires a non-empty id`);if(e.op==="close"&&(typeof e.reason!="string"||e.reason.trim().length===0))throw new TypeError(`Bulk close mutation ${t+1} requires a non-empty reason`)}async function P(e,t,n){try{return await n()}catch(r){throw r instanceof d?new d(r.message,r.exitCode,{...r.context,transaction_operation:{index:t,op:e.op,id:e.id}}):r}}function ze(e,t,n,r){let o=l.relative(e,t);return["locks","runtime","search"].includes(o.split(l.sep)[0])?r.some(i=>o===i||o.startsWith(`${i}${l.sep}`)||i.startsWith(`${o}${l.sep}`)):o===""||n===void 0||n.some(i=>o===i||o.startsWith(`${i}${l.sep}`)||i.startsWith(`${o}${l.sep}`))}async function I(e){let t=await Pe(e);if(t.isSymbolicLink())await Ge(e);else if(t.isDirectory()||t.isFile())return t;throw new TypeError(`Transaction preview requires regular files and directories: ${e}`)}async function vt(e){let t=await ut(e,j.O_RDONLY|j.O_NOFOLLOW|j.O_NONBLOCK);try{let n=await t.stat();if(!n.isFile())throw new TypeError(`Transaction preview requires regular files and directories: ${e}`);let r=L.createHash("sha256");if(n.size>0)for await(let o of t.createReadStream({highWaterMark:64*1024,end:n.size-1,autoClose:!1}))r.update(o);return r.digest()}finally{await t.close()}}async function G(e,t,n){let r=L.createHash("sha256");async function o(i){for(let a of(await mt(i)).sort()){let s=l.join(i,a);ze(e,s,t,n)&&((await I(s)).isDirectory()?await o(s):(r.update(JSON.stringify(l.relative(e,s))),r.update(await vt(s))))}}return await o(e),r.digest("hex")}function F(){return new d("Tracker changed while preparing the transaction preview; retry against stable state.",p.CONFLICT,{code:"transaction_preview_snapshot_changed"})}async function Be(e){if(!$(e))return!1;let t=e.path;if(typeof t!="string")return!1;let n=l.resolve(t),r=n;for(;;)try{let o=await Pe(r);return r!==n&&o.isDirectory()}catch(o){if(!$(o))return!1;let i=l.dirname(r);if(i===r)return!1;r=i}}async function R(e,t){let n=l.join(e,t);try{let r=e;for(let o of t.split(l.sep).slice(0,-1))r=l.join(r,o),await I(r);if(!(await I(n)).isFile())throw new TypeError(`Transaction preview requires regular files and directories: ${n}`);return await B(n,`Transaction preview requires regular files and directories: ${n}`)}catch(r){if(await Be(r))return;throw r}}async function St(e,t,n){let r=new Map,o=await R(e,v);r.set(v,o);let i;try{i=JSON.parse(o??"null")}catch{i=null}let a=se(i),s=a.success?a.data:void 0,c=re(s?.schema);for(let[E,qe]of Object.entries(c.files)){let g=l.relative(e,ne(e,qe,te[E]));if(g===""||!l.resolve(e,g).startsWith(l.join(e,l.sep)))throw new d("Transaction preview requires schema files inside the selected tracker root; relocate the configured schema file before retrying.",p.USAGE,{code:"transaction_preview_external_schema",field:`schema.files.${E}`});c.files[E]=g;let k=await R(e,g);if(r.set(g,k),k!==void 0){let z=l.join(t,g);await pt(l.dirname(z),{recursive:!0}),await Fe(z,k)}}let u=l.relative(e,ie(e));r.set(u,await R(e,u));let m=await oe(t,c),y=V({...q,item_types:{definitions:[...s?.item_types?.definitions??[],...m.type_definitions_from_file??[]]}},n),Je=Y(e)===e?[...K.filter(Boolean),v,ee,"transactions",...y.folders,...r.keys()].map(E=>l.normalize(E)):void 0,Ke=s===void 0?void 0:JSON.stringify({...i,schema:{...s.schema,files:c.files}});return{configuration:r,ownedPaths:Je,stagedSettings:Ke,registryFolders:y.folders}}async function Tt(e,t,n){await Ge(e);try{let r=await ft(e),o=await St(r,l.join(l.dirname(t),"configuration"),n),i=[...o.configuration.keys(),...o.registryFolders].map(u=>l.normalize(u)),a=await G(r,o.ownedPaths,i);await dt(r,t,{recursive:!0,dereference:!1,filter:async u=>ze(r,u,o.ownedPaths,i)?(await I(u),!0):!1});let[s,c]=await Promise.all([G(r,o.ownedPaths,i),G(t,o.ownedPaths,i)]);if(a!==s||a!==c)throw F();for(let[u,m]of o.configuration)if(await R(t,u)!==m)throw F();o.stagedSettings!==void 0&&await Fe(l.join(t,v),o.stagedSettings)}catch(r){throw await Be(r)?F():r}}async function Wr(e){let t=pe(e),n=[...e.mutations];if(n.length===0)throw new TypeError("Bulk item transaction requires at least one mutation");for(let[a,s]of n.entries())xe(s,a);let r=Q(),o=await lt(l.join(ht(),"pm-transaction-preview-")),i=l.join(o,"tracker");try{await Tt(t.pmRoot,i,r);let a=!1;return await Te({path:i,noExtensions:!0},async()=>{Z(r);let s={...t,pmRoot:i,createCompensation:"close"},c=n.map((u,m)=>{let y=We(s,u,m);return{...y,inspect:()=>P(u,m,()=>y.inspect()),prepareCompensation:()=>P(u,m,async()=>y.prepareCompensation?.()),apply:()=>P(u,m,()=>y.apply())}});await N({...t,pmRoot:i,steps:c,onTransition:({transition:u})=>{u==="committed"&&(a=!0)}})}),{validated:a,state:a?"staged_snapshot":"replayed_committed_plan",unresolved_commit_constraints:["concurrent_tracker_changes","extension_mutation_guards_and_hooks"]}}finally{await yt(o,{recursive:!0,force:!0})}}async function At(e){let t=[...e.mutations];if(t.length===0)throw new TypeError("Bulk item transaction requires at least one mutation");for(let[a,s]of t.entries())xe(s,a);let n=e.createCompensation??"close";if(!["close","delete"].includes(n))throw new TypeError("Bulk item transaction createCompensation must be close or delete");let r={pmRoot:e.pmRoot,author:e.author,transactionId:e.transactionId,createCompensation:n},o=await N({pmRoot:e.pmRoot,transactionId:e.transactionId,author:e.author,steps:t.map((a,s)=>We(r,a,s)),...e.lockTtlSeconds===void 0?{}:{lockTtlSeconds:e.lockTtlSeconds},...e.lockWaitMs===void 0?{}:{lockWaitMs:e.lockWaitMs},...e.onTransition===void 0?{}:{onTransition:e.onTransition}}),i={};for(let[a,s]of t.entries()){let c=W(s,a),u=o.results[c];i[wt(s,a)]=u}return{transactionId:o.transactionId,status:"committed",recovered:o.recovered,results:i}}function Rt(e){let t=[];return e.evidence!==void 0&&Object.keys(e.evidence).length>0&&t.push({op:"update",id:e.id,options:e.evidence}),t.push({op:"close",id:e.id,reason:e.reason,...e.closeOptions===void 0?{}:{options:e.closeOptions}},{op:"release",id:e.id,...e.releaseOptions===void 0?{}:{options:e.releaseOptions}}),t}function xr(e){return At({pmRoot:e.pmRoot,transactionId:e.transactionId,author:e.author,mutations:Rt(e),...e.lockTtlSeconds===void 0?{}:{lockTtlSeconds:e.lockTtlSeconds},...e.lockWaitMs===void 0?{}:{lockWaitMs:e.lockWaitMs},...e.onTransition===void 0?{}:{onTransition:e.onTransition}})}var zr={buildCreateStep:Le,bulkHistoryMarker:_,compensateByRestore:O,deriveStepId:W,isUpdateMarkerApplied:M,readItemSnapshot:h};export{hr as a,De as b,wr as c,_r as d,gr as e,Wr as f,At as g,Rt as h,xr as i,zr as j};
|
|
2
|
+
//# sourceMappingURL=chunk-6STTPXOC.js.map
|