@unbrained/pm-cli 2026.10.15 → 2026.10.17

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 (161) hide show
  1. package/.agents/skills/pm-developer/references/COMMAND_PLAYBOOK.md +1 -1
  2. package/.claude-plugin/marketplace.json +1 -1
  3. package/AGENTS.md +1 -0
  4. package/CHANGELOG.md +20 -0
  5. package/dist/cli/extension-command-options.d.ts +3 -1
  6. package/dist/cli/extension-command-options.js +1 -1
  7. package/dist/cli/help-content.js +2 -2
  8. package/dist/cli/register-mutation.js +2 -2
  9. package/dist/cli/register-operations.js +1 -1
  10. package/dist/cli/register-structured-mutation.d.ts +0 -5
  11. package/dist/cli/register-structured-mutation.js +1 -1
  12. package/dist/cli/runtime/invocation-options.js +1 -1
  13. package/dist/cli-bundle/bundle-manifest.json +1 -1
  14. package/dist/cli-bundle/chunks/{chunk-7VHINXZP.js → chunk-3QKI3XNX.js} +2 -2
  15. package/dist/cli-bundle/chunks/chunk-4PNPDT2N.js +236 -0
  16. package/dist/cli-bundle/chunks/{chunk-WBBW3WQX.js → chunk-6ZDKKOKM.js} +28 -28
  17. package/dist/cli-bundle/chunks/{chunk-LNKLQYBG.js → chunk-B5QVGCZX.js} +2 -2
  18. package/dist/cli-bundle/chunks/{chunk-52EZH2QQ.js → chunk-EA2CG7UM.js} +2 -2
  19. package/dist/cli-bundle/chunks/chunk-HY7FQ7QX.js +2 -0
  20. package/dist/cli-bundle/chunks/{chunk-NC3QVGDD.js → chunk-J4LPQCET.js} +2 -2
  21. package/dist/cli-bundle/chunks/{chunk-JGKTOBVB.js → chunk-JS3B2M4D.js} +4 -4
  22. package/dist/cli-bundle/chunks/chunk-O4YBC3OM.js +30 -0
  23. package/dist/cli-bundle/chunks/{chunk-N56CAQBU.js → chunk-OZCSXX4D.js} +52 -52
  24. package/dist/cli-bundle/chunks/chunk-VMCSTFSO.js +2 -0
  25. package/dist/cli-bundle/chunks/chunk-W3KZ22DW.js +2 -0
  26. package/dist/cli-bundle/chunks/{chunk-RJ5N44WY.js → chunk-X2ONXFBP.js} +2 -2
  27. package/dist/cli-bundle/chunks/{chunk-7OEGNA4X.js → chunk-X53HM753.js} +2 -2
  28. package/dist/cli-bundle/chunks/{register-list-query-FKKFQ66D.js → register-list-query-RU3QZSAQ.js} +2 -2
  29. package/dist/cli-bundle/chunks/register-mutation-EQYMT32A.js +20 -0
  30. package/dist/cli-bundle/chunks/{register-operations-GEQ2H7PS.js → register-operations-VXBGE4XI.js} +2 -2
  31. package/dist/cli-bundle/chunks/{register-setup-PSJTQBBO.js → register-setup-UUDEGFRO.js} +2 -2
  32. package/dist/cli-bundle/focused-chunks/{chunk-TYLG5VEB.js → chunk-2IOHHNRT.js} +2 -2
  33. package/dist/cli-bundle/focused-chunks/{chunk-PDYE7QDX.js → chunk-5JEFDEL3.js} +30 -30
  34. package/dist/cli-bundle/focused-chunks/{chunk-3RNUMVK4.js → chunk-AH6NX6GM.js} +2 -2
  35. package/dist/cli-bundle/focused-chunks/{chunk-N6FUKTZS.js → chunk-E33QA7PK.js} +2 -2
  36. package/dist/cli-bundle/focused-chunks/{chunk-4KQFMOM7.js → chunk-FTUZ3JF2.js} +5 -5
  37. package/dist/cli-bundle/focused-chunks/{chunk-5OO54BIV.js → chunk-JXR6UKFM.js} +3 -3
  38. package/dist/cli-bundle/focused-chunks/chunk-LDKX4KYJ.js +2 -0
  39. package/dist/cli-bundle/focused-chunks/{chunk-H3P77KVU.js → chunk-MBQF6HT6.js} +2 -2
  40. package/dist/cli-bundle/focused-chunks/{chunk-5TBAVZDR.js → chunk-NZO7GOXD.js} +14 -14
  41. package/dist/cli-bundle/focused-chunks/{chunk-52I2SNKJ.js → chunk-PYC7BF6Z.js} +2 -2
  42. package/dist/cli-bundle/focused-chunks/{chunk-THYQR3ON.js → chunk-QOSVJDOO.js} +59 -59
  43. package/dist/cli-bundle/focused-chunks/{chunk-FQKPOZKS.js → chunk-RBLSY6ML.js} +2 -2
  44. package/dist/cli-bundle/focused-chunks/{chunk-Q4VNCTR2.js → chunk-RHTH5ILM.js} +2 -2
  45. package/dist/cli-bundle/focused-chunks/{chunk-5KRACGBK.js → chunk-SIGIGZCG.js} +3 -3
  46. package/dist/cli-bundle/focused-chunks/chunk-TRFVAWF2.js +26 -0
  47. package/dist/cli-bundle/focused-chunks/{chunk-KIIFVULU.js → chunk-UNTQE37U.js} +2 -2
  48. package/dist/cli-bundle/main.js +27 -27
  49. package/dist/cli-bundle/sdk-authoring.js +1 -1
  50. package/dist/cli-bundle/sdk-contracts.js +2 -2
  51. package/dist/cli-bundle/sdk-core.js +23 -23
  52. package/dist/cli-bundle/sdk-governance.js +1 -1
  53. package/dist/cli-bundle/sdk-graph.js +1 -1
  54. package/dist/cli-bundle/sdk-merge.js +54 -54
  55. package/dist/cli-bundle/sdk-query.js +1 -1
  56. package/dist/cli-bundle/sdk-runtime.js +1 -1
  57. package/dist/cli-bundle/sdk-testing.js +1 -1
  58. package/dist/cli-bundle/sdk.js +7 -7
  59. package/dist/core/extensions/extension-types.d.ts +15 -0
  60. package/dist/core/extensions/extension-types.js +1 -1
  61. package/dist/core/extensions/flag-value-types.d.ts +16 -0
  62. package/dist/core/extensions/flag-value-types.js +1 -1
  63. package/dist/core/extensions/registration-contracts.js +1 -1
  64. package/dist/core/item/item-format.js +3 -3
  65. package/dist/core/output/mutation-projection.d.ts +0 -21
  66. package/dist/core/output/mutation-projection.js +1 -1
  67. package/dist/core/schema/type-workflows.d.ts +1 -1
  68. package/dist/core/schema/type-workflows.js +1 -1
  69. package/dist/core/shared/text-normalization.d.ts +2 -0
  70. package/dist/core/shared/text-normalization.js +1 -1
  71. package/dist/core/store/item-mutation-precondition.d.ts +11 -0
  72. package/dist/core/store/item-mutation-precondition.js +2 -0
  73. package/dist/core/store/item-store.js +1 -1
  74. package/dist/mcp/server.js +1 -1
  75. package/dist/mcp/tool-definitions.js +1 -1
  76. package/dist/sdk/cli-contracts/agent-output-contracts.js +1 -1
  77. package/dist/sdk/cli-contracts/flag-contracts.js +1 -1
  78. package/dist/sdk/cli-contracts/flag-lexicon-contracts.js +1 -1
  79. package/dist/sdk/cli-contracts/registration-helpers.d.ts +1 -1
  80. package/dist/sdk/cli-contracts/registration-helpers.js +1 -1
  81. package/dist/sdk/cli-contracts/tool-schema.d.ts +2 -2
  82. package/dist/sdk/cli-contracts/tool-schema.js +1 -1
  83. package/dist/sdk/context-intent-contracts.js +1 -1
  84. package/dist/sdk/core.d.ts +2 -1
  85. package/dist/sdk/core.js +1 -1
  86. package/dist/sdk/generated/generated-error-code-catalog-part-1.js +1 -1
  87. package/dist/sdk/generated/generated-error-code-catalog-part-2.js +1 -1
  88. package/dist/sdk/guide-topics.js +1 -1
  89. package/dist/sdk/index.d.ts +2 -1
  90. package/dist/sdk/index.js +1 -1
  91. package/dist/sdk/item-transaction.d.ts +72 -9
  92. package/dist/sdk/item-transaction.js +1 -1
  93. package/dist/sdk/lifecycle/claim.d.ts +15 -1
  94. package/dist/sdk/lifecycle/claim.js +1 -1
  95. package/dist/sdk/lifecycle/close.d.ts +2 -8
  96. package/dist/sdk/lifecycle/close.js +1 -1
  97. package/dist/sdk/lifecycle/core-item-fields.d.ts +6 -0
  98. package/dist/sdk/lifecycle/core-item-fields.js +2 -0
  99. package/dist/sdk/lifecycle/mcp-actions.js +1 -1
  100. package/dist/sdk/lifecycle/mutation-option-validation.d.ts +2 -0
  101. package/dist/sdk/lifecycle/mutation-option-validation.js +2 -0
  102. package/dist/sdk/lifecycle/release-handoff.d.ts +12 -0
  103. package/dist/sdk/lifecycle/release-handoff.js +2 -0
  104. package/dist/sdk/lifecycle/structured-mutation-plan.d.ts +33 -0
  105. package/dist/sdk/lifecycle/structured-mutation-plan.js +2 -0
  106. package/dist/sdk/lifecycle/task-composition.d.ts +2 -2
  107. package/dist/sdk/lifecycle/task-composition.js +1 -1
  108. package/dist/sdk/lifecycle/update.d.ts +3 -11
  109. package/dist/sdk/lifecycle/update.js +1 -1
  110. package/dist/sdk/lifecycle/workflow-transition.d.ts +13 -0
  111. package/dist/sdk/lifecycle/workflow-transition.js +2 -0
  112. package/dist/sdk/lifecycle-policy.d.ts +12 -2
  113. package/dist/sdk/lifecycle-policy.js +1 -1
  114. package/dist/sdk/public-surface.json +1 -1
  115. package/dist/sdk/read-output-budget.js +1 -1
  116. package/dist/sdk/runtime-input.js +1 -1
  117. package/dist/sdk/runtime-primitives.d.ts +1 -1
  118. package/dist/sdk/runtime-primitives.js +1 -1
  119. package/dist/sdk/runtime.d.ts +8 -8
  120. package/dist/sdk/runtime.js +1 -1
  121. package/dist/sdk/structured-mutations.d.ts +52 -1
  122. package/dist/sdk/structured-mutations.js +1 -1
  123. package/dist/sdk/workspace-transaction.js +2 -2
  124. package/docs/AGENT_GUIDE.md +33 -4
  125. package/docs/CLOSE_EVIDENCE_RECOVERY.md +16 -7
  126. package/docs/COMMANDS.md +85 -10
  127. package/docs/ECOSYSTEM_PLANNING_REVIEW.md +5 -1
  128. package/docs/EXTENSIONS.md +1 -1
  129. package/docs/SDK.md +114 -2
  130. package/docs/TESTING.md +15 -0
  131. package/docs/generated/FLAG_LEXICON_BUDGETS.md +1 -1
  132. package/docs/generated/REFUSAL_CLOSURE_CENSUS.md +16 -3
  133. package/marketplace.json +1 -1
  134. package/package.json +2 -1
  135. package/packages/pm-beads/package.json +1 -1
  136. package/packages/pm-calendar/package.json +1 -1
  137. package/packages/pm-command-kit/package.json +1 -1
  138. package/packages/pm-digital-twin/package.json +1 -1
  139. package/packages/pm-governance-audit/package.json +1 -1
  140. package/packages/pm-guide-shell/package.json +1 -1
  141. package/packages/pm-kanban/package.json +1 -1
  142. package/packages/pm-lifecycle-hooks/package.json +1 -1
  143. package/packages/pm-linked-test-adapters/package.json +1 -1
  144. package/packages/pm-search-advanced/package.json +1 -1
  145. package/packages/pm-templates/package.json +1 -1
  146. package/packages/pm-todos/package.json +1 -1
  147. package/packages/pm-vcs/package.json +1 -1
  148. package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
  149. package/plugins/pm-claude/package.json +1 -1
  150. package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
  151. package/plugins/pm-codex/package.json +1 -1
  152. package/plugins/pm-codex/plugin.json +1 -1
  153. package/runtime-dependencies.json +1 -1
  154. package/dist/cli-bundle/chunks/chunk-EMEEHV2Y.js +0 -2
  155. package/dist/cli-bundle/chunks/chunk-JSUJWIHQ.js +0 -30
  156. package/dist/cli-bundle/chunks/chunk-VIMQCFCK.js +0 -2
  157. package/dist/cli-bundle/chunks/chunk-X2H6UR26.js +0 -236
  158. package/dist/cli-bundle/chunks/register-mutation-EWMMVZJB.js +0 -20
  159. package/dist/cli-bundle/focused-chunks/chunk-HTA3TNC3.js +0 -26
  160. package/dist/cli-bundle/focused-chunks/chunk-JKBH7YGX.js +0 -2
  161. package/docs/ecosystem-review-2026-09-28.json +0 -1
