@unbrained/pm-cli 2026.10.10 → 2026.10.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/.claude-plugin/marketplace.json +1 -36
- package/CHANGELOG.md +31 -4
- package/dist/cli/commander-usage.d.ts +5 -5
- package/dist/cli/commander-usage.js +3 -3
- package/dist/cli/error-guidance.d.ts +2 -0
- package/dist/cli/error-guidance.js +2 -2
- package/dist/cli/help-json-payload.js +1 -1
- package/dist/cli/main.d.ts +1 -0
- package/dist/cli/main.js +4 -4
- package/dist/cli/register-operations.d.ts +9 -4
- package/dist/cli/register-operations.js +1 -1
- package/dist/cli-bundle/bundle-manifest.json +1 -382
- package/dist/cli-bundle/chunks/{chunk-2JYTSTQP.js → chunk-3LQTJN4J.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-YMLF6QT7.js → chunk-6PZPUJW3.js} +28 -28
- package/dist/cli-bundle/chunks/{chunk-RUT3CCAG.js → chunk-B465HPS5.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-ESRACL6K.js → chunk-DT3KUUKY.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-SSY4OSJR.js → chunk-GUVKPOY6.js} +2 -2
- package/dist/cli-bundle/chunks/chunk-ILQEZ4Y6.js +2 -0
- package/dist/cli-bundle/chunks/{chunk-RBPOO46D.js → chunk-JRRXWH5B.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-MEWBSWE3.js → chunk-LH5QDBMN.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-KNW3RSLS.js → chunk-M5NDSW6E.js} +30 -30
- package/dist/cli-bundle/chunks/{chunk-K2UTE75T.js → chunk-MHPU2LDF.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-OBLO45UM.js → chunk-QM3M7GB5.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-S445XEYT.js → chunk-UABZJXIS.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-ZWRLAOA4.js → chunk-X2I2EEAS.js} +2 -2
- package/dist/cli-bundle/chunks/{register-list-query-T6BOR67M.js → register-list-query-OR33UEML.js} +2 -2
- package/dist/cli-bundle/chunks/{register-mutation-6NXR7SAJ.js → register-mutation-R34EJ3NH.js} +2 -2
- package/dist/cli-bundle/chunks/register-operations-UHSMEHSF.js +2 -0
- package/dist/cli-bundle/chunks/{register-setup-MAYFPKBX.js → register-setup-5E3PT22L.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-SIEGIPNT.js → chunk-7QIZB2F2.js} +7 -7
- package/dist/cli-bundle/focused-chunks/{chunk-PLTTMQAW.js → chunk-AJG3DBXR.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-AXBO53EQ.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-W5AE7GKZ.js → chunk-CYEZLKLL.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-PBCYGO7X.js → chunk-FXRWJEQ5.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-GVGFUD52.js → chunk-IKJFAU32.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-DMSADMEU.js → chunk-OGOLIS5R.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-PPH5N26M.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-WAOXID5J.js → chunk-RNAWRTQV.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-B3YW6H2I.js → chunk-RZVNGUT7.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-52UJEHEV.js → chunk-SV6YYZLR.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-EIOQNLBQ.js → chunk-TS46OZD5.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-KNJR2WUO.js → chunk-VBTLX5SN.js} +62 -62
- package/dist/cli-bundle/focused-chunks/{chunk-JGFSSR3G.js → chunk-YCOJLIDI.js} +3 -3
- package/dist/cli-bundle/focused-chunks/chunk-YDJT33JU.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-AU6VJGTY.js → chunk-Z4T3637Y.js} +2 -2
- package/dist/cli-bundle/main.js +22 -22
- 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 -31
- 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 +24 -24
- 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 +9 -9
- package/dist/core/history/event-classification.d.ts +1 -1
- package/dist/core/history/event-classification.js +1 -1
- package/dist/core/item/item-format.d.ts +2 -0
- package/dist/core/item/item-format.js +2 -2
- package/dist/core/telemetry/runtime.d.ts +1 -1
- package/dist/core/telemetry/runtime.js +2 -2
- package/dist/core/test/background-runs.d.ts +1 -0
- package/dist/core/test/background-runs.js +2 -2
- package/dist/sdk/agent/command-suggestions.d.ts +2 -0
- package/dist/sdk/agent/command-suggestions.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/grammar-contracts.js +1 -1
- package/dist/sdk/cli-contracts/registration-helpers.d.ts +1 -4
- package/dist/sdk/cli-contracts/registration-helpers.js +1 -1
- package/dist/sdk/cli-contracts/tool-parameter-tables.js +1 -1
- package/dist/sdk/cli-contracts/tool-schema.d.ts +1 -1
- package/dist/sdk/cli-contracts/tool-schema.js +1 -1
- package/dist/sdk/core.d.ts +1 -0
- package/dist/sdk/core.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/governance/artifact-ledgers.d.ts +59 -0
- package/dist/sdk/governance/artifact-ledgers.js +2 -0
- package/dist/sdk/governance.d.ts +1 -0
- package/dist/sdk/governance.js +1 -1
- package/dist/sdk/index.d.ts +2 -0
- package/dist/sdk/index.js +1 -1
- package/dist/sdk/public-surface.json +1 -1
- package/dist/sdk/test/batch.js +1 -1
- package/dist/sdk/test/command-args.d.ts +4 -0
- package/dist/sdk/test/command-args.js +2 -0
- package/dist/sdk/test/entry.d.ts +3 -0
- package/dist/sdk/test/entry.js +1 -1
- package/dist/sdk/test/execution.d.ts +15 -4
- package/dist/sdk/test/execution.js +2 -2
- package/dist/sdk/test/prerequisites.d.ts +6 -0
- package/dist/sdk/test/prerequisites.js +2 -0
- package/dist/sdk/test/trust.js +1 -1
- package/dist/sdk/test/update.d.ts +55 -0
- package/dist/sdk/test/update.js +2 -0
- package/dist/types.d.ts +4 -0
- package/dist/types.js +1 -1
- package/docs/LINKED_TEST_EDITS.md +79 -0
- package/docs/RELEASE_LEDGER_RECONCILIATION.md +148 -0
- package/docs/RELEASE_RELIABILITY.md +4 -0
- package/docs/RELEASING.md +53 -13
- package/docs/SDK.md +178 -636
- package/docs/SDK_EVIDENCE_TRACEABILITY.md +4 -0
- package/docs/TESTING.md +13 -0
- package/docs/agent-task-token-baseline.json +1 -292
- package/docs/agent-task-transcripts.json +1 -478
- package/docs/ecosystem-review-2026-09-28.json +1 -2866
- package/docs/examples/policy-restricted-extension/manifest.json +1 -22
- package/docs/examples/policy-restricted-extension/package.json +1 -8
- package/docs/examples/sdk-agent-environment/package.json +1 -8
- package/docs/examples/sdk-app-embedding/package.json +1 -9
- package/docs/examples/sdk-contract-consumer/package.json +1 -11
- package/docs/examples/sdk-custom-tool/package.json +1 -13
- package/docs/examples/starter-extension/manifest.json +1 -33
- package/docs/examples/starter-extension/package.json +1 -10
- package/docs/generated/FLAG_LEXICON_BUDGETS.md +2 -2
- package/docs/generated/REFUSAL_CLOSURE_CENSUS.md +8 -3
- package/docs/performance/corpus-shape-comparison.json +1 -108
- package/docs/performance/latest-scale-report.json +1 -418
- package/docs/performance/runner-qualification.md +36 -0
- package/docs/performance/scale-100k-report.json +1 -418
- package/docs/schemas/extension-manifest.schema.json +1 -165
- package/marketplace.json +1 -36
- package/package.json +1 -1
- package/packages/pm-beads/extensions/beads/manifest.json +1 -28
- package/packages/pm-beads/extensions/beads/package.json +1 -3
- package/packages/pm-beads/package.json +1 -50
- package/packages/pm-calendar/extensions/calendar/manifest.json +1 -22
- package/packages/pm-calendar/extensions/calendar/package.json +1 -3
- package/packages/pm-calendar/package.json +1 -51
- package/packages/pm-command-kit/extensions/command-kit/manifest.json +1 -22
- package/packages/pm-command-kit/extensions/command-kit/package.json +1 -3
- package/packages/pm-command-kit/package.json +1 -53
- package/packages/pm-digital-twin/extensions/digital-twin/manifest.json +1 -19
- package/packages/pm-digital-twin/extensions/digital-twin/package.json +1 -3
- package/packages/pm-digital-twin/package.json +1 -58
- package/packages/pm-governance-audit/extensions/governance-audit/manifest.json +1 -19
- package/packages/pm-governance-audit/extensions/governance-audit/package.json +1 -3
- package/packages/pm-governance-audit/package.json +1 -55
- package/packages/pm-guide-shell/extensions/guide-shell/manifest.json +1 -22
- package/packages/pm-guide-shell/extensions/guide-shell/package.json +1 -3
- package/packages/pm-guide-shell/package.json +1 -52
- package/packages/pm-kanban/extensions/kanban/manifest.json +1 -19
- package/packages/pm-kanban/extensions/kanban/package.json +1 -3
- package/packages/pm-kanban/package.json +1 -57
- package/packages/pm-lifecycle-hooks/extensions/lifecycle-hooks/manifest.json +1 -19
- package/packages/pm-lifecycle-hooks/extensions/lifecycle-hooks/package.json +1 -3
- package/packages/pm-lifecycle-hooks/package.json +1 -52
- package/packages/pm-linked-test-adapters/extensions/linked-test-adapters/manifest.json +1 -29
- package/packages/pm-linked-test-adapters/extensions/linked-test-adapters/package.json +1 -3
- package/packages/pm-linked-test-adapters/package.json +1 -53
- package/packages/pm-search-advanced/extensions/search-advanced/manifest.json +1 -29
- package/packages/pm-search-advanced/extensions/search-advanced/package.json +1 -3
- package/packages/pm-search-advanced/package.json +1 -54
- package/packages/pm-templates/extensions/templates/manifest.json +1 -22
- package/packages/pm-templates/extensions/templates/package.json +1 -3
- package/packages/pm-templates/package.json +1 -50
- package/packages/pm-todos/extensions/todos/manifest.json +1 -29
- package/packages/pm-todos/extensions/todos/package.json +1 -3
- package/packages/pm-todos/package.json +1 -51
- package/packages/pm-vcs/extensions/vcs/manifest.json +1 -19
- package/packages/pm-vcs/extensions/vcs/package.json +1 -3
- package/packages/pm-vcs/package.json +1 -55
- package/plugins/pm-claude/.claude-plugin/plugin.json +1 -25
- package/plugins/pm-claude/.mcp.json +1 -8
- package/plugins/pm-claude/hooks/hooks.json +1 -17
- package/plugins/pm-claude/package.json +1 -9
- package/plugins/pm-codex/.codex-plugin/plugin.json +1 -45
- package/plugins/pm-codex/.mcp.json +1 -11
- package/plugins/pm-codex/mcp.json +1 -11
- package/plugins/pm-codex/package.json +1 -9
- package/plugins/pm-codex/plugin.json +1 -45
- package/runtime-dependencies.json +1 -512
- package/dist/cli-bundle/chunks/chunk-BXSXT5Z6.js +0 -2
- package/dist/cli-bundle/chunks/register-operations-PDOBQZUJ.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-2CJWTLQG.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-MJQ253F3.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-WOEZJUA2.js +0 -2
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{Rb as Se,Sb as ve,Ub as U,Xb as Te,Ya as Ee,Zb as Ae,_b as Re,a as te,uc as be}from"./chunk-ESRACL6K.js";import{b as me,c as C}from"./chunk-SSY4OSJR.js";import{Ci as le,Dc as Q,Ec as ee,Ei as ue,F as J,I as S,Ko as _e,L as K,No as ge,Pg as ce,Q as V,R as p,Rl as he,T as d,Tl as we,Ub as Z,Va as q,X as N,Z as Y,_ as v,cb as H,gg as re,ig as ne,jg as oe,li as pe,mg as ie,oh as de,qg as ae,rk as fe,sg as se,wb as X,xk as ye}from"./chunk-YMLF6QT7.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 He 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]="ccd80f77-f619-5cd8-a792-cc5d9c733ebf")}catch{}})();var D=["op","id","reason","options"],Ie=[...D,"ref"],Me=["schema_version","mutations"],De="[a-z][a-z0-9._-]{0,63}",Oe=new RegExp(`^${De}$`,"u"),je=new RegExp(`(^|,)id=@(${De})(?=,|$)`,"gu"),ke=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"],Pe=new Set(["created_at","updated_at","closed_at","version","format_version","path","author","collection_counts","notes_count","tests_count"]),Xe=new Set([...Pe,"completed_at","id"]),T=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"]),$e={create:_e.map(e=>e.target),update:ge.map(e=>e.target),close:fe.map(e=>ke(e.flag)).filter(e=>e!=="reason"),release:ye.map(e=>ke(e.flag))};function Sr(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 R(e,t){let n=Math.max(1,Math.min(3,Math.floor(e.length/4)+1)),r;for(let o of t){let i=X(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=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 j(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 Ze(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 Qe(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 et(e,t){let n=Ze(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 s=Qe(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 a=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:a,reason:i.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 Fe(e){let t=j(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=et(r,o);return i.options!==void 0&&he(i.options),i})}function tt(e,t,n){let r=He.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`${le(n)}${o}`}function Ne(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 Ce(e,t){if(typeof e!="string")return e;let n=e.replace(je,(r,o,i)=>{let s=t[i];if(s===void 0)throw new d(`Unknown mutation reference "@${i}".`,p.USAGE);return`${o}id=${s}`});if(/(^|,)id=@/u.test(n))throw new d(`Malformed mutation reference in dependency "${e}".`,p.USAGE);return n}function rt(e){return typeof e!="string"?[]:e.startsWith("@")?[e.slice(1)]:[...e.matchAll(je)].map(t=>t[1]).filter(t=>t!==void 0)}function nt(e){let t=new Map;for(let i of e){if(i.op!=="create"||typeof i.ref!="string")continue;let s=f(i.options)?i.options:{},a=Array.isArray(s.dep)?s.dep:s.dep===void 0?[]:[s.dep];t.set(i.ref,[s.parent,s.blockedBy,...a].flatMap(rt))}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 s of t.get(i))t.has(s)&&o(s);n.delete(i),r.add(i)}};for(let i of t.keys())o(i)}function ot(e){let t=j(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(!Me.includes(r))throw w("mutation document",r,Me);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(!Ie.includes(i))throw w(`mutation ${o+1}`,i,Ie);return{...r}})}function it(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"||!Oe.test(o.ref))throw new d(`Mutation ${r+1} ref must match ${Oe.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?ue(o.id,t.idPrefix):tt(t.transactionId,o.ref,t.idPrefix)}return n}function vr(e,t){let n=ot(e),r=it(n,t);nt(n);let o=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=Ne(c.id,r),f(c.options)){let m={...c.options};for(let y of["parent","blockedBy"])m[y]!==void 0&&(m[y]=Ne(m[y],r));Array.isArray(m.dep)?m.dep=m.dep.map(y=>Ce(y,r)):m.dep!==void 0&&(m.dep=Ce(m.dep,r)),c.options=m}return c}),i=Fe(JSON.stringify(o)),s=i.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:i,references:r}}function at(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 st(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=>at(r,t))}}function ct(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 Ue(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,s]of r){let a=t[o],c=st(n&&["comments","notes","learnings"].includes(o)&&Array.isArray(a)?a.filter(l=>!f(l)||l.created_at===void 0):a,s,o);c!==void 0&&c.length>0&&(e[i]=c)}}function dt(e,t){for(let n of Object.keys(e)){if(t){if(!A.includes(n))throw w("item envelope",n,A);continue}if(!T.has(n)&&R(n,[...T])===void 0&&R(n,A)==="item")throw w("item envelope",n,A)}}function pt(e){let t=Object.hasOwn(e,"item");dt(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 lt(e,t,n,r,o,i){if((r==="update"?Xe:Pe).has(t))return;let s=o.find(a=>a.metadata_key===t&&a.commands.includes(r));if(s!==void 0){let a=se(i,s);e[ae(s)]=a!==void 0?a:s.type==="array"||s.type==="object"?JSON.stringify(n):n;return}if(!T.has(t)){if(R(t,[...T])!==void 0)throw w("item document",t,[...T]);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())]=ct(t,n))}function Tr(e,t,n={},r=[]){let o=j(e,"Item document");if(!f(o))throw new d("Item document must be a JSON object.",p.USAGE);let{item:i,linked:s}=pt(o),a={};for(let[c,l]of Object.entries(i))lt(a,c,l,t,r,n);if(Ue(a,i,t==="update"),s!==void 0&&Ue(a,s),t==="update"){let c=Object.fromEntries(["comments","notes","learnings"].filter(l=>Object.hasOwn(i,l)).map(l=>[l,i[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 Ar(e){return Fe(JSON.stringify(e))}import W from"node:crypto";import{constants as P}from"node:fs";import{cp as ut,lstat as Ge,mkdir as mt,mkdtemp as ft,open as yt,readdir as ht,realpath as wt,rm as _t,stat as Le,writeFile as We}from"node:fs/promises";import{tmpdir as gt}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 Ee(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(Z(e)).digest("hex").slice(0,12);return`${t+1}-${e.op}-${n}-${r}`}function Et(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 O(e,t,n,r){let o=await de(u.join(e,"history",`${t}.jsonl`),t),i=_(n,r,"apply"),s=_(n,r,"compensate");for(let a=o.length-1;a>=0;a-=1){let c=o[a].message;if(c===i)return!0;if(c===s)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 k(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 Re(t,o,{force:!0,author:e.author,message:_(e.transactionId,n,"compensate")},{pmRoot:e.pmRoot})}function ze(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 Se(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 Ae(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 St(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 x(e.pmRoot,t)},async apply(){let r=(await ve(t.id,M(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 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 x(e.pmRoot,t)},async apply(){let r=(await U(t.id,t.reason,M(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 k(e,t.id,n,r)}}}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:"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 Te(t.id,M(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 k(e,t.id,n,r)}}}function xe(e,t,n){let r=z(t,n);switch(t.op){case"create":return ze(e,t,r);case"update":return St(e,t,r);case"close":return vt(e,t,r);case"release":return Tt(e,t,r)}}function Be(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 Je(e,t,n,r){let o=u.relative(e,t);return["locks","runtime","search"].includes(o.split(u.sep)[0])?r.some(i=>o===i||o.startsWith(`${i}${u.sep}`)||i.startsWith(`${o}${u.sep}`)):o===""||n===void 0||n.some(i=>o===i||o.startsWith(`${i}${u.sep}`)||i.startsWith(`${o}${u.sep}`))}async function I(e){let t=await Ge(e);if(t.isSymbolicLink())await Le(e);else if(t.isDirectory()||t.isFile())return t;throw v()}async function At(e){let t=await yt(e,P.O_RDONLY|P.O_NOFOLLOW|P.O_NONBLOCK);try{let n=await t.stat();if(!n.isFile())throw v();let r=W.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=W.createHash("sha256");async function o(i){for(let s of(await ht(i)).sort()){let a=u.join(i,s);Je(e,a,t,n)&&((await I(a)).isDirectory()?await o(a):(r.update(JSON.stringify(u.relative(e,a))),r.update(await At(a))))}}return await o(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 Ke(e){if(!N(e))return!1;let t=e.path;if(typeof t!="string")return!1;let n=u.resolve(t),r=n;for(;;)try{let o=await Ge(r);return r!==n&&o.isDirectory()}catch(o){if(!N(o))return!1;let i=u.dirname(r);if(i===r)return!1;r=i}}async function b(e,t){let n=u.join(e,t);try{let r=e;for(let o of t.split(u.sep).slice(0,-1))r=u.join(r,o),await I(r);if(!(await I(n)).isFile())throw v();return await Y(n,v())}catch(r){if(await Ke(r))return;throw r}}async function Rt(e,t,n){let r=new Map,o=await b(e,S);r.set(S,o);let i;try{i=JSON.parse(o??"null")}catch{i=null}let s=pe(i),a=s.success?s.data:void 0,c=ne(a?.schema);for(let[E,qe]of Object.entries(c.files)){let g=u.relative(e,oe(e,qe,re[E]));if(g===""||!u.resolve(e,g).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]=g;let $=await b(e,g);if(r.set(g,$),$!==void 0){let B=u.join(t,g);await mt(u.dirname(B),{recursive:!0}),await We(B,$)}}let l=u.relative(e,ce(e));r.set(l,await b(e,l));let m=await ie(t,c),y=q({...V,item_types:{definitions:[...a?.item_types?.definitions??[],...m.type_definitions_from_file??[]]}},n),Ve=H(e)===e?[...K.filter(Boolean),S,te,"transactions",...y.folders,...r.keys()].map(E=>u.normalize(E)):void 0,Ye=a===void 0?void 0:JSON.stringify({...i,schema:{...a.schema,files:c.files}});return{configuration:r,ownedPaths:Ve,stagedSettings:Ye,registryFolders:y.folders}}async function bt(e,t,n){await Le(e);try{let r=await wt(e),o=await Rt(r,u.join(u.dirname(t),"configuration"),n),i=[...o.configuration.keys(),...o.registryFolders].map(l=>u.normalize(l)),s=await G(r,o.ownedPaths,i);await ut(r,t,{recursive:!0,dereference:!1,filter:async l=>Je(r,l,o.ownedPaths,i)?(await I(l),!0):!1});let[a,c]=await Promise.all([G(r,o.ownedPaths,i),G(t,o.ownedPaths,i)]);if(s!==a||s!==c)throw L();for(let[l,m]of o.configuration)if(await b(t,l)!==m)throw L();o.stagedSettings!==void 0&&await We(u.join(t,S),o.stagedSettings)}catch(r){throw await Ke(r)?L():r}}async function Kr(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())Be(a,s);let r=ee(),o=await ft(u.join(gt(),"pm-transaction-preview-")),i=u.join(o,"tracker");try{await bt(t.pmRoot,i,r);let s=!1;return await be({path:i,noExtensions:!0},async()=>{Q(r);let a={...t,pmRoot:i,createCompensation:"close"},c=n.map((l,m)=>{let y=xe(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:i,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(o,{recursive:!0,force:!0})}}async function It(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())Be(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},o=await C({pmRoot:e.pmRoot,transactionId:e.transactionId,author:e.author,steps:t.map((s,a)=>xe(r,s,a)),...e.lockTtlSeconds===void 0?{}:{lockTtlSeconds:e.lockTtlSeconds},...e.lockWaitMs===void 0?{}:{lockWaitMs:e.lockWaitMs},...e.onTransition===void 0?{}:{onTransition:e.onTransition}}),i={};for(let[s,a]of t.entries()){let c=z(a,s),l=o.results[c];i[Et(a,s)]=l}return{transactionId:o.transactionId,status:"committed",recovered:o.recovered,results:i}}function Mt(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 Vr(e){return It({pmRoot:e.pmRoot,transactionId:e.transactionId,author:e.author,mutations:Mt(e),...e.lockTtlSeconds===void 0?{}:{lockTtlSeconds:e.lockTtlSeconds},...e.lockWaitMs===void 0?{}:{lockWaitMs:e.lockWaitMs},...e.onTransition===void 0?{}:{onTransition:e.onTransition}})}var Yr={buildCreateStep:ze,bulkHistoryMarker:_,compensateByRestore:k,deriveStepId:z,isUpdateMarkerApplied:O,readItemSnapshot:h};export{Sr as a,Fe as b,vr as c,Tr as d,Ar as e,Kr as f,It as g,Mt as h,Vr as i,Yr as j};
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{Rb as Se,Sb as ve,Ub as U,Xb as Te,Ya as Ee,Zb as Ae,_b as Re,a as te,uc as be}from"./chunk-DT3KUUKY.js";import{b as me,c as C}from"./chunk-GUVKPOY6.js";import{Dc as Q,Di as le,Ec as ee,F as J,Fi as ue,I as S,L as K,Lo as _e,Oo as ge,Q as V,Qg as ce,R as p,Sl as he,T as d,Ub as Z,Ul as we,Va as q,X as N,Z as Y,_ as v,cb as H,gg as re,ig as ne,jg as oe,mg as ie,mi as pe,ph as de,qg as ae,sg as se,sk as fe,wb as X,yk as ye}from"./chunk-6PZPUJW3.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 He 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]="ccd80f77-f619-5cd8-a792-cc5d9c733ebf")}catch{}})();var D=["op","id","reason","options"],Ie=[...D,"ref"],Me=["schema_version","mutations"],De="[a-z][a-z0-9._-]{0,63}",Oe=new RegExp(`^${De}$`,"u"),je=new RegExp(`(^|,)id=@(${De})(?=,|$)`,"gu"),ke=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"],Pe=new Set(["created_at","updated_at","closed_at","version","format_version","path","author","collection_counts","notes_count","tests_count"]),Xe=new Set([...Pe,"completed_at","id"]),T=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"]),$e={create:_e.map(e=>e.target),update:ge.map(e=>e.target),close:fe.map(e=>ke(e.flag)).filter(e=>e!=="reason"),release:ye.map(e=>ke(e.flag))};function Sr(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 R(e,t){let n=Math.max(1,Math.min(3,Math.floor(e.length/4)+1)),r;for(let o of t){let i=X(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=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 j(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 Ze(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 Qe(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 et(e,t){let n=Ze(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 s=Qe(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 a=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:a,reason:i.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 Fe(e){let t=j(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=et(r,o);return i.options!==void 0&&he(i.options),i})}function tt(e,t,n){let r=He.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`${le(n)}${o}`}function Ne(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 Ce(e,t){if(typeof e!="string")return e;let n=e.replace(je,(r,o,i)=>{let s=t[i];if(s===void 0)throw new d(`Unknown mutation reference "@${i}".`,p.USAGE);return`${o}id=${s}`});if(/(^|,)id=@/u.test(n))throw new d(`Malformed mutation reference in dependency "${e}".`,p.USAGE);return n}function rt(e){return typeof e!="string"?[]:e.startsWith("@")?[e.slice(1)]:[...e.matchAll(je)].map(t=>t[1]).filter(t=>t!==void 0)}function nt(e){let t=new Map;for(let i of e){if(i.op!=="create"||typeof i.ref!="string")continue;let s=f(i.options)?i.options:{},a=Array.isArray(s.dep)?s.dep:s.dep===void 0?[]:[s.dep];t.set(i.ref,[s.parent,s.blockedBy,...a].flatMap(rt))}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 s of t.get(i))t.has(s)&&o(s);n.delete(i),r.add(i)}};for(let i of t.keys())o(i)}function ot(e){let t=j(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(!Me.includes(r))throw w("mutation document",r,Me);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(!Ie.includes(i))throw w(`mutation ${o+1}`,i,Ie);return{...r}})}function it(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"||!Oe.test(o.ref))throw new d(`Mutation ${r+1} ref must match ${Oe.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?ue(o.id,t.idPrefix):tt(t.transactionId,o.ref,t.idPrefix)}return n}function vr(e,t){let n=ot(e),r=it(n,t);nt(n);let o=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=Ne(c.id,r),f(c.options)){let m={...c.options};for(let y of["parent","blockedBy"])m[y]!==void 0&&(m[y]=Ne(m[y],r));Array.isArray(m.dep)?m.dep=m.dep.map(y=>Ce(y,r)):m.dep!==void 0&&(m.dep=Ce(m.dep,r)),c.options=m}return c}),i=Fe(JSON.stringify(o)),s=i.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:i,references:r}}function at(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 st(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=>at(r,t))}}function ct(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 Ue(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,s]of r){let a=t[o],c=st(n&&["comments","notes","learnings"].includes(o)&&Array.isArray(a)?a.filter(l=>!f(l)||l.created_at===void 0):a,s,o);c!==void 0&&c.length>0&&(e[i]=c)}}function dt(e,t){for(let n of Object.keys(e)){if(t){if(!A.includes(n))throw w("item envelope",n,A);continue}if(!T.has(n)&&R(n,[...T])===void 0&&R(n,A)==="item")throw w("item envelope",n,A)}}function pt(e){let t=Object.hasOwn(e,"item");dt(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 lt(e,t,n,r,o,i){if((r==="update"?Xe:Pe).has(t))return;let s=o.find(a=>a.metadata_key===t&&a.commands.includes(r));if(s!==void 0){let a=se(i,s);e[ae(s)]=a!==void 0?a:s.type==="array"||s.type==="object"?JSON.stringify(n):n;return}if(!T.has(t)){if(R(t,[...T])!==void 0)throw w("item document",t,[...T]);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())]=ct(t,n))}function Tr(e,t,n={},r=[]){let o=j(e,"Item document");if(!f(o))throw new d("Item document must be a JSON object.",p.USAGE);let{item:i,linked:s}=pt(o),a={};for(let[c,l]of Object.entries(i))lt(a,c,l,t,r,n);if(Ue(a,i,t==="update"),s!==void 0&&Ue(a,s),t==="update"){let c=Object.fromEntries(["comments","notes","learnings"].filter(l=>Object.hasOwn(i,l)).map(l=>[l,i[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 Ar(e){return Fe(JSON.stringify(e))}import W from"node:crypto";import{constants as P}from"node:fs";import{cp as ut,lstat as Ge,mkdir as mt,mkdtemp as ft,open as yt,readdir as ht,realpath as wt,rm as _t,stat as Le,writeFile as We}from"node:fs/promises";import{tmpdir as gt}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 Ee(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(Z(e)).digest("hex").slice(0,12);return`${t+1}-${e.op}-${n}-${r}`}function Et(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 O(e,t,n,r){let o=await de(u.join(e,"history",`${t}.jsonl`),t),i=_(n,r,"apply"),s=_(n,r,"compensate");for(let a=o.length-1;a>=0;a-=1){let c=o[a].message;if(c===i)return!0;if(c===s)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 k(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 Re(t,o,{force:!0,author:e.author,message:_(e.transactionId,n,"compensate")},{pmRoot:e.pmRoot})}function ze(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 Se(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 Ae(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 St(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 x(e.pmRoot,t)},async apply(){let r=(await ve(t.id,M(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 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 x(e.pmRoot,t)},async apply(){let r=(await U(t.id,t.reason,M(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 k(e,t.id,n,r)}}}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:"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 Te(t.id,M(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 k(e,t.id,n,r)}}}function xe(e,t,n){let r=z(t,n);switch(t.op){case"create":return ze(e,t,r);case"update":return St(e,t,r);case"close":return vt(e,t,r);case"release":return Tt(e,t,r)}}function Be(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 Je(e,t,n,r){let o=u.relative(e,t);return["locks","runtime","search"].includes(o.split(u.sep)[0])?r.some(i=>o===i||o.startsWith(`${i}${u.sep}`)||i.startsWith(`${o}${u.sep}`)):o===""||n===void 0||n.some(i=>o===i||o.startsWith(`${i}${u.sep}`)||i.startsWith(`${o}${u.sep}`))}async function I(e){let t=await Ge(e);if(t.isSymbolicLink())await Le(e);else if(t.isDirectory()||t.isFile())return t;throw v()}async function At(e){let t=await yt(e,P.O_RDONLY|P.O_NOFOLLOW|P.O_NONBLOCK);try{let n=await t.stat();if(!n.isFile())throw v();let r=W.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=W.createHash("sha256");async function o(i){for(let s of(await ht(i)).sort()){let a=u.join(i,s);Je(e,a,t,n)&&((await I(a)).isDirectory()?await o(a):(r.update(JSON.stringify(u.relative(e,a))),r.update(await At(a))))}}return await o(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 Ke(e){if(!N(e))return!1;let t=e.path;if(typeof t!="string")return!1;let n=u.resolve(t),r=n;for(;;)try{let o=await Ge(r);return r!==n&&o.isDirectory()}catch(o){if(!N(o))return!1;let i=u.dirname(r);if(i===r)return!1;r=i}}async function b(e,t){let n=u.join(e,t);try{let r=e;for(let o of t.split(u.sep).slice(0,-1))r=u.join(r,o),await I(r);if(!(await I(n)).isFile())throw v();return await Y(n,v())}catch(r){if(await Ke(r))return;throw r}}async function Rt(e,t,n){let r=new Map,o=await b(e,S);r.set(S,o);let i;try{i=JSON.parse(o??"null")}catch{i=null}let s=pe(i),a=s.success?s.data:void 0,c=ne(a?.schema);for(let[E,qe]of Object.entries(c.files)){let g=u.relative(e,oe(e,qe,re[E]));if(g===""||!u.resolve(e,g).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]=g;let $=await b(e,g);if(r.set(g,$),$!==void 0){let B=u.join(t,g);await mt(u.dirname(B),{recursive:!0}),await We(B,$)}}let l=u.relative(e,ce(e));r.set(l,await b(e,l));let m=await ie(t,c),y=q({...V,item_types:{definitions:[...a?.item_types?.definitions??[],...m.type_definitions_from_file??[]]}},n),Ve=H(e)===e?[...K.filter(Boolean),S,te,"transactions",...y.folders,...r.keys()].map(E=>u.normalize(E)):void 0,Ye=a===void 0?void 0:JSON.stringify({...i,schema:{...a.schema,files:c.files}});return{configuration:r,ownedPaths:Ve,stagedSettings:Ye,registryFolders:y.folders}}async function bt(e,t,n){await Le(e);try{let r=await wt(e),o=await Rt(r,u.join(u.dirname(t),"configuration"),n),i=[...o.configuration.keys(),...o.registryFolders].map(l=>u.normalize(l)),s=await G(r,o.ownedPaths,i);await ut(r,t,{recursive:!0,dereference:!1,filter:async l=>Je(r,l,o.ownedPaths,i)?(await I(l),!0):!1});let[a,c]=await Promise.all([G(r,o.ownedPaths,i),G(t,o.ownedPaths,i)]);if(s!==a||s!==c)throw L();for(let[l,m]of o.configuration)if(await b(t,l)!==m)throw L();o.stagedSettings!==void 0&&await We(u.join(t,S),o.stagedSettings)}catch(r){throw await Ke(r)?L():r}}async function Kr(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())Be(a,s);let r=ee(),o=await ft(u.join(gt(),"pm-transaction-preview-")),i=u.join(o,"tracker");try{await bt(t.pmRoot,i,r);let s=!1;return await be({path:i,noExtensions:!0},async()=>{Q(r);let a={...t,pmRoot:i,createCompensation:"close"},c=n.map((l,m)=>{let y=xe(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:i,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(o,{recursive:!0,force:!0})}}async function It(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())Be(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},o=await C({pmRoot:e.pmRoot,transactionId:e.transactionId,author:e.author,steps:t.map((s,a)=>xe(r,s,a)),...e.lockTtlSeconds===void 0?{}:{lockTtlSeconds:e.lockTtlSeconds},...e.lockWaitMs===void 0?{}:{lockWaitMs:e.lockWaitMs},...e.onTransition===void 0?{}:{onTransition:e.onTransition}}),i={};for(let[s,a]of t.entries()){let c=z(a,s),l=o.results[c];i[Et(a,s)]=l}return{transactionId:o.transactionId,status:"committed",recovered:o.recovered,results:i}}function Mt(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 Vr(e){return It({pmRoot:e.pmRoot,transactionId:e.transactionId,author:e.author,mutations:Mt(e),...e.lockTtlSeconds===void 0?{}:{lockTtlSeconds:e.lockTtlSeconds},...e.lockWaitMs===void 0?{}:{lockWaitMs:e.lockWaitMs},...e.onTransition===void 0?{}:{onTransition:e.onTransition}})}var Yr={buildCreateStep:ze,bulkHistoryMarker:_,compensateByRestore:k,deriveStepId:z,isUpdateMarkerApplied:O,readItemSnapshot:h};export{Sr as a,Fe as b,vr as c,Tr as d,Ar as e,Kr as f,It as g,Mt as h,Vr as i,Yr as j};
|
|
2
|
+
//# sourceMappingURL=chunk-LH5QDBMN.js.map
|