@@ -1,2 +0,0 @@
1
- import{Rb as Te,Sb as ve,Ub as U,Xb as Ae,Ya as Se,Zb as Re,_b as be,a as te,uc as Ie}from"./chunk-WBBW3WQX.js";import{yc as Ee}from"./chunk-JSUJWIHQ.js";import{b as me,c as C}from"./chunk-N56CAQBU.js";import{F as x,Hk as fe,I as S,Ki as le,L as K,Mi as ue,Nk as ye,Q as V,R as p,T as d,Va as q,Wg as ce,X as $,Z as Y,_ as T,cb as H,cp as ge,fm as he,fp as _e,hc as Z,hm as we,lg as re,ng as ne,od as Q,og as ie,pd as ee,rg as oe,tb as X,ti as pe,vg as ae,vh as de,xg as se}from"./chunk-X2H6UR26.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 Xe 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]="7599b1e6-1f28-597a-adda-ad856beb35bd")}catch{}})();var D=["op","id","reason","options"],Me=[...D,"ref"],Oe=["schema_version","mutations"],Pe="[a-z][a-z0-9._-]{0,63}",ke=new RegExp(`^${Pe}$`,"u"),je=new RegExp(`(^|,)id=@(${Pe})(?=,|$)`,"gu"),Ne=e=>e.slice(2).replaceAll(/-([a-z])/gu,(t,n)=>n.toUpperCase()),A=["item","linked","schedule","claim_state","children","omission_receipt","row_contract","context_intent"],Fe=new Set(["created_at","updated_at","closed_at","version","format_version","path","author","collection_counts","notes_count","tests_count"]),Ze=new Set([...Fe,"completed_at","id"]),v=new Set(["id","title","description","type","status","priority","tags","body","deadline","estimated_minutes","acceptance_criteria","definition_of_ready","order","rank","assignee",...x,"affected_version","fixed_version","component","regression","customer_impact","close_reason","completed_at","dependencies","comments","notes","learnings","files","tests","docs","reminders","events","type_options"]),$e={create:ge.map(e=>e.target),update:_e.map(e=>e.target),close:fe.map(e=>Ne(e.flag)).filter(e=>e!=="reason"),release:ye.map(e=>Ne(e.flag))};function vr(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 i=e[r];if(i===void 0)continue;let o=typeof i=="number"||typeof i=="string"&&i.trim().length>0?Number(i):Number.NaN;if(!Number.isSafeInteger(o)||o<=0)throw new d(`${r} must be a positive safe integer.`,p.USAGE);t[r]=o}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 R(e,t){let n=Math.max(1,Math.min(3,Math.floor(e.length/4)+1)),r;for(let i of t){let o=Z(e,i,n);o!==null&&(r===void 0||o<r.distance)&&(r={key:i,distance:o})}return r?.key}function w(e,t,n){let r=R(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 P(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 Qe(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(!D.includes(n))throw w(`mutation ${t+1}`,n,D);return e}function et(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(!$e[t].includes(r))throw w(`mutation ${n+1} ${t} options`,r,$e[t]);return e}}function tt(e,t){let n=Qe(e,t),{op:r,id:i,reason:o}=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 s=et(n.options,r,t);if(typeof i!="string"||i.trim().length===0)throw new d(`Mutation ${t+1} requires a non-empty id.`,p.USAGE);let a=i.trim();if(r==="close"){if(typeof o!="string"||o.trim().length===0)throw new d(`Mutation ${t+1} close requires a non-empty reason.`,p.USAGE);return{op:r,id:a,reason:o.trim(),...s===void 0?{}:{options:s}}}if(r==="release")return{op:r,id:a,...s===void 0?{}:{options:s}};if(!f(s))throw new d(`Mutation ${t+1} ${r} requires an options object.`,p.USAGE);return{op:r,id:a,options:s}}function Ge(e){let t=P(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,i)=>{let o=tt(r,i);return o.options!==void 0&&he(o.options),o})}function rt(e,t,n){let r=Xe.createHash("sha256").update(e).update("\0").update(t).digest("hex"),i=BigInt(`0x${r.slice(0,16)}`).toString(36).padStart(13,"0").slice(-12);return`${le(n)}${i}`}function Ce(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 Ue(e,t){if(typeof e!="string")return e;let n=e.replace(je,(r,i,o)=>{let s=t[o];if(s===void 0)throw new d(`Unknown mutation reference "@${o}".`,p.USAGE);return`${i}id=${s}`});if(/(^|,)id=@/u.test(n))throw new d(`Malformed mutation reference in dependency "${e}".`,p.USAGE);return n}function nt(e){return typeof e!="string"?[]:e.startsWith("@")?[e.slice(1)]:[...e.matchAll(je)].map(t=>t[1]).filter(t=>t!==void 0)}function it(e){let t=new Map;for(let o of e){if(o.op!=="create"||typeof o.ref!="string")continue;let s=f(o.options)?o.options:{},a=Array.isArray(s.dep)?s.dep:s.dep===void 0?[]:[s.dep];t.set(o.ref,[s.parent,s.blockedBy,...a].flatMap(nt))}let n=new Set,r=new Set,i=o=>{if(n.has(o))throw new d(`Mutation reference cycle includes "@${o}".`,p.USAGE);if(!r.has(o)){n.add(o);for(let s of t.get(o))t.has(s)&&i(s);n.delete(o),r.add(o)}};for(let o of t.keys())i(o)}function ot(e){let t=P(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(!Oe.includes(r))throw w("mutation document",r,Oe);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,i)=>{if(!f(r))throw new d(`Mutation ${i+1} must be an object.`,p.USAGE);for(let o of Object.keys(r))if(!Me.includes(o))throw w(`mutation ${i+1}`,o,Me);return{...r}})}function at(e,t){let n=Object.create(null);for(let[r,i]of e.entries())if(i.ref!==void 0){if(i.op!=="create")throw new d(`Mutation ${r+1} ref is only valid for create operations.`,p.USAGE);if(typeof i.ref!="string"||!ke.test(i.ref))throw new d(`Mutation ${r+1} ref must match ${ke.source}.`,p.USAGE);if(n[i.ref]!==void 0)throw new d(`Duplicate mutation ref "${i.ref}".`,p.USAGE);n[i.ref]=typeof i.id=="string"&&i.id.trim().length>0?ue(i.id,t.idPrefix):rt(t.transactionId,i.ref,t.idPrefix)}return n}function Ar(e,t){let n=ot(e),r=at(n,t);it(n);let i=n.map(a=>{let c={...a},l=typeof c.ref=="string"?c.ref:void 0;if(delete c.ref,l!==void 0?c.id=r[l]:c.id=Ce(c.id,r),f(c.options)){let m={...c.options};for(let y of["parent","blockedBy"])m[y]!==void 0&&(m[y]=Ce(m[y],r));Array.isArray(m.dep)?m.dep=m.dep.map(y=>Ue(y,r)):m.dep!==void 0&&(m.dep=Ue(m.dep,r)),c.options=m}return c}),o=Ge(JSON.stringify(i)),s=o.filter(a=>a.op==="create").map(a=>a.id);if(new Set(s).size!==s.length)throw new d("Duplicate resolved create id in mutation document.",p.USAGE);return{schema_version:1,mutations:o,references:r}}function st(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 ct(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=>st(r,t))}}function dt(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 De(e,t,n=!1){for(let[r,i,o]of Ee){let s=t[r],a=ct(n&&["comments","notes","learnings"].includes(r)&&Array.isArray(s)?s.filter(c=>!f(c)||c.created_at===void 0):s,o,r);a!==void 0&&a.length>0&&(e[i]=a)}}function pt(e,t){for(let n of Object.keys(e)){if(t){if(!A.includes(n))throw w("item envelope",n,A);continue}if(!v.has(n)&&R(n,[...v])===void 0&&R(n,A)==="item")throw w("item envelope",n,A)}}function lt(e){let t=Object.hasOwn(e,"item");pt(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 ut(e,t,n,r,i,o){if((r==="update"?Ze:Fe).has(t))return;let s=i.find(a=>a.metadata_key===t&&a.commands.includes(r));if(s!==void 0){let a=se(o,s);e[ae(s)]=a!==void 0?a:s.type==="array"||s.type==="object"?JSON.stringify(n):n;return}if(!v.has(t)){if(R(t,[...v])!==void 0)throw w("item document",t,[...v]);let a=Array.isArray(e.field)?e.field:[];a.push(`${t}=${typeof n=="string"?n:JSON.stringify(n)}`),e.field=a;return}["dependencies","comments","notes","learnings","files","tests","docs","reminders","events","type_options"].includes(t)||(e[t.replaceAll(/_([a-z])/gu,(a,c)=>c.toUpperCase())]=dt(t,n))}function Rr(e,t,n={},r=[]){let i=P(e,"Item document");if(!f(i))throw new d("Item document must be a JSON object.",p.USAGE);let{item:o,linked:s}=lt(i),a={};for(let[c,l]of Object.entries(o))ut(a,c,l,t,r,n);if(De(a,o,t==="update"),s!==void 0&&De(a,s),t==="update"){let c=Object.fromEntries(["comments","notes","learnings"].filter(l=>Object.hasOwn(o,l)).map(l=>[l,o[l].filter(m=>f(m)&&m.created_at!==void 0)]));Object.keys(c).length>0&&(a.documentAnnotationSnapshot=c)}return{...a,...Object.fromEntries(Object.entries(n).filter(([,c])=>c!==void 0)),...Array.isArray(a.field)&&Array.isArray(n.field)?{field:[...a.field,...n.field]}:{},stdinJson:void 0}}function br(e){return Ge(JSON.stringify(e))}import W from"node:crypto";import{constants as j}from"node:fs";import{cp as mt,lstat as Le,mkdir as ft,mkdtemp as yt,open as ht,readdir as wt,realpath as gt,rm as _t,stat as We,writeFile as ze}from"node:fs/promises";import{tmpdir as Et}from"node:os";import u 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]="7ff78f44-c9db-5221-b09a-32b78876b461")}catch{}})();function M(e,t){let n={...e,...t};return e===void 0?n:we(e,n)}async function h(e,t){try{let n=(await Se(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 z(e,t){let n=e.id.replaceAll(/[^a-zA-Z0-9._-]/gu,"_"),r=W.createHash("sha256").update(X(e)).digest("hex").slice(0,12);return`${t+1}-${e.op}-${n}-${r}`}function St(e,t){let n=e.id.replaceAll(/[^a-zA-Z0-9._-]/gu,"_");return`${t+1}-${e.op}-${n}`}function g(e,t,n){return`bulk-item-transaction ${e} ${t} ${n}`}async function O(e,t,n,r){let i=await de(u.join(e,"history",`${t}.jsonl`),t),o=g(n,r,"apply"),s=g(n,r,"compensate");for(let a=i.length-1;a>=0;a-=1){let c=i[a].message;if(c===o)return!0;if(c===s)return!1}return!1}async function B(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 k(e,t,n,r){let i=r!==null&&typeof r=="object"&&!Array.isArray(r)?r.target_updated_at:void 0;typeof i=="string"&&await h(e.pmRoot,t)!==void 0&&await be(t,i,{force:!0,author:e.author,message:g(e.transactionId,n,"compensate")},{pmRoot:e.pmRoot})}function Be(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 Te(M(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 Re(t.id,{force:!0,author:e.author,message:`Compensate interrupted bulk transaction ${e.transactionId}`},{pmRoot:e.pmRoot});return}r.closedAt===void 0&&await U(t.id,`Compensated: interrupted bulk transaction ${e.transactionId}`,{force:!0,author:e.author},{pmRoot:e.pmRoot})}}}}function Tt(e,t,n){return{id:n,async inspect(){let r=await h(e.pmRoot,t.id);return r===void 0?{state:"pending"}:await O(e.pmRoot,r.id,e.transactionId,n)?{state:"applied",result:{id:r.id,op:"update"}}:{state:"pending"}},async prepareCompensation(){return B(e.pmRoot,t)},async apply(){let r=(await ve(t.id,M(t.options,{author:e.author,message:g(e.transactionId,n,"apply")}),{pmRoot:e.pmRoot})).item;return{id:String(r.id),op:"update"}},async compensate(r){await k(e,t.id,n,r)}}}function vt(e,t,n){return{id:n,async inspect(){let r=await h(e.pmRoot,t.id);return r===void 0?{state:"pending"}:await O(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 B(e.pmRoot,t)},async apply(){let r=(await U(t.id,t.reason,M(t.options,{author:e.author,message:g(e.transactionId,n,"apply")}),{pmRoot:e.pmRoot})).item;return{id:String(r.id),op:"close"}},async compensate(r){await k(e,t.id,n,r)}}}function At(e,t,n){return{id:n,async inspect(){let r=await h(e.pmRoot,t.id);return r===void 0?{state:"pending"}:await O(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 B(e.pmRoot,t)},async apply(){let r=(await Ae(t.id,M(t.options,{author:e.author,message:g(e.transactionId,n,"apply")}),{pmRoot:e.pmRoot})).item;return{id:String(r.id),op:"release"}},async compensate(r){await k(e,t.id,n,r)}}}function Je(e,t,n){let r=z(t,n);switch(t.op){case"create":return Be(e,t,r);case"update":return Tt(e,t,r);case"close":return vt(e,t,r);case"release":return At(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 F(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 Ke(e,t,n,r){let i=u.relative(e,t);return["locks","runtime","search"].includes(i.split(u.sep)[0])?r.some(o=>i===o||i.startsWith(`${o}${u.sep}`)||o.startsWith(`${i}${u.sep}`)):i===""||n===void 0||n.some(o=>i===o||i.startsWith(`${o}${u.sep}`)||o.startsWith(`${i}${u.sep}`))}async function I(e){let t=await Le(e);if(t.isSymbolicLink())await We(e);else if(t.isDirectory()||t.isFile())return t;throw T()}async function Rt(e){let t=await ht(e,j.O_RDONLY|j.O_NOFOLLOW|j.O_NONBLOCK);try{let n=await t.stat();if(!n.isFile())throw T();let r=W.createHash("sha256");if(n.size>0)for await(let i of t.createReadStream({highWaterMark:64*1024,end:n.size-1,autoClose:!1}))r.update(i);return r.digest()}finally{await t.close()}}async function G(e,t,n){let r=W.createHash("sha256");async function i(o){for(let s of(await wt(o)).sort()){let a=u.join(o,s);Ke(e,a,t,n)&&((await I(a)).isDirectory()?await i(a):(r.update(JSON.stringify(u.relative(e,a))),r.update(await Rt(a))))}}return await i(e),r.digest("hex")}function L(){return new d("Tracker changed while preparing the transaction preview; retry against stable state.",p.CONFLICT,{code:"transaction_preview_snapshot_changed"})}async function Ve(e){if(!$(e))return!1;let t=e.path;if(typeof t!="string")return!1;let n=u.resolve(t),r=n;for(;;)try{let i=await Le(r);return r!==n&&i.isDirectory()}catch(i){if(!$(i))return!1;let o=u.dirname(r);if(o===r)return!1;r=o}}async function b(e,t){let n=u.join(e,t);try{let r=e;for(let i of t.split(u.sep).slice(0,-1))r=u.join(r,i),await I(r);if(!(await I(n)).isFile())throw T();return await Y(n,T())}catch(r){if(await Ve(r))return;throw r}}async function bt(e,t,n){let r=new Map,i=await b(e,S);r.set(S,i);let o;try{o=JSON.parse(i??"null")}catch{o=null}let s=pe(o),a=s.success?s.data:void 0,c=ne(a?.schema);for(let[E,He]of Object.entries(c.files)){let _=u.relative(e,ie(e,He,re[E]));if(_===""||!u.resolve(e,_).startsWith(u.join(e,u.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]=_;let N=await b(e,_);if(r.set(_,N),N!==void 0){let J=u.join(t,_);await ft(u.dirname(J),{recursive:!0}),await ze(J,N)}}let l=u.relative(e,ce(e));r.set(l,await b(e,l));let m=await oe(t,c),y=q({...V,item_types:{definitions:[...a?.item_types?.definitions??[],...m.type_definitions_from_file??[]]}},n),Ye=H(e)===e?[...K.filter(Boolean),S,te,"transactions",...y.folders,...r.keys()].map(E=>u.normalize(E)):void 0,qe=a===void 0?void 0:JSON.stringify({...o,schema:{...a.schema,files:c.files}});return{configuration:r,ownedPaths:Ye,stagedSettings:qe,registryFolders:y.folders}}async function It(e,t,n){await We(e);try{let r=await gt(e),i=await bt(r,u.join(u.dirname(t),"configuration"),n),o=[...i.configuration.keys(),...i.registryFolders].map(l=>u.normalize(l)),s=await G(r,i.ownedPaths,o);await mt(r,t,{recursive:!0,dereference:!1,filter:async l=>Ke(r,l,i.ownedPaths,o)?(await I(l),!0):!1});let[a,c]=await Promise.all([G(r,i.ownedPaths,o),G(t,i.ownedPaths,o)]);if(s!==a||s!==c)throw L();for(let[l,m]of i.configuration)if(await b(t,l)!==m)throw L();i.stagedSettings!==void 0&&await ze(u.join(t,S),i.stagedSettings)}catch(r){throw await Ve(r)?L():r}}async function Yr(e){let t=me(e),n=[...e.mutations];if(n.length===0)throw new TypeError("Bulk item transaction requires at least one mutation");for(let[s,a]of n.entries())xe(a,s);let r=ee(),i=await yt(u.join(Et(),"pm-transaction-preview-")),o=u.join(i,"tracker");try{await It(t.pmRoot,o,r);let s=!1;return await Ie({path:o,noExtensions:!0},async()=>{Q(r);let a={...t,pmRoot:o,createCompensation:"close"},c=n.map((l,m)=>{let y=Je(a,l,m);return{...y,inspect:()=>F(l,m,()=>y.inspect()),prepareCompensation:()=>F(l,m,async()=>y.prepareCompensation?.()),apply:()=>F(l,m,()=>y.apply())}});await C({...t,pmRoot:o,steps:c,onTransition:({transition:l})=>{l==="committed"&&(s=!0)}})}),{validated:s,state:s?"staged_snapshot":"replayed_committed_plan",unresolved_commit_constraints:["concurrent_tracker_changes","extension_mutation_guards_and_hooks"]}}finally{await _t(i,{recursive:!0,force:!0})}}async function Mt(e){let t=[...e.mutations];if(t.length===0)throw new TypeError("Bulk item transaction requires at least one mutation");for(let[s,a]of t.entries())xe(a,s);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},i=await C({pmRoot:e.pmRoot,transactionId:e.transactionId,author:e.author,steps:t.map((s,a)=>Je(r,s,a)),...e.lockTtlSeconds===void 0?{}:{lockTtlSeconds:e.lockTtlSeconds},...e.lockWaitMs===void 0?{}:{lockWaitMs:e.lockWaitMs},...e.onTransition===void 0?{}:{onTransition:e.onTransition}}),o={};for(let[s,a]of t.entries()){let c=z(a,s),l=i.results[c];o[St(a,s)]=l}return{transactionId:i.transactionId,status:"committed",recovered:i.recovered,results:o}}function Ot(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 qr(e){return Mt({pmRoot:e.pmRoot,transactionId:e.transactionId,author:e.author,mutations:Ot(e),...e.lockTtlSeconds===void 0?{}:{lockTtlSeconds:e.lockTtlSeconds},...e.lockWaitMs===void 0?{}:{lockWaitMs:e.lockWaitMs},...e.onTransition===void 0?{}:{onTransition:e.onTransition}})}var Hr={buildCreateStep:Be,bulkHistoryMarker:g,compensateByRestore:k,deriveStepId:z,isUpdateMarkerApplied:O,readItemSnapshot:h};export{vr as a,Ge as b,Ar as c,Rr as d,br as e,Yr as f,Mt as g,Ot as h,qr as i,Hr as j};
2
- //# sourceMappingURL=chunk-VIMQCFCK.js.map