@unbrained/pm-cli 2026.9.25 → 2026.9.27
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/.agents/skills/README.md +1 -0
- package/.agents/skills/pm-developer/SKILL.md +3 -0
- package/.agents/skills/pm-test-audit/LICENSE.txt +21 -0
- package/.agents/skills/pm-test-audit/SKILL.md +103 -0
- package/.agents/skills/pm-test-audit/references/AUDIT.md +54 -0
- package/.agents/skills/pm-test-audit/references/CAMPAIGN.md +47 -0
- package/.claude-plugin/marketplace.json +2 -2
- package/CHANGELOG.md +28 -1
- package/dist/cli/commander-usage.js +2 -2
- package/dist/cli/error-guidance.js +1 -1
- package/dist/cli/main.js +2 -2
- package/dist/cli/register-list-query.js +2 -2
- package/dist/cli/register-setup.js +1 -1
- package/dist/cli/runtime/selection.d.ts +3 -1
- package/dist/cli/runtime/selection.js +1 -1
- package/dist/cli/schema/registration.js +2 -2
- package/dist/cli-bundle/bundle-manifest.json +155 -147
- package/dist/cli-bundle/chunks/chunk-3BTJ66CB.js +238 -0
- package/dist/cli-bundle/chunks/{chunk-5AP67ZXH.js → chunk-4SLLCDFL.js} +39 -39
- package/dist/cli-bundle/chunks/{chunk-GAU55CWI.js → chunk-4UPZLUT2.js} +7 -7
- package/dist/cli-bundle/chunks/{chunk-25KTCTBL.js → chunk-6OJVQ7SW.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-445ARBKY.js → chunk-7TAGYNFP.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-GOWZEBTH.js → chunk-AUS6USO4.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-YDIGMRLZ.js → chunk-IEP3VAT5.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-3IB4THWX.js → chunk-JX6WCCHL.js} +6 -6
- package/dist/cli-bundle/chunks/chunk-LC6WEA5U.js +2 -0
- package/dist/cli-bundle/chunks/{chunk-CZ3VJJEA.js → chunk-LKGQUZ5M.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-P7ZSJOWH.js → chunk-OKVDVERQ.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-COFQCKF4.js → chunk-TSF2LPIH.js} +2 -2
- package/dist/cli-bundle/chunks/{chunk-YABJDOOX.js → chunk-V5UGBYHN.js} +3 -3
- package/dist/cli-bundle/chunks/{register-list-query-IZ7ZVTDE.js → register-list-query-6PAJ4PBU.js} +4 -4
- package/dist/cli-bundle/chunks/{register-mutation-IPAZTFDZ.js → register-mutation-RZCXZXYS.js} +4 -4
- package/dist/cli-bundle/chunks/{register-operations-APN33LNI.js → register-operations-GK6VU2H2.js} +2 -2
- package/dist/cli-bundle/chunks/register-setup-ASEMNMBF.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-KRIHJH5U.js → chunk-6J2YCGSN.js} +5 -5
- package/dist/cli-bundle/focused-chunks/{chunk-XKH2FC5D.js → chunk-6UNKK3UH.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-NRHTXBTI.js → chunk-DQ3MB7BO.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-PMPFLA6X.js → chunk-E7LYK7V5.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-GZD4ZYIB.js +20 -0
- package/dist/cli-bundle/focused-chunks/chunk-KMPKKSA6.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-TLF6N56J.js → chunk-LBDWUHQD.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-UIFVIE5F.js → chunk-MILJCOFJ.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-MK5AKKHK.js → chunk-NETVXIH5.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-Q355NPLH.js → chunk-NWRVNHAD.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-IXNNMP2R.js → chunk-NZAG7OKB.js} +12 -12
- package/dist/cli-bundle/focused-chunks/{chunk-OY3VHCTX.js → chunk-OJKJFDIG.js} +2 -2
- package/dist/cli-bundle/focused-chunks/chunk-OJRX6G22.js +2 -0
- package/dist/cli-bundle/focused-chunks/{chunk-NVVB2HJC.js → chunk-PDVL7QYU.js} +16 -16
- package/dist/cli-bundle/focused-chunks/{chunk-O7MIBEMK.js → chunk-QO4MTAEA.js} +2 -2
- package/dist/cli-bundle/focused-chunks/{chunk-ABA3KRPY.js → chunk-SMADBUPL.js} +2 -2
- 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 +20 -20
- 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 +46 -46
- 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 +8 -8
- package/dist/core/search/embedding-batches.d.ts +47 -15
- package/dist/core/search/embedding-batches.js +1 -1
- package/dist/core/search/eval-thresholds.d.ts +14 -0
- package/dist/core/search/eval-thresholds.js +2 -0
- package/dist/core/search/eval.d.ts +4 -1
- package/dist/core/search/eval.js +1 -1
- package/dist/core/search/http-client.d.ts +7 -0
- package/dist/core/search/http-client.js +1 -1
- package/dist/sdk/agent-capability-contracts.js +1 -1
- package/dist/sdk/cli-contracts/command-aliases.js +1 -1
- package/dist/sdk/cli-contracts/grammar-contracts.js +1 -1
- package/dist/sdk/completion/shared.d.ts +1 -1
- package/dist/sdk/completion/shared.js +1 -1
- package/dist/sdk/eval.d.ts +19 -17
- package/dist/sdk/eval.js +1 -1
- package/dist/sdk/extension/static-inventory.d.ts +54 -0
- package/dist/sdk/extension/static-inventory.js +2 -0
- 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/reindex.d.ts +4 -1
- package/dist/sdk/governance/reindex.js +2 -2
- package/dist/sdk/guide-topics.js +1 -1
- package/dist/sdk/index.d.ts +1 -0
- package/dist/sdk/index.js +1 -1
- package/dist/sdk/public-surface.json +1 -1
- package/dist/sdk/query/complete-list.js +1 -1
- package/dist/sdk/query.d.ts +3 -0
- package/dist/sdk/query.js +1 -1
- package/dist/sdk/read-output/provenance.d.ts +20 -0
- package/dist/sdk/read-output/provenance.js +2 -0
- package/dist/sdk/read-output-contracts.js +1 -1
- package/dist/sdk/runtime/schema-preview.d.ts +2 -0
- package/dist/sdk/runtime/schema-preview.js +2 -0
- package/dist/sdk/runtime/schema.js +1 -1
- package/dist/sdk/runtime-input.js +1 -1
- package/dist/sdk/runtime-primitives.d.ts +2 -1
- package/dist/sdk/runtime-primitives.js +1 -1
- package/docs/CLI_GRAMMAR.md +31 -0
- package/docs/CODEX_PLUGIN.md +8 -0
- package/docs/EXTENSION_LIFECYCLE.md +18 -0
- package/docs/README.md +1 -0
- package/docs/RELEASING.md +51 -2
- package/docs/SEARCH_QUALITY.md +116 -0
- package/docs/agent-task-token-baseline.json +4 -4
- package/docs/generated/AGENT_CAPABILITY_ROUTING.md +1 -1
- package/docs/generated/AGENT_COMMAND_SURFACE.md +5 -1
- package/docs/generated/FLAG_LEXICON_BUDGETS.md +4 -0
- package/docs/generated/REFUSAL_CLOSURE_CENSUS.md +14 -7
- package/marketplace.json +2 -2
- package/package.json +2 -2
- 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/README.md +5 -1
- package/plugins/pm-claude/package.json +2 -2
- package/plugins/pm-claude/skills/pm-audit/SKILL.md +14 -103
- package/plugins/pm-claude/skills/pm-audit/agents/openai.yaml +4 -0
- package/plugins/pm-claude/skills/pm-developer/SKILL.md +20 -143
- package/plugins/pm-claude/skills/pm-developer/agents/openai.yaml +4 -0
- package/plugins/pm-claude/skills/pm-planner/SKILL.md +16 -167
- package/plugins/pm-claude/skills/pm-planner/agents/openai.yaml +4 -0
- package/plugins/pm-claude/skills/pm-release/SKILL.md +18 -102
- package/plugins/pm-claude/skills/pm-release/agents/openai.yaml +4 -0
- package/plugins/pm-claude/skills/pm-workflow/SKILL.md +25 -156
- package/plugins/pm-claude/skills/pm-workflow/agents/openai.yaml +4 -0
- package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
- package/plugins/pm-codex/README.md +10 -2
- package/plugins/pm-codex/mcp.json +11 -0
- package/plugins/pm-codex/package.json +2 -2
- package/plugins/pm-codex/plugin.json +45 -0
- package/plugins/pm-codex/skills/pm-audit/SKILL.md +21 -0
- package/plugins/pm-codex/skills/pm-audit/agents/openai.yaml +4 -0
- package/plugins/pm-codex/skills/pm-auditor/SKILL.md +5 -40
- package/plugins/pm-codex/skills/pm-auditor/agents/openai.yaml +3 -5
- package/plugins/pm-codex/skills/pm-developer/SKILL.md +26 -0
- package/plugins/pm-codex/skills/pm-developer/agents/openai.yaml +4 -0
- package/plugins/pm-codex/skills/pm-native/SKILL.md +7 -87
- package/plugins/pm-codex/skills/pm-native/agents/openai.yaml +3 -5
- package/plugins/pm-codex/skills/pm-planner/SKILL.md +22 -0
- package/plugins/pm-codex/skills/pm-planner/agents/openai.yaml +4 -0
- package/plugins/pm-codex/skills/pm-release/SKILL.md +17 -38
- package/plugins/pm-codex/skills/pm-release/agents/openai.yaml +2 -4
- package/plugins/pm-codex/skills/pm-workflow/SKILL.md +39 -0
- package/plugins/pm-codex/skills/pm-workflow/agents/openai.yaml +4 -0
- package/dist/cli-bundle/chunks/chunk-JDHWZYZU.js +0 -238
- package/dist/cli-bundle/chunks/register-setup-HPHIKG5U.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-HQPTDJLF.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-V2X37U6J.js +0 -2
- package/dist/cli-bundle/focused-chunks/chunk-Y2M4QLAA.js +0 -20
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import{a as Ho,c as zr,d as Hr,e as hl,g as _l,h as Go,i as gl,j as sn,k as an,l as yl,m as wl,n as qo,o as kl,p as cn,q as ln,r as Sl,s as El,t as Bo}from"./chunk-MK5AKKHK.js";import{e as Xr,f as Xo,h as Zo}from"./chunk-NRHTXBTI.js";import{B as jl,C as Jr,D as Fl,E as Yo,G as Ul,H as zl,J as Hl,K as Kr,M as Yr,a as cl,g as zo,i as ll}from"./chunk-PMPFLA6X.js";import{K as Zd}from"./chunk-XKH2FC5D.js";import{$ as $d,C as rs,D as di,Ga as Wd,Ha as Gd,La as qd,Ma as Bd,S as ui,T as wd,U as is,V as Zn,X as os,aa as Od,ba as Dd,ca as Pd,da as fi,e as dd,f as ud,fa as Nd,g as md,ga as Ld,ha as Md,ia as Ht,j as li,ja as jd,jb as Kd,ka as _n,la as Fd,lb as cs,ma as ss,mb as Yd,n as Yn,na as gn,nb as Xd,o as fd,oa as Ud,p as pd,pa as zd,q as Xn,qa as Hd,r as hd,ra as as,t as ns,u as _d,vb as ls,y as gd}from"./chunk-Y2M4QLAA.js";import{a as ul,b as on,c as Wo,d as ml,e as fl,f as at,g as Wr,h as pl,i as St}from"./chunk-O7MIBEMK.js";import{$ as Ft,Aa as od,Ab as ct,Bb as zt,C as q,Ca as fn,D as Wl,Da as Kn,Ea as sd,Eb as Td,Fa as ri,Fb as lt,G as Ee,Ga as Ut,H as Qo,Ha as fe,Ia as ii,Ja as ad,Ka as ts,La as oi,Ma as pn,N as Gl,Na as si,O as Zr,Oa as cd,Qa as xe,R as Qr,Ra as ld,S as ei,Sa as T,Ta as ai,Tb as Qn,U as ql,Ua as ci,V as De,Vb as pi,Wa as yd,X as xt,Y as Bl,Z as Vl,_ as Jl,aa as Kl,ac as Vd,bb as vd,cb as bd,dc as Jd,eb as kd,fa as Yl,fb as Sd,ga as es,gb as It,ha as ti,hb as Ed,ia as un,ib as xd,ka as ni,la as Xl,lb as Id,ma as Zl,mb as Ad,oa as Ql,qa as ed,rb as mi,sa as td,tb as Rd,ua as nd,vb as te,wa as mn,wb as Pe,xa as rd,xb as Ne,yb as Cd,za as id,zb as hn}from"./chunk-Q355NPLH.js";import{b as nn,e as de,g as Oe,i as Se,j as Ye,n as _e,o as vl,p as Gr,r as bl}from"./chunk-TLF6N56J.js";import{$ as g,$a as Nt,$d as ce,Aa as $e,Ab as Ke,Ba as Yc,Bc as Dl,Da as ee,Ga as Xc,Jc as H,Ka as Zc,Kb as dl,Mc as X,Oc as He,Pb as qr,Pc as Pl,Qa as Qc,Qb as xl,Qc as Vr,Ra as el,Rb as Vo,S as Wc,Sa as G,Sb as Jo,Sd as C,T as Gc,Tb as Ko,Td as Ml,Ud as dn,V as qc,Vb as Il,Vd as Et,Wb as Al,Wd as jt,X as Bc,Xa as Jn,Xc as Nl,Y as Fr,Ya as N,Yc as Xe,Z as Vc,Za as Ve,Zb as Rl,_a as Ur,_c as Ll,a as Mr,aa as y,bb as tl,cb as Lt,d as jr,eb as nl,ec as Cl,fb as rl,gb as il,ha as Jc,i as Uc,ka as Kc,l as zc,m as Hc,ma as Fo,ob as ol,pb as Mt,qb as R,ra as Vn,rb as sl,sa as $,sb as ke,ta as kt,ua as j,ub as Uo,va as K,vb as al,vc as Tl,w as jo,wa as ne,wb as rn,xc as Br,yb as Je,yc as $l,za as he,zc as Ol}from"./chunk-NVVB2HJC.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]="00d2200c-d308-51a6-acc4-8da90afaf6d6")}catch{}})();var L=class extends TypeError{constructor(t){super(t),this.name="AssuranceMutationRefusalError"}},Ie=class extends TypeError{context;constructor(t,n={}){super(t),this.name="AssuranceEvaluationRefusalError",this.context=n}},Ze=class extends TypeError{measurement_id;source_kind;field;check;constructor(t,n){super(t),this.name="AssuranceSourceResolutionError",this.measurement_id=n.measurement_id,this.source_kind=n.source_kind,this.field=n.field,this.check=n.check}};async function yn(e){try{return await e()}catch(t){throw t instanceof L?new y(t.message,g.USAGE,{code:"invalid_argument_value",reason:"assurance_mutation_refused"}):t}}async function Qd(e){try{return await e()}catch(t){throw t instanceof Ie?new y(t.message,g.USAGE,{code:"invalid_argument_value",reason:"assurance_evaluation_refused",...t.context}):t}}import{createHash as Mg}from"node:crypto";import jg 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]="b00dcab2-22c6-55b7-b93d-f6f5413d4b04")}catch{}})();var wn=1e3;(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]="00ad9b34-4feb-5812-8755-801869cce3ad")}catch{}})();var tu=1,Wt=["pre-commit","pre-push","pre-merge","ci","pre-release","post-release","scheduled","on-claim","on-close"],ds=["items","dependency_kind","prose_edge_gap","graph","validate","health","history","links","provider","derived"],Fg=["ceiling","floor","equals","zero","monotone_nondecreasing","monotone_nonincreasing","subset_of"],Ug=/^[a-z0-9]+(?:[._-][a-z0-9]+)*$/,hi=30,_i=5e3,nu=4,zg=50;function dt(e,t){if(!Ug.test(e))throw new L(`${t} must be a stable lowercase id`)}function Hg(e,t){if(!Number.isFinite(e)||e<0)throw new L(`${t} must be a finite non-negative number`)}function er(e){let t=Fg.filter(i=>e[i]!==void 0);if(t.length!==1)throw new L(`assertion ${e.id} must declare exactly one polarity`);let n=t[0],r=e[n];return{polarity:n,value:n==="zero"?0:r}}function ms(e,t){return R(e)===R(t)}function ru(e,t){if(t.polarity==="equals")return ms(e,t.value);if(t.polarity==="subset_of"){if(!Array.isArray(e)||!Array.isArray(t.value))return!1;let r=t.value;return e.every(i=>r.includes(i))}if(typeof e!="number")return!1;let n=t.value;return t.polarity==="ceiling"||t.polarity==="monotone_nonincreasing"?e<=n:t.polarity==="floor"||t.polarity==="monotone_nondecreasing"?e>=n:e===0}function iu(e){let t=er(e),n=e.negative_control.cases;return n.some(r=>r.expected==="pass")&&n.some(r=>r.expected==="fail")&&n.every(r=>ru(r.observed,t)===(r.expected==="pass"))}function Wg(e,t){if(e.polarity!==t.polarity)return!0;if(typeof e.value=="number"&&typeof t.value=="number")return e.polarity==="ceiling"||e.polarity==="monotone_nonincreasing"?t.value>e.value:e.polarity==="floor"||e.polarity==="monotone_nondecreasing"?t.value<e.value:t.value!==e.value;if(e.polarity==="subset_of"){let n=e.value,r=t.value;return!Array.isArray(n)||!Array.isArray(r)||r.some(i=>!n.includes(i))}return!ms(e.value,t.value)}function Gg(e,t){if(e.measurement_id!==t.measurement_id||e.owner_item_id!==t.owner_item_id||R(e.scope)!==R(t.scope))return!0;let n={observe:0,warn:1,block:2},r=(e.lifetime??"hold")==="hold"&&(t.lifetime??"hold")==="retire";return Wg(er(e),er(t))||n[t.enforcement]<n[e.enforcement]||r}function qg(e){if(e.state!==void 0&&!(e.state==="present"||e.state==="missing"))throw new L("items source state must be present or missing");let t=Object.hasOwn(e,"equals"),n=e.state!==void 0,r=Number(t)+Number(n);if(e.field!==void 0&&r!==1)throw new L("items source with field requires exactly one of equals or state");if(e.field===void 0&&r!==0)throw new L("items source equals/state requires field")}function Bg(e){if(typeof e.dependency_kind!="string"||e.dependency_kind.trim().length===0)throw new L("dependency_kind source requires dependency_kind");if([e.source_kind,e.source_kind_prefix,e.source_kind_state].filter(n=>n!==void 0).length>1)throw new L("dependency_kind source accepts at most one source_kind predicate");if(e.source_kind!==void 0&&e.source_kind.trim().length===0||e.source_kind_prefix!==void 0&&e.source_kind_prefix.trim().length===0)throw new L("dependency_kind source provenance values must not be empty");if(e.source_kind_state!==void 0&&e.source_kind_state!=="present"&&e.source_kind_state!=="missing")throw new L("dependency_kind source source_kind_state must be present or missing")}function Vg(e){if(e.sample_limit!==void 0&&(!Number.isInteger(e.sample_limit)||e.sample_limit<1))throw new L("prose_edge_gap sample_limit must be a positive integer");for(let t of e.exemptions??[]){if(typeof t.holder_id!="string"||t.holder_id.trim().length===0||typeof t.reason!="string"||t.reason.trim().length===0)throw new L("prose_edge_gap exemptions require holder_id and reason");if(t.target_id!==void 0&&t.target_id.trim().length===0||t.text_contains!==void 0&&t.text_contains.trim().length===0)throw new L("prose_edge_gap exemption selectors must not be empty")}}function fs(e){dt(e.id,"measurement.id"),e.max_cost!==void 0&&Hg(e.max_cost,"measurement.max_cost");let t=e.source;if(Object.prototype.toString.call(t)!=="[object Object]")throw new L(`measurement.source.kind must be one of ${ds.join(", ")}`);let n=Reflect.get(t,"kind");if(!ds.includes(n))throw new L(`measurement.source.kind must be one of ${ds.join(", ")}`);let r=t;if(r.kind==="items"&&qg(r),r.kind==="dependency_kind"&&Bg(r),r.kind==="prose_edge_gap"&&Vg(r),(r.kind==="graph"||r.kind==="validate"||r.kind==="health")&&(typeof r.field!="string"||r.field.trim().length===0))throw new L(`${r.kind} source requires field`);return r.kind==="provider"&&(dt(r.provider,"provider source provider"),dt(r.key,"provider source key")),e}function ps(e){if(dt(e.id,"assertion.id"),dt(e.measurement_id,"assertion.measurement_id"),typeof e.owner_item_id!="string"||e.owner_item_id.trim().length===0)throw new L("assertion.owner_item_id is required");let t=er(e);if(typeof t.value=="number"&&!Number.isFinite(t.value))throw new L(`assertion.${t.polarity} must be a finite number`);if(e.lifetime==="retire"&&(typeof e.retire_reason!="string"||e.retire_reason.trim().length===0))throw new L("retired assertion requires retire_reason");e.scope.kind==="filter"&&dt(e.scope.measurement_id,"assertion.scope.measurement_id");let n=e.negative_control?.cases;if(!Array.isArray(n)||!n.some(r=>r.expected==="pass")||!n.some(r=>r.expected==="fail"))throw new L("assertion negative control requires pass and fail cases");if(!iu(e))throw new L(`assertion ${e.id} negative control does not prove its bound`);return e}function Jg(e){if(!Array.isArray(e.allowed_providers))throw new L("gate provider_policy.allowed_providers must be an array");for(let t of e.allowed_providers)dt(t,"gate.provider_policy.allowed_provider");if(typeof e.triggers!="object"||e.triggers===null||Array.isArray(e.triggers))throw new L("gate provider_policy.triggers must be an object");for(let[t,n]of Object.entries(e.triggers)){if(!Wt.includes(t))throw new L(`gate provider policy has unknown trigger ${t}`);if(typeof n!="object"||n===null||!["low","medium","high"].includes(n.max_cost_class)||typeof n.allow_network!="boolean")throw new L(`gate provider policy trigger ${t} is invalid`)}}function ou(e){if(dt(e.id,"gate.id"),!Array.isArray(e.assertion_ids))throw new L("gate.assertion_ids is required and must be an array");if(e.assertion_ids.length===0)throw new L("gate requires at least one assertion");for(let t of e.assertion_ids)dt(t,"gate.assertion_id");if(!Array.isArray(e.triggers))throw new L(`gate.triggers is required and must be an array of ${Wt.join(", ")}`);if(e.triggers.length===0)throw new L("gate requires at least one trigger");for(let t of e.triggers)if(!Wt.includes(t))throw new L(`gate trigger must be one of ${Wt.join(", ")}`);return e.provider_policy&&Jg(e.provider_policy),e}function vn(e){if(e.version!==tu)throw new L(`unsupported assurance document version ${String(e.version)}`);let t=new Set;for(let r of e.measurements){if(fs(r),t.has(`measurement:${r.id}`))throw new L(`duplicate measurement ${r.id}`);t.add(`measurement:${r.id}`)}for(let r of e.assertions){if(ps(r),t.has(`assertion:${r.id}`))throw new L(`duplicate assertion ${r.id}`);t.add(`assertion:${r.id}`)}for(let r of e.gates){ou(r);let i=r.assertion_ids.filter(o=>!e.assertions.some(s=>s.id===o));if(i.length>0)throw new L(`gate ${r.id} references missing assertions: ${i.join(", ")}`);if(t.has(`gate:${r.id}`))throw new L(`duplicate gate ${r.id}`);t.add(`gate:${r.id}`)}let n=new Set(e.measurements.map(r=>r.id));for(let[r,i]of su(e))if(!n.has(r))throw new L(`${i.join(", ")} references missing measurement ${r}`);return e}function hs(e,t){if("measurement"in e){t.push(e.measurement);return}if("operator"in e)for(let n of e.operands)hs(n,t)}function su(e){let t=new Map,n=(r,i)=>{let o=t.get(r)??[];o.push(i),t.set(r,o)};for(let r of e.assertions)n(r.measurement_id,`assertion ${r.id}`),r.scope.kind==="filter"&&n(r.scope.measurement_id,`assertion ${r.id} scope`);for(let r of e.measurements){if(r.source.kind!=="derived")continue;let i=[];hs(r.source.expression,i);for(let o of i)n(o,`derived measurement ${r.id}`)}return t}function Kg(e,t){let n=e.assertion_ids.flatMap(o=>{let s=t.assertions.find(a=>a.id===o);return[s.measurement_id,...s.scope.kind==="filter"?[s.scope.measurement_id]:[]]}),r=new Set,i=new Set;for(;n.length>0;){let o=n.pop();if(r.has(o))continue;r.add(o);let s=t.measurements.find(a=>a.id===o);s.source.kind==="provider"?i.add(s.source.provider):s.source.kind==="derived"&&hs(s.source.expression,n)}return i}function tr(){return{version:tu,measurements:[],assertions:[],gates:[]}}function Yg(e,t){let n=t.items.filter(r=>(e.statuses===void 0||e.statuses.includes(r.status))&&(e.types===void 0||e.types.includes(r.type))&&(e.tags===void 0||e.tags.every(i=>r.tags?.includes(i)))&&(e.field===void 0||(()=>{let i=r[e.field];if(e.state!==void 0){let o=i==null||i===""||Array.isArray(i)&&i.length===0;return e.state==="missing"?o:!o}return ms(i,e.equals)})()));return{value:n.length,population_size:t.items.length,cost:t.items.length,contributors:n.map(r=>r.id)}}function Xg(e,t){return e.source_kind!==void 0?t?.toLowerCase()===e.source_kind.trim().toLowerCase():e.source_kind_prefix!==void 0?t?.toLowerCase().startsWith(e.source_kind_prefix.trim().toLowerCase())===!0:e.source_kind_state==="present"?t!==void 0&&t.length>0:e.source_kind_state==="missing"?t===void 0||t.length===0:!0}function Zg(e,t){let n=[],r=Fo(e.dependency_kind)??e.dependency_kind.trim().toLowerCase();for(let i of t.items)for(let o of i.dependencies??[]){let s=Fo(o.kind)??o.kind.trim().toLowerCase(),a=o.source_kind?.trim();s===r&&Xg(e,a)&&n.push(`${i.id}->${o.id}${a?`@${a}`:""}`)}return{value:n.length,population_size:t.items.length,cost:t.items.length,contributors:n}}function Qg(e){let t=[e.description,e.body].filter(n=>typeof n=="string").map(n=>n.trim()).filter(Boolean);for(let n of["comments","notes","learnings"]){let r=e[n];if(Array.isArray(r)){for(let i of r)if(typeof i=="string")t.push(i);else if(typeof i=="object"&&i!==null){let o=Reflect.get(i,"text");typeof o=="string"&&t.push(o)}}}return t}function ey(e,t,n,r){return e.some(i=>i.holder_id.trim().toLowerCase()===t.toLowerCase()&&(i.target_id===void 0||i.target_id.trim().toLowerCase()===n.toLowerCase())&&(i.text_contains===void 0||r.toLowerCase().includes(i.text_contains.trim().toLowerCase())))}function us(e,t){return[e.toLowerCase(),t.toLowerCase()].sort().join("\0")}function ty(e){let t=new Map,n=new Set,r=[],i=/\b[a-z][a-z0-9]*-[a-z0-9]+\b/giu,o=0;for(let s of e){t.set(s.id.toLowerCase(),s.id);for(let a of s.dependencies??[])n.add(us(s.id,a.id));for(let a of[s.parent,s.blocked_by])typeof a=="string"&&n.add(us(s.id,a));for(let a of Qg(s)){let c=[...a.matchAll(i)].map(l=>l[0]);o+=c.length,r.push({holder_id:s.id,segment:a,mentioned_ids:c})}}return{canonical_ids:t,linked_pairs:n,prose_mentions:r,mention_count:o}}function ny(e,t){let n=ty(t.items),r=new Map;for(let s of n.prose_mentions){let a=s.mentioned_ids.map(l=>n.canonical_ids.get(l.toLowerCase())).filter(l=>l!==void 0&&l!==s.holder_id),c=[...new Set(a)];for(let l of c){let d=us(s.holder_id,l);if(n.linked_pairs.has(d)||ey(e.exemptions??[],s.holder_id,l,s.segment))continue;let u=c.some(m=>m!==l);r.get(d)?.explicit===!0&&!u||r.set(d,{contributor:`${s.holder_id}->${l}|subject=${u?"explicit":"implicit"}`,explicit:u})}}let i=[...r.values()],o=i.map(s=>s.contributor).sort();return{value:o.length,population_size:n.canonical_ids.size,cost:t.items.length+n.linked_pairs.size+n.mention_count,contributors:o.slice(0,e.sample_limit??25),partitions:{explicit_subject:i.filter(s=>s.explicit).length,implicit_subject:i.filter(s=>!s.explicit).length}}}function ry(e,t){return{value:t.history.filter(r=>(e.op===void 0||r.op===e.op)&&(e.author===void 0||r.author===e.author)&&(e.harness===void 0||r.agent_harness===e.harness)&&(e.model===void 0||r.agent_model===e.model)).length,population_size:t.history.length,cost:t.history.length}}function iy(e,t){let n=t.items.filter(r=>{let i=r[e.link],o=Array.isArray(i)&&i.length>0;return e.state==="present"?o:!o});return{value:n.length,population_size:t.items.length,cost:t.items.length,contributors:n.map(r=>r.id)}}function oy(e,t){let n=e.source;return n.kind==="items"?Yg(n,t):n.kind==="dependency_kind"?Zg(n,t):n.kind==="prose_edge_gap"?ny(n,t):n.kind==="history"?ry(n,t):n.kind==="links"?iy(n,t):null}function au(e,t){return e.reduce((n,r)=>({units:n.units+r.units,items_scanned:n.items_scanned+r.items_scanned,history_entries:n.history_entries+r.history_entries,provider_calls:n.provider_calls+r.provider_calls,duration_ms:t}),{units:0,items_scanned:0,history_entries:0,provider_calls:0,duration_ms:t})}function sy(e,t){if(t.length===0)throw new TypeError(`derived ${e} requires operands`);if(e==="add")return t.reduce((n,r)=>n+r,0);if(e==="subtract")return t.slice(1).reduce((n,r)=>n-r,t[0]);if(e==="multiply")return t.reduce((n,r)=>n*r,1);if(e==="divide"){if(t.slice(1).includes(0))throw new TypeError("derived divide cannot divide by zero");return t.slice(1).reduce((n,r)=>n/r,t[0])}return e==="min"?Math.min(...t):Math.max(...t)}async function cu(e,t,n){let r=new Array(e.length),i=0,o=Array.from({length:Math.min(t,e.length)},async()=>{for(;i<e.length;){let s=i;i+=1,r[s]=await n(e[s],s)}});return await Promise.all(o),r}async function lu(e,t,n,r,i){if("literal"in e)return{value:e.literal,costs:[],population_size:0,contributors:[]};if("measurement"in e){let s=n.find(l=>l.id===e.measurement);if(!s)throw new TypeError(`derived measurement references missing ${e.measurement}`);let a=await du(s,t,n,r,i);if(typeof a.value!="number")throw new TypeError(`derived measurement ${s.id} is not numeric`);let c=i.charged.has(s.id)?[]:[a.cost];return i.charged.add(s.id),{value:a.value,costs:c,population_size:a.population_size,contributors:a.contributors}}let o=await cu(e.operands,nu,s=>lu(s,t,n,r,i));return{value:sy(e.operator,o.map(s=>s.value)),costs:o.flatMap(s=>s.costs),population_size:Math.max(0,...o.map(s=>s.population_size)),contributors:[...new Set(o.flatMap(s=>s.contributors))]}}async function ay(e,t,n,r,i){fs(e);let o=Date.now(),s,a=[],c=0;if(e.source.kind==="derived"){let u=await lu(e.source.expression,t,n,[...r,e.id],i);s={value:u.value,population_size:u.population_size,cost:0,contributors:u.contributors},a=u.costs}else{let u=oy(e,t);u!==null?s=u:(s=await t.external(e.source),c=1)}let l={units:s.cost,items_scanned:e.source.kind==="items"||e.source.kind==="dependency_kind"||e.source.kind==="prose_edge_gap"||e.source.kind==="links"?t.items.length:0,history_entries:e.source.kind==="history"?t.history.length:0,provider_calls:c,duration_ms:Date.now()-o},d=au([...a,l],Date.now()-o);if(e.max_cost!==void 0&&d.units>e.max_cost)throw new Ie(`measurement ${e.id} exceeded cost ceiling ${e.max_cost} with ${d.units}`);return{id:e.id,definition_fingerprint:`sha256:${Mg("sha256").update(R(e)).digest("hex")}`,value:s.value,population_size:s.population_size,cost:d,contributors:s.contributors??[],...s.partitions?{partitions:s.partitions}:{}}}function du(e,t,n,r,i){if(r.includes(e.id))throw new TypeError(`derived measurement cycle: ${[...r,e.id].join(" -> ")}`);let o=i.cache.get(e.id);if(o)return o;let s=ay(e,t,n,r,i).catch(a=>{if(a instanceof Ze&&a.measurement_id===void 0){let c={measurement_id:e.id,source_kind:a.source_kind,field:a.field,...a.check?{check:a.check}:{}},l=new Ze(a.message,c);throw l.cause=a,l}throw a});return i.cache.set(e.id,s),s}async function _s(e,t,n=[e]){return du(e,t,n,[],{cache:new Map,charged:new Set})}function cy(e,t){return typeof e!="number"||typeof t.value!="number"?null:t.polarity==="ceiling"||t.polarity==="monotone_nonincreasing"?t.value-e:(t.polarity==="floor"||t.polarity==="monotone_nondecreasing",e-t.value)}function ly(e,t,n={}){ps(e);let r=er(e),i=e.lifetime==="retire"&&n.owner_terminal===!0;return{assertion_id:e.id,measurement_id:e.measurement_id,measurement_definition_fingerprint:t.definition_fingerprint,scope:e.scope,population_size:t.population_size,observed:t.value,bound:r,distance:cy(t.value,r),verdict:i?"retired":ru(t.value,r)?"pass":"fail",enforcement:e.enforcement,negative_control_proven:iu(e),cost:t.cost,contributors:t.contributors,...t.partitions?{partitions:t.partitions}:{}}}function dy(e,t,n,r){let i=Kg(e,t);if(i.size===0)return;let o=e.provider_policy,s=o?.triggers[r];if(!o||!s)throw new Ie(`assurance gate ${e.id} refuses provider execution at trigger ${r} without an explicit provider policy`);let a=new Set(o.allowed_providers),c={low:0,medium:1,high:2};for(let l of i){if(!a.has(l))throw new Ie(`assurance gate ${e.id} refuses provider ${l}`);let d=n.provider_capabilities?.[l];if(!d)throw new Ie(`assurance provider ${l} has no declared capabilities`);if(c[d.cost_class]>c[s.max_cost_class])throw new Ie(`assurance gate ${e.id} refuses ${d.cost_class}-cost provider ${l} at trigger ${r}`);if(d.network&&!s.allow_network)throw new Ie(`assurance gate ${e.id} refuses network provider ${l} at trigger ${r}`)}}async function eu(e,t,n,r,i){try{return await _s(n,r,i)}catch(o){if(o instanceof Ze){let s=o.check?` check ${o.check}`:"",a=o.measurement_id??n.id,c=new Ie(`assurance gate ${e} assertion ${t} measurement ${a} source ${o.source_kind}${s} field ${o.field} could not resolve: ${o.message}`,{gate_id:e,assertion_id:t,measurement_id:a,source_kind:o.source_kind,field:o.field,...o.check?{check:o.check}:{}});throw c.cause=o,c}throw o}}async function uu(e,t,n,r){vn(t);let i=t.gates.find(c=>c.id===e);if(!i)throw new Ie(`assurance gate ${e} not found`);if(!i.triggers.includes(r.trigger))throw new Ie(`assurance gate ${e} does not declare trigger ${r.trigger}`);dy(i,t,n,r.trigger);let o=await cu(i.assertion_ids,nu,async c=>{let l=t.assertions.find(p=>p.id===c),d=t.measurements.find(p=>p.id===l.measurement_id),u=n;if(l.scope.kind==="active"){let p=new Set(n.terminal_statuses??["closed","canceled"]);u={...n,items:n.items.filter(_=>!p.has(_.status))}}else if(l.scope.kind==="filter"){let p=l.scope.measurement_id,_=t.measurements.find(v=>v.id===p),h=await eu(i.id,l.id,_,n,t.measurements),w=new Set(h.contributors);u={...n,items:n.items.filter(v=>w.has(v.id))}}let m=n.items.find(p=>p.id===l.owner_item_id),f=m!==void 0&&new Set(n.terminal_statuses??["closed","canceled"]).has(m.status);return ly(l,await eu(i.id,l.id,d,u,t.measurements),{owner_terminal:f})}),s=o.some(c=>c.verdict==="fail"&&c.enforcement==="block"),a=o.some(c=>c.verdict==="fail"&&c.enforcement==="warn");return{gate_id:i.id,tree_id:n.tree_id,trigger:r.trigger,dry_run:r.dry_run===!0,evaluated_at:new Date().toISOString(),verdict:s?"block":a?"warn":"pass",exit_code:s?1:0,assertions:o,assertions_total:o.length,row_contract:{row_keys:["assertions"],jq_selector:".assertions[]"},cost:au(o.map(c=>c.cost),Math.max(0,...o.map(c=>c.cost.duration_ms)))}}function gi(e){return jg.join(e,"assurance.json")}async function mu(e){let t=await K(gi(e));return t===null?tr():yi(t)}function yi(e){try{return vn(JSON.parse(e))}catch(t){throw new y("The assurance registry is invalid. Repair or restore .agents/pm/assurance.json and retry.",g.GENERIC_FAILURE,{code:"assurance_registry_invalid",reason:String(t),nextSteps:["Restore a valid assurance.json from version control or repair its declaration references.","Run pm assurance list measurement after the repair."]})}}function wi(e,t){return t==="measurement"?e.measurements:t==="assertion"?e.assertions:e.gates}function uy(e,t){e==="measurement"?fs(t):e==="assertion"?ps(t):ou(t)}async function nr(e,t){let n=structuredClone(wi(await mu(e),t));return{items:n,count:n.length,row_contract:{row_keys:["items"],jq_selector:".items[]"}}}async function gs(e,t,n){let r=wi(await mu(e),t).find(i=>i.id===n);if(!r)throw new TypeError(`assurance ${t} ${n} not found`);return structuredClone(r)}async function vi(e,t,n,r={}){uy(t,n);let i=await T(e),o=q(r.author,i.author_default),s=await pn({pmRoot:e,filePath:gi(e),op:`assurance:${t}:put`,author:o,message:r.message,lockTtlSeconds:hi,lockWaitMs:_i,mutate:a=>{let c=a===null?tr():yi(a),l=wi(c,t),d=l.findIndex(m=>m.id===n.id),u=d<0?"created":"updated";if(t==="assertion"&&d>=0&&Gg(l[d],n)){let m=n.authorization_decision;if(!m||!r.authorized_decision_ids?.includes(m))throw new L(`loosening assertion ${n.id} requires a verified authorization_decision`)}return d<0?l.push(structuredClone(n)):l[d]=structuredClone(n),vn(c),{raw:`${JSON.stringify(c,null,2)}
|
|
1
|
+
import{a as Ho,c as zr,d as Hr,e as hl,g as _l,h as Go,i as gl,j as sn,k as an,l as yl,m as wl,n as qo,o as kl,p as cn,q as ln,r as Sl,s as El,t as Bo}from"./chunk-NETVXIH5.js";import{e as Xr,f as Xo,h as Zo}from"./chunk-DQ3MB7BO.js";import{B as jl,C as Jr,D as Fl,E as Yo,G as Ul,H as zl,J as Hl,K as Kr,M as Yr,a as cl,g as zo,i as ll}from"./chunk-E7LYK7V5.js";import{K as Zd}from"./chunk-6UNKK3UH.js";import{D as rs,E as di,Ha as Wd,Ia as Gd,Ma as qd,Na as Bd,T as ui,U as wd,V as is,W as Zn,Y as os,aa as $d,ba as Od,ca as Dd,da as Pd,ea as fi,f as dd,g as ud,ga as Nd,h as md,ha as Ld,ia as Md,ja as Ht,k as li,ka as jd,kb as Kd,la as _n,ma as Fd,mb as cs,na as ss,nb as Yd,o as Yn,oa as gn,ob as Xd,p as fd,pa as Ud,q as pd,qa as zd,r as Xn,ra as Hd,s as hd,sa as as,u as ns,v as _d,wb as ls,z as gd}from"./chunk-GZD4ZYIB.js";import{a as ul,b as on,c as Wo,d as ml,e as fl,f as at,g as Wr,h as pl,i as St}from"./chunk-QO4MTAEA.js";import{$ as Ft,Aa as od,Ab as ct,Bb as zt,C as q,Ca as fn,D as Wl,Da as Kn,Ea as sd,Eb as Td,Fa as ri,Fb as lt,G as Ee,Ga as Ut,H as Qo,Ha as fe,Ia as ii,Ja as ad,Ka as ts,La as oi,Ma as pn,N as Gl,Na as si,O as Zr,Oa as cd,Qa as xe,R as Qr,Ra as ld,S as ei,Sa as T,Ta as ai,Tb as Qn,U as ql,Ua as ci,V as De,Vb as pi,Wa as yd,X as xt,Y as Bl,Z as Vl,_ as Jl,aa as Kl,ac as Vd,bb as vd,cb as bd,dc as Jd,eb as kd,fa as Yl,fb as Sd,ga as es,gb as It,ha as ti,hb as Ed,ia as un,ib as xd,ka as ni,la as Xl,lb as Id,ma as Zl,mb as Ad,oa as Ql,qa as ed,rb as mi,sa as td,tb as Rd,ua as nd,vb as te,wa as mn,wb as Pe,xa as rd,xb as Ne,yb as Cd,za as id,zb as hn}from"./chunk-NWRVNHAD.js";import{b as nn,e as de,g as Oe,i as Se,j as Ye,n as _e,o as vl,p as Gr,r as bl}from"./chunk-LBDWUHQD.js";import{$ as g,$a as Nt,Aa as $e,Ab as Ke,Ba as Yc,Bc as Dl,Da as ee,Ga as Xc,Jc as H,Ka as Zc,Kb as dl,Mc as X,Oc as He,Pb as qr,Pc as Pl,Qa as Qc,Qb as xl,Qc as Vr,Ra as el,Rb as Vo,S as Wc,Sa as G,Sb as Jo,T as Gc,Tb as Ko,Td as C,Ud as Ml,V as qc,Vb as Il,Vd as dn,Wb as Al,Wd as Et,X as Bc,Xa as Jn,Xc as Nl,Xd as jt,Y as Fr,Ya as N,Yc as Xe,Z as Vc,Za as Ve,Zb as Rl,_a as Ur,_c as Ll,a as Mr,aa as y,ae as ce,bb as tl,cb as Lt,d as jr,eb as nl,ec as Cl,fb as rl,gb as il,ha as Jc,i as Uc,ka as Kc,l as zc,m as Hc,ma as Fo,ob as ol,pb as Mt,qb as R,ra as Vn,rb as sl,sa as $,sb as ke,ta as kt,ua as j,ub as Uo,va as K,vb as al,vc as Tl,w as jo,wa as ne,wb as rn,xc as Br,yb as Je,yc as $l,za as he,zc as Ol}from"./chunk-PDVL7QYU.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]="00d2200c-d308-51a6-acc4-8da90afaf6d6")}catch{}})();var L=class extends TypeError{constructor(t){super(t),this.name="AssuranceMutationRefusalError"}},Ie=class extends TypeError{context;constructor(t,n={}){super(t),this.name="AssuranceEvaluationRefusalError",this.context=n}},Ze=class extends TypeError{measurement_id;source_kind;field;check;constructor(t,n){super(t),this.name="AssuranceSourceResolutionError",this.measurement_id=n.measurement_id,this.source_kind=n.source_kind,this.field=n.field,this.check=n.check}};async function yn(e){try{return await e()}catch(t){throw t instanceof L?new y(t.message,g.USAGE,{code:"invalid_argument_value",reason:"assurance_mutation_refused"}):t}}async function Qd(e){try{return await e()}catch(t){throw t instanceof Ie?new y(t.message,g.USAGE,{code:"invalid_argument_value",reason:"assurance_evaluation_refused",...t.context}):t}}import{createHash as Mg}from"node:crypto";import jg 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]="b00dcab2-22c6-55b7-b93d-f6f5413d4b04")}catch{}})();var wn=1e3;(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]="00ad9b34-4feb-5812-8755-801869cce3ad")}catch{}})();var tu=1,Wt=["pre-commit","pre-push","pre-merge","ci","pre-release","post-release","scheduled","on-claim","on-close"],ds=["items","dependency_kind","prose_edge_gap","graph","validate","health","history","links","provider","derived"],Fg=["ceiling","floor","equals","zero","monotone_nondecreasing","monotone_nonincreasing","subset_of"],Ug=/^[a-z0-9]+(?:[._-][a-z0-9]+)*$/,hi=30,_i=5e3,nu=4,zg=50;function dt(e,t){if(!Ug.test(e))throw new L(`${t} must be a stable lowercase id`)}function Hg(e,t){if(!Number.isFinite(e)||e<0)throw new L(`${t} must be a finite non-negative number`)}function er(e){let t=Fg.filter(i=>e[i]!==void 0);if(t.length!==1)throw new L(`assertion ${e.id} must declare exactly one polarity`);let n=t[0],r=e[n];return{polarity:n,value:n==="zero"?0:r}}function ms(e,t){return R(e)===R(t)}function ru(e,t){if(t.polarity==="equals")return ms(e,t.value);if(t.polarity==="subset_of"){if(!Array.isArray(e)||!Array.isArray(t.value))return!1;let r=t.value;return e.every(i=>r.includes(i))}if(typeof e!="number")return!1;let n=t.value;return t.polarity==="ceiling"||t.polarity==="monotone_nonincreasing"?e<=n:t.polarity==="floor"||t.polarity==="monotone_nondecreasing"?e>=n:e===0}function iu(e){let t=er(e),n=e.negative_control.cases;return n.some(r=>r.expected==="pass")&&n.some(r=>r.expected==="fail")&&n.every(r=>ru(r.observed,t)===(r.expected==="pass"))}function Wg(e,t){if(e.polarity!==t.polarity)return!0;if(typeof e.value=="number"&&typeof t.value=="number")return e.polarity==="ceiling"||e.polarity==="monotone_nonincreasing"?t.value>e.value:e.polarity==="floor"||e.polarity==="monotone_nondecreasing"?t.value<e.value:t.value!==e.value;if(e.polarity==="subset_of"){let n=e.value,r=t.value;return!Array.isArray(n)||!Array.isArray(r)||r.some(i=>!n.includes(i))}return!ms(e.value,t.value)}function Gg(e,t){if(e.measurement_id!==t.measurement_id||e.owner_item_id!==t.owner_item_id||R(e.scope)!==R(t.scope))return!0;let n={observe:0,warn:1,block:2},r=(e.lifetime??"hold")==="hold"&&(t.lifetime??"hold")==="retire";return Wg(er(e),er(t))||n[t.enforcement]<n[e.enforcement]||r}function qg(e){if(e.state!==void 0&&!(e.state==="present"||e.state==="missing"))throw new L("items source state must be present or missing");let t=Object.hasOwn(e,"equals"),n=e.state!==void 0,r=Number(t)+Number(n);if(e.field!==void 0&&r!==1)throw new L("items source with field requires exactly one of equals or state");if(e.field===void 0&&r!==0)throw new L("items source equals/state requires field")}function Bg(e){if(typeof e.dependency_kind!="string"||e.dependency_kind.trim().length===0)throw new L("dependency_kind source requires dependency_kind");if([e.source_kind,e.source_kind_prefix,e.source_kind_state].filter(n=>n!==void 0).length>1)throw new L("dependency_kind source accepts at most one source_kind predicate");if(e.source_kind!==void 0&&e.source_kind.trim().length===0||e.source_kind_prefix!==void 0&&e.source_kind_prefix.trim().length===0)throw new L("dependency_kind source provenance values must not be empty");if(e.source_kind_state!==void 0&&e.source_kind_state!=="present"&&e.source_kind_state!=="missing")throw new L("dependency_kind source source_kind_state must be present or missing")}function Vg(e){if(e.sample_limit!==void 0&&(!Number.isInteger(e.sample_limit)||e.sample_limit<1))throw new L("prose_edge_gap sample_limit must be a positive integer");for(let t of e.exemptions??[]){if(typeof t.holder_id!="string"||t.holder_id.trim().length===0||typeof t.reason!="string"||t.reason.trim().length===0)throw new L("prose_edge_gap exemptions require holder_id and reason");if(t.target_id!==void 0&&t.target_id.trim().length===0||t.text_contains!==void 0&&t.text_contains.trim().length===0)throw new L("prose_edge_gap exemption selectors must not be empty")}}function fs(e){dt(e.id,"measurement.id"),e.max_cost!==void 0&&Hg(e.max_cost,"measurement.max_cost");let t=e.source;if(Object.prototype.toString.call(t)!=="[object Object]")throw new L(`measurement.source.kind must be one of ${ds.join(", ")}`);let n=Reflect.get(t,"kind");if(!ds.includes(n))throw new L(`measurement.source.kind must be one of ${ds.join(", ")}`);let r=t;if(r.kind==="items"&&qg(r),r.kind==="dependency_kind"&&Bg(r),r.kind==="prose_edge_gap"&&Vg(r),(r.kind==="graph"||r.kind==="validate"||r.kind==="health")&&(typeof r.field!="string"||r.field.trim().length===0))throw new L(`${r.kind} source requires field`);return r.kind==="provider"&&(dt(r.provider,"provider source provider"),dt(r.key,"provider source key")),e}function ps(e){if(dt(e.id,"assertion.id"),dt(e.measurement_id,"assertion.measurement_id"),typeof e.owner_item_id!="string"||e.owner_item_id.trim().length===0)throw new L("assertion.owner_item_id is required");let t=er(e);if(typeof t.value=="number"&&!Number.isFinite(t.value))throw new L(`assertion.${t.polarity} must be a finite number`);if(e.lifetime==="retire"&&(typeof e.retire_reason!="string"||e.retire_reason.trim().length===0))throw new L("retired assertion requires retire_reason");e.scope.kind==="filter"&&dt(e.scope.measurement_id,"assertion.scope.measurement_id");let n=e.negative_control?.cases;if(!Array.isArray(n)||!n.some(r=>r.expected==="pass")||!n.some(r=>r.expected==="fail"))throw new L("assertion negative control requires pass and fail cases");if(!iu(e))throw new L(`assertion ${e.id} negative control does not prove its bound`);return e}function Jg(e){if(!Array.isArray(e.allowed_providers))throw new L("gate provider_policy.allowed_providers must be an array");for(let t of e.allowed_providers)dt(t,"gate.provider_policy.allowed_provider");if(typeof e.triggers!="object"||e.triggers===null||Array.isArray(e.triggers))throw new L("gate provider_policy.triggers must be an object");for(let[t,n]of Object.entries(e.triggers)){if(!Wt.includes(t))throw new L(`gate provider policy has unknown trigger ${t}`);if(typeof n!="object"||n===null||!["low","medium","high"].includes(n.max_cost_class)||typeof n.allow_network!="boolean")throw new L(`gate provider policy trigger ${t} is invalid`)}}function ou(e){if(dt(e.id,"gate.id"),!Array.isArray(e.assertion_ids))throw new L("gate.assertion_ids is required and must be an array");if(e.assertion_ids.length===0)throw new L("gate requires at least one assertion");for(let t of e.assertion_ids)dt(t,"gate.assertion_id");if(!Array.isArray(e.triggers))throw new L(`gate.triggers is required and must be an array of ${Wt.join(", ")}`);if(e.triggers.length===0)throw new L("gate requires at least one trigger");for(let t of e.triggers)if(!Wt.includes(t))throw new L(`gate trigger must be one of ${Wt.join(", ")}`);return e.provider_policy&&Jg(e.provider_policy),e}function vn(e){if(e.version!==tu)throw new L(`unsupported assurance document version ${String(e.version)}`);let t=new Set;for(let r of e.measurements){if(fs(r),t.has(`measurement:${r.id}`))throw new L(`duplicate measurement ${r.id}`);t.add(`measurement:${r.id}`)}for(let r of e.assertions){if(ps(r),t.has(`assertion:${r.id}`))throw new L(`duplicate assertion ${r.id}`);t.add(`assertion:${r.id}`)}for(let r of e.gates){ou(r);let i=r.assertion_ids.filter(o=>!e.assertions.some(s=>s.id===o));if(i.length>0)throw new L(`gate ${r.id} references missing assertions: ${i.join(", ")}`);if(t.has(`gate:${r.id}`))throw new L(`duplicate gate ${r.id}`);t.add(`gate:${r.id}`)}let n=new Set(e.measurements.map(r=>r.id));for(let[r,i]of su(e))if(!n.has(r))throw new L(`${i.join(", ")} references missing measurement ${r}`);return e}function hs(e,t){if("measurement"in e){t.push(e.measurement);return}if("operator"in e)for(let n of e.operands)hs(n,t)}function su(e){let t=new Map,n=(r,i)=>{let o=t.get(r)??[];o.push(i),t.set(r,o)};for(let r of e.assertions)n(r.measurement_id,`assertion ${r.id}`),r.scope.kind==="filter"&&n(r.scope.measurement_id,`assertion ${r.id} scope`);for(let r of e.measurements){if(r.source.kind!=="derived")continue;let i=[];hs(r.source.expression,i);for(let o of i)n(o,`derived measurement ${r.id}`)}return t}function Kg(e,t){let n=e.assertion_ids.flatMap(o=>{let s=t.assertions.find(a=>a.id===o);return[s.measurement_id,...s.scope.kind==="filter"?[s.scope.measurement_id]:[]]}),r=new Set,i=new Set;for(;n.length>0;){let o=n.pop();if(r.has(o))continue;r.add(o);let s=t.measurements.find(a=>a.id===o);s.source.kind==="provider"?i.add(s.source.provider):s.source.kind==="derived"&&hs(s.source.expression,n)}return i}function tr(){return{version:tu,measurements:[],assertions:[],gates:[]}}function Yg(e,t){let n=t.items.filter(r=>(e.statuses===void 0||e.statuses.includes(r.status))&&(e.types===void 0||e.types.includes(r.type))&&(e.tags===void 0||e.tags.every(i=>r.tags?.includes(i)))&&(e.field===void 0||(()=>{let i=r[e.field];if(e.state!==void 0){let o=i==null||i===""||Array.isArray(i)&&i.length===0;return e.state==="missing"?o:!o}return ms(i,e.equals)})()));return{value:n.length,population_size:t.items.length,cost:t.items.length,contributors:n.map(r=>r.id)}}function Xg(e,t){return e.source_kind!==void 0?t?.toLowerCase()===e.source_kind.trim().toLowerCase():e.source_kind_prefix!==void 0?t?.toLowerCase().startsWith(e.source_kind_prefix.trim().toLowerCase())===!0:e.source_kind_state==="present"?t!==void 0&&t.length>0:e.source_kind_state==="missing"?t===void 0||t.length===0:!0}function Zg(e,t){let n=[],r=Fo(e.dependency_kind)??e.dependency_kind.trim().toLowerCase();for(let i of t.items)for(let o of i.dependencies??[]){let s=Fo(o.kind)??o.kind.trim().toLowerCase(),a=o.source_kind?.trim();s===r&&Xg(e,a)&&n.push(`${i.id}->${o.id}${a?`@${a}`:""}`)}return{value:n.length,population_size:t.items.length,cost:t.items.length,contributors:n}}function Qg(e){let t=[e.description,e.body].filter(n=>typeof n=="string").map(n=>n.trim()).filter(Boolean);for(let n of["comments","notes","learnings"]){let r=e[n];if(Array.isArray(r)){for(let i of r)if(typeof i=="string")t.push(i);else if(typeof i=="object"&&i!==null){let o=Reflect.get(i,"text");typeof o=="string"&&t.push(o)}}}return t}function ey(e,t,n,r){return e.some(i=>i.holder_id.trim().toLowerCase()===t.toLowerCase()&&(i.target_id===void 0||i.target_id.trim().toLowerCase()===n.toLowerCase())&&(i.text_contains===void 0||r.toLowerCase().includes(i.text_contains.trim().toLowerCase())))}function us(e,t){return[e.toLowerCase(),t.toLowerCase()].sort().join("\0")}function ty(e){let t=new Map,n=new Set,r=[],i=/\b[a-z][a-z0-9]*-[a-z0-9]+\b/giu,o=0;for(let s of e){t.set(s.id.toLowerCase(),s.id);for(let a of s.dependencies??[])n.add(us(s.id,a.id));for(let a of[s.parent,s.blocked_by])typeof a=="string"&&n.add(us(s.id,a));for(let a of Qg(s)){let c=[...a.matchAll(i)].map(l=>l[0]);o+=c.length,r.push({holder_id:s.id,segment:a,mentioned_ids:c})}}return{canonical_ids:t,linked_pairs:n,prose_mentions:r,mention_count:o}}function ny(e,t){let n=ty(t.items),r=new Map;for(let s of n.prose_mentions){let a=s.mentioned_ids.map(l=>n.canonical_ids.get(l.toLowerCase())).filter(l=>l!==void 0&&l!==s.holder_id),c=[...new Set(a)];for(let l of c){let d=us(s.holder_id,l);if(n.linked_pairs.has(d)||ey(e.exemptions??[],s.holder_id,l,s.segment))continue;let u=c.some(m=>m!==l);r.get(d)?.explicit===!0&&!u||r.set(d,{contributor:`${s.holder_id}->${l}|subject=${u?"explicit":"implicit"}`,explicit:u})}}let i=[...r.values()],o=i.map(s=>s.contributor).sort();return{value:o.length,population_size:n.canonical_ids.size,cost:t.items.length+n.linked_pairs.size+n.mention_count,contributors:o.slice(0,e.sample_limit??25),partitions:{explicit_subject:i.filter(s=>s.explicit).length,implicit_subject:i.filter(s=>!s.explicit).length}}}function ry(e,t){return{value:t.history.filter(r=>(e.op===void 0||r.op===e.op)&&(e.author===void 0||r.author===e.author)&&(e.harness===void 0||r.agent_harness===e.harness)&&(e.model===void 0||r.agent_model===e.model)).length,population_size:t.history.length,cost:t.history.length}}function iy(e,t){let n=t.items.filter(r=>{let i=r[e.link],o=Array.isArray(i)&&i.length>0;return e.state==="present"?o:!o});return{value:n.length,population_size:t.items.length,cost:t.items.length,contributors:n.map(r=>r.id)}}function oy(e,t){let n=e.source;return n.kind==="items"?Yg(n,t):n.kind==="dependency_kind"?Zg(n,t):n.kind==="prose_edge_gap"?ny(n,t):n.kind==="history"?ry(n,t):n.kind==="links"?iy(n,t):null}function au(e,t){return e.reduce((n,r)=>({units:n.units+r.units,items_scanned:n.items_scanned+r.items_scanned,history_entries:n.history_entries+r.history_entries,provider_calls:n.provider_calls+r.provider_calls,duration_ms:t}),{units:0,items_scanned:0,history_entries:0,provider_calls:0,duration_ms:t})}function sy(e,t){if(t.length===0)throw new TypeError(`derived ${e} requires operands`);if(e==="add")return t.reduce((n,r)=>n+r,0);if(e==="subtract")return t.slice(1).reduce((n,r)=>n-r,t[0]);if(e==="multiply")return t.reduce((n,r)=>n*r,1);if(e==="divide"){if(t.slice(1).includes(0))throw new TypeError("derived divide cannot divide by zero");return t.slice(1).reduce((n,r)=>n/r,t[0])}return e==="min"?Math.min(...t):Math.max(...t)}async function cu(e,t,n){let r=new Array(e.length),i=0,o=Array.from({length:Math.min(t,e.length)},async()=>{for(;i<e.length;){let s=i;i+=1,r[s]=await n(e[s],s)}});return await Promise.all(o),r}async function lu(e,t,n,r,i){if("literal"in e)return{value:e.literal,costs:[],population_size:0,contributors:[]};if("measurement"in e){let s=n.find(l=>l.id===e.measurement);if(!s)throw new TypeError(`derived measurement references missing ${e.measurement}`);let a=await du(s,t,n,r,i);if(typeof a.value!="number")throw new TypeError(`derived measurement ${s.id} is not numeric`);let c=i.charged.has(s.id)?[]:[a.cost];return i.charged.add(s.id),{value:a.value,costs:c,population_size:a.population_size,contributors:a.contributors}}let o=await cu(e.operands,nu,s=>lu(s,t,n,r,i));return{value:sy(e.operator,o.map(s=>s.value)),costs:o.flatMap(s=>s.costs),population_size:Math.max(0,...o.map(s=>s.population_size)),contributors:[...new Set(o.flatMap(s=>s.contributors))]}}async function ay(e,t,n,r,i){fs(e);let o=Date.now(),s,a=[],c=0;if(e.source.kind==="derived"){let u=await lu(e.source.expression,t,n,[...r,e.id],i);s={value:u.value,population_size:u.population_size,cost:0,contributors:u.contributors},a=u.costs}else{let u=oy(e,t);u!==null?s=u:(s=await t.external(e.source),c=1)}let l={units:s.cost,items_scanned:e.source.kind==="items"||e.source.kind==="dependency_kind"||e.source.kind==="prose_edge_gap"||e.source.kind==="links"?t.items.length:0,history_entries:e.source.kind==="history"?t.history.length:0,provider_calls:c,duration_ms:Date.now()-o},d=au([...a,l],Date.now()-o);if(e.max_cost!==void 0&&d.units>e.max_cost)throw new Ie(`measurement ${e.id} exceeded cost ceiling ${e.max_cost} with ${d.units}`);return{id:e.id,definition_fingerprint:`sha256:${Mg("sha256").update(R(e)).digest("hex")}`,value:s.value,population_size:s.population_size,cost:d,contributors:s.contributors??[],...s.partitions?{partitions:s.partitions}:{}}}function du(e,t,n,r,i){if(r.includes(e.id))throw new TypeError(`derived measurement cycle: ${[...r,e.id].join(" -> ")}`);let o=i.cache.get(e.id);if(o)return o;let s=ay(e,t,n,r,i).catch(a=>{if(a instanceof Ze&&a.measurement_id===void 0){let c={measurement_id:e.id,source_kind:a.source_kind,field:a.field,...a.check?{check:a.check}:{}},l=new Ze(a.message,c);throw l.cause=a,l}throw a});return i.cache.set(e.id,s),s}async function _s(e,t,n=[e]){return du(e,t,n,[],{cache:new Map,charged:new Set})}function cy(e,t){return typeof e!="number"||typeof t.value!="number"?null:t.polarity==="ceiling"||t.polarity==="monotone_nonincreasing"?t.value-e:(t.polarity==="floor"||t.polarity==="monotone_nondecreasing",e-t.value)}function ly(e,t,n={}){ps(e);let r=er(e),i=e.lifetime==="retire"&&n.owner_terminal===!0;return{assertion_id:e.id,measurement_id:e.measurement_id,measurement_definition_fingerprint:t.definition_fingerprint,scope:e.scope,population_size:t.population_size,observed:t.value,bound:r,distance:cy(t.value,r),verdict:i?"retired":ru(t.value,r)?"pass":"fail",enforcement:e.enforcement,negative_control_proven:iu(e),cost:t.cost,contributors:t.contributors,...t.partitions?{partitions:t.partitions}:{}}}function dy(e,t,n,r){let i=Kg(e,t);if(i.size===0)return;let o=e.provider_policy,s=o?.triggers[r];if(!o||!s)throw new Ie(`assurance gate ${e.id} refuses provider execution at trigger ${r} without an explicit provider policy`);let a=new Set(o.allowed_providers),c={low:0,medium:1,high:2};for(let l of i){if(!a.has(l))throw new Ie(`assurance gate ${e.id} refuses provider ${l}`);let d=n.provider_capabilities?.[l];if(!d)throw new Ie(`assurance provider ${l} has no declared capabilities`);if(c[d.cost_class]>c[s.max_cost_class])throw new Ie(`assurance gate ${e.id} refuses ${d.cost_class}-cost provider ${l} at trigger ${r}`);if(d.network&&!s.allow_network)throw new Ie(`assurance gate ${e.id} refuses network provider ${l} at trigger ${r}`)}}async function eu(e,t,n,r,i){try{return await _s(n,r,i)}catch(o){if(o instanceof Ze){let s=o.check?` check ${o.check}`:"",a=o.measurement_id??n.id,c=new Ie(`assurance gate ${e} assertion ${t} measurement ${a} source ${o.source_kind}${s} field ${o.field} could not resolve: ${o.message}`,{gate_id:e,assertion_id:t,measurement_id:a,source_kind:o.source_kind,field:o.field,...o.check?{check:o.check}:{}});throw c.cause=o,c}throw o}}async function uu(e,t,n,r){vn(t);let i=t.gates.find(c=>c.id===e);if(!i)throw new Ie(`assurance gate ${e} not found`);if(!i.triggers.includes(r.trigger))throw new Ie(`assurance gate ${e} does not declare trigger ${r.trigger}`);dy(i,t,n,r.trigger);let o=await cu(i.assertion_ids,nu,async c=>{let l=t.assertions.find(p=>p.id===c),d=t.measurements.find(p=>p.id===l.measurement_id),u=n;if(l.scope.kind==="active"){let p=new Set(n.terminal_statuses??["closed","canceled"]);u={...n,items:n.items.filter(_=>!p.has(_.status))}}else if(l.scope.kind==="filter"){let p=l.scope.measurement_id,_=t.measurements.find(v=>v.id===p),h=await eu(i.id,l.id,_,n,t.measurements),w=new Set(h.contributors);u={...n,items:n.items.filter(v=>w.has(v.id))}}let m=n.items.find(p=>p.id===l.owner_item_id),f=m!==void 0&&new Set(n.terminal_statuses??["closed","canceled"]).has(m.status);return ly(l,await eu(i.id,l.id,d,u,t.measurements),{owner_terminal:f})}),s=o.some(c=>c.verdict==="fail"&&c.enforcement==="block"),a=o.some(c=>c.verdict==="fail"&&c.enforcement==="warn");return{gate_id:i.id,tree_id:n.tree_id,trigger:r.trigger,dry_run:r.dry_run===!0,evaluated_at:new Date().toISOString(),verdict:s?"block":a?"warn":"pass",exit_code:s?1:0,assertions:o,assertions_total:o.length,row_contract:{row_keys:["assertions"],jq_selector:".assertions[]"},cost:au(o.map(c=>c.cost),Math.max(0,...o.map(c=>c.cost.duration_ms)))}}function gi(e){return jg.join(e,"assurance.json")}async function mu(e){let t=await K(gi(e));return t===null?tr():yi(t)}function yi(e){try{return vn(JSON.parse(e))}catch(t){throw new y("The assurance registry is invalid. Repair or restore .agents/pm/assurance.json and retry.",g.GENERIC_FAILURE,{code:"assurance_registry_invalid",reason:String(t),nextSteps:["Restore a valid assurance.json from version control or repair its declaration references.","Run pm assurance list measurement after the repair."]})}}function wi(e,t){return t==="measurement"?e.measurements:t==="assertion"?e.assertions:e.gates}function uy(e,t){e==="measurement"?fs(t):e==="assertion"?ps(t):ou(t)}async function nr(e,t){let n=structuredClone(wi(await mu(e),t));return{items:n,count:n.length,row_contract:{row_keys:["items"],jq_selector:".items[]"}}}async function gs(e,t,n){let r=wi(await mu(e),t).find(i=>i.id===n);if(!r)throw new TypeError(`assurance ${t} ${n} not found`);return structuredClone(r)}async function vi(e,t,n,r={}){uy(t,n);let i=await T(e),o=q(r.author,i.author_default),s=await pn({pmRoot:e,filePath:gi(e),op:`assurance:${t}:put`,author:o,message:r.message,lockTtlSeconds:hi,lockWaitMs:_i,mutate:a=>{let c=a===null?tr():yi(a),l=wi(c,t),d=l.findIndex(m=>m.id===n.id),u=d<0?"created":"updated";if(t==="assertion"&&d>=0&&Gg(l[d],n)){let m=n.authorization_decision;if(!m||!r.authorized_decision_ids?.includes(m))throw new L(`loosening assertion ${n.id} requires a verified authorization_decision`)}return d<0?l.push(structuredClone(n)):l[d]=structuredClone(n),vn(c),{raw:`${JSON.stringify(c,null,2)}
|
|
2
2
|
`,result:{changed:!0,action:u,kind:t,id:n.id}}}});return{...s.result,changed:s.changed}}async function ys(e,t,n={}){let r=tr();r.measurements=structuredClone(t.measurements),r.assertions=structuredClone(t.assertions),r.gates=structuredClone(t.gates),vn(r);let i=await T(e),o=q(n.author,i.author_default),s=await pn({pmRoot:e,filePath:gi(e),op:"assurance:bundle:apply",author:o,message:n.message,lockTtlSeconds:hi,lockWaitMs:_i,mutate:a=>{let c=a===null?tr():yi(a),l=[],d=[],u=(m,f,p)=>{for(let _ of f){let h=m.find(w=>w.id===_.id);if(!h){m.push(structuredClone(_)),l.push(`${p}:${_.id}`);continue}if(R(h)!==R(_))throw new L(`assurance bundle refuses to replace divergent ${p} ${_.id}`);d.push(`${p}:${_.id}`)}};return u(c.measurements,r.measurements,"measurement"),u(c.assertions,r.assertions,"assertion"),u(c.gates,r.gates,"gate"),vn(c),{raw:`${JSON.stringify(c,null,2)}
|
|
3
3
|
`,result:{changed:l.length>0,created_ids:l,unchanged_ids:d}}}});return{...s.result,changed:s.changed}}async function fu(e,t,n,r={}){let i=await T(e),o=q(r.author,i.author_default),s=await pn({pmRoot:e,filePath:gi(e),op:`assurance:${t}:remove`,author:o,message:r.message,lockTtlSeconds:hi,lockWaitMs:_i,mutate:a=>{let c=a===null?tr():yi(a);if(t==="measurement"){let u=su(c).get(n);if(u&&u.length>0)throw new L(`assurance measurement ${n} is referenced by ${u.join(", ")}`)}if(t==="assertion"&&c.gates.some(u=>u.assertion_ids.includes(n)))throw new L(`assurance assertion ${n} is referenced by gate`);let l=wi(c,t),d=l.findIndex(u=>u.id===n);if(d<0)throw new L(`assurance ${t} ${n} not found`);return l.splice(d,1),vn(c),{raw:`${JSON.stringify(c,null,2)}
|
|
4
4
|
`,result:{changed:!0,action:"removed",kind:t,id:n}}}});return{...s.result,changed:s.changed}}async function pu(e,t,n={}){if(t.dry_run)throw new TypeError("dry-run assurance verdicts are not persisted");let r=await T(e);await oi({pmRoot:e,op:"assurance:gate:verdict",author:q(n.author,r.author_default),context:{assurance_verdict:t},message:n.message??`Assurance gate ${t.gate_id} returned ${t.verdict}`,lockTtlSeconds:hi,lockWaitMs:_i})}async function hu(e,t={}){let n=t.limit??zg;if(!Number.isInteger(n)||n<1||n>wn)throw new TypeError(`assurance verdict limit must be an integer from 1 through ${wn}`);return(await Ft(ii(e),fe)).reverse().filter(i=>i.op==="assurance:gate:verdict").map(i=>i.context?.assurance_verdict).filter(i=>typeof i=="object"&&i!==null&&"gate_id"in i).filter(i=>t.gate_id===void 0||i.gate_id===t.gate_id).slice(0,n)}(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]="0daf7c89-abc5-5c35-ba3f-9772a50408c0")}catch{}})();var rr={type:"string",minLength:1,maxLength:128,pattern:"\\S"},bi={type:"array",minItems:1,maxItems:Vo,items:rr},_u={...bi,items:{...rr,pattern:"^(?!(?:.*\\.)?(?:__proto__|constructor|prototype)(?:\\.|$))[a-zA-Z_][a-zA-Z0-9_]*(?:\\.[a-zA-Z_][a-zA-Z0-9_]*){0,7}$"}},my={type:"object",additionalProperties:!1,required:["id","rule"],properties:{id:{type:"string",minLength:1,maxLength:128,pattern:"^[a-zA-Z0-9][a-zA-Z0-9._-]*$"},description:{type:"string",minLength:1,maxLength:500,pattern:"\\S"},effect:{enum:["advise","warn","refuse"]},subject:{type:"object",additionalProperties:!1,properties:{...Object.fromEntries(["types","tags","statuses","operations","parents"].map(e=>[e,bi])),dependency:{type:"object",additionalProperties:!1,required:["kind"],properties:{kind:rr,id:rr}}}},rule:{oneOf:[{type:"object",additionalProperties:!1,required:["kind","fields"],properties:{kind:{const:"require_fields"},fields:_u}},{type:"object",additionalProperties:!1,required:["kind","authors"],properties:{kind:{const:"authors"},authors:bi}},...["field_writers","approval"].map(e=>({type:"object",additionalProperties:!1,required:["kind","fields","authors"],properties:{kind:{const:e},fields:_u,authors:bi}})),{type:"object",additionalProperties:!1,required:["kind","allowed"],properties:{kind:{const:"transition"},allowed:{type:"array",maxItems:Vo,items:{type:"array",minItems:2,maxItems:2,items:rr}}}}]}}},UT={$schema:"https://json-schema.org/draft/2020-12/schema",title:"pm workflow policy registry",type:"object",additionalProperties:!1,required:["version","policies"],properties:{version:{const:1},enforcement:{enum:["advise","refuse"],default:"advise"},policies:{type:"array",maxItems:xl,items:my}}};(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]="42dee0a5-d003-5e44-8b2d-d74a23d3f2ce")}catch{}})();async function gu(e,t,n,r){let i=await It(e).catch(()=>null);return i===null?{check:{name:"completeness",status:"error",ok:!1,details:{policy_registry_readable:!1,policy_registry_path:"schema/policies.json",remediation_hint:"Repair schema/policies.json, then rerun pm validate."}},warnings:["validate_completeness_policy_registry_unreadable"]}:yu(i,t,n,r)}function fy(e,t,n){return e===0?"undeclared":t===0?"empty":n===0?"inapplicable":n===t?"covered":"partial"}function yu(e,t,n=5,r=!1){let i=[],o=new Map,s=e.policies.filter(h=>h.rule.kind==="require_fields"),a=s.filter(h=>h.subject?.operations===void 0),c=new Set,l=0,d=0,u=0,m=0,f=0,p=Rl(e);for(let h of t){let w=p({operation:"",author:"",before:h,after:h,completeness_only:!0});l+=+(w.decisions.length>0),d+=w.decisions.length,w.decisions.forEach(S=>c.add(S.policy_id));let v=w.decisions.filter(S=>!S.satisfied);if(v.length===0)continue;m+=1;let k=o.get(h.type)??{items:0,violations:0,missing_fields:0};k.items+=1;for(let S of v)u+=1,k.violations+=1,k.missing_fields+=S.missing_fields.length,S.effect==="refuse"&&(f+=1),i.length<n&&i.push({id:h.id,type:h.type,status:h.status,decision:S});o.set(h.type,k)}let _=r||f>0?"error":u>0?"warn":"ok";return{check:{name:"completeness",status:_,ok:_==="ok",details:{scope:"operation_independent_require_fields",declared_requirement_count:s.length,state_requirement_count:a.length,applicable_requirement_count:c.size,requirement_application_count:d,governed_items:l,ungoverned_items:t.length-l,contract_status:fy(s.length,t.length,l),applied_policy_ids:[...c].sort().slice(0,Math.max(0,n)),applied_policy_ids_truncated:c.size>Math.max(0,n),checked_items:t.length,incomplete_items:m,violation_count:u,refused_violations:f,missing_by_type:Object.fromEntries(o),violations:i,violations_truncated:i.length<u,enforcement:e.enforcement}},warnings:[...u>0?[`validate_completeness_missing_fields:${u}`]:[],...r?["validate_completeness_source_incomplete"]:[]]}}import py 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]="f54fe358-8f4c-5bf4-ae2a-9c92cd08c953")}catch{}})();function hy(){return{version:1,enforcement:"advise",policies:[...[["Epic",["goal","objective","body"]],["Story",["description","value","acceptance_criteria"]],["Decision",["body","resolution"]],["Feature",["acceptance_criteria","expected_result"]],["Task",["description"]],["Issue",["repro_steps","expected_result"]],["Chore",["description"]]].map(([t,n])=>({id:`completeness-${t.toLowerCase()}`,effect:"advise",description:`Evidence expected when ${t} work reaches completion.`,subject:{types:[t],statuses:["closed"]},rule:{kind:"require_fields",fields:[...n]}})),{id:"completeness-resolution",effect:"advise",subject:{statuses:["closed"]},rule:{kind:"require_fields",fields:["resolution","expected_result","actual_result"]}}]}}function bu(e){let t=e;if(typeof e=="string")try{t=JSON.parse(e)}catch{throw new y("Policy definition must be valid JSON.",g.USAGE)}if(typeof t!="object"||t===null||Array.isArray(t))throw new y("Policy definition must be an object.",g.USAGE);return t}async function _y(e,t){let n=N(process.cwd(),e.path);await te(n);let r=await T(n);return{pmRoot:n,settings:r,author:q(t,r.author_default)}}function wu(e,t,n,r){if(e==="policy-mode")return Ko({...n,enforcement:t});let i=n.policies.filter(a=>a.id!==t);if(e==="policy-remove")return{...n,policies:i};let o=Jo(r.definition),s=Ko({...n,policies:[...i,o].sort((a,c)=>a.id.localeCompare(c.id))});if(Buffer.byteLength(`${JSON.stringify(s,null,2)}
|
|
5
5
|
`)>kd)throw new y("Policy registry exceeds its byte ceiling.",g.USAGE);return s}async function vu(e,t,n,r){if(n.dryRun)return{policy_result:!0,action:e,changed:!1,result:wu(e,t,await It(r.pmRoot),n)};let i=await pn({pmRoot:r.pmRoot,filePath:py.join(r.pmRoot,"schema","policies.json"),op:`schema:${e}`,author:r.author,message:n.message,lockTtlSeconds:r.settings.locks.ttl_seconds,lockWaitMs:r.settings.locks.wait_ms,mutate(o){let s=wu(e,t,Sd(o),n);return{raw:`${JSON.stringify(s,null,2)}
|
|
6
|
-
`,result:s}}});return{policy_result:!0,action:e,changed:i.changed,result:i.result}}async function gy(e,t,n){let r,i=await Td({...n,id:e,op:"policy_approve",message:t.message,resolveHistoryContext:()=>({workflow_approval:r}),async mutate(o){let a=(await It(n.pmRoot)).policies.find(c=>c.id===t.policy);if(!a||a.rule.kind!=="approval")throw new y("--policy must name an approval rule.",g.USAGE);if(!a.rule.authors.includes(n.author))throw new y("This actor is not a declared approver.",g.CONFLICT);return await Ed(n.pmRoot,o.metadata.id),r={policy_id:a.id,policy_fingerprint:Il(a),content_fingerprint:Al(a,{...o.metadata,body:o.body})},{changedFields:[]}}});return{policy_result:!0,action:"policy-approve",changed:!0,result:{id:i.item.id,...r,warnings:i.warnings}}}function yy(e,t){let n=bu(t),r=Jo({...n,id:n.id===void 0?e:n.id});if(e!==void 0&&e.trim()!==r.id)throw new y("Policy id operand does not match definition.id.",g.USAGE,{required:"Use the same policy id operand and definition.id, or supply only one of them.",nextSteps:["Omit the policy id operand to use definition.id, or omit definition.id to use the operand."]});return r}async function s$(e,t,n={},r={}){if(!qr.includes(e))throw new y("Unknown workflow policy action.",g.USAGE);if(e==="policy-presets")return{policy_result:!0,action:e,changed:!1,result:hy()};let i=await _y(r,n.author);if(e==="policies")return{policy_result:!0,action:e,changed:!1,result:await It(i.pmRoot)};if(e==="policy-put"){let d=yy(t,n.definition);return vu(e,d.id,{...n,definition:d},i)}if(!t?.trim())throw new y(`schema ${e} requires an operand.`,g.USAGE);if(["policy-remove","policy-mode"].includes(e))return vu(e,t,n,i);if(e==="policy-approve"){if(n.dryRun)throw new y("Use policy-check to preview; policy-approve records an approval.",g.USAGE);return gy(t,n,i)}let o=G(i.settings,H()),s=await Pe(i.pmRoot,t,i.settings.id_prefix,i.settings.item_format,o.type_to_folder);if(!s)throw new y(`Item ${t} not found.`,g.NOT_FOUND);let{document:a}=await Ne(s,{schema:i.settings.schema}),c={...a.metadata,body:a.body},l=n.definition===void 0?c:{...c,...bu(n.definition)};if(l.id!==c.id)throw new y("Policy preview cannot change the item id.",g.USAGE);return{policy_result:!0,action:e,changed:!1,result:await xd(i.pmRoot,await It(i.pmRoot),{operation:"update",author:i.author,before:c,after:l,completeness_only:n.definition===void 0})}}import{createHash as Du}from"node:crypto";import ir from"node:fs/promises";import or from"node:path";import{Option as I$}from"commander";(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]="7ffd5046-9154-52e7-94ce-192b07b8ceae")}catch{}})();function wy(e,t){let n=[],r=new Set;for(let i of t.keys){if(!Object.hasOwn(e,i))continue;let o=e[i];if(o!=null){if(typeof o=="string"){n.push(o);continue}if(!Array.isArray(o)||!o.every(s=>typeof s=="string"))return;r.has(o)||(r.add(o),n.push(...o))}}return n.length>0?n.join("; "):void 0}function ki(e,t){return e.find(r=>r.target===t)??{target:t,keys:[t]}}function F(e,t){return e[t]===!0?!0:void 0}function ut(e,t){return e[t]===!1?!0:void 0}function ku(e,t){return t.some(n=>e[n]===!0)?!0:void 0}function Su(e,t){for(let[n,r]of Object.entries(t))n==="__proto__"||n==="constructor"||n==="prototype"||Object.hasOwn(e,n)||(e[n]=r)}function Eu(e){let t=i=>zo(e,ki(Xr,i)),n=i=>ll(e,ki(Xo,i)),r={title:t("title"),description:t("description"),body:t("body"),status:t("status"),closeReason:t("closeReason"),priority:t("priority"),type:t("type"),tags:t("tags"),addTags:n("addTags"),removeTags:n("removeTags"),deadline:t("deadline"),estimatedMinutes:t("estimatedMinutes"),acceptanceCriteria:wy(e,ki(Xo,"acceptanceCriteria")),addAc:n("addAc"),removeAc:n("removeAc"),definitionOfReady:t("definitionOfReady"),order:t("order"),rank:t("rank"),goal:t("goal"),objective:t("objective"),value:t("value"),impact:t("impact"),outcome:t("outcome"),whyNow:t("whyNow"),author:t("author"),message:t("message"),force:!!e.force,ownershipMetadataBypass:e.ownershipMetadataBypass===!0?!0:void 0,ownershipDependencyBypass:e.ownershipDependencyBypass===!0?!0:void 0,assignee:t("assignee"),parent:t("parent"),allowUnresolvedDeps:ku(e,["allowUnresolvedDeps","allow_unresolved_deps"])===!0,reviewer:t("reviewer"),risk:t("risk"),confidence:t("confidence"),sprint:t("sprint"),release:t("release"),blockedBy:t("blockedBy"),blockedReason:t("blockedReason"),unblockNote:t("unblockNote"),reporter:t("reporter"),severity:t("severity"),environment:t("environment"),reproSteps:t("reproSteps"),resolution:t("resolution"),expectedResult:t("expectedResult"),actualResult:t("actualResult"),affectedVersion:t("affectedVersion"),fixedVersion:t("fixedVersion"),component:t("component"),regression:e.regression===!0?"true":t("regression"),customerImpact:t("customerImpact"),dep:n("dep"),depRemove:n("depRemove"),replaceDeps:F(e,"replaceDeps"),replaceTests:F(e,"replaceTests"),replaceFiles:F(e,"replaceFiles"),replaceDocs:F(e,"replaceDocs"),comment:n("comment"),note:n("note"),learning:n("learning"),file:n("file"),test:n("test"),doc:n("doc"),reminder:n("reminder"),event:n("event"),typeOption:n("typeOption"),field:n("field"),unset:n("unset"),clearDeps:F(e,"clearDeps"),clearComments:F(e,"clearComments"),clearNotes:F(e,"clearNotes"),clearLearnings:F(e,"clearLearnings"),clearFiles:F(e,"clearFiles"),clearTests:F(e,"clearTests"),clearDocs:F(e,"clearDocs"),clearReminders:F(e,"clearReminders"),clearEvents:F(e,"clearEvents"),clearTypeOptions:F(e,"clearTypeOptions")};return Su(r,e),r}function re(e,t){let n=ki(cl,t),r=zo(e,n);if(r!==void 0)return r;for(let i of n.keys){let o=e[i];if(Array.isArray(o)){let s=o.filter(a=>typeof a=="string");if(s.length>0)return s.join(",")}if(t==="ids"&&typeof o=="string")return o;if(typeof o=="number"&&Number.isFinite(o))return String(o)}}function vy(e){let t=F(e,"filterFilesMissing"),n=F(e,"filterDocsMissing");return{filterReviewerMissing:F(e,"filterReviewerMissing"),filterRiskMissing:F(e,"filterRiskMissing"),filterConfidenceMissing:F(e,"filterConfidenceMissing"),filterSprintMissing:F(e,"filterSprintMissing"),filterReleaseMissing:F(e,"filterReleaseMissing"),hasNotes:F(e,"hasNotes"),hasLearnings:F(e,"hasLearnings"),hasFiles:F(e,"hasFiles"),hasDocs:F(e,"hasDocs"),hasTests:F(e,"hasTests"),hasComments:F(e,"hasComments"),hasDeps:F(e,"hasDeps"),hasBody:F(e,"hasBody"),hasLinkedCommand:F(e,"hasLinkedCommand"),noNotes:ut(e,"notes"),noLearnings:ut(e,"learnings"),noFiles:ut(e,"files")??t,filterFilesMissing:t,noDocs:ut(e,"docs")??n,filterDocsMissing:n,noTests:ut(e,"tests"),noComments:ut(e,"comments"),noDeps:ut(e,"deps"),emptyBody:F(e,"emptyBody"),noLinkedCommand:ut(e,"linkedCommand")}}function xu(e){let t={status:re(e,"status"),type:re(e,"type"),tag:re(e,"tag"),priority:re(e,"priority"),deadlineBefore:re(e,"deadlineBefore"),deadlineAfter:re(e,"deadlineAfter"),updatedAfter:re(e,"updatedAfter"),updatedBefore:re(e,"updatedBefore"),createdAfter:re(e,"createdAfter"),createdBefore:re(e,"createdBefore"),today:F(e,"today"),recent:F(e,"recent"),ids:re(e,"ids"),assignee:re(e,"assignee"),assigneeFilter:re(e,"assigneeFilter"),parent:re(e,"parent"),sprint:re(e,"sprint"),release:re(e,"release"),limit:re(e,"limit"),offset:re(e,"offset"),noTruncate:ut(e,"truncate"),includeBody:F(e,"includeBody"),strictRead:F(e,"strictRead"),compact:F(e,"compact"),brief:F(e,"brief"),full:F(e,"full"),fields:re(e,"fields"),sort:re(e,"sort"),order:re(e,"order"),tree:F(e,"tree"),treeDepth:re(e,"treeDepth"),filterAcMissing:F(e,"filterAcMissing"),filterEstimatesMissing:ku(e,["filterEstimatesMissing","filterEstimateMissing"]),filterResolutionMissing:F(e,"filterResolutionMissing"),filterMetadataMissing:F(e,"filterMetadataMissing"),...vy(e)};return Su(t,e),t}(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]="fb87ff0c-88c8-52f9-9dc3-f37fec674425")}catch{}})();var by=Symbol("pm.mcp-mutation-transport"),ky=new Set(["activity","aggregate","context","contracts","deps","files-discover","files-lookup","get","graph","health","history","history-attest","list","next","search","stats","telemetry","validate"]);function Ei(e){return by in e}function xi(e,t){return Ei(e)?hd(t):ns(e,t)}function j$(e,t,n=[]){let r=ns(e,{...e,...t});for(let i of n)Reflect.deleteProperty(r,i);return r}function O(e,t){let n=e[t];return typeof n=="string"&&n.trim().length>0?n:void 0}function se(e,t){let n=e[t];return typeof n=="string"?n.trim().length>0?n:void 0:typeof n=="number"&&Number.isFinite(n)?String(n):void 0}function F$(e,t){let n=e[t];return typeof n=="string"?n:typeof n=="number"&&Number.isFinite(n)?String(n):void 0}function bn(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function bs(e,t){if(typeof e=="number"){if(!Number.isInteger(e))throw new y(`${t} must be a finite integer.`,g.USAGE);return e}if(typeof e=="string"&&e.trim().length>0){let n=Number(e);if(!Number.isInteger(n))throw new y(`${t} must be a finite integer.`,g.USAGE);return n}}function U$(e,t){return typeof e.limit=="number"&&Number.isFinite(e.limit)?e.limit:typeof t.limit=="number"&&Number.isFinite(t.limit)?t.limit:O(e,"limit")??O(t,"limit")}function z$(e){let t=O(e,"outputFormat");return{json:!0,quiet:!0,author:O(e,"author"),path:O(e,"path"),noExtensions:e.noExtensions===!0||e.no_extensions===!0,noPager:!0,outputInclude:O(e,"outputInclude"),outputLimit:se(e,"outputLimit"),outputBudget:se(e,"outputBudget"),outputSession:O(e,"outputSession"),outputCursor:O(e,"outputCursor"),outputFormat:t==="json"||t==="toon"?t:void 0}}var Sy=new Set(["tags","blockedBy","blocked_by","skills","fields"]),Au=new Set(["comment","note","learning","reminder","event","dep","depRemove","dep_remove","file","doc","test","unset","addGlob","add_glob","migrate","envSet","env_set","envClear","env_clear"]),Ey=new Set([...Au].filter(e=>e!=="file")),xy=new Set(["files","files-discover","docs","test","test-all"]),Ru=new Set(["comments","notes","learnings"]);function Iy(e,t){if(!(!Ru.has(e)||!Object.prototype.hasOwnProperty.call(t,"file")))throw new y(`MCP ${e} does not accept options.file. Pass annotation text in options.add instead.`,g.USAGE,{code:"mcp_annotation_file_unavailable",required:"Pass annotation text as JSON data; MCP annotation actions cannot read server-local files."})}var Ay=new Set(["claim","release","start-task","pause-task","close-task"]),Ry={"history-attest":["verify","output","hashAlgorithm"],list:["status","type","tag","priority","limit","offset"],search:["mode","status","type","tag","priority","limit"],create:["title","type","status","description","body","priority","tags","parent","createMode","create_mode","allowMissingParent","allowDuplicate"],update:["parent","allowMissingParent","completedAt"],copy:["allowDuplicate"],close:["duplicateOf","completedAt","releaseAssignment"],claim:["start","next","ifAvailable"],release:["pause"],comments:["ifAbsent"],notes:["ifAbsent"],learnings:["ifAbsent"],extension:["dryRun"],package:["dryRun"],install:["dryRun"],upgrade:["scope","dryRun","cliOnly","packagesOnly","repair","tag","packageName"],append:["body"]},Cy=["outputInclude","outputLimit","outputBudget","outputFormat","outputSession","outputCursor"];function Cu(e,t=""){let n={},r=xy.has(t),i=t==="files"||t==="files-discover"||t==="docs",o=Ru.has(t)?Ey:Au;for(let[s,a]of Object.entries(e)){if(Array.isArray(a)&&Sy.has(s)){n[s]=a.join(",");continue}if(s==="note"&&i){n[s]=a;continue}if(typeof a=="string"&&o.has(s)){n[s]=[a];continue}if(typeof a=="string"&&r&&(s==="add"||s==="remove")){n[s]=[a];continue}n[s]=a}return n}function Ty(e,t,n){let r=O(e,"author");return r!==void 0?r:n!==void 0&&Ay.has(n)?O(e,"assignee")??O(t,"assignee"):void 0}function $y(e,t){return t!==void 0&&e.author===void 0?{...e,author:t}:e}function H$(e,t){let n=bn(e.options)?e.options:void 0,r=Zc(e.options),i={},o=c=>{r[c]!==void 0||e[c]===void 0||(i[c]=e[c])};for(let c of Ry[t??""]??[])o(c);for(let c of Cy)o(c);t!==void 0&&Ei(e)&&Iy(t,r);let s=Cu({...i,...r},t);if(t==="history-attest"&&Ei(e)&&(s.output!==void 0||typeof s.verify=="string"))throw new y("MCP history attest does not accept server-local proof paths. Export the returned JSON bundle and pass that JSON object as verify.",g.USAGE);let a=Ei(e)?e:n??e;return xi(a,$y(s,Ty(e,s,t)))}function W$(e){if(e.addNote===void 0)return e;let t={...e};return t.note===void 0&&typeof t.addNote=="string"&&(t.note=t.addNote),delete t.addNote,t}function G$(e){let t={...e};return t.discoveryNote!==void 0&&t.note===void 0&&typeof t.discoveryNote=="string"&&(t.note=t.discoveryNote),delete t.discover,delete t.discoveryNote,t}function Oy(e){let t=[],n=!0;for(let r of e.trim().toLowerCase()){if(r>="a"&&r<="z"||r>="0"&&r<="9"){t.push(r),n=!1;continue}n||(t.push("-"),n=!0)}return t.at(-1)==="-"&&t.pop(),t.join("")}function q$(e){return!ky.has(Oy(e))}function B$(e){return e.trim().toLowerCase().split(/\s+/).filter(Boolean).join(" ")}function ks(e){return Array.isArray(e)?e.map(t=>String(t)).filter(t=>t.length>0):[]}function V$(e,t){let n=new Set(["action","args","author","cwd","fullChangedFields","id","options","path","query","reason","target"]),r={};for(let[o,s]of Object.entries(e))n.has(o)||(r[o]=s);let i={...r,...t};return delete i.args,i}function J$(e,t){let n=xi(t??{},{...t});return{changedFields:e.fullChangedFields===!0?"full":"compact",idOnly:e.idOnly===!0,runnerOptions:n}}function vs(e){return{type:se(e,"filterType"),tag:se(e,"filterTag"),priority:se(e,"filterPriority"),deadlineBefore:se(e,"filterDeadlineBefore"),deadlineAfter:se(e,"filterDeadlineAfter"),updatedAfter:se(e,"filterUpdatedAfter"),updatedBefore:se(e,"filterUpdatedBefore"),createdAfter:se(e,"filterCreatedAfter"),createdBefore:se(e,"filterCreatedBefore"),ids:rs(e.ids),assignee:se(e,"filterAssignee"),assigneeFilter:se(e,"filterAssigneeFilter")??se(e,"filterAssignee_filter"),parent:se(e,"filterParent"),sprint:se(e,"filterSprint"),release:se(e,"filterRelease"),limit:se(e,"limit"),offset:se(e,"offset")}}function ws(e){if(typeof e=="string"&&e.trim().length>0)return e;if(Array.isArray(e))return ks(e)}function Si(e){if(typeof e=="number"&&Number.isFinite(e)||typeof e=="string"&&e.trim().length>0)return e}function K$(e){let t=ws(e.kind),n=ws(e.exemptIsolate),r=ws(e.exemptIsolateType);return{...t===void 0?{}:{kind:t},maxDepth:Si(e.maxDepth),limit:Si(e.limit),after:O(e,"after"),direction:O(e,"direction"),maxPaths:Si(e.maxPaths),sample:Si(e.sample),...n===void 0?{}:{exemptIsolate:n},...r===void 0?{}:{exemptIsolateType:r},saveBaseline:e.saveBaseline===!0,rebuild:e.rebuild===!0,clear:e.clear===!0,summary:e.summary===!0,...e.full===!0?{full:!0}:{}}}function Tu(e){let t=xu(e);return e.ids!==void 0&&(t.ids=rs(e.ids)),t}function Y$(e){return{status:O(e,"filterStatus"),list:bn(e.list)?Tu(e.list):vs(e),reason:O(e,"reason"),resolution:O(e,"resolution"),expectedResult:O(e,"expectedResult")??O(e,"expected_result")??O(e,"expected"),actualResult:O(e,"actualResult")??O(e,"actual_result")??O(e,"actual"),validateClose:O(e,"validateClose")??O(e,"validate_close"),author:O(e,"author"),message:O(e,"message"),force:e.force===!0?!0:void 0,dryRun:e.dryRun===!0||e.dry_run===!0?!0:void 0,rollback:O(e,"rollback"),checkpoint:e.checkpoint===!1||e.noCheckpoint===!0||e.no_checkpoint===!0?!1:void 0}}var Dy=new Set(["filterStatus","filterType","filterTag","filterPriority","filterDeadlineBefore","filterDeadlineAfter","filterUpdatedAfter","filterUpdatedBefore","filterCreatedAfter","filterCreatedBefore","filterAssignee","filterAssigneeFilter","filterAssignee_filter","filterParent","filterSprint","filterRelease","ids","list","update","limit","offset","dryRun","dry_run","rollback","checkpoint","noCheckpoint","no_checkpoint"]);function Iu(e){let t={};for(let[n,r]of Object.entries(e))Dy.has(n)||(t[n]=r);return $u(t)}function $u(e){let t=Cu(e,"update-many");for(let n of Xr)for(let r of n.keys){let i=t[r];typeof i=="number"&&Number.isFinite(i)&&(t[r]=String(i))}return Eu(t)}function X$(e){if(bn(e.list)||bn(e.update)){let t=bn(e.update)?e.update:Iu(e),n=xi(e,$u(t));return{status:se(e,"filterStatus"),list:bn(e.list)?Tu(e.list):vs(e),update:_d(t,n),dryRun:e.dryRun===!0||e.dry_run===!0?!0:void 0,rollback:O(e,"rollback"),checkpoint:e.checkpoint===!1||e.noCheckpoint===!0||e.no_checkpoint===!0?!1:void 0}}return{status:se(e,"filterStatus"),list:vs(e),update:xi(e,Iu(e)),dryRun:e.dryRun===!0||e.dry_run===!0?!0:void 0,rollback:O(e,"rollback"),checkpoint:e.checkpoint===!1||e.noCheckpoint===!0||e.no_checkpoint===!0?!1:void 0}}(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]="fd8c4c35-98bb-5f3b-927d-8696125af703")}catch{}})();function Le(e,t){throw new y(e,g.USAGE,t)}var Py="2026-07-15T06:22:12.276Z",Ny=Date.parse(Py),Ly=[["attributed","attributed"],["legacy_unknown","actionable_unknown"]],Ou=e=>typeof e=="string"?e:"",Pu=e=>{let t=e??{},n=Ou(t.author).trim().toLowerCase(),r=Number(["","unknown"].includes(n)),i=+(Date.parse(Ou(t.ts))>=Ny);return Ly[r][i]};function Nu(e,t,n=20,r=new Set,i=!1){let o=[],s=[],a={legacy_unknown:0,actionable_unknown:0},c=Math.max(0,n),l=0,d=0,u=0;for(let[m,f]of t.split(/\r?\n/).entries()){let p;try{p=JSON.parse(f)}catch{continue}l+=1;let _=Pu(p);if(_!=="attributed"){if(d+=1,_==="actionable_unknown"&&r.has(`${e}:${m+1}`)){u+=1;continue}a[_]+=1,i&&_==="actionable_unknown"&&s.push({item_id:e,line:m+1}),o.length<c&&o.push({item_id:e,line:m+1})}}return{checked_events:l,unknown_event_count:d,legacy_unknown_event_count:a.legacy_unknown,actionable_unknown_event_count:a.actionable_unknown,acknowledged_actionable_event_count:u,samples:o,samples_truncated:a.legacy_unknown+a.actionable_unknown>o.length,actionable_events:s}}var aO=(e,t,n=20,r=new Set)=>Nu(e,t,n,r);function Lu(e){let t=new Set;for(let n of e.split(/\r?\n/)){let r;try{r=JSON.parse(n)}catch{continue}let o=(typeof r=="object"&&r!==null&&typeof r.context=="object"&&r.context!==null?r.context:{}).author_acknowledgment;if(!(typeof o!="object"||o===null||!Array.isArray(o.events)))for(let s of o.events)typeof s=="object"&&s!==null&&typeof s.item_id=="string"&&Number.isSafeInteger(s.line)&&t.add(`${s.item_id}:${String(s.line)}`)}return t}var sr=async(e,t=20,n=!1)=>{let r=or.join(e,"history"),i;try{i=(await ir.readdir(r)).filter(w=>w.endsWith(".jsonl")).sort((w,v)=>w.localeCompare(v))}catch{i=[]}let o=new Set,s=[],a=[],c=0,l=0,d=0,u=0,m=0,f=0,p="_workspace.jsonl",_=new Set;if(i.includes(p))try{_=Lu(await ir.readFile(or.join(r,p),"utf8"))}catch{_=new Set}for(let w of i){let v;try{v=await ir.readFile(or.join(r,w),"utf8")}catch{continue}let k=w.slice(0,-6),S=Nu(k,v,t-s.length,_,n);c+=1,l+=S.checked_events,d+=S.unknown_event_count,u+=S.legacy_unknown_event_count,m+=S.actionable_unknown_event_count,f+=S.acknowledged_actionable_event_count,S.unknown_event_count>0&&o.add(k),s.push(...S.samples),n&&a.push(...S.actionable_events)}let h=u+m;return{checked_streams:c,checked_events:l,unknown_event_count:d,legacy_unknown_event_count:u,actionable_unknown_event_count:m,acknowledged_actionable_event_count:f,affected_item_ids:[...o].sort((w,v)=>w.localeCompare(v)),samples:s,samples_truncated:h>s.length,...n?{actionable_events:a}:{}}};function My(e){return[...new Map(e.map(t=>[`${t.item_id}:${t.line}`,{item_id:t.item_id,line:t.line}])).values()].sort((t,n)=>t.item_id.localeCompare(n.item_id)||t.line-n.line)}async function jy(e){try{return Lu(await ir.readFile(or.join(e,"history","_workspace.jsonl"),"utf8"))}catch{return new Set}}function Fy(e){return(e.item_id===fe||/^[a-z0-9][a-z0-9-]*$/iu.test(e.item_id))&&Number.isSafeInteger(e.line)&&e.line>=1}function Uy(e,t,n){let r=n[e.line-1]??"",i;try{i=JSON.parse(r)}catch{Le(`Unknown-author acknowledgment target ${e.item_id}:${e.line} is not readable.`,{code:"history_author_acknowledge_target_unreadable"})}return Pu(i)!=="actionable_unknown"&&Le(`Author acknowledgment target ${e.item_id}:${e.line} is not an actionable unknown-author event.`,{code:"history_author_acknowledge_target_not_actionable"}),{...e,source_event_hash:Du("sha256").update(r).digest("hex"),disposition:t.has(`${e.item_id}:${e.line}`)?"already_acknowledged":"actionable"}}async function Mu(e,t,n){let r=t.events??[],i=+(t.all_actionable===!0)+ +(r.length>0);i===0&&Le("Specify exactly one selector: events or all_actionable.",{code:"history_author_acknowledge_selector_required"}),i>1&&Le("Author acknowledgment accepts either explicit events or all_actionable, not both.",{code:"history_author_acknowledge_selector_conflict"}),(!Number.isSafeInteger(n)||n<0)&&Le("Author acknowledgment coordinate_limit must be a non-negative integer.",{code:"history_author_acknowledge_preview_limit_invalid"});let o=My(t.all_actionable===!0?(await sr(e,0,!0)).actionable_events:r),s=await jy(e),a=new Map;for(let m of o)if(Fy(m)||Le(`Unknown-author acknowledgment target ${m.item_id}:${m.line} is not readable.`,{code:"history_author_acknowledge_target_unreadable"}),!a.has(m.item_id))try{a.set(m.item_id,(await ir.readFile(or.join(e,"history",`${m.item_id}.jsonl`),"utf8")).split(/\r?\n/u))}catch{Le(`Unknown-author acknowledgment target ${m.item_id}:${m.line} is not readable.`,{code:"history_author_acknowledge_target_unreadable"})}let c=o.map(m=>Uy(m,s,a.get(m.item_id))),l=t.all_actionable===!0?"all_actionable":"events",d=Du("sha256").update(JSON.stringify({version:1,selection:l,coordinates:c})).digest("hex"),u=c.filter(({disposition:m})=>m==="actionable").length;return{plan:{selection:{kind:l},selected_count:c.length,actionable_count:u,already_acknowledged_count:c.length-u,omitted_count:Math.max(0,c.length-n),coordinates:c.slice(0,n),plan_fingerprint:d},completeCoordinates:c}}async function cO(e,t,n=50){return(await Mu(e,t,n)).plan}function zy(e,t){let n=e.length>0;return n&&t&&Le("Specify exactly one selector: repeat --event or pass --all-actionable.",{code:"history_author_acknowledge_selector_conflict",required:"Exactly one of --event or --all-actionable",examples:['pm history-author-acknowledge --event pm-a1b2:4 --attributed-author agent --reviewer maintainer --reason "Verified provenance"','pm history-author-acknowledge --all-actionable --attributed-author import-agent --reviewer maintainer --reason "Reviewed the complete actionable set"']}),!n&&!t&&Le("Specify exactly one selector: repeat --event or pass --all-actionable.",{code:"history_author_acknowledge_selector_required",required:"Exactly one of --event or --all-actionable",examples:['pm history-author-acknowledge --event pm-a1b2:4 --attributed-author agent --reviewer maintainer --reason "Verified provenance"','pm history-author-acknowledge --all-actionable --attributed-author import-agent --reviewer maintainer --reason "Reviewed the complete actionable set"']}),{events:Hy(e),all_actionable:t}}function Hy(e){return e.map(t=>{let n=t.lastIndexOf(":"),r=t.slice(0,n).trim(),i=Number(t.slice(n+1)),o=r===fe||/^[a-z0-9][a-z0-9-]*$/iu.test(r);return(n<1||!o||!Number.isSafeInteger(i)||i<1)&&Le(`history-author-acknowledge --event expects <item-id>:<one-based-line>, received "${t}".`,{code:"history_author_acknowledge_target_unreadable"}),{item_id:r,line:i}})}function lO(e,t){let n=zy(ks(t.historyEvent),t.allActionable===!0||t.all_actionable===!0);return Wy(e,{events:n.events,all_actionable:n.all_actionable,dry_run:t.dryRun===!0||t.dry_run===!0,plan_fingerprint:O(t,"planFingerprint")??O(t,"plan_fingerprint"),coordinate_limit:typeof t.limit=="number"?t.limit:typeof t.limit=="string"?Number(t.limit):void 0,attributed_author:O(t,"attributedAuthor")??O(t,"attributed_author")??void 0,reviewer:O(t,"reviewer"),reason:O(t,"reason")})}async function Wy(e,t){let n=t.reviewer?.trim()??"",r=t.attributed_author?.trim()??"",i=t.reason?.trim()??"",o=await Mu(e,t,t.coordinate_limit??50);if(t.dry_run===!0)return{dry_run:!0,mutated:!1,acknowledged:0,outcome:"preview",exit_code:g.SUCCESS,plan:o.plan};if([n.length>0,n.toLowerCase()!=="unknown",r.length>0,r.toLowerCase()!=="unknown",i.length>0].includes(!1)&&Le("Author acknowledgment requires events, reviewer, attributed_author, and reason.",{code:"history_author_acknowledge_required_values_missing"}),t.plan_fingerprint?.trim()||Le("Author acknowledgment apply requires plan_fingerprint from a fresh dry-run preview.",{code:"history_author_acknowledge_plan_fingerprint_required",recovery:{suggested_retry:"Rerun history-author-acknowledge with --dry-run, then pass --plan-fingerprint <value>."}}),t.plan_fingerprint.trim()!==o.plan.plan_fingerprint)throw new y("Author acknowledgment selection changed after preview; no history was mutated.",g.CONFLICT,{code:"history_author_acknowledge_plan_conflict",recovery:{suggested_retry:"Rerun history-author-acknowledge with --dry-run and apply the fresh plan_fingerprint."}});let a=o.completeCoordinates.filter(({disposition:u})=>o.plan.selection.kind==="events"||u==="actionable").map(({item_id:u,line:m})=>({item_id:u,line:m}));if(a.length===0)return{dry_run:!1,mutated:!1,acknowledged:0,outcome:"no_effect",exit_code:g.NO_EFFECT,plan:o.plan};let c=await T(e),l=await oi({pmRoot:e,op:"history:author-acknowledge",author:n,context:{author_acknowledgment:{events:a,attributed_author:r}},message:i,lockTtlSeconds:c.locks.ttl_seconds,lockWaitMs:c.locks.wait_ms}),d=o.plan.actionable_count>0&&o.plan.already_acknowledged_count>0?{outcome:"partial_effect",exit_code:g.PARTIAL_EFFECT}:{outcome:"effect",exit_code:g.SUCCESS};return{dry_run:!1,mutated:!0,acknowledged:a.length,...d,plan:o.plan,history_path:l.historyPath}}import{execFile as Gy}from"node:child_process";import ju 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]="1d4534aa-5a56-5a76-8971-aa3ba6c52e59")}catch{}})();function Fu(e,t){return new Promise((n,r)=>{Gy("git",[...t],{cwd:e,encoding:"utf8",maxBuffer:4*1024*1024},(i,o)=>{i?r(i):n(o)})})}function Uu(e){if(e&&(!Number.isSafeInteger(e.start)||!Number.isSafeInteger(e.end)||e.start<1||e.end<e.start))throw new RangeError("Source line range must be inclusive positive integers with end >= start.")}function pO(e){let t=/^(\d+):(\d+)$/u.exec(e.trim()),n=t?{start:Number(t[1]),end:Number(t[2])}:void 0;if(Uu(n),!n)throw new RangeError("Source line range must use start:end.");return n}function qy(e){let t=new Map;for(let n of e.split(`
|
|
6
|
+
`,result:s}}});return{policy_result:!0,action:e,changed:i.changed,result:i.result}}async function gy(e,t,n){let r,i=await Td({...n,id:e,op:"policy_approve",message:t.message,resolveHistoryContext:()=>({workflow_approval:r}),async mutate(o){let a=(await It(n.pmRoot)).policies.find(c=>c.id===t.policy);if(!a||a.rule.kind!=="approval")throw new y("--policy must name an approval rule.",g.USAGE);if(!a.rule.authors.includes(n.author))throw new y("This actor is not a declared approver.",g.CONFLICT);return await Ed(n.pmRoot,o.metadata.id),r={policy_id:a.id,policy_fingerprint:Il(a),content_fingerprint:Al(a,{...o.metadata,body:o.body})},{changedFields:[]}}});return{policy_result:!0,action:"policy-approve",changed:!0,result:{id:i.item.id,...r,warnings:i.warnings}}}function yy(e,t){let n=bu(t),r=Jo({...n,id:n.id===void 0?e:n.id});if(e!==void 0&&e.trim()!==r.id)throw new y("Policy id operand does not match definition.id.",g.USAGE,{required:"Use the same policy id operand and definition.id, or supply only one of them.",nextSteps:["Omit the policy id operand to use definition.id, or omit definition.id to use the operand."]});return r}async function s$(e,t,n={},r={}){if(!qr.includes(e))throw new y("Unknown workflow policy action.",g.USAGE);if(e==="policy-presets")return{policy_result:!0,action:e,changed:!1,result:hy()};let i=await _y(r,n.author);if(e==="policies")return{policy_result:!0,action:e,changed:!1,result:await It(i.pmRoot)};if(e==="policy-put"){let d=yy(t,n.definition);return vu(e,d.id,{...n,definition:d},i)}if(!t?.trim())throw new y(`schema ${e} requires an operand.`,g.USAGE);if(["policy-remove","policy-mode"].includes(e))return vu(e,t,n,i);if(e==="policy-approve"){if(n.dryRun)throw new y("Use policy-check to preview; policy-approve records an approval.",g.USAGE);return gy(t,n,i)}let o=G(i.settings,H()),s=await Pe(i.pmRoot,t,i.settings.id_prefix,i.settings.item_format,o.type_to_folder);if(!s)throw new y(`Item ${t} not found.`,g.NOT_FOUND);let{document:a}=await Ne(s,{schema:i.settings.schema}),c={...a.metadata,body:a.body},l=n.definition===void 0?c:{...c,...bu(n.definition)};if(l.id!==c.id)throw new y("Policy preview cannot change the item id.",g.USAGE);return{policy_result:!0,action:e,changed:!1,result:await xd(i.pmRoot,await It(i.pmRoot),{operation:"update",author:i.author,before:c,after:l,completeness_only:n.definition===void 0})}}import{createHash as Du}from"node:crypto";import ir from"node:fs/promises";import or from"node:path";import{Option as I$}from"commander";(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]="7ffd5046-9154-52e7-94ce-192b07b8ceae")}catch{}})();function wy(e,t){let n=[],r=new Set;for(let i of t.keys){if(!Object.hasOwn(e,i))continue;let o=e[i];if(o!=null){if(typeof o=="string"){n.push(o);continue}if(!Array.isArray(o)||!o.every(s=>typeof s=="string"))return;r.has(o)||(r.add(o),n.push(...o))}}return n.length>0?n.join("; "):void 0}function ki(e,t){return e.find(r=>r.target===t)??{target:t,keys:[t]}}function F(e,t){return e[t]===!0?!0:void 0}function ut(e,t){return e[t]===!1?!0:void 0}function ku(e,t){return t.some(n=>e[n]===!0)?!0:void 0}function Su(e,t){for(let[n,r]of Object.entries(t))n==="__proto__"||n==="constructor"||n==="prototype"||Object.hasOwn(e,n)||(e[n]=r)}function Eu(e){let t=i=>zo(e,ki(Xr,i)),n=i=>ll(e,ki(Xo,i)),r={title:t("title"),description:t("description"),body:t("body"),status:t("status"),closeReason:t("closeReason"),priority:t("priority"),type:t("type"),tags:t("tags"),addTags:n("addTags"),removeTags:n("removeTags"),deadline:t("deadline"),estimatedMinutes:t("estimatedMinutes"),acceptanceCriteria:wy(e,ki(Xo,"acceptanceCriteria")),addAc:n("addAc"),removeAc:n("removeAc"),definitionOfReady:t("definitionOfReady"),order:t("order"),rank:t("rank"),goal:t("goal"),objective:t("objective"),value:t("value"),impact:t("impact"),outcome:t("outcome"),whyNow:t("whyNow"),author:t("author"),message:t("message"),force:!!e.force,ownershipMetadataBypass:e.ownershipMetadataBypass===!0?!0:void 0,ownershipDependencyBypass:e.ownershipDependencyBypass===!0?!0:void 0,assignee:t("assignee"),parent:t("parent"),allowUnresolvedDeps:ku(e,["allowUnresolvedDeps","allow_unresolved_deps"])===!0,reviewer:t("reviewer"),risk:t("risk"),confidence:t("confidence"),sprint:t("sprint"),release:t("release"),blockedBy:t("blockedBy"),blockedReason:t("blockedReason"),unblockNote:t("unblockNote"),reporter:t("reporter"),severity:t("severity"),environment:t("environment"),reproSteps:t("reproSteps"),resolution:t("resolution"),expectedResult:t("expectedResult"),actualResult:t("actualResult"),affectedVersion:t("affectedVersion"),fixedVersion:t("fixedVersion"),component:t("component"),regression:e.regression===!0?"true":t("regression"),customerImpact:t("customerImpact"),dep:n("dep"),depRemove:n("depRemove"),replaceDeps:F(e,"replaceDeps"),replaceTests:F(e,"replaceTests"),replaceFiles:F(e,"replaceFiles"),replaceDocs:F(e,"replaceDocs"),comment:n("comment"),note:n("note"),learning:n("learning"),file:n("file"),test:n("test"),doc:n("doc"),reminder:n("reminder"),event:n("event"),typeOption:n("typeOption"),field:n("field"),unset:n("unset"),clearDeps:F(e,"clearDeps"),clearComments:F(e,"clearComments"),clearNotes:F(e,"clearNotes"),clearLearnings:F(e,"clearLearnings"),clearFiles:F(e,"clearFiles"),clearTests:F(e,"clearTests"),clearDocs:F(e,"clearDocs"),clearReminders:F(e,"clearReminders"),clearEvents:F(e,"clearEvents"),clearTypeOptions:F(e,"clearTypeOptions")};return Su(r,e),r}function re(e,t){let n=ki(cl,t),r=zo(e,n);if(r!==void 0)return r;for(let i of n.keys){let o=e[i];if(Array.isArray(o)){let s=o.filter(a=>typeof a=="string");if(s.length>0)return s.join(",")}if(t==="ids"&&typeof o=="string")return o;if(typeof o=="number"&&Number.isFinite(o))return String(o)}}function vy(e){let t=F(e,"filterFilesMissing"),n=F(e,"filterDocsMissing");return{filterReviewerMissing:F(e,"filterReviewerMissing"),filterRiskMissing:F(e,"filterRiskMissing"),filterConfidenceMissing:F(e,"filterConfidenceMissing"),filterSprintMissing:F(e,"filterSprintMissing"),filterReleaseMissing:F(e,"filterReleaseMissing"),hasNotes:F(e,"hasNotes"),hasLearnings:F(e,"hasLearnings"),hasFiles:F(e,"hasFiles"),hasDocs:F(e,"hasDocs"),hasTests:F(e,"hasTests"),hasComments:F(e,"hasComments"),hasDeps:F(e,"hasDeps"),hasBody:F(e,"hasBody"),hasLinkedCommand:F(e,"hasLinkedCommand"),noNotes:ut(e,"notes"),noLearnings:ut(e,"learnings"),noFiles:ut(e,"files")??t,filterFilesMissing:t,noDocs:ut(e,"docs")??n,filterDocsMissing:n,noTests:ut(e,"tests"),noComments:ut(e,"comments"),noDeps:ut(e,"deps"),emptyBody:F(e,"emptyBody"),noLinkedCommand:ut(e,"linkedCommand")}}function xu(e){let t={status:re(e,"status"),type:re(e,"type"),tag:re(e,"tag"),priority:re(e,"priority"),deadlineBefore:re(e,"deadlineBefore"),deadlineAfter:re(e,"deadlineAfter"),updatedAfter:re(e,"updatedAfter"),updatedBefore:re(e,"updatedBefore"),createdAfter:re(e,"createdAfter"),createdBefore:re(e,"createdBefore"),today:F(e,"today"),recent:F(e,"recent"),ids:re(e,"ids"),assignee:re(e,"assignee"),assigneeFilter:re(e,"assigneeFilter"),parent:re(e,"parent"),sprint:re(e,"sprint"),release:re(e,"release"),limit:re(e,"limit"),offset:re(e,"offset"),noTruncate:ut(e,"truncate"),includeBody:F(e,"includeBody"),strictRead:F(e,"strictRead"),compact:F(e,"compact"),brief:F(e,"brief"),full:F(e,"full"),fields:re(e,"fields"),sort:re(e,"sort"),order:re(e,"order"),tree:F(e,"tree"),treeDepth:re(e,"treeDepth"),filterAcMissing:F(e,"filterAcMissing"),filterEstimatesMissing:ku(e,["filterEstimatesMissing","filterEstimateMissing"]),filterResolutionMissing:F(e,"filterResolutionMissing"),filterMetadataMissing:F(e,"filterMetadataMissing"),...vy(e)};return Su(t,e),t}(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]="17883200-00ba-51ef-8a6b-ab0ce2ad2029")}catch{}})();var by=Symbol("pm.mcp-mutation-transport"),ky=new Set(["activity","aggregate","context","contracts","deps","files-discover","files-lookup","get","graph","health","history","history-attest","list","next","search","stats","telemetry","validate"]);function Ei(e){return by in e}function xi(e,t){return Ei(e)?hd(t):ns(e,t)}function j$(e,t,n=[]){let r=ns(e,{...e,...t});for(let i of n)Reflect.deleteProperty(r,i);return r}function O(e,t){let n=e[t];return typeof n=="string"&&n.trim().length>0?n:void 0}function se(e,t){let n=e[t];return typeof n=="string"?n.trim().length>0?n:void 0:typeof n=="number"&&Number.isFinite(n)?String(n):void 0}function F$(e,t){let n=e[t];return typeof n=="string"?n:typeof n=="number"&&Number.isFinite(n)?String(n):void 0}function bn(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}function bs(e,t){if(typeof e=="number"){if(!Number.isInteger(e))throw new y(`${t} must be a finite integer.`,g.USAGE);return e}if(typeof e=="string"&&e.trim().length>0){let n=Number(e);if(!Number.isInteger(n))throw new y(`${t} must be a finite integer.`,g.USAGE);return n}}function U$(e,t){return typeof e.limit=="number"&&Number.isFinite(e.limit)?e.limit:typeof t.limit=="number"&&Number.isFinite(t.limit)?t.limit:O(e,"limit")??O(t,"limit")}function z$(e){let t=O(e,"outputFormat");return{json:!0,quiet:!0,author:O(e,"author"),path:O(e,"path"),noExtensions:e.noExtensions===!0||e.no_extensions===!0,noPager:!0,outputInclude:O(e,"outputInclude"),outputLimit:se(e,"outputLimit"),outputBudget:se(e,"outputBudget"),outputSession:O(e,"outputSession"),outputCursor:O(e,"outputCursor"),outputFormat:t==="json"||t==="toon"?t:void 0}}var Sy=new Set(["tags","blockedBy","blocked_by","skills","fields"]),Au=new Set(["comment","note","learning","reminder","event","dep","depRemove","dep_remove","file","doc","test","unset","addGlob","add_glob","migrate","envSet","env_set","envClear","env_clear"]),Ey=new Set([...Au].filter(e=>e!=="file")),xy=new Set(["files","files-discover","docs","test","test-all"]),Ru=new Set(["comments","notes","learnings"]);function Iy(e,t){if(!(!Ru.has(e)||!Object.prototype.hasOwnProperty.call(t,"file")))throw new y(`MCP ${e} does not accept options.file. Pass annotation text in options.add instead.`,g.USAGE,{code:"mcp_annotation_file_unavailable",required:"Pass annotation text as JSON data; MCP annotation actions cannot read server-local files."})}var Ay=new Set(["claim","release","start-task","pause-task","close-task"]),Ry={"history-attest":["verify","output","hashAlgorithm"],list:["status","type","tag","priority","limit","offset"],search:["mode","status","type","tag","priority","limit"],create:["title","type","status","description","body","priority","tags","parent","createMode","create_mode","allowMissingParent","allowDuplicate"],update:["parent","allowMissingParent","completedAt"],copy:["allowDuplicate"],close:["duplicateOf","completedAt","releaseAssignment"],claim:["start","next","ifAvailable"],release:["pause"],comments:["ifAbsent"],notes:["ifAbsent"],learnings:["ifAbsent"],extension:["dryRun"],package:["dryRun"],install:["dryRun"],upgrade:["scope","dryRun","cliOnly","packagesOnly","repair","tag","packageName"],append:["body"]},Cy=["outputInclude","outputLimit","outputBudget","outputFormat","outputSession","outputCursor"];function Cu(e,t=""){let n={},r=xy.has(t),i=t==="files"||t==="files-discover"||t==="docs",o=Ru.has(t)?Ey:Au;for(let[s,a]of Object.entries(e)){if(Array.isArray(a)&&Sy.has(s)){n[s]=a.join(",");continue}if(s==="note"&&i){n[s]=a;continue}if(typeof a=="string"&&o.has(s)){n[s]=[a];continue}if(typeof a=="string"&&r&&(s==="add"||s==="remove")){n[s]=[a];continue}n[s]=a}return Object.assign(n,Object.fromEntries(Object.getOwnPropertySymbols(e).map(s=>[s,Reflect.get(e,s)]))),n}function Ty(e,t,n){let r=O(e,"author");return r!==void 0?r:n!==void 0&&Ay.has(n)?O(e,"assignee")??O(t,"assignee"):void 0}function $y(e,t){return t!==void 0&&e.author===void 0?{...e,author:t}:e}function H$(e,t){let n=bn(e.options)?e.options:void 0,r=Zc(e.options),i={},o=c=>{r[c]!==void 0||e[c]===void 0||(i[c]=e[c])};for(let c of Ry[t??""]??[])o(c);for(let c of Cy)o(c);t!==void 0&&Ei(e)&&Iy(t,r);let s=Cu({...i,...r},t);if(t==="history-attest"&&Ei(e)&&(s.output!==void 0||typeof s.verify=="string"))throw new y("MCP history attest does not accept server-local proof paths. Export the returned JSON bundle and pass that JSON object as verify.",g.USAGE);let a=Ei(e)?e:n??e;return xi(a,$y(s,Ty(e,s,t)))}function W$(e){if(e.addNote===void 0)return e;let t={...e};return t.note===void 0&&typeof t.addNote=="string"&&(t.note=t.addNote),delete t.addNote,t}function G$(e){let t={...e};return t.discoveryNote!==void 0&&t.note===void 0&&typeof t.discoveryNote=="string"&&(t.note=t.discoveryNote),delete t.discover,delete t.discoveryNote,t}function Oy(e){let t=[],n=!0;for(let r of e.trim().toLowerCase()){if(r>="a"&&r<="z"||r>="0"&&r<="9"){t.push(r),n=!1;continue}n||(t.push("-"),n=!0)}return t.at(-1)==="-"&&t.pop(),t.join("")}function q$(e){return!ky.has(Oy(e))}function B$(e){return e.trim().toLowerCase().split(/\s+/).filter(Boolean).join(" ")}function ks(e){return Array.isArray(e)?e.map(t=>String(t)).filter(t=>t.length>0):[]}function V$(e,t){let n=new Set(["action","args","author","cwd","fullChangedFields","id","options","path","query","reason","target"]),r={};for(let[o,s]of Object.entries(e))n.has(o)||(r[o]=s);let i={...r,...t};return delete i.args,i}function J$(e,t){let n=xi(t??{},{...t});return{changedFields:e.fullChangedFields===!0?"full":"compact",idOnly:e.idOnly===!0,runnerOptions:n}}function vs(e){return{type:se(e,"filterType"),tag:se(e,"filterTag"),priority:se(e,"filterPriority"),deadlineBefore:se(e,"filterDeadlineBefore"),deadlineAfter:se(e,"filterDeadlineAfter"),updatedAfter:se(e,"filterUpdatedAfter"),updatedBefore:se(e,"filterUpdatedBefore"),createdAfter:se(e,"filterCreatedAfter"),createdBefore:se(e,"filterCreatedBefore"),ids:rs(e.ids),assignee:se(e,"filterAssignee"),assigneeFilter:se(e,"filterAssigneeFilter")??se(e,"filterAssignee_filter"),parent:se(e,"filterParent"),sprint:se(e,"filterSprint"),release:se(e,"filterRelease"),limit:se(e,"limit"),offset:se(e,"offset")}}function ws(e){if(typeof e=="string"&&e.trim().length>0)return e;if(Array.isArray(e))return ks(e)}function Si(e){if(typeof e=="number"&&Number.isFinite(e)||typeof e=="string"&&e.trim().length>0)return e}function K$(e){let t=ws(e.kind),n=ws(e.exemptIsolate),r=ws(e.exemptIsolateType);return{...t===void 0?{}:{kind:t},maxDepth:Si(e.maxDepth),limit:Si(e.limit),after:O(e,"after"),direction:O(e,"direction"),maxPaths:Si(e.maxPaths),sample:Si(e.sample),...n===void 0?{}:{exemptIsolate:n},...r===void 0?{}:{exemptIsolateType:r},saveBaseline:e.saveBaseline===!0,rebuild:e.rebuild===!0,clear:e.clear===!0,summary:e.summary===!0,...e.full===!0?{full:!0}:{}}}function Tu(e){let t=xu(e);return e.ids!==void 0&&(t.ids=rs(e.ids)),t}function Y$(e){return{status:O(e,"filterStatus"),list:bn(e.list)?Tu(e.list):vs(e),reason:O(e,"reason"),resolution:O(e,"resolution"),expectedResult:O(e,"expectedResult")??O(e,"expected_result")??O(e,"expected"),actualResult:O(e,"actualResult")??O(e,"actual_result")??O(e,"actual"),validateClose:O(e,"validateClose")??O(e,"validate_close"),author:O(e,"author"),message:O(e,"message"),force:e.force===!0?!0:void 0,dryRun:e.dryRun===!0||e.dry_run===!0?!0:void 0,rollback:O(e,"rollback"),checkpoint:e.checkpoint===!1||e.noCheckpoint===!0||e.no_checkpoint===!0?!1:void 0}}var Dy=new Set(["filterStatus","filterType","filterTag","filterPriority","filterDeadlineBefore","filterDeadlineAfter","filterUpdatedAfter","filterUpdatedBefore","filterCreatedAfter","filterCreatedBefore","filterAssignee","filterAssigneeFilter","filterAssignee_filter","filterParent","filterSprint","filterRelease","ids","list","update","limit","offset","dryRun","dry_run","rollback","checkpoint","noCheckpoint","no_checkpoint"]);function Iu(e){let t={};for(let[n,r]of Object.entries(e))Dy.has(n)||(t[n]=r);return $u(t)}function $u(e){let t=Cu(e,"update-many");for(let n of Xr)for(let r of n.keys){let i=t[r];typeof i=="number"&&Number.isFinite(i)&&(t[r]=String(i))}return Eu(t)}function X$(e){if(bn(e.list)||bn(e.update)){let t=bn(e.update)?e.update:Iu(e),n=xi(e,$u(t));return{status:se(e,"filterStatus"),list:bn(e.list)?Tu(e.list):vs(e),update:_d(t,n),dryRun:e.dryRun===!0||e.dry_run===!0?!0:void 0,rollback:O(e,"rollback"),checkpoint:e.checkpoint===!1||e.noCheckpoint===!0||e.no_checkpoint===!0?!1:void 0}}return{status:se(e,"filterStatus"),list:vs(e),update:xi(e,Iu(e)),dryRun:e.dryRun===!0||e.dry_run===!0?!0:void 0,rollback:O(e,"rollback"),checkpoint:e.checkpoint===!1||e.noCheckpoint===!0||e.no_checkpoint===!0?!1:void 0}}(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]="fd8c4c35-98bb-5f3b-927d-8696125af703")}catch{}})();function Le(e,t){throw new y(e,g.USAGE,t)}var Py="2026-07-15T06:22:12.276Z",Ny=Date.parse(Py),Ly=[["attributed","attributed"],["legacy_unknown","actionable_unknown"]],Ou=e=>typeof e=="string"?e:"",Pu=e=>{let t=e??{},n=Ou(t.author).trim().toLowerCase(),r=Number(["","unknown"].includes(n)),i=+(Date.parse(Ou(t.ts))>=Ny);return Ly[r][i]};function Nu(e,t,n=20,r=new Set,i=!1){let o=[],s=[],a={legacy_unknown:0,actionable_unknown:0},c=Math.max(0,n),l=0,d=0,u=0;for(let[m,f]of t.split(/\r?\n/).entries()){let p;try{p=JSON.parse(f)}catch{continue}l+=1;let _=Pu(p);if(_!=="attributed"){if(d+=1,_==="actionable_unknown"&&r.has(`${e}:${m+1}`)){u+=1;continue}a[_]+=1,i&&_==="actionable_unknown"&&s.push({item_id:e,line:m+1}),o.length<c&&o.push({item_id:e,line:m+1})}}return{checked_events:l,unknown_event_count:d,legacy_unknown_event_count:a.legacy_unknown,actionable_unknown_event_count:a.actionable_unknown,acknowledged_actionable_event_count:u,samples:o,samples_truncated:a.legacy_unknown+a.actionable_unknown>o.length,actionable_events:s}}var aO=(e,t,n=20,r=new Set)=>Nu(e,t,n,r);function Lu(e){let t=new Set;for(let n of e.split(/\r?\n/)){let r;try{r=JSON.parse(n)}catch{continue}let o=(typeof r=="object"&&r!==null&&typeof r.context=="object"&&r.context!==null?r.context:{}).author_acknowledgment;if(!(typeof o!="object"||o===null||!Array.isArray(o.events)))for(let s of o.events)typeof s=="object"&&s!==null&&typeof s.item_id=="string"&&Number.isSafeInteger(s.line)&&t.add(`${s.item_id}:${String(s.line)}`)}return t}var sr=async(e,t=20,n=!1)=>{let r=or.join(e,"history"),i;try{i=(await ir.readdir(r)).filter(w=>w.endsWith(".jsonl")).sort((w,v)=>w.localeCompare(v))}catch{i=[]}let o=new Set,s=[],a=[],c=0,l=0,d=0,u=0,m=0,f=0,p="_workspace.jsonl",_=new Set;if(i.includes(p))try{_=Lu(await ir.readFile(or.join(r,p),"utf8"))}catch{_=new Set}for(let w of i){let v;try{v=await ir.readFile(or.join(r,w),"utf8")}catch{continue}let k=w.slice(0,-6),S=Nu(k,v,t-s.length,_,n);c+=1,l+=S.checked_events,d+=S.unknown_event_count,u+=S.legacy_unknown_event_count,m+=S.actionable_unknown_event_count,f+=S.acknowledged_actionable_event_count,S.unknown_event_count>0&&o.add(k),s.push(...S.samples),n&&a.push(...S.actionable_events)}let h=u+m;return{checked_streams:c,checked_events:l,unknown_event_count:d,legacy_unknown_event_count:u,actionable_unknown_event_count:m,acknowledged_actionable_event_count:f,affected_item_ids:[...o].sort((w,v)=>w.localeCompare(v)),samples:s,samples_truncated:h>s.length,...n?{actionable_events:a}:{}}};function My(e){return[...new Map(e.map(t=>[`${t.item_id}:${t.line}`,{item_id:t.item_id,line:t.line}])).values()].sort((t,n)=>t.item_id.localeCompare(n.item_id)||t.line-n.line)}async function jy(e){try{return Lu(await ir.readFile(or.join(e,"history","_workspace.jsonl"),"utf8"))}catch{return new Set}}function Fy(e){return(e.item_id===fe||/^[a-z0-9][a-z0-9-]*$/iu.test(e.item_id))&&Number.isSafeInteger(e.line)&&e.line>=1}function Uy(e,t,n){let r=n[e.line-1]??"",i;try{i=JSON.parse(r)}catch{Le(`Unknown-author acknowledgment target ${e.item_id}:${e.line} is not readable.`,{code:"history_author_acknowledge_target_unreadable"})}return Pu(i)!=="actionable_unknown"&&Le(`Author acknowledgment target ${e.item_id}:${e.line} is not an actionable unknown-author event.`,{code:"history_author_acknowledge_target_not_actionable"}),{...e,source_event_hash:Du("sha256").update(r).digest("hex"),disposition:t.has(`${e.item_id}:${e.line}`)?"already_acknowledged":"actionable"}}async function Mu(e,t,n){let r=t.events??[],i=+(t.all_actionable===!0)+ +(r.length>0);i===0&&Le("Specify exactly one selector: events or all_actionable.",{code:"history_author_acknowledge_selector_required"}),i>1&&Le("Author acknowledgment accepts either explicit events or all_actionable, not both.",{code:"history_author_acknowledge_selector_conflict"}),(!Number.isSafeInteger(n)||n<0)&&Le("Author acknowledgment coordinate_limit must be a non-negative integer.",{code:"history_author_acknowledge_preview_limit_invalid"});let o=My(t.all_actionable===!0?(await sr(e,0,!0)).actionable_events:r),s=await jy(e),a=new Map;for(let m of o)if(Fy(m)||Le(`Unknown-author acknowledgment target ${m.item_id}:${m.line} is not readable.`,{code:"history_author_acknowledge_target_unreadable"}),!a.has(m.item_id))try{a.set(m.item_id,(await ir.readFile(or.join(e,"history",`${m.item_id}.jsonl`),"utf8")).split(/\r?\n/u))}catch{Le(`Unknown-author acknowledgment target ${m.item_id}:${m.line} is not readable.`,{code:"history_author_acknowledge_target_unreadable"})}let c=o.map(m=>Uy(m,s,a.get(m.item_id))),l=t.all_actionable===!0?"all_actionable":"events",d=Du("sha256").update(JSON.stringify({version:1,selection:l,coordinates:c})).digest("hex"),u=c.filter(({disposition:m})=>m==="actionable").length;return{plan:{selection:{kind:l},selected_count:c.length,actionable_count:u,already_acknowledged_count:c.length-u,omitted_count:Math.max(0,c.length-n),coordinates:c.slice(0,n),plan_fingerprint:d},completeCoordinates:c}}async function cO(e,t,n=50){return(await Mu(e,t,n)).plan}function zy(e,t){let n=e.length>0;return n&&t&&Le("Specify exactly one selector: repeat --event or pass --all-actionable.",{code:"history_author_acknowledge_selector_conflict",required:"Exactly one of --event or --all-actionable",examples:['pm history-author-acknowledge --event pm-a1b2:4 --attributed-author agent --reviewer maintainer --reason "Verified provenance"','pm history-author-acknowledge --all-actionable --attributed-author import-agent --reviewer maintainer --reason "Reviewed the complete actionable set"']}),!n&&!t&&Le("Specify exactly one selector: repeat --event or pass --all-actionable.",{code:"history_author_acknowledge_selector_required",required:"Exactly one of --event or --all-actionable",examples:['pm history-author-acknowledge --event pm-a1b2:4 --attributed-author agent --reviewer maintainer --reason "Verified provenance"','pm history-author-acknowledge --all-actionable --attributed-author import-agent --reviewer maintainer --reason "Reviewed the complete actionable set"']}),{events:Hy(e),all_actionable:t}}function Hy(e){return e.map(t=>{let n=t.lastIndexOf(":"),r=t.slice(0,n).trim(),i=Number(t.slice(n+1)),o=r===fe||/^[a-z0-9][a-z0-9-]*$/iu.test(r);return(n<1||!o||!Number.isSafeInteger(i)||i<1)&&Le(`history-author-acknowledge --event expects <item-id>:<one-based-line>, received "${t}".`,{code:"history_author_acknowledge_target_unreadable"}),{item_id:r,line:i}})}function lO(e,t){let n=zy(ks(t.historyEvent),t.allActionable===!0||t.all_actionable===!0);return Wy(e,{events:n.events,all_actionable:n.all_actionable,dry_run:t.dryRun===!0||t.dry_run===!0,plan_fingerprint:O(t,"planFingerprint")??O(t,"plan_fingerprint"),coordinate_limit:typeof t.limit=="number"?t.limit:typeof t.limit=="string"?Number(t.limit):void 0,attributed_author:O(t,"attributedAuthor")??O(t,"attributed_author")??void 0,reviewer:O(t,"reviewer"),reason:O(t,"reason")})}async function Wy(e,t){let n=t.reviewer?.trim()??"",r=t.attributed_author?.trim()??"",i=t.reason?.trim()??"",o=await Mu(e,t,t.coordinate_limit??50);if(t.dry_run===!0)return{dry_run:!0,mutated:!1,acknowledged:0,outcome:"preview",exit_code:g.SUCCESS,plan:o.plan};if([n.length>0,n.toLowerCase()!=="unknown",r.length>0,r.toLowerCase()!=="unknown",i.length>0].includes(!1)&&Le("Author acknowledgment requires events, reviewer, attributed_author, and reason.",{code:"history_author_acknowledge_required_values_missing"}),t.plan_fingerprint?.trim()||Le("Author acknowledgment apply requires plan_fingerprint from a fresh dry-run preview.",{code:"history_author_acknowledge_plan_fingerprint_required",recovery:{suggested_retry:"Rerun history-author-acknowledge with --dry-run, then pass --plan-fingerprint <value>."}}),t.plan_fingerprint.trim()!==o.plan.plan_fingerprint)throw new y("Author acknowledgment selection changed after preview; no history was mutated.",g.CONFLICT,{code:"history_author_acknowledge_plan_conflict",recovery:{suggested_retry:"Rerun history-author-acknowledge with --dry-run and apply the fresh plan_fingerprint."}});let a=o.completeCoordinates.filter(({disposition:u})=>o.plan.selection.kind==="events"||u==="actionable").map(({item_id:u,line:m})=>({item_id:u,line:m}));if(a.length===0)return{dry_run:!1,mutated:!1,acknowledged:0,outcome:"no_effect",exit_code:g.NO_EFFECT,plan:o.plan};let c=await T(e),l=await oi({pmRoot:e,op:"history:author-acknowledge",author:n,context:{author_acknowledgment:{events:a,attributed_author:r}},message:i,lockTtlSeconds:c.locks.ttl_seconds,lockWaitMs:c.locks.wait_ms}),d=o.plan.actionable_count>0&&o.plan.already_acknowledged_count>0?{outcome:"partial_effect",exit_code:g.PARTIAL_EFFECT}:{outcome:"effect",exit_code:g.SUCCESS};return{dry_run:!1,mutated:!0,acknowledged:a.length,...d,plan:o.plan,history_path:l.historyPath}}import{execFile as Gy}from"node:child_process";import ju 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]="1d4534aa-5a56-5a76-8971-aa3ba6c52e59")}catch{}})();function Fu(e,t){return new Promise((n,r)=>{Gy("git",[...t],{cwd:e,encoding:"utf8",maxBuffer:4*1024*1024},(i,o)=>{i?r(i):n(o)})})}function Uu(e){if(e&&(!Number.isSafeInteger(e.start)||!Number.isSafeInteger(e.end)||e.start<1||e.end<e.start))throw new RangeError("Source line range must be inclusive positive integers with end >= start.")}function pO(e){let t=/^(\d+):(\d+)$/u.exec(e.trim()),n=t?{start:Number(t[1]),end:Number(t[2])}:void 0;if(Uu(n),!n)throw new RangeError("Source line range must use start:end.");return n}function qy(e){let t=new Map;for(let n of e.split(`
|
|
7
7
|
`)){let r=/^([0-9a-f^]{40,64}) \d+ \d+(?: \d+)?$/u.exec(n)?.[1];r&&t.set(r,(t.get(r)??0)+1)}return t}function By(e){let t=e.split("\0"),n=new Map;for(let r=0;r+1<t.length;r+=2){let i=t[r]?.trim();if(!i)continue;let o=[...new Set(t[r+1]?.match(/\bpm-[a-z0-9][a-z0-9-]{2,63}\b/gu)??[])].sort((s,a)=>s.localeCompare(a));n.set(i,o)}return n}async function Vy(e){let t=ju.relative(e.workspaceRoot,ju.resolve(e.workspaceRoot,e.sourcePath)),n=await Fu(e.workspaceRoot,["blame","--line-porcelain","-L",`${e.lineRange.start},${e.lineRange.end}`,"--",t]),r=await Fu(e.workspaceRoot,["log","-n","256","--format=%H%x00%B%x00","--",t]);return{commitLines:qy(n),commitItems:By(r),available:!0}}function Jy(e){let t=e.current.nodes.at(-1),n=e.current.kinds.length+1,r;for(let i of e.graph.incidentEdges(t)){let o=i.source===t,s=o?i.target:i.source;if((e.visitedDepth.get(s)??Number.POSITIVE_INFINITY)<n)continue;e.visitedDepth.set(s,n);let a=e.graph.registry().require(i.kind),c={nodes:[...e.current.nodes,s],kinds:[...e.current.kinds,o?i.kind:a.inverse??i.kind]};e.details.get(s)?.type?.toLowerCase()==="decision"?(r=n,e.found.push(c)):e.queue.push(c)}return r}function Ky(e){let t=[{nodes:[e.itemId],kinds:[]}],n=new Map([[e.itemId,0]]),r=[],i;for(;t.length>0;){let o=t.shift(),s=o.kinds.length;i!==void 0&&s>=i||s>=e.maxDepth||(i=Jy({current:o,graph:e.graph,details:e.details,visitedDepth:n,queue:t,found:r})??i)}return r.sort((o,s)=>o.nodes.join("\0").localeCompare(s.nodes.join("\0"))),r}function Yy(e,t,n){let r=Jd(t);if(!r.graph.hasNode(e))return{status:"not_found",nodes:[],kinds:[],alternative_decision_ids:[]};let i=Ky({itemId:e,maxDepth:n,graph:r.graph,details:new Map(r.details.map(a=>[a.id,a]))}),o=i[0];if(!o)return{status:"not_found",nodes:[],kinds:[],alternative_decision_ids:[]};let s=[...new Set(i.map(a=>a.nodes.at(-1)))];return{status:s.length===1?"found":"ambiguous",nodes:o.nodes,kinds:o.kinds,alternative_decision_ids:s.slice(1)}}async function Xy(e){if(!e.lineRange)return{commitLines:new Map,commitItems:new Map,available:!0};try{return await Vy({workspaceRoot:e.workspaceRoot,sourcePath:e.paths[0],lineRange:e.lineRange})}catch{return{commitLines:new Map,commitItems:new Map,available:!1}}}function Zy(e){let t=[];return e.hasLineRange&&!e.attributionAvailable&&t.push("git_attribution_unavailable"),e.hasLineRange&&e.contributionLines===0&&t.push("line_attribution_unmapped"),e.decisionStatus==="ambiguous"&&t.push("multiple_governing_decisions"),e.decisionStatus==="not_found"&&t.push("governing_decision_not_found"),t}function Qy(e){return[...e.commitLines.keys()].filter(t=>(e.commitItems.get(t)?.length??0)>0)}async function zu(e){Uu(e.lineRange);let t=e.decisionDepth??8;if(!Number.isSafeInteger(t)||t<1||t>32)throw new RangeError("Decision path depth must be an integer from 1 to 32.");let n=await Xy(e),r=Qy(n),i=new Map;for(let o of e.candidates){let s=[...n.commitLines.entries()].filter(([d])=>n.commitItems.get(d)?.includes(o.item.id)),a=s.reduce((d,[,u])=>d+u,0),c=Yy(o.item.id,e.corpus,t),l=Zy({hasLineRange:e.lineRange!==void 0,attributionAvailable:n.available,contributionLines:a,decisionStatus:c.status});i.set(o.item.id,{score:a*100+o.files.length*10+Math.max(0,9-Math.floor((Date.now()-Date.parse(o.item.updated_at))/(720*60*60*1e3))),contribution_lines:a,evidence:[...o.files.map(d=>({kind:"linked_file",reference:d.path})),...s.map(([d,u])=>({kind:"git_commit",reference:d.slice(0,12),contribution_lines:u}))],rationale:{value:o.item.value?.trim()||null,why_now:o.item.why_now?.trim()||null,outcome:o.item.outcome?.trim()||null,objective:o.item.objective?.trim()||null},decision_path:c,ambiguities:l})}return{explanations:i,receipt:{line_range:e.lineRange??null,blamed_commit_count:n.commitLines.size,mapped_commit_count:r.length,unmapped_commit_count:n.commitLines.size-r.length,decision_depth:t}}}(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]="7470da18-4b85-5090-8ede-7de708b1f4ff")}catch{}})();var ar=["software-delivery","research","agent-evaluation","operations"];function Hu(e,t,n,r,i){return{id:e,measurement_id:t,owner_item_id:n,scope:{kind:"active"},ceiling:r,lifetime:"hold",enforcement:i,negative_control:{cases:[{observed:r,expected:"pass"},{observed:r+1,expected:"fail"}]}}}function Ii(e,t,n,r,i){let o=`preset-${e}`,s=i.map(c=>({id:`${o}-missing-${c}`,description:`Active items missing ${c} evidence.`,source:{kind:"links",link:c,state:"missing"}})),a=s.map(c=>Hu(`${c.id}-zero`,c.id,r,0,"warn"));return{id:e,title:t,description:n,declarations:{measurements:s,assertions:a,gates:[{id:`${o}-readiness`,description:n,assertion_ids:a.map(c=>c.id),triggers:["ci","scheduled"]}]}}}function Ai(e,t){return e==="software-delivery"?Ii(e,"Software delivery","Warn when active delivery work lacks executable tests or documentation.",t,["tests","docs"]):e==="research"?Ii(e,"Research","Warn when active research work lacks reproducibility files or documentation.",t,["files","docs"]):e==="agent-evaluation"?Ii(e,"Agent evaluation","Warn when active evaluation work lacks executable scenarios or recorded artifacts.",t,["tests","files"]):Ii(e,"Operations","Warn when active operational work lacks runbook documentation or repair evidence.",t,["docs","files"])}function Wu(e,t,n,r={}){return ys(e,Ai(t,n).declarations,r)}async function Gu(e,t){let n=new Set(e.terminal_statuses??["closed","canceled"]),r={...e,items:e.items.filter(o=>!n.has(o.status))};return await Promise.all(["files","tests","docs"].map(async o=>{let s={id:`derived-active-missing-${o}`,description:`Observed active items missing ${o} evidence.`,source:{kind:"links",link:o,state:"missing"}},c=(await _s(s,r)).value,l=Hu(`${s.id}-ceiling`,s.id,t,c,"observe"),d=`active-missing-${o}`;return{id:d,population_size:r.items.length,scope:{kind:"active"},observed:c,declarations:{measurements:[s],assertions:[l],gates:[{id:`derived-${d}`,description:`Observe the accepted ${o} evidence baseline.`,assertion_ids:[l.id],triggers:["ci","scheduled"]}]}}}))}function qu(e,t,n={}){return ys(e,{measurements:t.flatMap(r=>r.declarations.measurements),assertions:t.flatMap(r=>r.declarations.assertions),gates:t.flatMap(r=>r.declarations.gates)},n)}async function Bu(e,t,n,r={}){let i=t.enforcement==="observe"?"warn":"block";if(t.enforcement==="block"||n!==i)throw new TypeError(`assurance assertion ${t.id} promotion must be ${t.enforcement} -> ${i}`);return vi(e,"assertion",{...t,enforcement:n},{...r,message:r.message??`Promote assurance assertion ${t.id} from ${t.enforcement} to ${n}`})}import Ku from"node:fs/promises";import{createRequire as ew}from"node:module";import Ae 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]="a0014621-9e3d-5620-8f36-081811054843")}catch{}})();function Vu(e,t){let n=Ae.relative(t,e);if(n.length>0&&n!==".."&&!n.startsWith(`..${Ae.sep}`)&&!Ae.isAbsolute(n))return n.split(Ae.sep).join("/");let r=Ae.resolve(e),i=0xcbf29ce484222325n;for(let s=0;s<r.length;s+=1)i^=BigInt(r.charCodeAt(s)),i=BigInt.asUintN(64,i*0x100000001b3n);return`<external>/${i.toString(16).padStart(16,"0")}/${Ae.basename(Ae.dirname(e))}/package.json`}function tw(e){return e.includes(`${Ae.sep}.pnpm${Ae.sep}`)?"pnpm":e.includes(`${Ae.sep}node_modules${Ae.sep}`)?"npm":"other"}async function Ju(e){try{let t=JSON.parse(await Ku.readFile(e,"utf8"));return t.name==="@unbrained/pm-cli"&&typeof t.version=="string"&&t.version.trim().length>0?t.version.trim():void 0}catch{return}}async function Ss(e){try{return await Ku.realpath(e)}catch{return Ae.resolve(e)}}async function Yu(e,t,n=$e(import.meta.url,["../../.."])){let r=await Ss(t),i=await Ss(Ae.join(n,"package.json")),o=await Ju(i),s=new Map;o!==void 0&&s.set(i,{version:o,path:Vu(i,r),layout:"host",consumers:["pm-cli-host"]});for(let l of e)try{let d=ew(l.entry_path).resolve("@unbrained/pm-cli/package.json"),u=await Ss(d),m=await Ju(u);if(m===void 0)continue;let f=u,p=s.get(f);if(p){p.consumers.includes(l.name)||(p.consumers.push(l.name),p.consumers.sort((_,h)=>_.localeCompare(h)));continue}s.set(f,{version:m,path:Vu(u,r),layout:tw(u),consumers:[l.name]})}catch{}let a=[...s.values()].sort((l,d)=>l.path.localeCompare(d.path)),c=o===void 0?[]:a.filter(l=>l.version!==o);return{host_version:o??null,copies:a,mismatches:c,warnings:c.map(l=>`extension_host_pm_cli_version_skew:${o}:${l.version}:${l.consumers.join("+")}`)}}import Es from"node:fs/promises";import xs 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]="86c82880-d6c1-5d03-b786-222421f1146d")}catch{}})();var Xu=8388608,nw=new Set(["resolved","failed"]),rw=[{kind:"boolean",matches:e=>typeof e=="boolean"||typeof e=="string"&&/^(?:true|false)$/iu.test(e.trim())},{kind:"single_digit",matches:e=>typeof e=="number"&&Number.isInteger(e)&&e>=0&&e<=9||typeof e=="string"&&/^\d$/u.test(e.trim())}];function Qe(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Is(e){return rw.find(t=>t.matches(e))?.kind}function Zu(e){let t=new Map,n=0,r=0;return{entries:e.map(o=>{let s=Qe(o.agent_provenance)?o.agent_provenance:void 0;if(s===void 0||!Xl(o).ok)return o;let a={},c=!1;for(let[d,u]of Object.entries(s)){let m=Qe(u)?Is(u.value):void 0;if(m===void 0){a[d]=u;continue}c=!0,r+=1;let f=o.agent_harness??"unknown",p=`${f}\0${d}\0${m}`,_=t.get(p)??{harness:f,dimension:d,kind:m,count:0};_.count+=1,t.set(p,_)}if(!c)return o;n+=1;let l={...o};return Object.keys(a).length===0?delete l.agent_provenance:l.agent_provenance=a,Zl(o,l,{retainPriorRecord:!0,retainPriorRecordHash:!1})}),receipt:{changed:n>0,events_changed:n,observations_removed:r,invalid_values:[...t.values()].sort((o,s)=>o.harness.localeCompare(s.harness)||o.dimension.localeCompare(s.dimension)||o.kind.localeCompare(s.kind))}}}async function Qu(e){let t=[];for(let n of await em(e)??[])try{let r=await Es.readFile(xs.join(e,"history",n),"utf8");for(let i of r.split(`
|
|
8
8
|
`)){if(i.trim().length===0)continue;let o=tm(i);if(o===null||!Qe(o.agent_provenance))continue;if(Object.values(o.agent_provenance).some(a=>Qe(a)&&Is(a.value)!==void 0)){t.push(n.slice(0,-6));break}}}catch{}return t}async function em(e){try{return(await Es.readdir(xs.join(e,"history"))).filter(t=>t.endsWith(".jsonl")).sort()}catch{return null}}async function iw(e,t,n){let r;try{r=await Es.open(xs.join(e,"history",t),"r");let i=(await r.stat()).size,o=Math.min(i,Math.max(0,n)),s=Buffer.alloc(o),{bytesRead:a}=await r.read(s,0,o,0),c=s.subarray(0,a).toString("utf8"),l=a>=i,d=c.lastIndexOf(`
|
|
9
9
|
`),u=c;return l||(u=d===-1?"":c.slice(0,d+1)),{content:u,bytesRead:a,complete:l}}catch{return null}finally{await r?.close()}}function tm(e){try{let t=JSON.parse(e);return Qe(t)?t:null}catch{return null}}function ow(e,t,n){let r=typeof e.agent_harness=="string"?e.agent_harness:void 0;if(r===void 0)return;let i=Qe(e.agent_provenance)?e.agent_provenance:{};if(Object.entries(i).forEach(([s,a])=>{if(!Qe(a))return;let c=Is(a.value);if(!c)return;let l=`${r}\0${s}\0${c}`,d=n.get(l)??{harness:r,dimension:s,kind:c,count:0};d.count+=1,n.set(l,d)}),!Qe(e.context))return;let o=e.context.agent_provenance_outcomes;Qe(o)&&Object.entries(o).forEach(([s,a])=>{if(!Qe(a)||typeof a.resolver!="string"||!nw.has(String(a.status)))return;let c=`${r}\0${s}\0${a.resolver}`,l=t.get(c)??{harness:r,dimension:s,resolver:a.resolver,attempts:0,successes:0};l.attempts+=1,a.status==="resolved"&&(l.successes+=1),t.set(c,l)})}function sw(e,t,n,r,i,o){let s=i;for(let a of e.split(`
|
|
@@ -67,9 +67,9 @@ ${l}`,g.GENERIC_FAILURE)}}function Af(e){let t=e.trim(),n=t.includes("@file:")?t
|
|
|
67
67
|
`),{acknowledged:i.length,fingerprints:i}}(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]="3ae38c0a-7f43-5457-b9a5-d23491a371ea")}catch{}})();async function So(e){return e.includeBody?zt(e.pmRoot,e.settings.item_format,e.typeToFolder,e.warnings,e.settings.schema,{forceSourceScan:!0}):hn(e.pmRoot,e.settings.item_format,e.typeToFolder,e.warnings,e.settings.schema)}(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]="42402d5d-8074-591f-98b4-75f479509cb4")}catch{}})();var WR=5;async function Eo(e,t,n){let r=await Gt(e,t),o=[["validate_history_drift_missing_streams",r.missingStreams.length],["validate_history_drift_unreadable_streams",r.unreadableStreams.length],["validate_history_drift_hash_mismatches",r.hashMismatches.length],["validate_history_drift_chain_mismatches",r.chainMismatches.length],["validate_history_drift_version_skews",r.versionSkews.length],["validate_history_drift_workspace_state_mismatches",r.workspaceStateMismatches.length],["validate_history_drift_workspace_state_missing",r.workspaceStateMissing.length],["validate_history_drift_workspace_state_unreadable",r.workspaceStateUnreadable.length]].filter(([,l])=>l>0).map(([l,d])=>`${l}:${d}`),s=n?Number.POSITIVE_INFINITY:WR,a=r.driftedItems.slice(0,s),c=r.identityDiscontinuities??[];return{check:{name:"history_drift",status:c.length>0?"error":o.length===0?"ok":"warn",ok:c.length===0&&o.length===0,details:{identity_discontinuities:c.slice(0,s),identity_discontinuities_count:c.length,identity_discontinuities_truncated:c.length>s,checked_items:t.length,drifted_items_count:r.driftedItems.length,drifted_items:a,drifted_items_truncated:a.length<r.driftedItems.length,counts:{missing_streams:r.missingStreams.length,unreadable_streams:r.unreadableStreams.length,hash_mismatches:r.hashMismatches.length,chain_mismatches:r.chainMismatches.length,version_skews:r.versionSkews.length,workspace_state_mismatches:r.workspaceStateMismatches.length,workspace_state_missing:r.workspaceStateMissing.length,workspace_state_unreadable:r.workspaceStateUnreadable.length},workspace_state_mismatches:r.workspaceStateMismatches,workspace_state_missing:r.workspaceStateMissing,workspace_state_unreadable:r.workspaceStateUnreadable,version_skews:r.versionSkews.slice(0,s)}},warnings:o}}(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]="c357729b-f316-51e7-9768-fc7bb4600e06")}catch{}})();function xo(e,t){let n=e[0];if(e.length===1)return[n,n];let r=new Set(e),i=[n],o=new Set([n]),s=a=>{for(let c of(t.get(a)??[]).filter(l=>r.has(l))){if(c===n&&i.length>1)return i.push(n),!0;if(!o.has(c)){if(o.add(c),i.push(c),s(c))return!0;i.pop(),o.delete(c)}}return!1};return s(n)?[...i]:[...e,n]}function GR(e,t){if(typeof e!="string")return;let n=e.trim().toLowerCase();return n.length>0?t.get(n):void 0}function qR(e,t,n,r){for(let i of e.dependencies??[]){if(typeof i!="object"||i===null||typeof i.id!="string")continue;let o=r.resolve(i.kind);if(!o?.hierarchy)continue;let s=n.get(i.id.toLowerCase());s&&(o.hierarchyDirection==="source_parent"?t.get(s).push(e.id):t.get(e.id).push(s))}}function fc(e,t=Qn()){let n=new Map(e.map(i=>[i.id.toLowerCase(),i.id])),r=new Map(e.map(i=>[i.id,[]]));for(let i of[...e].sort((o,s)=>o.id.localeCompare(s.id))){let o=r.get(i.id),s=GR(i.parent,n);s&&o.push(s),qR(i,r,n,t)}for(let[i,o]of r)r.set(i,[...new Set(o)].sort());return r}function pc(e,t,n=Qn()){let r=pi(e,s=>t?bl(s,t):s==="closed"||s==="canceled",n),i=fc(e,n),o=r.cycles.map(s=>s.item_ids);return{cycle_count:o.length,active_cycle_count:r.cycles.filter(s=>!s.legacy_terminal).length,legacy_cycle_count:r.cycles.filter(s=>s.legacy_terminal).length,cycle_item_ids:[...new Set(o.flat())].sort(),cycle_sample_paths:o.map(s=>xo(s,i).join("->")),cardinality_violation_count:r.cardinality_violations.length,active_cardinality_violation_count:r.cardinality_violations.filter(s=>!s.legacy_terminal).length,legacy_cardinality_violation_count:r.cardinality_violations.filter(s=>s.legacy_terminal).length,cardinality_violation_rows:r.cardinality_violations.map(s=>`${s.child_id}:${s.parent_ids.join(",")}:${s.legacy_terminal?"legacy":"active"}`),parent_divergence_count:r.divergences.length,active_parent_divergence_count:r.divergences.filter(s=>!s.legacy_terminal).length,legacy_parent_divergence_count:r.divergences.filter(s=>s.legacy_terminal).length,parent_divergence_rows:r.divergences.map(s=>`${s.child_id}:scalar=${s.scalar_parent_id}:dependencies=${s.dependency_parent_ids.join(",")}:${s.legacy_terminal?"legacy":"active"}`)}}(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]="b32d3476-3270-555f-a684-80318df96527")}catch{}})();function Dt(e){return e.replaceAll("\\","/").replace(/^\.\/+/,"").replace(/^\/+/,"")}function hc(e){return Dt(e).replace(/\/+$/,"")}function qe(e){let t=ee(e);if(!t)return;let n=t.toLowerCase();if(!(n==="none"||n==="null"||n==="n/a"||n==="na"))return t}function _c(e){let t=e.trim().replaceAll(/\s+/g," ");return t.length>120?`${t.slice(0,117)}...`:t}(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]="1ffaaceb-cc25-5d2f-a840-763ba8c7e81f")}catch{}})();var KR=["src","tests","docs"],YR=["README.md","PRD.md","CHANGELOG.md","AGENTS.md","CONTRIBUTING.md","SECURITY.md","CODE_OF_CONDUCT.md","LICENSE"],XR=new Set(["node_modules",".git",".cursor",".agents","dist","coverage"]),ZR=["resolution","expected_result","actual_result"],QR=["default","tracked-all","tracked-all-strict"],x_=["core","strict","custom"],Ro=["off","warn","error"],wc=["author","acceptance_criteria","estimated_minutes","close_reason"],R_=[...wc,"reviewer","risk","confidence","sprint","release"],vc=Array.from(new Set(R_)),e0={author:"author",acceptance_criteria:"acceptance_criteria","acceptance-criteria":"acceptance_criteria",estimated_minutes:"estimated_minutes","estimated-minutes":"estimated_minutes",estimate:"estimated_minutes",close_reason:"close_reason","close-reason":"close_reason",reviewer:"reviewer",risk:"risk",confidence:"confidence",sprint:"sprint",release:"release"},t0={author:"validate_metadata_missing_author",acceptance_criteria:"validate_metadata_missing_acceptance_criteria",estimated_minutes:"validate_metadata_missing_estimate",close_reason:"validate_metadata_missing_close_reason",reviewer:"validate_metadata_missing_reviewer",risk:"validate_metadata_missing_risk",confidence:"validate_metadata_missing_confidence",sprint:"validate_metadata_missing_sprint",release:"validate_metadata_missing_release"},n0={author:"missing_author",acceptance_criteria:"missing_acceptance_criteria",estimated_minutes:"missing_estimated_minutes",close_reason:"closed_missing_close_reason",reviewer:"missing_reviewer",risk:"missing_risk",confidence:"missing_confidence",sprint:"missing_sprint",release:"missing_release"},r0={author:"missing_author_item_ids",acceptance_criteria:"missing_acceptance_criteria_item_ids",estimated_minutes:"missing_estimated_minutes_item_ids",close_reason:"closed_missing_close_reason_item_ids",reviewer:"missing_reviewer_item_ids",risk:"missing_risk_item_ids",confidence:"missing_confidence_item_ids",sprint:"missing_sprint_item_ids",release:"missing_release_item_ids"},i0={author:"missing_author_truncated",acceptance_criteria:"missing_acceptance_criteria_truncated",estimated_minutes:"missing_estimated_minutes_truncated",close_reason:"closed_missing_close_reason_truncated",reviewer:"missing_reviewer_truncated",risk:"missing_risk_truncated",confidence:"missing_confidence_truncated",sprint:"missing_sprint_truncated",release:"missing_release_truncated"},o0=32*1024*1024,s0=1e4,bc=40,Be=5,a0=4096,c0=255,l0=JR(VR);function C_(e){let t={};for(let[n,r]of Object.entries(e))Array.isArray(r)||r===!1&&n.endsWith("_truncated")||(t[n]=typeof r=="object"&&r!==null?C_(r):r);return t}function d0(e){return{...e,checks:e.checks.map(t=>({...t,details:C_(t.details)})),...e.fixes?{fixes:{mode:e.fixes.mode,auto_fix:e.fixes.auto_fix,prune_missing:e.fixes.prune_missing,planned_count:e.fixes.planned_count,applied_count:e.fixes.applied_count,gated_count:e.fixes.gated_count,failed_count:e.fixes.failed_count}}:{}}}function To(e,t){return ei(e,t)??e}function Or(e,t){return t.terminal_statuses.has(To(e,t))}function Pt(e){return[...new Set((e??[]).map(t=>t.trim().toLowerCase()).filter(t=>t.length>0))].sort((t,n)=>t.localeCompare(n))}function Io(e,t){return e.length!==t.length?!1:e.every((n,r)=>n===t[r])}function u0(e){let t=Pt(Bc),n={blocked_reason:Pt(Fr.blocked_reason),resolution:Pt(Fr.resolution),actual_result:Pt(Fr.actual_result)},r=Pt(e.validation.lifecycle_stale_blocker_reason_patterns),i={blocked_reason:Pt(e.validation.lifecycle_closure_like_blocked_reason_patterns),resolution:Pt(e.validation.lifecycle_closure_like_resolution_patterns),actual_result:Pt(e.validation.lifecycle_closure_like_actual_result_patterns)};return{stale_blocker_reason_patterns:r,stale_blocker_reason_pattern_source:Io(r,t)?"default":"settings",closure_like_metadata_field_patterns:i,closure_like_metadata_field_pattern_sources:{blocked_reason:Io(i.blocked_reason,n.blocked_reason)?"default":"settings",resolution:Io(i.resolution,n.resolution)?"default":"settings",actual_result:Io(i.actual_result,n.actual_result)?"default":"settings"}}}function T_(e){let t=e?.trim().toLowerCase();if(!t||t.length===0)return"core";if(x_.includes(t))return t;throw new y(`Unknown --metadata-profile value "${e}". Supported values: ${x_.join(", ")}.`,g.USAGE)}function $_(e){let t=e?.trim().toLowerCase();if(!t||t.length===0)return"warn";if(Ro.includes(t))return t;throw new y(`Unknown --dependency-cycle-severity value "${e}". Supported values: ${Ro.join(", ")}.`,g.USAGE)}function O_(e){let t=e?.trim().toLowerCase();if(!t||t.length===0)return"warn";if(Ro.includes(t))return t;throw new y(`Unknown --parent-cycle-severity value "${e}". Supported values: ${Ro.join(", ")}.`,g.USAGE)}function m0(e){return[...new Set((e??[]).map(n=>n.trim().toLowerCase().replaceAll("-","_")))].map(n=>e0[n]).filter(n=>n!==void 0).sort((n,r)=>n.localeCompare(r))}function f0(e,t,n){let r=m0(n);return e==="core"?{profile:e,profile_source:t,required_fields:[...wc],configured_custom_fields:r,fallback_to_core:!1,warnings:[]}:e==="strict"?{profile:e,profile_source:t,required_fields:[...R_],configured_custom_fields:r,fallback_to_core:!1,warnings:[]}:r.length>0?{profile:e,profile_source:t,required_fields:r,configured_custom_fields:r,fallback_to_core:!1,warnings:[]}:{profile:e,profile_source:t,required_fields:[...wc],configured_custom_fields:r,fallback_to_core:!0,warnings:["validate_metadata_custom_profile_missing_required_fields:0"]}}var p0=new Set(["acceptance_criteria","estimated_minutes"]);function D_(e,t,n,r){return!r&&p0.has(t)&&Or(e.status,n)?!1:t==="author"?!ee(e.author):t==="acceptance_criteria"?!ee(e.acceptance_criteria):t==="estimated_minutes"?!Number.isFinite(e.estimated_minutes):t==="close_reason"?To(e.status,n)===n.close_status&&!ee(e.close_reason):t==="reviewer"?!ee(e.reviewer):t==="risk"?!ee(e.risk):t==="confidence"?typeof e.confidence=="number"?!Number.isFinite(e.confidence):!ee(e.confidence):t==="sprint"?!ee(e.sprint):!ee(e.release)}function P_(e){if(e===void 0)return"default";let t=e.trim().toLowerCase();if(t.length===0||t==="default")return"default";if(t==="tracked-all"||t==="tracked_all")return"tracked-all";if(t==="tracked-all-strict"||t==="tracked_all_strict")return"tracked-all-strict";throw new y(`Unknown --scan-mode value "${e}". Supported values: ${QR.join(", ")}.`,g.USAGE)}function N_(e){let t=process.env.PM_SOURCE_WORKSPACE_ROOT?.trim();if(t)return be.resolve(t);let n=be.resolve(e);if(n.replaceAll("\\","/").endsWith("/.agents/pm"))return be.dirname(be.dirname(n));let i=be.resolve(process.cwd()),o=I_(n),s=I_(i),a=be.relative(o,s);return a.length===0||!a.startsWith("..")&&!be.isAbsolute(a)?n:i}function I_(e){try{return BR.native(e)}catch{return be.resolve(e)}}function h0(e,t){return typeof e=="object"&&e!==null&&"code"in e&&typeof e.code=="string"&&t.includes(e.code)}async function xc(e,t,n){let r=t.length>0?be.join(e,t):e,i;try{i=await Ec.readdir(r,{withFileTypes:!0})}catch(o){if(j(o))return;throw o}for(let o of i){if(o.name.startsWith("."))continue;let s=t.length>0?be.join(t,o.name):o.name;if(o.isDirectory()){if(XR.has(o.name))continue;await xc(e,s,n);continue}o.isFile()&&n.push(Dt(s))}}async function kc(e){let t=[];for(let n of KR)await xc(e,n,t);for(let n of YR){let r=be.join(e,n);try{(await Ec.stat(r)).isFile()&&t.push(Dt(n))}catch{}}return[...new Set(t)].sort((n,r)=>n.localeCompare(r))}async function L_(e){try{let{stdout:t}=await l0("git",["ls-files","-z"],{cwd:e,encoding:"utf8",maxBuffer:o0,windowsHide:!0,timeout:s0}),n=t.split("\0").map(r=>Dt(r)).filter(r=>r.length>0);return[...new Set(n)].sort((r,i)=>r.localeCompare(i))}catch{return null}}function _0(e,t){let n=new Set,r=hc(Wc);r.length>0&&n.add(r);let i=hc(be.relative(t,e));return i.length>0&&!i.startsWith("..")&&n.add(i),[...n].sort((o,s)=>o.localeCompare(s))}function A_(e,t){for(let n of t)if(e===n||e.startsWith(`${n}/`))return!0;return!1}async function g0(e,t){if(t==="tracked-all"||t==="tracked-all-strict"){let r=await L_(e);if(r)return{requestedMode:t,appliedMode:t,source:"tracked-git",candidateFiles:r,candidateTotal:r.length,candidateScanned:r.length};let i=await kc(e);return{requestedMode:t,appliedMode:"default",source:"tracked-all-fallback-default",candidateFiles:i,candidateTotal:i.length,candidateScanned:i.length}}let n=await kc(e);return{requestedMode:t,appliedMode:"default",source:"default-curated",candidateFiles:n,candidateTotal:n.length,candidateScanned:n.length}}function oe(e,t=Be){return e.length<=t?{values:e,truncated:!1}:{values:e.slice(0,t),truncated:!0}}function en(e,t){if(t)return{values:e,truncated:!1,total:e.length};let n=oe(e,bc);return{values:n.values,truncated:n.truncated,total:e.length}}var y0={resolution:"--resolution",expected_result:"--expected-result",actual_result:"--actual-result"},w0={resolution:"Describe how this item was resolved",expected_result:"Describe the expected result",actual_result:"Describe the actual result"};function v0(e){let t=e.missing_fields.map(n=>`${y0[n]} "${w0[n]}"`).join(" ");return`pm update ${e.id} ${t} --message "Backfill resolution metadata"`}function M_(e,t){let n=e.details?.missing_resolution_remediation_hints,r=Array.isArray(n)&&n.length>0,i=r?n.filter(s=>typeof s=="string"):km(t);if(i.length===0)return;let o=r&&e.details?.missing_resolution_remediation_hints_truncated===!0;e.details={...e.details,fix_hints:i,...o?{fix_hints_truncated:!0}:{}}}function j_(e){let t=new Set;return e.checkCompleteness&&t.add("completeness"),e.checkMetadata&&t.add("metadata"),e.checkResolution&&t.add("resolution"),(e.checkLifecycle||e.checkStaleBlockers)&&t.add("lifecycle"),e.checkFiles&&t.add("files"),e.checkHistoryDrift&&t.add("history_drift"),e.checkCommandReferences&&t.add("command_references"),e.checkStorageIntegrity&&t.add("storage_integrity"),t.size===0?(e.autoFix&&(t.add("metadata"),t.add("resolution"),t.add("lifecycle")),e.pruneMissing&&t.add("files"),t.size===0&&(t.add("metadata"),t.add("resolution"),t.add("lifecycle"),t.add("files"),t.add("command_references"),t.add("history_drift"),t.add("format_version"),t.add("completeness"),t.add("storage_integrity")),t):(e.pruneMissing&&t.add("files"),t)}var b0="validate_metadata_duplicate_issue_codes";function F_(e,t){if(e.length===0)return{rows:[],truncated:!1,warnings:[]};let n=t?e.length:Be,r=e.slice(0,n);return{rows:r.map(o=>({code:o.code,count:o.count,ids:o.ids,titles:o.titles,remediation_hint:`Items ${o.ids.join(", ")} share issue code "${o.code}"; rename or merge so each logical code maps to one item.`})),truncated:r.length<e.length,warnings:[`${b0}:${e.length}`]}}function k0(e,t,n){let r=Object.fromEntries(vc.map(i=>[i,[]]));for(let i of e)for(let o of vc)D_(i,o,t,n)&&r[o].push(i.id);return r}function S0(e,t,n){let r=[...e.warnings];for(let i of e.required_fields){let o=t[i];o.length>0&&r.push(`${t0[i]}:${o.length}`)}return r.push(...n),r}function U_(e,t){let n={};for(let r of e.required_fields){let i=t[r],o=i?i.length:0,s=n0[r];n[s]=o}return n}function z_(e,t,n){let r=[];for(let i of e.required_fields){let o=t[i];if(o)for(let s of o){let a=n.get(s)?.type,c=typeof a=="string"&&a.length>0?a:"Unknown";r.push({item_type:c,field:i})}}return r}function E0(e,t,n,r){for(let i of t.required_fields){let o=n[i];if(!o||o.length===0)continue;let s=r0[i],a=i0[i];if(!s||!a)continue;let c=oe(o,r?o.length:Be);e[s]=c.values,e[a]=c.truncated}}function H_(e,t,n){if(!e.required_fields.includes("close_reason"))return[];let r=t.close_reason;return r?r.map(i=>({id:i,resolution:ee(n.get(i)?.resolution)})):[]}function W_(e,t,n){if(!e.required_fields.includes("estimated_minutes"))return[];let r=t.estimated_minutes;return r?r.map(i=>({id:i,type:ee(n.get(i)?.type)})):[]}function x0(e,t,n,r,i){let o=new Map(e.map(w=>[w.id,w])),s=t.profile==="strict",a=k0(e,n,s),c=r_(e,{configuredPrefixes:i}),l=F_(c,r),d=S0(t,a,l.warnings),u=U_(t,a),m=z_(t,a,o),f=i_(m),p={checked_items:e.length,metadata_profile:t.profile,metadata_profile_source:t.profile_source,metadata_profile_fallback_to_core:t.fallback_to_core,required_fields:[...t.required_fields],supported_required_fields:[...vc],counts:u,missing_by_type:f,duplicate_issue_codes_count:c.length,duplicate_issue_codes:l.rows,duplicate_issue_codes_truncated:l.truncated};t.configured_custom_fields.length>0&&(p.configured_custom_required_fields=[...t.configured_custom_fields]),E0(p,t,a,r);let _=H_(t,a,o),h=W_(t,a,o);return{check:{name:"metadata",status:d.length===0?"ok":"warn",ok:d.length===0,details:p},warnings:d,closeReasonBackfillRows:_,estimateBackfillRows:h}}function I0(e,t,n){let r=new Set(t.terminal_done_statuses);r.add(t.close_status);let i=e.filter(m=>r.has(To(m.status,t))),o=[],s=[];for(let m of i){let f=ZR.filter(p=>!ee(m[p]));f.length!==0&&(o.push({id:m.id,missing_fields:f}),s.push({id:m.id,missing_fields:f,close_reason:ee(m.close_reason)}))}let a=o.length>0?[`validate_resolution_missing_fields:${o.length}`]:[],c=n?Number.POSITIVE_INFINITY:Be,l=oe(o.map(m=>`${m.id}:${m.missing_fields.join(",")}`),c),d=o.map(m=>v0(m)),u=oe(d,c);return{check:{name:"resolution",status:a.length===0?"ok":"warn",ok:a.length===0,details:{checked_closed_items:i.length,missing_resolution_items:o.length,missing_resolution_rows:l.values,missing_resolution_rows_truncated:l.truncated,missing_resolution_remediation_hints:u.values,missing_resolution_remediation_hints_truncated:u.truncated}},warnings:a,resolutionBackfillRows:s}}function G_(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function q_(e,t="pm",n=Kc()){let r=new Set(e.map(o=>o.id)),i=[...e].sort((o,s)=>o.id.localeCompare(s.id));return new Map(i.map(o=>{let s=new Set,a=qe(o.blocked_by);a&&r.has(a)&&s.add(a),(o.dependencies??[]).filter(l=>{let d=qe(l.kind);return d!==void 0&&n.resolve(d)?.ordering===!0}).map(l=>qe(l.id)).filter(l=>l!==void 0&&r.has(l)).forEach(l=>s.add(l));let c=qe(o.definition_of_ready);return V_(c??"",t).filter(l=>r.has(l)).forEach(l=>s.add(l)),[o.id,[...s].sort((l,d)=>l.localeCompare(d))]}))}function B_(e,t,n){let r=Vd(e,n?d=>Or(d,n):void 0),i=r.active.map(d=>`${d.holder_id}:${d.target_id}:${d.kind}`),o=r.legacy_terminal.map(d=>`${d.holder_id}:${d.target_id}:${d.kind}:${d.holder_status}`),s=t?Number.POSITIVE_INFINITY:Be,a=oe(i,s),c=oe(o,s),l=oe(r.active.map(d=>d.source==="parent"?`pm update ${d.holder_id} --unset parent`:d.source==="blocked_by"?`pm update ${d.holder_id} --unset blocked_by`:`pm update ${d.holder_id} --replace-deps '<correct dependency edges>'`),s);return{check:{name:"dependency_references",status:i.length===0?"ok":"warn",ok:i.length===0,details:{checked_items:e.length,dangling_reference_count:i.length+o.length,active_dangling_reference_count:i.length,dangling_reference_rows:a.values,dangling_reference_rows_truncated:a.truncated,legacy_terminal_dangling_reference_count:o.length,legacy_closed_dangling_reference_count:r.legacy_terminal.filter(d=>d.holder_status==="closed").length,legacy_terminal_dangling_reference_rows:c.values,legacy_terminal_dangling_reference_rows_truncated:c.truncated,no_active_blocker_sentinel_count:r.no_active_blocker_sentinels.length,remediation_hints:l.values,remediation_hints_truncated:l.truncated}},warnings:i.length>0?[`validate_dangling_dependency_references:${i.length}`]:[]}}function V_(e,t="pm"){let n=(t.trim().toLowerCase()||"pm").replace(/-+$/g,""),r=new RegExp(`(?:^|[^a-z0-9-])(${G_(n)}-[a-z0-9][a-z0-9-]*)`,"gi");return[...new Set([...e.matchAll(r)].map(i=>i[1].toLowerCase()))].sort((i,o)=>i.localeCompare(o))}function J_(e){let t=0,n=new Map,r=new Map,i=[],o=new Set,s=[],a=d=>{n.set(d,t),r.set(d,t),t+=1,i.push(d),o.add(d);for(let m of e.get(d)??[])n.has(m)?o.has(m)&&r.set(d,Math.min(r.get(d),n.get(m))):(a(m),r.set(d,Math.min(r.get(d),r.get(m))));if(r.get(d)!==n.get(d))return;let u=[];for(;i.length>0;){let m=i.pop();if(o.delete(m),u.push(m),m===d)break}u.sort((m,f)=>m.localeCompare(f)),s.push(u)},c=[...e.keys()].sort((d,u)=>d.localeCompare(u));for(let d of c)n.has(d)||a(d);return s.filter(d=>{if(d.length>1)return!0;let u=d[0];return(e.get(u)??[]).includes(u)}).sort((d,u)=>d[0].localeCompare(u[0])||d.length-u.length||d.join(",").localeCompare(u.join(",")))}function K_(e,t="pm"){let n=q_(e,t),r=J_(n),i=[...new Set(r.flat())].sort((s,a)=>s.localeCompare(a)),o=r.map(s=>xo(s,n).join("->"));return{cycle_count:r.length,cycle_item_ids:i,cycle_sample_paths:o}}function Y_(e){return e.startsWith("docs/")?"docs_unowned":e.startsWith("tests/")?"tests_unowned":e.startsWith("src/")?"source_unowned":e.endsWith(".md")?"docs_unowned":"unlinked_existing"}function Co(e){let t=e.lastIndexOf("/");return t===-1?"":e.slice(0,t)}function X_(e,t){let n=Co(e).split("/").filter(Boolean),r=Co(t).split("/").filter(Boolean),i=0;for(;i<n.length&&i<r.length&&n[i]===r[i];)i+=1;return i}function A0(e,t){let n=Co(t),r=Co(e),i=t.endsWith("/")?t:`${t}/`,o=e.startsWith(i),s=n.length>0&&n===r,a=X_(e,t);return!o&&!s&&a===0?null:o?{score:t.length+1e3,confidence:"path_prefix"}:s?{score:a+500,confidence:"same_directory"}:{score:a,confidence:"shared_directory"}}function R0(e,t,n){return e===void 0||n>e.score||n===e.score&&t.id.localeCompare(e.item.id)<0}function C0(e,t,n){let r=t==="docs_unowned"?"docs":"files",i;return n.flatMap(o=>(r==="docs"?o.docs??[]:o.files??[]).map(s=>({item:o,link:s}))).forEach(({item:o,link:s})=>{if(s.scope!=="project")return;let a=Dt(s.path);if(a.length===0||a===e)return;let c=A0(e,a);c!==null&&R0(i,o,c.score)&&(i={item:o,score:c.score,confidence:c.confidence})}),i?{id:i.item.id,type:i.item.type,title:i.item.title,status:i.item.status,confidence:i.confidence}:null}function Z_(e,t){return e.map(n=>{let r=Y_(n),i=r==="docs_unowned"?"docs":"files",o=C0(n,r,t),s=o?.id??"<id>";return{path:n,classification:r,owner_candidate:o,remediation_hint:`pm ${i} ${s} --add path=${n},scope=project,note="<why this artifact belongs to the item>"`}})}function Q_(e){return e.map(t=>`${t.path}:${t.classification} owner_candidate=${t.owner_candidate?.id??"unowned"} hint=${JSON.stringify(t.remediation_hint)}`)}function T0(e,t){return Object.entries(t.closure_like_metadata_field_patterns).filter(([n,r])=>{let i=qe(e[n]);return i?r.some(o=>i.toLowerCase().includes(o)):!1}).map(([n])=>n).sort((n,r)=>n.localeCompare(r))}function $0(e,t,n,r,i){let o=qe(t.parent),s=o?n.get(r.get(o.toLowerCase())??o):void 0;return{id:e.id,parent_id:t.id,grandparent_id:s?.id,grandparent_active:s!==void 0&&!Or(s.status,i)}}function O0(e,t,n,r){let i=qe(e.blocked_by),o=qe(e.blocked_reason),s=o?.toLowerCase(),a=To(e.status,n),c=[];return t.has(a)?(!i&&!o&&c.push("blocked_status_missing_blocker_context"),s?.includes("no active blocker")&&c.push("blocked_status_reason_reports_no_active_blocker"),s&&r.stale_blocker_reason_patterns.some(l=>s.includes(l))&&c.push("blocked_status_reason_matches_stale_pattern"),c):(i&&c.push("non_blocked_status_has_blocked_by"),o&&c.push("non_blocked_status_has_blocked_reason"),c)}function D0(e,t,n,r){let i=new Map(e.map(c=>[c.id,c])),o=new Map(e.map(c=>[c.id.toLowerCase(),c.id])),s=n.blocked_statuses.size>0?n.blocked_statuses:new Set(["blocked"]),a={activeItems:e.filter(c=>!Or(c.status,n)),closureLikeRows:[],terminalParentRows:[],terminalParentFixRows:[],staleBlockerRows:[]};for(let c of a.activeItems){let l=T0(c,r);l.length>0&&a.closureLikeRows.push({id:c.id,fields:l});let d=qe(c.parent),u=d?i.get(o.get(d.toLowerCase())??d):void 0;if(u&&Or(u.status,n)&&(a.terminalParentRows.push({id:c.id,parent_id:u.id,parent_status:u.status}),a.terminalParentFixRows.push($0(c,u,i,o,n))),t){let m=O0(c,s,n,r);m.length>0&&a.staleBlockerRows.push({id:c.id,status:c.status,reasons:[...new Set(m)].sort((f,p)=>f.localeCompare(p))})}}return a}function P0(e){e.closureLikeRows.sort((t,n)=>t.id.localeCompare(n.id)),e.terminalParentRows.sort((t,n)=>t.id.localeCompare(n.id)||t.parent_id.localeCompare(n.parent_id)),e.terminalParentFixRows.sort((t,n)=>t.id.localeCompare(n.id)||t.parent_id.localeCompare(n.parent_id)),e.staleBlockerRows.sort((t,n)=>t.id.localeCompare(n.id))}function Ao(e,t,n){return n<=0||t==="off"?null:`${t==="error"?`${e}_error`:e}:${n}`}function gc(e,t,n){return n>0&&t!=="off"?`${e}:${n}`:null}function N0(e,t,n,r,i){let o=[];e.closureLikeRows.length>0&&o.push(`validate_lifecycle_active_closure_like_metadata:${e.closureLikeRows.length}`),e.terminalParentRows.length>0&&o.push(`validate_lifecycle_active_terminal_parent:${e.terminalParentRows.length}`),t&&e.staleBlockerRows.length>0&&o.push(`validate_lifecycle_stale_blockers:${e.staleBlockerRows.length}`);let s=Ao("validate_lifecycle_dependency_cycles",n,i.dependencyCycles),a=Ao("validate_hierarchy_parent_cycle",r,i.activeHierarchyCycles),c=Ao("validate_hierarchy_cardinality_violation",r,i.activeHierarchyCardinality),l=Ao("validate_hierarchy_parent_divergence",r,i.activeHierarchyDivergence),d=gc("validate_legacy_hierarchy_parent_cycle",r,i.legacyHierarchyCycles),u=gc("validate_legacy_hierarchy_cardinality_violation",r,i.legacyHierarchyCardinality),m=gc("validate_legacy_hierarchy_parent_divergence",r,i.legacyHierarchyDivergence);return[...o,...s?[s]:[],...a?[a]:[],...c?[c]:[],...l?[l]:[],...d?[d]:[],...u?[u]:[],...m?[m]:[]]}function eg(e){let t=Dt(e);return t.length>a0||t.split(/[\\/]/).some(n=>n.length>c0)}async function L0(e,t){let n=be.isAbsolute(t)?t:be.resolve(e,t);if(eg(n))return!1;try{let r=await Ec.stat(n);return!r.isFile()&&!r.isDirectory()}catch(r){return h0(r,["ENOENT","ENOTDIR"])}}async function M0(e,t){let n={linkedProjectPaths:new Set,remoteLinkedPaths:new Set,missingLinkedPaths:[],staleLinkRows:[]},r=e.flatMap(i=>[...(i.files??[]).map(o=>({item:i,artifact:o,link_kind:"files"})),...(i.docs??[]).map(o=>({item:i,artifact:o,link_kind:"docs"}))]);for(let{item:i,artifact:o,link_kind:s}of r){if(o.scope!=="project")continue;if(Cr(o.path)){n.remoteLinkedPaths.add(o.path.trim());continue}let a=Dt(o.path);a.length!==0&&(n.linkedProjectPaths.add(a),await L0(t,o.path)&&(n.missingLinkedPaths.push(a),n.staleLinkRows.push({item_id:i.id,path:a,link_kind:s})))}return n}function j0(e,t,n,r,i,o){let s=r==="tracked-all-strict",a=s&&!i,c=i||s,l=c?[]:_0(t,n),d=l.length===0?[]:e.candidateFiles.filter(f=>A_(f,l)),u=l.length===0?e.candidateFiles:e.candidateFiles.filter(f=>!A_(f,l)),m={};if(d.length>0){let f=en(d,o);m.pm_internals={count:d.length,paths:f.values,paths_truncated:f.truncated,paths_total:f.total}}return{strictTrackedAllMode:s,strictModeForcesPmInternals:a,includePmInternalsEffective:c,pmInternalCandidatePrefixes:l,excludedPmInternalPaths:d,candidateFiles:u,excludedByReason:m}}function tg(e,t,n,r,i,o,s,a="pm"){let c=D0(e,t,i,o);P0(c);let l=K_(c.activeItems,a),d=pc(e,i),u=Ci(i,e,s?Number.POSITIVE_INFINITY:Be),m=[...N0(c,t,n,r,{dependencyCycles:l.cycle_count,activeHierarchyCycles:d.active_cycle_count,activeHierarchyCardinality:d.active_cardinality_violation_count,activeHierarchyDivergence:d.active_parent_divergence_count,legacyHierarchyCycles:d.legacy_cycle_count,legacyHierarchyCardinality:d.legacy_cardinality_violation_count,legacyHierarchyDivergence:d.legacy_parent_divergence_count}),...Ti(u)],f=s?Number.POSITIVE_INFINITY:Be,p=oe(c.closureLikeRows.map(b=>`${b.id}:${b.fields.join(",")}`),f),_=oe(c.terminalParentRows.map(b=>`${b.id}:${b.parent_id}:${b.parent_status}`),f),h=oe(c.staleBlockerRows.map(b=>`${b.id}:${b.status}:${b.reasons.join(",")}`),f),w=oe(l.cycle_item_ids,f),v=oe(l.cycle_sample_paths,f),k=oe(d.cycle_item_ids,f),S=oe(d.cycle_sample_paths,f),x=oe(d.cardinality_violation_rows,f),A=oe(d.parent_divergence_rows,f),E=l.cycle_count>0&&n==="error"||(d.active_cycle_count>0||d.active_cardinality_violation_count>0||d.active_parent_divergence_count>0)&&r==="error";return{check:{name:"lifecycle",status:E?"error":m.length===0?"ok":"warn",ok:!E&&m.length===0,details:{checked_active_items:c.activeItems.length,lifecycle_status_roles:u,active_closure_like_metadata_items:c.closureLikeRows.length,active_closure_like_metadata_rows:p.values,active_closure_like_metadata_rows_truncated:p.truncated,active_terminal_parent_items:c.terminalParentRows.length,active_terminal_parent_rows:_.values,active_terminal_parent_rows_truncated:_.truncated,stale_blocker_checks_enabled:t,stale_blocker_items:c.staleBlockerRows.length,stale_blocker_rows:h.values,stale_blocker_rows_truncated:h.truncated,dependency_cycle_severity_policy:n,dependency_cycle_count:l.cycle_count,dependency_cycle_item_count:l.cycle_item_ids.length,dependency_cycle_item_ids:w.values,dependency_cycle_item_ids_truncated:w.truncated,dependency_cycle_sample_paths:v.values,dependency_cycle_sample_paths_truncated:v.truncated,parent_cycle_severity_policy:r,parent_cycle_count:d.cycle_count,active_parent_cycle_count:d.active_cycle_count,legacy_parent_cycle_count:d.legacy_cycle_count,parent_cycle_item_count:d.cycle_item_ids.length,parent_cycle_item_ids:k.values,parent_cycle_item_ids_truncated:k.truncated,parent_cycle_sample_paths:S.values,parent_cycle_sample_paths_truncated:S.truncated,hierarchy_cardinality_violation_count:d.cardinality_violation_count,active_hierarchy_cardinality_violation_count:d.active_cardinality_violation_count,legacy_hierarchy_cardinality_violation_count:d.legacy_cardinality_violation_count,hierarchy_cardinality_violation_rows:x.values,hierarchy_cardinality_violation_rows_truncated:x.truncated,hierarchy_parent_divergence_count:d.parent_divergence_count,active_hierarchy_parent_divergence_count:d.active_parent_divergence_count,legacy_hierarchy_parent_divergence_count:d.legacy_parent_divergence_count,hierarchy_parent_divergence_rows:A.values,hierarchy_parent_divergence_rows_truncated:A.truncated,stale_blocker_reason_patterns:[...o.stale_blocker_reason_patterns],stale_blocker_reason_pattern_source:o.stale_blocker_reason_pattern_source,closure_like_blocked_reason_patterns:[...o.closure_like_metadata_field_patterns.blocked_reason],closure_like_blocked_reason_pattern_source:o.closure_like_metadata_field_pattern_sources.blocked_reason,closure_like_resolution_patterns:[...o.closure_like_metadata_field_patterns.resolution],closure_like_resolution_pattern_source:o.closure_like_metadata_field_pattern_sources.resolution,closure_like_actual_result_patterns:[...o.closure_like_metadata_field_patterns.actual_result],closure_like_actual_result_pattern_source:o.closure_like_metadata_field_pattern_sources.actual_result}},warnings:m,terminalParentFixRows:c.terminalParentFixRows}}async function ng(e,t,n,r,i,o,s=_e(Vc.schema)){let a=await M0(e,t),c=new Map(e.map(D=>[D.id,D])),l=[...new Set(a.missingLinkedPaths)].sort((D,Q)=>D.localeCompare(Q)),d=await g0(t,r),u=j0(d,n,t,r,i,o),m=u.candidateFiles.filter(D=>!a.linkedProjectPaths.has(D)),f=Z_(m,e),p=a_(l,u.candidateFiles),_=new Map(p.map(D=>[D.path,D.classification])),h=p.filter(D=>D.classification==="moved").length,w=a.staleLinkRows.map(D=>({...D,classification:_.get(D.path)??"deleted"})).sort((D,Q)=>D.item_id.localeCompare(Q.item_id)||D.path.localeCompare(Q.path)||D.link_kind.localeCompare(Q.link_kind)),v=[];u.strictModeForcesPmInternals&&v.push("validate_files_tracked_all_strict_forces_pm_internals"),m.length>0&&v.push(`validate_files_orphaned_paths:${m.length}`);let k=[...a.remoteLinkedPaths].sort((D,Q)=>D.localeCompare(Q)),S=en(k,o),x=en(l,o),A=en(m,o),E=en(f.map(D=>`${D.path}:${D.classification}:owner_candidate=${D.owner_candidate?.id??"unowned"}`),o),b=o?f:en(Q_(f),!1).values,P=en(c_(p),o),z=qh(w,p,D=>c.get(D),s,o?1/0:bc);return z.active_missing_linked_paths_count>0&&v.push(`validate_files_missing_linked_paths:${z.active_missing_linked_paths_count}`),{check:{name:"files",status:v.length===0?"ok":"warn",ok:v.length===0,details:{workspace_root:t,scan_mode_requested:d.requestedMode,scan_mode_applied:d.appliedMode,strict_tracked_all_mode:u.strictTrackedAllMode,strict_mode_forces_pm_internals:u.strictModeForcesPmInternals,strict_mode_forces_pm_internals_notice:u.strictModeForcesPmInternals?"tracked-all-strict force-enables PM internals; pass --include-pm-internals to make inclusion explicit.":null,file_list_detail_mode:o?"full":"summary",file_list_summary_limit:bc,candidate_scan_source:d.source,include_pm_internals:u.includePmInternalsEffective,include_pm_internals_requested:i,pm_internal_candidate_prefixes:u.pmInternalCandidatePrefixes,pm_internal_excluded_count:u.excludedPmInternalPaths.length,excluded_total:u.excludedPmInternalPaths.length,excluded_by_reason:u.excludedByReason,linked_project_paths:a.linkedProjectPaths.size,remote_linked_paths_count:k.length,remote_linked_paths_total:S.total,remote_linked_paths:S.values,remote_linked_paths_truncated:S.truncated,candidate_total_raw:d.candidateTotal,candidate_scanned_raw:d.candidateScanned,candidate_total:u.candidateFiles.length,candidate_scanned:u.candidateFiles.length,scanned_candidate_files:u.candidateFiles.length,missing_linked_paths_count:l.length,missing_linked_paths_total:x.total,missing_linked_paths:x.values,missing_linked_paths_truncated:x.truncated,missing_linked_paths_moved_count:h,missing_linked_paths_deleted_count:p.filter(D=>D.classification==="deleted").length,missing_linked_paths_malformed_count:p.filter(D=>D.classification==="malformed").length,missing_linked_path_classifications:P.values,missing_linked_path_classifications_truncated:P.truncated,...z,orphaned_paths_count:m.length,orphaned_paths_total:A.total,orphaned_paths:A.values,orphaned_paths_truncated:A.truncated,orphaned_path_classifications:E.values,orphaned_path_classifications_truncated:E.truncated,orphaned_path_rows_count:f.length,orphaned_path_rows:b}},warnings:v,staleLinkPruneRows:w}}function F0(e,t){let n=[];return e.forEach(({item:r,linkedTest:i},o)=>{let s=t[o];if(s.trusted)return;let a=_c(i.command??"");n.push(`${r.id}:${s.source_ref??"unknown"}->${s.current_source_ref??"unknown"}:${a}`)}),n}async function rg(e,t,n,r){let i=new Set(e.map(x=>x.id.toLowerCase())),o=0,s=0,a=new Set,c=[],l=e.flatMap(x=>(x.tests??[]).map(A=>({item:x,linkedTest:A}))),d=await uc(mc()),u=await E_(r,l.map(({linkedTest:x})=>x),d),m=F0(l,u);for(let{item:x,linkedTest:A}of l){if(typeof A.command!="string"||A.command.trim().length===0)continue;o+=1;let E=y_(A.command,t);if(E.length!==0){s+=E.length;for(let b of E)a.add(b),i.has(b.toLowerCase())||c.push(`${x.id}:${b}:${_c(A.command)}`)}}let f=[...new Set(c)].sort((x,A)=>x.localeCompare(A)),p=[...new Set(f.map(x=>x.split(":")[1]??""))].filter(x=>x.length>0).sort((x,A)=>x.localeCompare(A)),_=[];f.length>0&&_.push(`validate_command_references_stale_pm_ids:${f.length}`),m.length>0&&_.push(`validate_linked_test_trust_unacknowledged:${m.length}`);let h=n?Number.POSITIVE_INFINITY:Be,w=oe(f,h),v=oe(p,h),k=oe([...a].sort((x,A)=>x.localeCompare(A)),h),S=oe(m,h);return{check:{name:"command_references",status:_.length===0?"ok":"warn",ok:_.length===0,details:{checked_items:e.length,linked_commands_scanned:o,referenced_pm_ids_count:s,unique_referenced_pm_ids_count:a.size,unique_referenced_pm_ids:k.values,unique_referenced_pm_ids_truncated:k.truncated,linked_test_trust_current_source_ref:d??null,untrusted_linked_tests_count:m.length,untrusted_linked_tests:S.values,untrusted_linked_tests_truncated:S.truncated,stale_pm_id_references_count:f.length,stale_pm_ids_count:p.length,stale_pm_ids:v.values,stale_pm_ids_truncated:v.truncated,stale_pm_id_reference_rows:w.values,stale_pm_id_reference_rows_truncated:w.truncated}},warnings:_}}function U0(e,t){let n=Qr(e.map(c=>({ref:c.id,version:Zr(c)}))),r=[];n.outdated.length>0&&r.push(`validate_format_version_outdated_items:${n.outdated.length}`),n.ahead.length>0&&r.push(`validate_format_version_ahead_items:${n.ahead.length}`);let i=t?Number.POSITIVE_INFINITY:Be,o=oe(n.outdated,i),s=oe(n.ahead,i),a=n.ahead.length>0?"error":n.outdated.length>0?"warn":"ok";return{check:{name:"format_version",status:a,ok:a==="ok",details:{checked_items:e.length,current_format_version:Gl,outdated_items_count:n.outdated.length,outdated_items:o.values,outdated_items_truncated:o.truncated,ahead_items_count:n.ahead.length,ahead_items:s.values,ahead_items_truncated:s.truncated}},warnings:r}}var Sc="pm validate auto-fix";async function ig(e,t,n){switch(e.kind){case"set_closed_at":await Hh(e,t);return;case"set_resolution":case"set_close_reason":case"set_estimate":case"reparent":case"unset_parent":{let r={message:Sc};if(e.kind==="set_resolution"?r.resolution=e.value:e.kind==="set_close_reason"?r.closeReason=e.value:e.kind==="set_estimate"?r.estimatedMinutes=e.value:e.kind==="reparent"?r.parent=e.parent_id:r.unset=["parent"],!n.runUpdate)throw new y("Applying validate metadata/lifecycle fixes requires a runUpdate mutation service.",g.USAGE);await n.runUpdate(e.item_id,r,t);return}case"prune_file_link":throw new Error(`Unsupported non-batched fix kind: ${e.kind}`);case"prune_doc_link":throw new Error(`Unsupported non-batched fix kind: ${e.kind}`)}}function yc(e){return e.kind!=="prune_file_link"&&e.kind!=="prune_doc_link"?null:`${e.kind}:${e.item_id}`}async function og(e,t,n){let r=[],i=[],o=new Map;for(let s of e.filter(a=>yc(a)===null))try{await ig(s,t,n),r.push(s)}catch(a){i.push({fix:s,error:a})}for(let s of e.filter(a=>yc(a)!==null)){let a=yc(s),c=o.get(a);c?c.push(s):o.set(a,[s])}for(let s of o.values()){let a=s[0];if(!a)continue;let c=s.map(l=>l.path).filter(l=>typeof l=="string"&&l.length>0);try{a.kind==="prune_file_link"?await f_(a.item_id,{remove:c,message:Sc},t):await u_(a.item_id,{remove:c,message:Sc},t),r.push(...s)}catch(l){i.push(...s.map(d=>({fix:d,error:l})))}}return{applied:r,failed:i}}var ZH={applyValidateFix:ig,applyValidateFixes:og,attachValidateFixHints:M_,buildCommandReferencesCheck:rg,buildDependencyReferencesCheck:B_,buildCloseReasonBackfillRows:H_,buildFilesCheck:ng,buildLifecycleCheck:tg,buildLifecycleDependencyGraph:q_,buildLifecycleParentGraph:fc,buildEstimateBackfillRows:W_,buildMetadataCounts:U_,buildMissingFieldOccurrences:z_,buildOrphanedPathRows:Z_,classifyOrphanedPath:Y_,collectDefaultProjectFileCandidates:kc,collectTrackedGitFileCandidates:L_,detectLifecycleDependencyCycles:K_,detectLifecycleParentCycles:pc,escapeRegExp:G_,extractItemIds:V_,findLifecycleDependencyCycleComponents:J_,isMetadataFieldMissing:D_,linkedArtifactPathExceedsFilesystemLimits:eg,listFilesRecursive:xc,resolveDependencyCycleSeverity:$_,resolveParentCycleSeverity:O_,resolveFileScanMode:P_,resolveLifecycleDependencyCycleSamplePath:xo,resolveRequestedChecks:j_,resolveValidateMetadataProfile:T_,resolveWorkspaceRoot:N_,sharedDirectoryPrefixLength:X_,summarizeOrphanedPathRows:Q_,summarizeDuplicateIssueCodes:F_,toMeaningfulString:qe};function z0(e,t){t>0&&e.push(`merge_receipt_evidence_invalid:${t}`)}async function H0(e,t,n,r){let i=await Vh(e,new Set(t.map(h=>h.id)),n,{schema:r.schema,extensionFieldNames:nn(H())}),o=[];i.unreadable_item_files.length>0&&o.push(`validate_storage_unreadable_items:${i.unreadable_item_files.length}`),i.duplicate_item_ids.length>0&&o.push(`validate_storage_duplicate_item_ids:${i.duplicate_item_ids.length}`),i.history_conflict_marker_streams.length>0&&o.push(`validate_storage_history_conflict_markers:${i.history_conflict_marker_streams.length}`),i.history_unparseable_streams.length>0&&o.push(`validate_storage_unparseable_history:${i.history_unparseable_streams.length}`),i.resurrected_items.length>0&&o.push(`validate_storage_resurrected_items:${i.resurrected_items.length}`),i.unparseable_config_files.length>0&&o.push(`validate_storage_unparseable_config:${i.unparseable_config_files.length}`);let s=o.length,a=await oo(e);a.tracked_path_count>0&&o.push(`validate_storage_tracked_runtime_cache_files:${a.tracked_path_count}`);let c=await ji(e,An(r));c.status==="drift"&&o.push(`validate_merge_fence_drift:${c.missing_patterns.length+c.stale_patterns.length}`);let l=await tt(e),d=l===null?null:await Rn(l);d!==null&&d.status!=="ok"&&o.push(`validate_merge_driver_configuration:${d.missing_keys.length+d.drifted_keys.length}`);let u=await yt(l??e,{includeLossless:!0,pmRoot:e}),m=u.receipts,{pendingDecisions:f,lossless:p}=Nn(m);f.length>0&&o.push(`validate_merge_decisions_unreviewed:${f.length}`),z0(o,u.invalid_evidence_count);let _=s>0?"error":o.length>0?"warn":"ok";return{check:{name:"storage_integrity",status:_,ok:_==="ok",details:{...i,merge_fence:c,merge_driver_configuration:d,pending_merge_decision_count:f.length,pending_merge_decision_items:[...new Set(f.map(h=>h.item_id))].sort((h,w)=>h.localeCompare(w)),lossless_merge_receipt_count:p.length,invalid_merge_receipt_evidence_count:u.invalid_evidence_count,invalid_merge_receipt_evidence_details:u.invalid_evidence,invalid_merge_receipt_evidence_details_truncated:u.invalid_evidence_truncated,lossless_merge_receipt_items:[...new Set(p.map(h=>h.item_id))].sort((h,w)=>h.localeCompare(w)),tracked_runtime_cache:{tracker_relative_root:a.tracker_relative_root,tracked_paths:a.tracked_paths,tracked_path_count:a.tracked_path_count,remediation_command:a.remediation_command}}},warnings:o}}function st(e,t,n){n&&M_(t.check,t.warnings),e.checks.push(t.check),e.warnings.push(...t.warnings)}async function W0(e){let t={closureTimestampFixes:[],checks:[],warnings:[...e.initialWarnings],closeReasonBackfillRows:[],estimateBackfillRows:[],resolutionBackfillRows:[],terminalParentFixRows:[],staleLinkPruneRows:[]},n=e.options.fixHints===!0,r=e.options.verboseDiagnostics===!0||e.options.allAffectedIds===!0||e.global.json===!0;if(e.requestedChecks.has("completeness")){let i=await gu(e.pmRoot,e.items,r?1/0:Be,e.sourceIncomplete);st(t,i,n)}if(e.requestedChecks.has("metadata")){let i=x0(e.items,e.metadataPolicy,e.statusRegistry,r,[e.settings.id_prefix]);t.closeReasonBackfillRows=i.closeReasonBackfillRows,t.estimateBackfillRows=i.estimateBackfillRows;let o=await zh(e.pmRoot,e.items,e.statusRegistry,e.options.autoFix===!0||n,r?1/0:Be);t.closureTimestampFixes=o.fixes,Object.assign(i.check.details,o.details),i.warnings.push(...o.warnings),i.check.ok=i.warnings.length===0,i.check.status=i.check.ok?"ok":"warn",st(t,i,n)}if(e.requestedChecks.has("resolution")){let i=I0(e.items,e.statusRegistry,r);t.resolutionBackfillRows=i.resolutionBackfillRows,st(t,i,n)}if(e.requestedChecks.has("lifecycle")){let i=tg(e.items,!!e.options.checkStaleBlockers,e.dependencyCycleSeverity,e.parentCycleSeverity,e.statusRegistry,e.lifecyclePatternPolicy,r,e.settings.id_prefix);t.terminalParentFixRows=i.terminalParentFixRows,st(t,i,n),st(t,B_(e.items,r,e.statusRegistry),n)}if(e.requestedChecks.has("files")){let i=await ng(e.items,e.workspaceRoot,e.pmRoot,e.fileScanMode,!!e.options.includePmInternals,!!e.options.verboseFileLists,e.statusRegistry);t.staleLinkPruneRows=i.staleLinkPruneRows,st(t,i,n)}return e.requestedChecks.has("command_references")&&st(t,await rg(e.items,e.settings.id_prefix,r,e.pmRoot),n),e.requestedChecks.has("history_drift")&&st(t,await Eo(e.pmRoot,e.items,r),n),e.requestedChecks.has("format_version")&&st(t,U0(e.items,r),n),e.requestedChecks.has("storage_integrity")&&st(t,await H0(e.pmRoot,e.items,G(e.settings,H()).type_to_folder,e.settings),n),t}function G0(e,t,n){let r=[];return e.autoFix===!0&&(r.push(...t.closureTimestampFixes),r.push(...Yh(t.closeReasonBackfillRows)),r.push(...Kh(t.resolutionBackfillRows)),r.push(...Xh(t.estimateBackfillRows,n.validation.estimate_defaults_by_type)),r.push(...Zh(t.terminalParentFixRows))),e.pruneMissing===!0&&r.push(...Qh(t.staleLinkPruneRows)),r}async function q0(e,t,n,r,i,o){if(e.autoFix!==!0&&e.pruneMissing!==!0)return;let s=G0(e,t,n),{applicable:a,gated:c}=t_(s,r),l=e.dryRun===!0,d=[],u=[];if(!l){let m=await og(a,i,o);d.push(...m.applied.map(Rr)),u.push(...m.failed.map(({fix:f,error:p})=>({...Rr(f),error:p instanceof Error?p.message:String(p)})))}return{mode:l?"dry_run":"apply",auto_fix:e.autoFix===!0,prune_missing:e.pruneMissing===!0,granted_fix_scopes:[...r].sort((m,f)=>m.localeCompare(f)),planned_count:s.length,applied_count:d.length,gated_count:c.length,failed_count:u.length,planned_fixes:s.map(Rr),applied_fixes:d,gated_fixes:c.map(m=>({...Rr(m),gate_hint:`Withheld: re-run with --fix-scope ${m.gate} to apply.`})),failed_fixes:u}}async function sg(e,t,n={}){Ll(e.counts===!0,e.full===!0,"--counts");let r=e.autoFix===!0||e.pruneMissing===!0;if(e.dryRun===!0&&!r)throw new y("--dry-run requires --auto-fix or --prune-missing (there is nothing to preview otherwise).",g.USAGE);if(e.fixScope!==void 0&&e.fixScope.length>0&&e.autoFix!==!0)throw new y("--fix-scope requires --auto-fix.",g.USAGE);let i=e_(e.fixScope),o=N(process.cwd(),t.path);await te(o);let s=await T(o),a=_e(s.schema),c=G(s,H()),l=j_(e),d=[],u=await So({includeBody:["history_drift","metadata","completeness"].some(U=>l.has(U)),pmRoot:o,settings:s,typeToFolder:c.type_to_folder,warnings:d}),m=d.length>0;if(l.has("history_drift")){let U=await sr(o);U.actionable_unknown_event_count>0&&d.push(`validate_history_unknown_author_events:${U.actionable_unknown_event_count}`)}let f=typeof e.metadataProfile=="string"?"option":"settings",p=T_(typeof e.metadataProfile=="string"?e.metadataProfile:s.validation.metadata_profile),_=f0(p,f,s.validation.metadata_required_fields),h=u0(s),w=$_(e.dependencyCycleSeverity),v=O_(e.parentCycleSeverity),k=P_(e.scanMode),S=N_(o),x=await W0({requestedChecks:l,options:e,global:t,pmRoot:o,workspaceRoot:S,settings:s,items:u,statusRegistry:a,metadataPolicy:_,lifecyclePatternPolicy:h,dependencyCycleSeverity:w,parentCycleSeverity:v,fileScanMode:k,initialWarnings:[...new Set(d)],sourceIncomplete:m}),A=r?await q0(e,x,s,i,t,n):void 0,E=[...new Set(x.warnings)].sort((U,z)=>U.localeCompare(z)),P={ok:!x.checks.some(U=>U.status==="error"),has_warnings:E.length>0,checks:x.checks,warnings:E,...A!==void 0?{fixes:A}:{},generated_at:C(),projection:{mode:"full",declared_field_groups:[{name:"diagnostic_rows",restore_with:"--full"}],included_field_groups:["diagnostic_rows"]}};return e.counts!==!0?P:{...d0(P),projection:{mode:"counts",declared_field_groups:[{name:"diagnostic_rows",restore_with:"--full"}],included_field_groups:[]}}}import{execFile as B0}from"node:child_process";import{promisify as V0}from"node:util";(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]="894154aa-88b8-5a3b-a03c-e3ef8a85f1c0")}catch{}})();var J0=V0(B0),K0=16,Y0=3e4;function X0(e,t,n){if(!(e.keys[t].value_type==="number"?typeof n.value=="number"&&Number.isFinite(n.value):Array.isArray(n.value)&&n.value.every(o=>typeof o=="string")))throw new TypeError(`assurance provider ${e.id} key ${t} returned the wrong value type`);if(!Number.isInteger(n.population_size)||n.population_size<0||!Number.isFinite(n.cost)||n.cost<0)throw new TypeError(`assurance provider ${e.id} returned an invalid population or cost`);return n}function Z0(e,t){let n=e.keys[t.key];if(!n)throw new TypeError(`assurance provider ${e.id} does not declare key ${t.key}`);let r=t.parameters??{},i=n.parameters??{};for(let o of Object.entries(i).filter(([,s])=>s.required===!0).map(([s])=>s))if(!Object.hasOwn(r,o))throw new TypeError(`assurance provider ${e.id} key ${t.key} requires parameter ${o}`);for(let[o,s]of Object.entries(r)){let a=i[o];if(!a)throw new TypeError(`assurance provider ${e.id} key ${t.key} does not declare parameter ${o}`);if(s===null||typeof s!==a.type)throw new TypeError(`assurance provider ${e.id} parameter ${o} must be ${a.type}`)}return{...r}}async function Q0(e,t,n,r){let i=Z0(e,t),o=Promise.resolve().then(()=>e.resolve({provider:e.id,key:t.key,parameters:i,trigger:r,pm_root:n,...Dl(n)}));o.catch(()=>{});let s;try{let a=await Promise.race([o,new Promise((c,l)=>{s=setTimeout(()=>l(new TypeError(`assurance provider ${e.id} timed out`)),e.timeout_ms??Y0),s.unref?.()})]);return X0(e,t.key,a)}finally{clearTimeout(s)}}function cg(e,t,n,r){let i=e;for(let o of t.split(".")){if(typeof i!="object"||i===null||Array.isArray(i))throw new Ze(`assurance field ${t} is not present`,{source_kind:n,field:t,...r?{check:r}:{}});i=i[o]}if(typeof i=="number"&&Number.isFinite(i)||Array.isArray(i)&&i.every(o=>typeof o=="string"))return i;throw new Ze(`assurance field ${t} must resolve to a finite number or string array`,{source_kind:n,field:t,...r?{check:r}:{}})}function ag(e,t,n,r){let i=e.checks.find(s=>s.name===t);if(!i)throw new Ze(`assurance check ${t} is not present`,{source_kind:r,field:n,check:t});return{value:n==="status"||n==="ok"?i.ok?0:1:cg(i.details,n,r,t),population_size:1,cost:e.checks.length}}async function eC(e,t){if(t?.trim())return t.trim();try{let{stdout:n}=await J0("git",["rev-parse","HEAD^{commit}"],{cwd:e,encoding:"utf8",timeout:5e3,windowsHide:!0});return n.trim()}catch{return"working-copy"}}async function tC(e,t){let n=new Array(t.length),r=0,i=Array.from({length:Math.min(K0,t.length)},async()=>{for(;r<t.length;){let o=r;r+=1;let s=t[o],a=await Ft(Lt(e,s.id),s.id);n[o]=a.map(c=>({op:c.op,author:c.author,agent_harness:c.agent_harness,agent_model:c.agent_model}))}});return await Promise.all(i),n.flat()}async function Dr(e,t={}){let n=await T(e),r=G(n),i=_e(n.schema),s=(t.strict_read===!0?(await Kd(void 0,{status:"all",full:!0,noTruncate:!0,strictRead:!0},{path:e})).items:await hn(e,n.item_format,r.type_to_folder,void 0,n.schema)).map(f=>({...f,id:f.id,status:f.status,type:f.type})),a={path:e},c=H(),l=Object.fromEntries((c?.assurance_providers??[]).map(f=>[f.definition.id,{cost_class:f.runtime_definition.cost_class,network:f.runtime_definition.network}])),d=new Map,u,m;return{tree_id:t.resolve_tree===!1?t.tree_id??"working-copy":await eC(e,t.tree_id),items:s,history:t.include_history===!1?[]:await tC(e,s),terminal_statuses:[...i.terminal_statuses],provider_capabilities:{...l,...t.provider_capabilities},external:async f=>{if(f.kind==="graph"){let h=R({operation:f.operation,parameters:f.parameters??{}}),w=d.get(h);w===void 0&&(w=Zd(f.operation,void 0,void 0,{...f.parameters,full:!0},a),d.set(h,w));let v=await w;return{value:cg(v,f.field,f.kind),population_size:s.length,cost:s.length}}if(f.kind==="validate"){u??=sg({counts:!0},a);let h=await u;return ag(h,f.check,f.field,f.kind)}if(f.kind==="health"){m??=jh(a,{checkOnly:!0,full:!0});let h=await m;return ag(h,f.check,f.field,f.kind)}let p=t.providers?.[f.provider];if(p)return p(f);let _=dd(c,f.provider);if(!_)throw new TypeError(`assurance provider ${f.provider} is not registered`);return Q0(_.runtime_definition,f,e,t.trigger??"sdk")}}}import{createHash as nC}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]="538168d9-116c-5e72-81a4-a23e021c48f5")}catch{}})();function lg(e){if(typeof e!="object"||e===null||Array.isArray(e))throw new TypeError("recurrence coverage request must be an object");let t=e;if(Object.hasOwn(t,"change"))throw new TypeError("recurrence coverage request does not accept change");if(t.uncoveredOnly!==void 0&&typeof t.uncoveredOnly!="boolean")throw new TypeError("recurrence coverage request.uncoveredOnly must be a boolean");let{policy:n,cursor:r,limit:i}=Kr({...t,change:{}});return{policy:n,...r===void 0?{}:{cursor:r},...i===void 0?{}:{limit:i},...t.uncoveredOnly===void 0?{}:{uncoveredOnly:t.uncoveredOnly}}}function rC(e,t){if(e===void 0)return 0;let n;try{n=JSON.parse(Buffer.from(e,"base64url").toString("utf8"))}catch{throw new TypeError("recurrence coverage cursor is invalid")}if(typeof n!="object"||n===null||Array.isArray(n))throw new TypeError("recurrence coverage cursor is invalid");let r=n;if(r.fingerprint!==t||typeof r.offset!="number"||!Number.isSafeInteger(r.offset)||r.offset<0)throw new TypeError("recurrence coverage cursor does not match this evidence and filter");return r.offset}function iC(e,t,n,r,i,o){let s=Object.fromEntries(Yo.map(f=>[f,0])),a=0,c=0,l=0,d=0,u=[],m=nC("sha256").update(i);for(let f of r){let p=e.membership.get(f),_=n.has(f),h=p.family_ids.length>0;h&&_&&(a+=1),h||(c+=1),_||(l+=1);let w=t.get(f)?.escape_class;w!==void 0&&Yo.includes(w)&&(s[w]+=1,d+=1),m.update(R([f,_,t.get(f)??null,p.id,p.family_ids])),(!o||!h||!_)&&u.push(f)}return{classCounts:s,coveredCount:a,uncoveredCount:c,missingCount:l,classifiedCount:d,selected:u,fingerprint:m.digest("hex")}}function dg(e,t,n={}){Hl(e);let r=n.limit??25;if(!Number.isSafeInteger(r)||r<1||r>100)throw new TypeError("recurrence coverage limit must be an integer from 1 through 100");let i=new Set,o=new Map;for(let S of t){if(i.has(S.id))throw new TypeError(`Duplicate recurrence item ${S.id}`);i.add(S.id);let x=Jr(S);x!==void 0&&o.set(S.id,x)}let s=Fl(e.families,o),a=[...s.membership.keys()].sort(),c=R({policy:e,uncoveredOnly:n.uncoveredOnly===!0}),{classCounts:l,coveredCount:d,uncoveredCount:u,missingCount:m,classifiedCount:f,selected:p,fingerprint:_}=iC(s,o,i,a,c,n.uncoveredOnly===!0),h=rC(n.cursor,_);if(h>p.length)throw new TypeError("recurrence coverage cursor offset exceeds the selected population");let w=p.slice(h,h+r).map(S=>{let x=s.membership.get(S),A=i.has(S);return{item_id:S,lineage_id:x.id,lineage_item_count:x.item_ids.length,family_ids:x.family_ids,present:A,...A?x.family_ids.length===0?{finding:"unregistered_recurrence_item"}:{}:{finding:"missing_recurrence_item"}}}),v=h+w.length,k=a.length===0?null:l.production_defect/a.length;return{ok:u===0&&m===0,fingerprint:_,items:w,total:p.length,has_more:v<p.length,...v<p.length?{next_cursor:Buffer.from(JSON.stringify({fingerprint:_,offset:v})).toString("base64url")}:{},population:{scope:"all_recorded_recurrence_items",item_count:a.length,lineage_count:s.lineages.length,edge_count:s.edge_count,covered_item_count:d,uncovered_item_count:u,missing_item_count:m,classified_item_count:f,unclassified_item_count:a.length-f,class_counts:l,escape_rate:f===a.length?k:null,escape_rate_lower_bound:k},budget_scope:"registered_families_only",cost:{items_scanned:t.length,edges_scanned:s.edge_count,row_limit:r},row_contract:{row_keys:["items"],jq_selector:".items[]"}}}import{createHash as oC}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]="77425e45-ae19-569b-b196-e024f9e2729f")}catch{}})();var Ic,ug=["list","show","put","remove","run","verdicts","presets","apply","derive","promote","risk","lineages"],Ac=["measurement","assertion","gate"];function sC(e){if(ug.includes(e))return e;throw ci({command_path:"assurance",token:e,allowed:ug,display_name:"assurance action"})}function zn(e,t,n){throw new y(t,g.USAGE,{code:"missing_required_argument",required:`Provide the missing assurance operand: ${e}.`,examples:[n],recovery:{missing:[e]}})}function aC(e){if(!e)return zn("kind",`Assurance declaration kind is required. Expected: ${Ac.join(", ")}`,"pm assurance list measurement");if(Ac.includes(e))return e;throw new y(`Assurance declaration kind is required. Expected: ${Ac.join(", ")}`,g.USAGE)}function mg(e){if(!e)return zn("preset",`Assurance preset is required. Expected: ${ar.join(", ")}`,"pm assurance apply software-delivery --owner <pm-item-id>");if(ar.includes(e))return e;throw new y(`Assurance preset is required. Expected: ${ar.join(", ")}`,g.USAGE)}function Rc(e){return e.owner?.trim()?e.owner.trim():zn("owner","assurance preset and derivation actions require --owner <pm-item-id>","pm assurance apply software-delivery --owner <pm-item-id>")}function cC(e,t){let n=t;if(typeof t=="string")if(!t.trim())n=void 0;else try{n=JSON.parse(t)}catch(r){throw new y("assurance definition must be valid JSON",g.USAGE,{reason:r instanceof Error?r.message:"invalid_json"})}if(typeof n!="object"||n===null||Array.isArray(n))throw new y("assurance put requires a JSON object definition",g.USAGE);return n}async function lC(e){let[t,n,r]=await Promise.all([nr(e,"measurement"),nr(e,"assertion"),nr(e,"gate")]);return{version:1,measurements:t.items,assertions:n.items,gates:r.items}}function fg(e,t){return t===!0?{id:e.id}:e}async function dC(e,t){let n=t.authorization_decision;if(!n)return[];let r=await Dr(e,{include_history:!1,resolve_tree:!1}),i=r.items.find(s=>s.id===n),o=new Set(r.terminal_statuses);if(!i||i.type.toLowerCase()!=="decision"||!o.has(i.status))throw new y(`Assurance authorization ${n} must name a terminal Decision item`,g.USAGE);return[i.id]}async function uC(e,t){let n=bs(e.limit,"assurance verdict limit");if(n!==void 0&&(n<1||n>wn))throw new y(`assurance verdict limit must be an integer from 1 through ${wn}`,g.USAGE);let r=await hu(t,{gate_id:e.id??e.gate,limit:n});return{items:r,count:r.length,row_contract:{row_keys:["items"],jq_selector:".items[]"}}}async function mC(e,t,n){if(e==="presets"){if(t.preset??t.id)return Ai(mg(t.preset??t.id),Rc(t));let i=ar.map(o=>{let s=Ai(o,"pm-owner");return{id:o,title:s.title,description:s.description}});return{items:i,count:i.length,row_contract:{row_keys:["items"],jq_selector:".items[]"}}}if(e==="apply")return yn(()=>Wu(n,mg(t.preset??t.id),Rc(t),{author:t.author,message:t.message}));if(e==="derive"){let i=await Gu(await Dr(n,{resolve_tree:!1,trigger:"derive"}),Rc(t)),o=t.apply?await yn(()=>qu(n,i,{author:t.author,message:t.message??"Accept observation-derived assurance proposals"})):void 0;return{items:i,count:i.length,...o?{applied:o}:{}}}if(!t.id)return zn("assertion-id","assurance promote requires an assertion id","pm assurance promote <assertion-id> --enforcement warn");if(t.enforcement!=="warn"&&t.enforcement!=="block")throw new y("assurance promote requires --enforcement warn|block",g.USAGE);let r=await gs(n,"assertion",t.id);return yn(()=>Bu(n,r,t.enforcement,{author:t.author,message:t.message}))}async function fC(e,t,n){if(!e.id)return zn("gate-id","assurance run requires a gate id","pm assurance run <gate-id> --trigger ci --dry-run");let r=e.id;if(!e.trigger)throw new y("assurance run requires a trigger",g.USAGE);if(!Wt.includes(e.trigger))throw new y(`Unknown assurance trigger ${e.trigger}. Expected: ${Wt.join(", ")}`,g.USAGE);let i=e.trigger,[o,s]=await Promise.all([lC(t),Dr(t,{...n.workspace,tree_id:e.tree,trigger:i})]),a=await Qd(()=>uu(r,o,s,{trigger:i,dry_run:e.dry_run===!0}));return a.dry_run||await pu(t,a,{author:e.author,message:e.message}),a}function pg(e){throw e instanceof y?e:new y(e instanceof Error?e.message:"assurance risk request is invalid",g.USAGE)}function pC(e){if(e.limit!==void 0)throw new y(`assurance ${e.action} does not accept --limit; set limit inside the definition`,g.USAGE);let t=e.definition;if(typeof t=="string")try{t=JSON.parse(t)}catch(n){throw new y(`assurance ${e.action} definition must be valid JSON`,g.USAGE,{reason:n instanceof Error?n.message:"invalid_json"})}try{return e.action==="lineages"?lg(t):Kr(t)}catch(n){return pg(n)}}function hC(e,t){let n=new Set;for(let[r,i]of t)e.item_fingerprints.get(r)!==i&&n.add(r);for(let r of e.item_fingerprints.keys())t.has(r)||n.add(r);return n}function _C(e,t,n){let r=R(t.policy),i=Ic?.pm_root===e?Ic:void 0,o=new Map(n.map(l=>[l.id,oC("sha256").update(R([jl(l),Jr(l)])).digest("hex")])),s=i?.policy_serialized===r?i:void 0,a=s?hC(s,o):new Set,c=Ul(t.policy,s?n.filter(l=>a.has(l.id)):n,s?{previous_index:s.index,changed_item_ids:[...a]}:{});return Ic={pm_root:e,policy_serialized:r,item_fingerprints:o,index:c},c}async function gC(e,t){let n=pC(e),r=await Dr(t,{strict_read:!0,include_history:!1,resolve_tree:!1});try{return"change"in n?zl(_C(t,n,r.items),n.change,{cursor:n.cursor,limit:n.limit}):dg(n.policy,r.items,n)}catch(i){return pg(i)}}async function yC(e,t={},n={}){let r=sC(e.action),i=N(process.cwd(),t.path);if(r==="presets"||r==="apply"||r==="derive"||r==="promote")return mC(r,e,i);if(r==="verdicts")return uC(e,i);if(r==="run")return fC(e,i,n);if(["risk","lineages"].includes(r))return gC(e,i);let o=aC(e.kind);if(r==="list")return nr(i,o);if(!e.id)return zn("id",`assurance ${r} requires an id`,`pm assurance ${r} ${o} <id>`);let s=e.id;if(r==="show")return gs(i,o,s);if(r==="remove"){let d=await yn(()=>fu(i,o,s,{author:e.author,message:e.message}));return fg(d,e.idOnly)}let a=cC(o,e.definition);if(a.id!==s)throw new y(`Assurance definition id ${a.id} does not match requested id ${s}`,g.USAGE);let c={author:e.author,message:e.message,...o==="assertion"?{authorized_decision_ids:await dC(i,a)}:{}},l=await yn(()=>vi(i,o,a,c));return fg(l,e.idOnly)}function DW(e,t,n){let r={...e,...t};return yC({action:O(r,"subcommand")??O(r,"assuranceAction")??O(r,"operation")??"",kind:O(r,"kind"),id:O(r,"id"),definition:r.definition,trigger:O(r,"trigger"),tree:O(r,"treeId")??O(r,"tree"),gate:O(r,"gate"),limit:bs(r.limit,"assurance verdict limit"),dry_run:r.dryRun===!0||r.dry_run===!0,fullChangedFields:r.fullChangedFields===!0,idOnly:r.idOnly===!0,author:O(r,"author"),message:O(r,"message"),preset:O(r,"preset"),owner:O(r,"owner"),apply:r.apply===!0,enforcement:O(r,"enforcement")},n)}import Hn from"node:fs/promises";import Oo from"node:path";import $o from"node:fs/promises";import Cc 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]="fe72275e-b195-5a7e-b963-a9f159f9c67c")}catch{}})();var wC=864e5;function vC(e){let t;try{t=JSON.parse(e)}catch{return null}if(typeof t!="object"||t===null||Array.isArray(t))return null;let n=t.created_at;return typeof n=="string"?n:null}async function bC(e,t){let n;try{n=await $o.readdir(e,{withFileTypes:!0})}catch(i){if(j(i))return[];throw i}let r=[];for(let i of n)if(i.isDirectory()){let o=Cc.join(e,i.name),s;try{s=await $o.readdir(o)}catch(a){j(a)||t.push(`checkpoint_subdir_unreadable:${i.name}`);continue}for(let a of s)a.endsWith(".json")&&r.push(`${i.name}/${a}`)}else i.name.endsWith(".json")&&r.push(i.name);return r.sort()}async function hg(e,t){let{dryRun:n,hooks:r}=t,i=t.now??Date.now(),o=Math.max(0,t.retentionDays)*wC,s=Cc.join(e,"checkpoints"),a={scanned:0,removed:[],retained:[],warnings:[],entries:[]},c=await bC(s,a.warnings);for(let l of c){let d=Cc.join(s,l),u=`checkpoints/${l}`;a.scanned+=1,r?.onRead&&a.warnings.push(...await r.onRead(d));let m;try{m=await $o.readFile(d,"utf8")}catch(w){if(j(w)){a.scanned-=1;continue}a.warnings.push(`checkpoint_unreadable:${l}`),a.retained.push(u),a.entries.push({file:u,created_at:null,age_seconds:null,stale:!1,reason:"unparseable"});continue}let f=vC(m),p=f===null?Number.NaN:Date.parse(f);if(!Number.isFinite(p)){a.warnings.push(`checkpoint_unparseable:${l}`),a.retained.push(u),a.entries.push({file:u,created_at:f,age_seconds:null,stale:!1,reason:"unparseable"});continue}let _=i-p,h={file:u,created_at:f,age_seconds:Math.floor(_/1e3),stale:_>o,reason:_>o?"expired":"active"};if(!h.stale){a.retained.push(u),a.entries.push(h);continue}if(!n){try{await $o.unlink(d)}catch(w){if(!j(w)){a.warnings.push(`checkpoint_remove_failed:${l}`),a.retained.push(u),a.entries.push(h);continue}}r?.onWrite&&a.warnings.push(...await r.onWrite(d))}a.removed.push(u),a.entries.push(h)}return a}import Tc from"node:fs/promises";import _g 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]="9189cea6-950f-5594-9321-b7590171297c")}catch{}})();var kC=1440*60*1e3,SC=new Set(["committed","compensated"]);function EC(e){let t;try{t=JSON.parse(e)}catch{return{status:null,updatedAt:null}}if(typeof t!="object"||t===null||Array.isArray(t))return{status:null,updatedAt:null};let n=t;return{status:typeof n.status=="string"?n.status:null,updatedAt:typeof n.updatedAt=="string"?n.updatedAt:null}}function xC(e,t,n,r,i){let o=n===null?Number.NaN:Date.parse(n);if(t===null||!Number.isFinite(o))return{entry:{file:e,status:t,age_seconds:null,stale:!1,reason:"unparseable"},remove:!1};let s=r-o;return SC.has(t)?s>i?{entry:{file:e,status:t,age_seconds:Math.floor(s/1e3),stale:!0},remove:!0}:{entry:{file:e,status:t,age_seconds:Math.floor(s/1e3),stale:!1,reason:"fresh"},remove:!1}:{entry:{file:e,status:t,age_seconds:Math.floor(s/1e3),stale:!1,reason:"active"},remove:!1}}async function IC(e,t,n,r){let i=r.hooks?.onRead?await r.hooks.onRead(e):[],o=EC(await Tc.readFile(e,"utf8")),s=xC(t,o.status,o.updatedAt,r.nowMs,r.retentionMs);return s.entry.reason==="unparseable"&&i.push(`transaction_journal_unparseable:${n}`),s.remove&&!r.dryRun&&(await Tc.rm(e,{force:!0}),r.hooks?.onWrite&&i.push(...await r.hooks.onWrite(e))),{decision:s,warnings:i}}async function gg(e,t){let{dryRun:n,hooks:r}=t,i=t.now??Date.now(),o=Math.max(0,t.retentionDays)*kC,s=_g.join(e,"transactions","sdk"),a={scanned:0,removed:[],retained:[],warnings:[],entries:[]},c;try{c=(await Tc.readdir(s)).filter(l=>l.endsWith(".json")).sort((l,d)=>l.localeCompare(d))}catch(l){if(j(l))return a;throw l}for(let l of c){let d=_g.join(s,l),u=`transactions/sdk/${l}`,m=await IC(d,u,l,{dryRun:n,hooks:r,nowMs:i,retentionMs:o});a.warnings.push(...m.warnings),a.scanned+=1;let{decision:f}=m;if(!f.remove){a.retained.push(u),a.entries.push(f.entry);continue}a.removed.push(u),a.entries.push(f.entry)}return a}(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]="8e2e3b62-5eb1-5773-96bf-866b26a59345")}catch{}})();var Pr=["index","embeddings","runtime","locks","checkpoints","transactions"],AC=1440*60*1e3,RC=[{scope:"index",relativePath:"index/manifest.json",kind:"file"},{scope:"embeddings",relativePath:"search/embeddings.jsonl",kind:"file"},{scope:"embeddings",relativePath:"search/vectorization-status.json",kind:"file"},{scope:"embeddings",relativePath:"search/lancedb",kind:"directory"},{scope:"embeddings",relativePath:"search/pending-refresh.json",kind:"file"},{scope:"embeddings",relativePath:"search/pending-refresh.gate.lock",kind:"directory"},{scope:"runtime",relativePath:"runtime/test-runs",kind:"directory"},{scope:"runtime",relativePath:"runtime/history-drift-cache.json",kind:"file"}];async function CC(e,t,n){let r=t.relativePath,i=Oo.join(e,r),o=await He({path:i,scope:"project"});try{let s=await Hn.stat(i);if(t.kind==="file"&&!s.isFile())return{removed:!1,warnings:[...o,`not_a_file:${r}`]};if(t.kind==="directory"&&!s.isDirectory())return{removed:!1,warnings:[...o,`not_a_directory:${r}`]};if(n)return{removed:!0,warnings:o};t.kind==="file"?await Hn.unlink(i):await Hn.rm(i,{recursive:!0,force:!0});let a=await X({path:i,scope:"project",op:"gc:remove"});return{removed:!0,warnings:[...o,...a]}}catch(s){if(j(s))return{removed:!1,warnings:o};throw s}}async function TC(e,t){let n=[{relativePath:"runtime/workspace-snapshots/objects",prefix:".create-"},{relativePath:"runtime/workspace-snapshots/refs",prefix:".ref-"}],r=[],i=[],o=[],s=Date.now()-AC;for(let a of n){let c=Oo.join(e,a.relativePath);if(!await $(c))continue;let l=(await Hn.readdir(c)).filter(d=>d.startsWith(a.prefix)).sort();for(let d of l){let u=Oo.posix.join(a.relativePath,d),m=Oo.join(c,d);o.push(...await He({path:m,scope:"project"}));let f=await Hn.stat(m).catch(p=>{if(!j(p))throw p});if(f){if(f.mtimeMs>s){i.push(u);continue}r.push(u),!t&&(await Hn.rm(m,{recursive:!0,force:!0}),o.push(...await X({path:m,scope:"project",op:"gc:workspace_snapshot_temp_remove"})))}}}return{removed:r,retained:i,warnings:o}}function $C(e){if(!e||e.length===0)return[...Pr];let t=e.flatMap(r=>r.split(",")).map(r=>r.trim().toLowerCase()).filter(r=>r.length>0);if(t.length===0)throw new y(`--scope requires at least one value (${Pr.join(",")})`,g.USAGE);let n=new Set;for(let r of t){if(!Pr.includes(r))throw new y(`Invalid --scope value "${r}". Expected one or more of: ${Pr.join(", ")}`,g.USAGE);n.add(r)}return Pr.filter(r=>n.has(r))}function OC(e){let t=[];e.dryRun&&t.push("Dry-run preview only: no cache artifacts were deleted.");let n=e.scopes.includes("index")||e.scopes.includes("embeddings"),r=e.removed.some(i=>i==="index/manifest.json"||i==="search/embeddings.jsonl"||i==="search/vectorization-status.json"||i==="search/lancedb"||i==="search/pending-refresh.json"||i==="search/pending-refresh.gate.lock");return n&&r&&t.push('Search artifacts were removed; the semantic index (including any queued background refresh) is invalidated. Run "pm install search-advanced --project" if reindex is unavailable, then "pm reindex --mode keyword" (and "--mode semantic" when semantic search is enabled) before search-heavy workflows.'),e.removed.includes("runtime/history-drift-cache.json")&&t.push('History drift cache was removed; the next "pm health" run performs a full history-drift re-scan.'),!e.dryRun&&e.removed.some(i=>i.startsWith("checkpoints/"))&&t.push('Aged rollback checkpoints were removed; their "pm update-many"/"pm close-many --rollback" windows are no longer recoverable.'),!e.dryRun&&e.removed.some(i=>i.startsWith("transactions/"))&&t.push("Aged terminal workspace-transaction journals were removed; replaying those transactionIds re-executes their idempotent steps instead of short-circuiting."),t}async function nG(e,t={}){let n=N(process.cwd(),e.path);await te(n);let r=await T(n),i=t.dryRun===!0,o=$C(t.scope),s=RC.filter(p=>o.includes(p.scope)),a=[],c=[],l=[];for(let p of s){let _=await CC(n,p,i);_.removed?a.push(p.relativePath):c.push(p.relativePath),l.push(..._.warnings)}if(o.includes("runtime")){let p=await TC(n,i);a.push(...p.removed),c.push(...p.retained),l.push(...p.warnings)}let d;if(o.includes("locks")){let p=await bm(n,{dryRun:i,hooks:{onRead:_=>He({path:_,scope:"project"}),onWrite:_=>X({path:_,scope:"project",op:"gc:lock_remove"})}});a.push(...p.removed),c.push(...p.retained),l.push(...p.warnings),d={scanned:p.scanned,removed:p.removed.length,retained:p.retained.length}}let u;if(o.includes("transactions")){let p=r.checkpoints.retention_days,_=await gg(n,{dryRun:i,retentionDays:p,hooks:{onRead:h=>He({path:h,scope:"project"}),onWrite:h=>X({path:h,scope:"project",op:"gc:transaction_journal_remove"})}});a.push(..._.removed),c.push(..._.retained),l.push(..._.warnings),u={scanned:_.scanned,removed:_.removed.length,retained:_.retained.length,retention_days:p}}let m;if(o.includes("checkpoints")){let p=r.checkpoints.retention_days,_=await hg(n,{dryRun:i,retentionDays:p,hooks:{onRead:h=>He({path:h,scope:"project"}),onWrite:h=>X({path:h,scope:"project",op:"gc:checkpoint_remove"})}});a.push(..._.removed),c.push(..._.retained),l.push(..._.warnings),m={scanned:_.scanned,removed:_.removed.length,retained:_.retained.length,retention_days:p}}l.push(...await Vr({mode:i?"gc:dry-run":"gc",total_items:s.length}));let f=OC({dryRun:i,scopes:o,removed:a});return{ok:l.length===0,dry_run:i,scope:o,removed:a,retained:c,warnings:l,...d?{locks:d}:{},...m?{checkpoints:m}:{},...u?{transactions:u}:{},guidance:f,generated_at:C()}}import{execFile as DC}from"node:child_process";import PC from"node:path";import{promisify as NC}from"node:util";(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]="4bc28901-e70b-5a76-80bb-762ed8227e5f")}catch{}})();var LC=NC(DC),wg="@unbrained/pm-cli",MC="latest",jC={global:["--global"],project:[]};function yg(e){let t=e.project===!0||e.local===!0||e.scope==="project",n=e.global===!0||e.scope==="global";if(t&&n)throw new y('Options "--project/--local" and "--global" are mutually exclusive.',g.USAGE);return n?"global":"project"}function Po(e){return e.trim().toLowerCase()}function vg(e,t){let n=Po(t);return[e.name,e.directory,e.source.input,e.source.location,e.source.package,e.source.repository,e.source.owner&&e.source.repo?`${e.source.owner}/${e.source.repo}`:void 0].some(i=>typeof i=="string"&&Po(i)===n)}function FC(e,t){let n=N(process.cwd(),t.path),r=rn(n,process.cwd());return{selected_root:e==="global"?r.global:r.project}}async function UC(e,t,n){try{let r=await LC(e,t,{cwd:n?.cwd,encoding:"utf8"});return{stdout:r.stdout,stderr:r.stderr}}catch(r){let i=typeof r=="object"&&r!==null&&"stderr"in r?String(r.stderr??""):"",o=i.trim().length>0?i.trim():r instanceof Error?r.message:String(r);throw new y(`Command failed: ${e} ${t.join(" ")}
|
|
68
68
|
${o}`,g.GENERIC_FAILURE)}}function No(e){return typeof e.tag=="string"&&e.tag.trim().length>0?e.tag.trim():MC}function Do(e){return typeof e.packageName=="string"&&e.packageName.trim().length>0?e.packageName.trim():wg}async function zC(e,t){let n=e.commandRunner??UC,r=Do(e),i=No(e),o=`${r}@${i}`,s=["npm","install","-g",o];e.repair===!0&&s.push("--force");let a=Yc(import.meta.url,["../../.."]),c={requested:!0,status:"planned",package:r,target:o,command:s,before_version:a,...r===wg?{migration_guidance:["Calendar scheduling commands are package-owned. If calendar is absent, run pm package install calendar --project; use pm calendar meet, pm calendar event, or pm calendar remind."]}:{},repair:e.repair===!0};if(t)return c;try{await n(s[0],s.slice(1));let l=await n("pm",["--version"]);return{...c,status:"updated",after_version:l.stdout.trim()||void 0}}catch(l){return{...c,status:"failed",error:l instanceof Error?l.message:String(l)}}}function HC(e){return PC.isAbsolute(e)||e.startsWith(".")||e.startsWith("..")||e.startsWith("file:")}function WC(e,t){if(e.kind==="npm"){let n=e.input.startsWith("npm:")?e.input.slice(4).trim():e.input.trim();return!HC(n)&&e.package&&e.package.trim().length>0?`npm:${e.package.trim()}@${t}`:e.input.startsWith("npm:")?e.input:`npm:${e.input}`}return e.input}async function GC(e,t){let n=WC(e,t);return e.kind!=="local"||await $(n)?n:await $(e.location)?e.location:n}function qC(e,t,n,r){let i=["pm","package","install",t,n==="global"?"--global":"--project"];return e.kind==="github"&&r&&r.trim().length>0&&i.push("--ref",r.trim()),i}async function bg(e,t){let n=FC(e,t);return(await we(n.selected_root)).state.entries.filter(i=>i.scope===e)}async function BC(e,t,n){let r=await bg(e,t);return r.find(i=>vg(i,n.name))??r.find(i=>Po(i.directory)===Po(n.directory))}async function VC(e,t,n,r,i){let o=No(t),s=await GC(e.source,o),a=qC(e.source,s,r,e.source.ref),c={name:e.name,directory:e.directory,scope:r,source:e.source,status:"planned",command:a,previous_version:e.manifest_version};if(i)return c;try{await ba(s,{install:!0,project:r==="project",global:r==="global",ref:e.source.kind==="github"?e.source.ref:void 0},n);let l=await BC(r,n,e);return{...c,status:"updated",installed_version:l?.manifest_version}}catch(l){return{...c,status:"failed",error:l instanceof Error?l.message:String(l)}}}function JC(e,t,n,r){let i=[n?e.status:void 0,...t.map(o=>o.status)].filter(o=>typeof o=="string");return{requested_cli:n,requested_packages:r,planned:i.filter(o=>o==="planned").length,updated:i.filter(o=>o==="updated").length,skipped:i.filter(o=>o==="skipped").length,failed:i.filter(o=>o==="failed").length}}async function dG(e,t,n){let r=typeof e=="string"&&e.trim().length>0?e.trim():void 0;if(t.cliOnly===!0&&t.packagesOnly===!0){let m=["package","upgrade",...r?[r]:[],"--packages-only","--dry-run",...jC[yg(t)]];throw new y('Options "--cli-only" and "--packages-only" are mutually exclusive.',g.USAGE,{code:"package_upgrade_modes_mutually_exclusive",recovery:{suggested_retry:Xe(m),suggested_retry_args:m}})}let i=yg(t),o=t.dryRun===!0;if(t.cliOnly===!0&&r)throw new y('A package target cannot be used with "--cli-only".',g.USAGE);let s=!(t.packagesOnly===!0||r),a=t.cliOnly!==!0,c=s?await zC(t,o):{requested:!1,status:"skipped",package:Do(t),target:`${Do(t)}@${No(t)}`,command:["npm","install","-g",`${Do(t)}@${No(t)}`],repair:t.repair===!0,reason:"not_requested"},l=a?await bg(i,n):[];if(r&&(l=l.filter(m=>vg(m,r)),l.length===0))throw new y(`Managed package "${r}" was not found in ${i} scope.`,g.NOT_FOUND);let d=[];for(let m of l)d.push(await VC(m,t,n,i,o));let u=JC(c,d,s,a);return{ok:u.failed===0,action:"upgrade",dry_run:o,scope:i,target:r,cli:c,packages:d,summary:u}}import{createHash as KC}from"node:crypto";import{isUtf8 as YC}from"node:buffer";import Nr from"node:fs/promises";import $c 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]="d0001f37-7941-5cad-8950-2c6925056d10")}catch{}})();async function kg(e){try{return(await Nr.readdir(e)).filter(t=>t.endsWith(".jsonl")).sort()}catch(t){if(j(t))return[];throw t}}function XC(e,t,n,r){let i=t.at(-1),o;for(let c=t.length-1;c>=0;c-=1)if(["history_compact","history_compact_baseline","history_redact","history_repair","history_salvage","merge_reconcile"].includes(t[c].op)){o=t[c];break}let s=t[0]?.context?.history_compaction,a=typeof s=="object"&&s!==null&&"pruned_stream_digest"in s&&typeof s.pruned_stream_digest=="string"?s.pruned_stream_digest:null;return{id:e,entries:t.length,bytes:n,stream_digest:r,latest_after_hash:i?.after_hash??null,latest_record_hash:i?.record_hash??null,latest_hash_algorithm:i?Ee(i.hash_algorithm):null,rewrite_count:t.reduce((c,l)=>c+(l.reanchor_evidence?.length??0),0),checkpoint_digest:a,last_maintenance:o?{op:o.op,ts:o.ts,record_hash:o.record_hash??null}:null}}function ZC(e,t,n){try{if(!/^[A-Za-z0-9_-]+$/u.test(e)||!YC(t))return null;let r=[];for(let i of t.toString("utf8").split(/\r?\n/u)){if(!i.trim())continue;let o=JSON.parse(i);if(typeof o!="object"||o===null||Array.isArray(o))return null;let s=o;if(![s.op,s.author,s.ts,s.before_hash,s.after_hash].every(a=>typeof a=="string")||!Array.isArray(s.patch))return null;r.push(s)}return Kn(r).ok?XC(e,r,t.length,n):null}catch{return null}}async function Oc(e,t){if(!(await Nr.stat(e)).isDirectory())throw new TypeError("attestation tracker root must be a directory");let n=$c.join(e,"history"),r=await kg(n),i=new Map,o=[];for(let s of r){let a=s.slice(0,-6),c={id:a,digest:null,stream:null};o.push(c);let l=$c.join(n,s);try{let d=await Nr.lstat(l);if(i.set(s,R([d.ino,d.size,d.mtimeMs,d.ctimeMs])),!d.isFile())continue;let u=await Nr.readFile(l);c.digest=KC(t).update(u).digest("hex"),c.stream=ZC(a,u,c.digest)}catch{}}if(R(r)!==R(await kg(n)))throw new TypeError("attestation history inventory changed during read; retry");for(let[s,a]of i){let c=await Nr.lstat($c.join(n,s));if(a!==R([c.ino,c.size,c.mtimeMs,c.ctimeMs]))throw new TypeError("attestation history stream changed during read; retry")}return o}(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]="0a4b3fc5-70bb-5ec0-82b5-a7cdd03c09ea")}catch{}})();function Dc(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Pc(e,t){return Object.keys(e).length===t.length&&t.every(n=>Object.hasOwn(e,n))}function Wn(e,t){return typeof e=="string"&&(t==="sha256"?/^[a-f0-9]{64}$/u:/^[a-f0-9]{128}$/u).test(e)}function QC(e){return e.entries===0?[e.latest_hash_algorithm,e.latest_after_hash,e.latest_record_hash,e.checkpoint_digest,e.last_maintenance].every(t=>t===null)&&e.rewrite_count===0:e.latest_hash_algorithm!=="sha256"&&e.latest_hash_algorithm!=="sha512"?!1:Wn(e.latest_after_hash,e.latest_hash_algorithm)&&(e.latest_record_hash===null||Wn(e.latest_record_hash,e.latest_hash_algorithm))}function eT(e){return e===null?!0:!Dc(e)||!Pc(e,["op","ts","record_hash"])?!1:typeof e.op=="string"&&["history_compact","history_compact_baseline","history_redact","history_repair","history_salvage","merge_reconcile"].includes(e.op)&&typeof e.ts=="string"&&Et(e.ts)&&(e.record_hash===null||Wn(e.record_hash,"sha256")||Wn(e.record_hash,"sha512"))}function tT(e,t){return!Dc(e)||!Pc(e,["id","entries","bytes","stream_digest","latest_after_hash","latest_record_hash","latest_hash_algorithm","rewrite_count","checkpoint_digest","last_maintenance"])?!1:typeof e.id=="string"&&/^[A-Za-z0-9_-]+$/u.test(e.id)&&[e.entries,e.bytes,e.rewrite_count].every(n=>typeof n=="number"&&Number.isSafeInteger(n)&&n>=0)&&Wn(e.stream_digest,t)&&QC(e)&&(e.checkpoint_digest===null||Wn(e.checkpoint_digest,"sha256"))&&eT(e.last_maintenance)}function Sg(e){if(!Dc(e)||!Pc(e,["format","version","hash_algorithm","generated_at","streams","workspace_digest"]))throw new TypeError("Invalid history attestation bundle");if(e.format!==Zo.format||e.version!==1||typeof e.generated_at!="string"||!Et(e.generated_at)||!Array.isArray(e.streams)||e.hash_algorithm!=="sha256"&&e.hash_algorithm!=="sha512")throw new TypeError("Invalid history attestation format");let t=e.hash_algorithm,n;for(let o of e.streams){if(!tT(o,t))throw new TypeError("Invalid history attestation stream");let s=o.id;if(n!==void 0&&s<=n)throw new TypeError("Invalid history attestation stream order");n=s}let{workspace_digest:r,...i}=e;if(Qo(R(i),t)!==r)throw new TypeError("History attestation rollup mismatch");return e}async function Eg(e={}){let t=Ee(e.hashAlgorithm),n=e.generatedAt??C();if(!Et(n))throw new TypeError("Invalid history attestation timestamp");let r=await Oc(N(e.cwd??process.cwd(),e.pmRoot),t),i=r.filter(s=>s.stream===null);if(i.length>0)throw new TypeError(`Cannot export history attestation: invalid streams ${i.map(s=>s.id).join(", ")}`);let o={format:Zo.format,version:1,hash_algorithm:t,generated_at:n,streams:r.map(s=>s.stream)};return Sg({...o,workspace_digest:Qo(R(o),t)})}async function xg(e,t={}){let n=Sg(e),r=await Oc(N(t.cwd??process.cwd(),t.pmRoot),n.hash_algorithm),i=new Map(r.map(d=>[d.id,d])),o=new Map(n.streams.map(d=>[d.id,d])),s=n.streams.filter(d=>!i.has(d.id)).map(d=>d.id),a=r.filter(d=>!o.has(d.id)).map(d=>d.id),c=r.filter(d=>d.stream===null).map(d=>d.id),l=[];for(let d of n.streams){let u=i.get(d.id);u&&(u.digest!==d.stream_digest||R(u.stream)!==R(d))&&l.push({id:d.id,before_digest:d.stream_digest,after_digest:u.digest,last_maintenance:u.stream?.last_maintenance??null})}return{ok:s.length+a.length+c.length+l.length===0,workspace_digest:n.workspace_digest,streams_checked:r.length,changed_streams:l.map(d=>d.id),missing_streams:s,added_streams:a,invalid_streams:c,transitions:l}}import Ig from"node:fs/promises";(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]="825d7132-a49d-584a-b4ac-0801cfe6ad49")}catch{}})();async function PG(e,t){for(let r of["verify","output","hashAlgorithm"]){let i=e[r];if(!(r==="verify"&&typeof i=="object"&&i!==null)&&i!==void 0&&(typeof i!="string"||i.trim().length===0))throw new y(`history attest ${r} requires a nonempty string.`,g.USAGE)}if(e.verify!==void 0){if(e.output!==void 0||e.hashAlgorithm!==void 0)throw new y("history attest --verify cannot be combined with --output or --hash-algorithm",g.USAGE);let r;try{r=typeof e.verify=="string"?JSON.parse(await Ig.readFile(e.verify,"utf8")):e.verify}catch{throw new y("Cannot read history attestation proof. Provide --verify with a readable JSON proof file.",g.USAGE)}return xg(r,{pmRoot:t.path})}let n=await Eg({pmRoot:t.path,hashAlgorithm:Ee(e.hashAlgorithm)});if(e.output===void 0)return n;try{await Ig.writeFile(e.output,`${JSON.stringify(n,null,2)}
|
|
69
69
|
`,{flag:"wx",mode:384})}catch{throw new y("Cannot create history attestation proof. Choose --output with a new filename in a writable directory; existing files are never overwritten.",g.USAGE)}return{output:e.output,workspace_digest:n.workspace_digest,streams:n.streams.length}}(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]="48abeea1-703c-57e9-9d99-787cb2829efb")}catch{}})();function Ag(e){return e.invalidEvidenceCount>0?"merge_evidence_invalid":e.historyEvidenceValid?e.pendingDecisionCount>0||e.losslessCount>0?"merge_reconciliation_required":e.driftedItemCount>0?"history_repair_required":e.fence.status!=="ok"||e.drivers===null||e.drivers.status!=="ok"?"merge_fence_unprepared":"ready":"history_evidence_invalid"}function Rg(e,t,n=process.platform){let r=["--pm-path",t];return e==="merge_evidence_invalid"?Xe([...r,"merge","report"],n):e==="history_evidence_invalid"?Xe([...r,"validate","--check-history-drift","--full"],n):e==="merge_reconciliation_required"?Xe([...r,"merge","reconcile"],n):e==="history_repair_required"?Xe([...r,"history-repair","--all"],n):e==="merge_fence_unprepared"?Xe([...r,"merge","install"],n):null}function Cg(e){let t=Array.isArray(e.drifted_items)?e.drifted_items.filter(r=>typeof r=="string"):[];return{evidence_valid:Array.isArray(e.drifted_items)&&e.drifted_items.every(r=>typeof r=="string")&&typeof e.drifted_items_count=="number"&&Number.isInteger(e.drifted_items_count)&&e.drifted_items_count>=0&&typeof e.drifted_items_truncated=="boolean"&&typeof e.counts=="object"&&e.counts!==null&&!Array.isArray(e.counts),drifted_item_count:typeof e.drifted_items_count=="number"?e.drifted_items_count:t.length,drifted_item_ids:t,drifted_item_ids_truncated:e.drifted_items_truncated===!0,counts:typeof e.counts=="object"&&e.counts!==null?e.counts:{}}}async function VG(e){let t=N(process.cwd(),e.path);await te(t);let n=await T(t),r=G(n,H()),i=[],o=await So({includeBody:!0,pmRoot:t,settings:n,typeToFolder:r.type_to_folder,warnings:i}),s=await tt(t),[a,c,l,d]=await Promise.all([ji(t,An(n)),s===null?Promise.resolve(null):Rn(s),yt(s??t,{includeLossless:!0,pmRoot:t}),Eo(t,o,!1)]),{pendingDecisions:u,lossless:m}=Nn(l.receipts),f=[...new Set(u.map(w=>w.item_id))].sort((w,v)=>w.localeCompare(v)),p=d.check.details,_=Cg(p),h=Ag({invalidEvidenceCount:l.invalid_evidence_count,pendingDecisionCount:u.length,losslessCount:m.length,historyEvidenceValid:_.evidence_valid,driftedItemCount:_.drifted_item_count,fence:a,drivers:c});return{ok:h==="ready",state:h,merge_fence:{committed:a,clone_local_drivers:c},merge_receipts:{pending_decision_count:u.length,pending_item_ids:f.slice(0,25),pending_item_ids_truncated:f.length>25,lossless_count:m.length,invalid_evidence_count:l.invalid_evidence_count},history_drift:_,next_action:{command:Rg(h,t),reason:h},warnings:[...new Set(i)].sort((w,v)=>w.localeCompare(v)),generated_at:C()}}function JG(e){let t=e.next_action.command??"none";return[`workspace_position: ${e.state}`,`merge_fence: ${e.merge_fence.committed.status}`,`clone_local_drivers: ${e.merge_fence.clone_local_drivers?.status??"unavailable"}`,`pending_merge_decisions: ${e.merge_receipts.pending_decision_count}`,`history_drifted_items: ${e.history_drift.drifted_item_count}`,`next_action: ${t}`].join(`
|
|
70
|
-
`)}var KG={commandForWorkspacePositionState:Rg,normalizeWorkspaceHistoryDrift:Cg,selectWorkspacePositionState:Ag};import nT from"node:fs/promises";import Lr 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]="
|
|
71
|
-
`)}catch{}}function oT(e){let t=(e??"keyword").trim().toLowerCase();if(t==="keyword")return"keyword";if(t==="semantic"||t==="hybrid")return t;throw new y("Reindex mode must be one of keyword|semantic|hybrid",g.USAGE)}async function sT(e,t,n,r){let i=[];return{candidates:await Rd(e,t,n,i,r),warnings:i}}async function jc(e,t,n,r,i){let o=nn(H()),s=[];for(let a of t)if(!(i&&!i.has(a.metadata.id))){if(typeof a.body=="string"){s.push({metadata:a.metadata,body:a.body});continue}try{let c=await nT.readFile(a.item_path,"utf8"),l=xt(c,{format:a.item_format,schema:n,extensionFieldNames:o,onWarning:d=>r.push(d)});s.push({metadata:a.metadata,body:l.body})}catch{r.push(`item_list_item_read_failed:${Lr.relative(e,a.item_path)}`),s.push({metadata:a.metadata,body:""})}}return s}function aT(e,t,n){let r=e.metadata;return{id:r.id,mode:t,updated_at:r.updated_at,corpus:$d(e,{fields:n})}}var Gn=ee;function cT(e){let t=H(),n=Gn(e.search?.provider);if(!n)return null;let r=ud(t,n);if(!r)return null;let i=r.runtime_definition??r.definition,o=Gn(i.name)??Gn(r.definition.name);if(!o)return null;let s=i.embedBatch,a=i.embed_batch,c=i.embed,l=typeof s=="function"?s:typeof a=="function"?a:void 0,d=typeof c=="function"?c:void 0;return!l&&!d?null:{name:o,embedBatch:l,embed:d}}function lT(e){let t=H(),n=Gn(e.vector_store?.adapter);if(!n)return null;let r=md(t,n);if(!r)return null;let i=r.runtime_definition??r.definition,o=Gn(i.name)??Gn(r.definition.name);if(!o)return null;let s=i.upsert,a=i.delete;return{adapterName:o,...typeof s=="function"?{upsert:s}:{},...typeof a=="function"?{delete:a}:{}}}function Mc(e,t){if(!Array.isArray(e)||e.some(n=>typeof n!="number"||!Number.isFinite(n)))throw new y(`Invalid vector returned by ${t}`,g.GENERIC_FAILURE);return e}async function dT(e,t,n){let r=t.search?.embedding_model?.trim()||"text-embedding-3-small";if(e.embedBatch){let o=await Promise.resolve(e.embedBatch({inputs:n,settings:t,model:r}));if(!Array.isArray(o))throw new y(`Extension search provider "${e.name}" embedBatch must return an array of vectors`,g.GENERIC_FAILURE);return o.map((s,a)=>Mc(s,`extension search provider "${e.name}" embedBatch output at index ${a}`))}if(!e.embed)throw new y(`Extension search provider "${e.name}" does not implement embed/embedBatch`,g.GENERIC_FAILURE);let i=[];for(let[o,s]of n.entries()){let a=await Promise.resolve(e.embed({input:s,settings:t,model:r}));i.push(Mc(a,`extension search provider "${e.name}" embed output at index ${o}`))}return i}function Tg(e){return e.search?.embedding_model?.trim()||"text-embedding-3-small"}function $g(e,t,n){let r=n?Ht(n.name,Tg(e)):t?Ht(t.name,t.model):null;if(!r)throw new y("No embedding identity available for semantic reindex mode",g.USAGE);return r}function uT(e,t){return Object.keys(e).filter(n=>!t.has(n)).sort((n,r)=>n.localeCompare(r))}async function Og(e,t,n,r,i,o,s,a){let c=r?.name??n?.name,l=Od(c,e.search.embedding_corpus_max_characters).maxCharacters,d=os(e),u=i.map(p=>Dd(p,{providerName:c,maxCharacters:l,fields:d})),m=[],f=null;if(r)try{m=await dT(r,e,u),f=Ht(r.name,Tg(e))}catch(p){if(!n)throw new y(`Extension search provider "${r.name}" failed to generate embeddings: ${p instanceof Error?p.message:String(p)}`,g.GENERIC_FAILURE);o.push(`Extension search provider "${r.name}" failed; falling back to built-in provider (${p instanceof Error?p.message:String(p)})`)}if(m.length===0){if(!n)throw new y(`No embedding executor available for reindex mode '${t}'`,g.USAGE);let p=await Pd(n,e,u,{onProgress:_=>{_.phase==="complete"&&(s.batches_completed=_.batch_index),le(a,`embedding_batch_${_.phase} batch=${_.batch_index}/${_.batch_total} size=${_.batch_size} completed_inputs=${_.completed_inputs}/${_.total_inputs}`)}});o.push(...p.warnings),m=p.vectors,f=Ht(n.name,n.model)}if(le(a,`embedding_complete vectors=${m.length}`),m.length!==i.length)throw new y(`Embedding output size mismatch (expected ${i.length}, received ${m.length})`,g.GENERIC_FAILURE);if(!f)throw new y(`No embedding identity available for reindex mode '${t}'`,g.USAGE);return{vectors:m,embeddingIdentity:f}}async function mT(e,t,n,r,i,o){let s=Object.keys(n);if(t){if(s.length>0&&t.delete)try{await Promise.resolve(t.delete({ids:s.sort((a,c)=>a.localeCompare(c)),settings:r}))}catch(a){throw new y(`Extension vector adapter "${t.adapterName}" failed to delete vectors during reindex reset: ${a instanceof Error?a.message:String(a)}`,g.GENERIC_FAILURE)}else s.length>0&&i.push(`search_semantic_reindex_reset_skipped:adapter=${t.adapterName}:known_ids=${s.length}`);if(!e)return}e&&await Md(e,s,{},o)}async function Dg(e,t,n,r,i){if(n.length!==0){if(t){if(t.delete)try{await Promise.resolve(t.delete({ids:n,settings:r}))}catch(o){throw new y(`Extension vector adapter "${t.adapterName}" failed to delete orphan vectors during reindex: ${o instanceof Error?o.message:String(o)}`,g.GENERIC_FAILURE)}else i.push(`search_semantic_reindex_orphan_prune_skipped:adapter=${t.adapterName}:count=${n.length}`);if(!e)return}e&&await Ld(e,n)}}function fT(e){return{enabled:e!=="keyword",stale_items:0,unchanged_items:0,embedded_items:0,vector_upserted:0,batches_completed:0}}function pT(e,t,n){return{version:1,mode:e,generated_at:t,total_items:n.length,items:n.map(r=>({id:r.metadata.id,type:r.metadata.type,status:r.metadata.status,priority:r.metadata.priority,updated_at:r.metadata.updated_at}))}}function hT(e){if(e.requestedMode==="keyword")return{activeEmbeddingProvider:null,activeVectorStore:null};let t=Zn(e.settings);if(!t.active&&!e.extensionEmbedding)throw new y(`Reindex mode '${e.requestedMode}' requires a configured embedding provider in settings.providers.openai/settings.providers.ollama or an extension provider selected by settings.search.provider`,g.USAGE);let n=fi(e.settings,e.pmRoot);if(!n.active&&!e.extensionVectorAdapter)throw new y(`Reindex mode '${e.requestedMode}' requires a configured vector store in settings.vector_store.qdrant/settings.vector_store.lancedb or an extension adapter selected by settings.vector_store.adapter`,g.USAGE);return{activeEmbeddingProvider:t.active,activeVectorStore:n.active}}async function _T(e){let t=G(e.settings,H()),n=await sT(e.pmRoot,e.settings.item_format,t.type_to_folder,e.settings.schema);return{documentCandidates:n.candidates,warnings:[...n.warnings],metadataDocuments:n.candidates.map(r=>({metadata:r.metadata,body:typeof r.body=="string"?r.body:""}))}}async function gT(e){let t=await gn(e.pmRoot);if(e.reindexWarnings.push(...t.warnings),e.forceFullSemantic&&e.reindexWarnings.push("search_semantic_reindex_full_ignored:mode_keyword"),!t.embedding)return;let n=(()=>{try{return $g(e.settings,Zn(e.settings).active,e.extensionEmbedding)}catch{return null}})();n&&_n(t.embedding,n)&&(e.reindexWarnings.push("search_semantic_reindex_requires_rebuild:embedding_identity_changed"),e.reindexWarnings.push(rT))}async function yT(e){let t=await gn(e.pmRoot);e.semanticWarnings.push(...t.warnings);let n=$g(e.settings,e.activeEmbeddingProvider,e.extensionEmbedding),r=new Set(e.metadataDocuments.map(l=>l.metadata.id)),i=uT(t.entries,r),o=_n(t.embedding,n);e.forceFullSemantic&&!o&&e.semanticWarnings.push("search_semantic_reindex_full_rebuild_forced");let s=e.forceFullSemantic||o?e.metadataDocuments:e.metadataDocuments.filter(l=>t.entries[l.metadata.id]!==l.metadata.updated_at),a=new Set(s.map(l=>l.metadata.id)),c=a.size>0?await jc(e.pmRoot,e.documentCandidates,e.settings.schema,e.reindexWarnings,a):[];return{ledgerEntries:t.entries,ledgerEmbedding:t.embedding,orphanIds:i,resetRequired:o,staleDocuments:c,freshDocuments:e.metadataDocuments.length-c.length}}async function wT(e){let t=new Set(e.metadataDocuments.map(i=>i.metadata.id)),n=await jc(e.pmRoot,e.documentCandidates,e.settings.schema,e.reindexWarnings,t);e.semanticSummary.stale_items=n.length,e.semanticSummary.unchanged_items=0,le(e.progressEnabled,`embedding_dimension_changed reset_items=${n.length}`);let r=await Og(e.settings,e.requestedMode,e.activeEmbeddingProvider,e.extensionEmbedding,n,e.semanticWarnings,e.semanticSummary,e.progressEnabled);return{...r,staleDocuments:n,vectorDimension:ss(r.vectors,"Reindex embeddings")}}async function vT(e){let t=await Og(e.settings,e.requestedMode,e.activeEmbeddingProvider,e.extensionEmbedding,e.staleDocuments,e.semanticWarnings,e.semanticSummary,e.progressEnabled),n=t.vectors,r=t.embeddingIdentity,i=ss(n,"Reindex embeddings");if(!(!e.resetRequired&&(_n(e.ledgerEmbedding,r)||Fd(e.ledgerEmbedding,i))))return{vectors:n,embeddingIdentity:r,staleDocuments:e.staleDocuments,vectorDimension:i,resetRequired:e.resetRequired};let s=await wT(e);return n=s.vectors,r=s.embeddingIdentity,i=s.vectorDimension,{vectors:n,embeddingIdentity:r,staleDocuments:s.staleDocuments,vectorDimension:i,resetRequired:!0}}async function bT(e){if(e.extensionVectorAdapter)try{let t=e.extensionVectorAdapter.adapterName;if(le(e.progressEnabled,`vector_upsert_start adapter=${t} points=${e.points.length}`),typeof e.extensionVectorAdapter.upsert!="function")throw new y(`Extension vector adapter "${t}" does not support upserting vectors.`,g.USAGE);await Promise.resolve(e.extensionVectorAdapter.upsert({points:e.points,settings:e.settings})),e.semanticSummary.vector_upserted=e.points.length,le(e.progressEnabled,`vector_upsert_complete adapter=${t}`);return}catch(t){if(t instanceof y)throw t;if(!e.activeVectorStore)throw new y(`Extension vector adapter "${e.extensionVectorAdapter.adapterName}" failed to upsert vectors: ${t instanceof Error?t.message:String(t)}`,g.GENERIC_FAILURE);e.semanticWarnings.push(`Extension vector adapter "${e.extensionVectorAdapter.adapterName}" failed; falling back to built-in vector store (${t instanceof Error?t.message:String(t)})`),le(e.progressEnabled,"vector_upsert_fallback built_in_store")}if(e.activeVectorStore){le(e.progressEnabled,`vector_upsert_start adapter=${e.activeVectorStore.name} points=${e.points.length}`),await Nd(e.activeVectorStore,e.points),e.semanticSummary.vector_upserted=e.points.length,le(e.progressEnabled,`vector_upsert_complete adapter=${e.activeVectorStore.name}`);return}throw new y(`No vector upsert executor available for reindex mode '${e.requestedMode}'`,g.USAGE)}function kT(e,t){return e.map((n,r)=>({id:n.metadata.id,vector:Mc(t[r],`reindex embeddings output at index ${r}`),payload:{id:n.metadata.id,type:n.metadata.type,status:n.metadata.status,priority:n.metadata.priority,updated_at:n.metadata.updated_at}}))}async function ST(e){le(e.progressEnabled,`embedding_start items=${e.plan.staleDocuments.length} unchanged_items=${e.plan.freshDocuments}`);let t=await vT({pmRoot:e.pmRoot,settings:e.settings,requestedMode:e.requestedMode,activeEmbeddingProvider:e.activeEmbeddingProvider,extensionEmbedding:e.extensionEmbedding,documentCandidates:e.documentCandidates,metadataDocuments:e.metadataDocuments,staleDocuments:e.plan.staleDocuments,ledgerEmbedding:e.plan.ledgerEmbedding,resetRequired:e.plan.resetRequired,semanticWarnings:e.semanticWarnings,reindexWarnings:e.reindexWarnings,semanticSummary:e.semanticSummary,progressEnabled:e.progressEnabled});t.resetRequired?(le(e.progressEnabled,"vector_reset_start"),await mT(e.activeVectorStore,e.extensionVectorAdapter,e.plan.ledgerEntries,e.settings,e.semanticWarnings,e.plan.ledgerEmbedding?t.vectorDimension:void 0),le(e.progressEnabled,"vector_reset_complete")):await Dg(e.activeVectorStore,e.extensionVectorAdapter,e.plan.orphanIds,e.settings,e.semanticWarnings);let n=kT(t.staleDocuments,t.vectors);return e.semanticSummary.embedded_items=t.vectors.length,await bT({requestedMode:e.requestedMode,activeVectorStore:e.activeVectorStore,extensionVectorAdapter:e.extensionVectorAdapter,settings:e.settings,points:n,semanticWarnings:e.semanticWarnings,semanticSummary:e.semanticSummary,progressEnabled:e.progressEnabled}),{staleDocuments:t.staleDocuments,embeddingMetadata:jd(t.embeddingIdentity,t.vectorDimension)}}async function ET(e){let t=await yT(e);e.semanticSummary.stale_items=t.staleDocuments.length,e.semanticSummary.unchanged_items=t.freshDocuments;let n=Object.fromEntries(e.metadataDocuments.map(o=>[o.metadata.id,o.metadata.updated_at]));if(le(e.progressEnabled,`semantic_stale_items stale=${t.staleDocuments.length} total=${e.metadataDocuments.length} unchanged=${t.freshDocuments} full=${e.forceFullSemantic||t.resetRequired}`),t.staleDocuments.length===0)return le(e.progressEnabled,`embedding_skipped unchanged_items=${t.freshDocuments}`),e.semanticWarnings.push(`search_semantic_reindex_skipped_unchanged:count=${t.freshDocuments}`),await Dg(e.activeVectorStore,e.extensionVectorAdapter,t.orphanIds,e.settings,e.semanticWarnings),{documentsForKeywordArtifacts:e.documentsForKeywordArtifacts,vectorizationLedgerEntries:n,vectorizationEmbeddingMetadata:t.ledgerEmbedding};let r=await ST({...e,plan:t});t.freshDocuments>0&&e.semanticWarnings.push(`search_semantic_reindex_skipped_unchanged:count=${t.freshDocuments}`);let i=new Map(r.staleDocuments.map(o=>[o.metadata.id,o]));return{documentsForKeywordArtifacts:e.metadataDocuments.map(o=>i.get(o.metadata.id)??o),vectorizationLedgerEntries:n,vectorizationEmbeddingMetadata:r.embeddingMetadata}}async function xT(e){let t=Lr.join(e.pmRoot,Nc),n=Lr.join(e.pmRoot,Lc),r=os(e.settings),i=e.documentsForKeywordArtifacts.map(s=>JSON.stringify(aT(s,e.mode,r))).join(`
|
|
70
|
+
`)}var KG={commandForWorkspacePositionState:Rg,normalizeWorkspaceHistoryDrift:Cg,selectWorkspacePositionState:Ag};import nT from"node:fs/promises";import Lr 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]="dae5fa09-fdac-58db-9dbe-5c5c12eb6c9b")}catch{}})();var Nc="index/manifest.json",Lc="search/embeddings.jsonl",rT="Provider or model has changed since last index. Run pm reindex --mode semantic to rebuild.";function iT(e){return e.progress===!0||process.stderr.isTTY===!0}function le(e,t){if(e)try{process.stderr.write(`[pm reindex] ${t}
|
|
71
|
+
`)}catch{}}function oT(e){let t=(e??"keyword").trim().toLowerCase();if(t==="keyword")return"keyword";if(t==="semantic"||t==="hybrid")return t;throw new y("Reindex mode must be one of keyword|semantic|hybrid",g.USAGE)}async function sT(e,t,n,r){let i=[];return{candidates:await Rd(e,t,n,i,r),warnings:i}}async function jc(e,t,n,r,i){let o=nn(H()),s=[];for(let a of t)if(!(i&&!i.has(a.metadata.id))){if(typeof a.body=="string"){s.push({metadata:a.metadata,body:a.body});continue}try{let c=await nT.readFile(a.item_path,"utf8"),l=xt(c,{format:a.item_format,schema:n,extensionFieldNames:o,onWarning:d=>r.push(d)});s.push({metadata:a.metadata,body:l.body})}catch{r.push(`item_list_item_read_failed:${Lr.relative(e,a.item_path)}`),s.push({metadata:a.metadata,body:""})}}return s}function aT(e,t,n){let r=e.metadata;return{id:r.id,mode:t,updated_at:r.updated_at,corpus:$d(e,{fields:n})}}var Gn=ee;function cT(e){let t=H(),n=Gn(e.search?.provider);if(!n)return null;let r=ud(t,n);if(!r)return null;let i=r.runtime_definition??r.definition,o=Gn(i.name)??Gn(r.definition.name);if(!o)return null;let s=i.embedBatch,a=i.embed_batch,c=i.embed,l=typeof s=="function"?s:typeof a=="function"?a:void 0,d=typeof c=="function"?c:void 0;return!l&&!d?null:{name:o,embedBatch:l,embed:d}}function lT(e){let t=H(),n=Gn(e.vector_store?.adapter);if(!n)return null;let r=md(t,n);if(!r)return null;let i=r.runtime_definition??r.definition,o=Gn(i.name)??Gn(r.definition.name);if(!o)return null;let s=i.upsert,a=i.delete;return{adapterName:o,...typeof s=="function"?{upsert:s}:{},...typeof a=="function"?{delete:a}:{}}}function Mc(e,t){if(!Array.isArray(e)||e.some(n=>typeof n!="number"||!Number.isFinite(n)))throw new y(`Invalid vector returned by ${t}`,g.GENERIC_FAILURE);return e}async function dT(e,t,n){let r=t.search?.embedding_model?.trim()||"text-embedding-3-small";if(e.embedBatch){let o=await Promise.resolve(e.embedBatch({inputs:n,settings:t,model:r}));if(!Array.isArray(o))throw new y(`Extension search provider "${e.name}" embedBatch must return an array of vectors`,g.GENERIC_FAILURE);return o.map((s,a)=>Mc(s,`extension search provider "${e.name}" embedBatch output at index ${a}`))}if(!e.embed)throw new y(`Extension search provider "${e.name}" does not implement embed/embedBatch`,g.GENERIC_FAILURE);let i=[];for(let[o,s]of n.entries()){let a=await Promise.resolve(e.embed({input:s,settings:t,model:r}));i.push(Mc(a,`extension search provider "${e.name}" embed output at index ${o}`))}return i}function Tg(e){return e.search?.embedding_model?.trim()||"text-embedding-3-small"}function $g(e,t,n){let r=n?Ht(n.name,Tg(e)):t?Ht(t.name,t.model):null;if(!r)throw new y("No embedding identity available for semantic reindex mode",g.USAGE);return r}function uT(e,t){return Object.keys(e).filter(n=>!t.has(n)).sort((n,r)=>n.localeCompare(r))}async function Og(e,t,n,r,i,o,s,a){let c=r?.name??n?.name,l=Od(c,e.search.embedding_corpus_max_characters).maxCharacters,d=os(e),u=i.map(p=>Dd(p,{providerName:c,maxCharacters:l,fields:d})),m=[],f=null;if(r)try{m=await dT(r,e,u),f=Ht(r.name,Tg(e))}catch(p){if(!n)throw new y(`Extension search provider "${r.name}" failed to generate embeddings: ${p instanceof Error?p.message:String(p)}`,g.GENERIC_FAILURE);o.push(`Extension search provider "${r.name}" failed; falling back to built-in provider (${p instanceof Error?p.message:String(p)})`)}if(m.length===0){if(!n)throw new y(`No embedding executor available for reindex mode '${t}'`,g.USAGE);let p=await Pd(n,e,u,{onProgress:_=>{_.phase==="complete"&&(s.batches_completed=_.batch_index),le(a,`embedding_batch_${_.phase} batch=${_.batch_index}/${_.batch_total} size=${_.batch_size} completed_inputs=${_.completed_inputs}/${_.total_inputs}`)}});o.push(...p.warnings),s.batching=p.receipt,m=p.vectors,f=Ht(n.name,n.model)}if(le(a,`embedding_complete vectors=${m.length}`),m.length!==i.length)throw new y(`Embedding output size mismatch (expected ${i.length}, received ${m.length})`,g.GENERIC_FAILURE);if(!f)throw new y(`No embedding identity available for reindex mode '${t}'`,g.USAGE);return{vectors:m,embeddingIdentity:f}}async function mT(e,t,n,r,i,o){let s=Object.keys(n);if(t){if(s.length>0&&t.delete)try{await Promise.resolve(t.delete({ids:s.sort((a,c)=>a.localeCompare(c)),settings:r}))}catch(a){throw new y(`Extension vector adapter "${t.adapterName}" failed to delete vectors during reindex reset: ${a instanceof Error?a.message:String(a)}`,g.GENERIC_FAILURE)}else s.length>0&&i.push(`search_semantic_reindex_reset_skipped:adapter=${t.adapterName}:known_ids=${s.length}`);if(!e)return}e&&await Md(e,s,{},o)}async function Dg(e,t,n,r,i){if(n.length!==0){if(t){if(t.delete)try{await Promise.resolve(t.delete({ids:n,settings:r}))}catch(o){throw new y(`Extension vector adapter "${t.adapterName}" failed to delete orphan vectors during reindex: ${o instanceof Error?o.message:String(o)}`,g.GENERIC_FAILURE)}else i.push(`search_semantic_reindex_orphan_prune_skipped:adapter=${t.adapterName}:count=${n.length}`);if(!e)return}e&&await Ld(e,n)}}function fT(e){return{enabled:e!=="keyword",stale_items:0,unchanged_items:0,embedded_items:0,vector_upserted:0,batches_completed:0}}function pT(e,t,n){return{version:1,mode:e,generated_at:t,total_items:n.length,items:n.map(r=>({id:r.metadata.id,type:r.metadata.type,status:r.metadata.status,priority:r.metadata.priority,updated_at:r.metadata.updated_at}))}}function hT(e){if(e.requestedMode==="keyword")return{activeEmbeddingProvider:null,activeVectorStore:null};let t=Zn(e.settings);if(!t.active&&!e.extensionEmbedding)throw new y(`Reindex mode '${e.requestedMode}' requires a configured embedding provider in settings.providers.openai/settings.providers.ollama or an extension provider selected by settings.search.provider`,g.USAGE);let n=fi(e.settings,e.pmRoot);if(!n.active&&!e.extensionVectorAdapter)throw new y(`Reindex mode '${e.requestedMode}' requires a configured vector store in settings.vector_store.qdrant/settings.vector_store.lancedb or an extension adapter selected by settings.vector_store.adapter`,g.USAGE);return{activeEmbeddingProvider:t.active,activeVectorStore:n.active}}async function _T(e){let t=G(e.settings,H()),n=await sT(e.pmRoot,e.settings.item_format,t.type_to_folder,e.settings.schema);return{documentCandidates:n.candidates,warnings:[...n.warnings],metadataDocuments:n.candidates.map(r=>({metadata:r.metadata,body:typeof r.body=="string"?r.body:""}))}}async function gT(e){let t=await gn(e.pmRoot);if(e.reindexWarnings.push(...t.warnings),e.forceFullSemantic&&e.reindexWarnings.push("search_semantic_reindex_full_ignored:mode_keyword"),!t.embedding)return;let n=(()=>{try{return $g(e.settings,Zn(e.settings).active,e.extensionEmbedding)}catch{return null}})();n&&_n(t.embedding,n)&&(e.reindexWarnings.push("search_semantic_reindex_requires_rebuild:embedding_identity_changed"),e.reindexWarnings.push(rT))}async function yT(e){let t=await gn(e.pmRoot);e.semanticWarnings.push(...t.warnings);let n=$g(e.settings,e.activeEmbeddingProvider,e.extensionEmbedding),r=new Set(e.metadataDocuments.map(l=>l.metadata.id)),i=uT(t.entries,r),o=_n(t.embedding,n);e.forceFullSemantic&&!o&&e.semanticWarnings.push("search_semantic_reindex_full_rebuild_forced");let s=e.forceFullSemantic||o?e.metadataDocuments:e.metadataDocuments.filter(l=>t.entries[l.metadata.id]!==l.metadata.updated_at),a=new Set(s.map(l=>l.metadata.id)),c=a.size>0?await jc(e.pmRoot,e.documentCandidates,e.settings.schema,e.reindexWarnings,a):[];return{ledgerEntries:t.entries,ledgerEmbedding:t.embedding,orphanIds:i,resetRequired:o,staleDocuments:c,freshDocuments:e.metadataDocuments.length-c.length}}async function wT(e){let t=new Set(e.metadataDocuments.map(i=>i.metadata.id)),n=await jc(e.pmRoot,e.documentCandidates,e.settings.schema,e.reindexWarnings,t);e.semanticSummary.stale_items=n.length,e.semanticSummary.unchanged_items=0,le(e.progressEnabled,`embedding_dimension_changed reset_items=${n.length}`);let r=await Og(e.settings,e.requestedMode,e.activeEmbeddingProvider,e.extensionEmbedding,n,e.semanticWarnings,e.semanticSummary,e.progressEnabled);return{...r,staleDocuments:n,vectorDimension:ss(r.vectors,"Reindex embeddings")}}async function vT(e){let t=await Og(e.settings,e.requestedMode,e.activeEmbeddingProvider,e.extensionEmbedding,e.staleDocuments,e.semanticWarnings,e.semanticSummary,e.progressEnabled),n=t.vectors,r=t.embeddingIdentity,i=ss(n,"Reindex embeddings");if(!(!e.resetRequired&&(_n(e.ledgerEmbedding,r)||Fd(e.ledgerEmbedding,i))))return{vectors:n,embeddingIdentity:r,staleDocuments:e.staleDocuments,vectorDimension:i,resetRequired:e.resetRequired};let s=await wT(e);return n=s.vectors,r=s.embeddingIdentity,i=s.vectorDimension,{vectors:n,embeddingIdentity:r,staleDocuments:s.staleDocuments,vectorDimension:i,resetRequired:!0}}async function bT(e){if(e.extensionVectorAdapter)try{let t=e.extensionVectorAdapter.adapterName;if(le(e.progressEnabled,`vector_upsert_start adapter=${t} points=${e.points.length}`),typeof e.extensionVectorAdapter.upsert!="function")throw new y(`Extension vector adapter "${t}" does not support upserting vectors.`,g.USAGE);await Promise.resolve(e.extensionVectorAdapter.upsert({points:e.points,settings:e.settings})),e.semanticSummary.vector_upserted=e.points.length,le(e.progressEnabled,`vector_upsert_complete adapter=${t}`);return}catch(t){if(t instanceof y)throw t;if(!e.activeVectorStore)throw new y(`Extension vector adapter "${e.extensionVectorAdapter.adapterName}" failed to upsert vectors: ${t instanceof Error?t.message:String(t)}`,g.GENERIC_FAILURE);e.semanticWarnings.push(`Extension vector adapter "${e.extensionVectorAdapter.adapterName}" failed; falling back to built-in vector store (${t instanceof Error?t.message:String(t)})`),le(e.progressEnabled,"vector_upsert_fallback built_in_store")}if(e.activeVectorStore){le(e.progressEnabled,`vector_upsert_start adapter=${e.activeVectorStore.name} points=${e.points.length}`),await Nd(e.activeVectorStore,e.points),e.semanticSummary.vector_upserted=e.points.length,le(e.progressEnabled,`vector_upsert_complete adapter=${e.activeVectorStore.name}`);return}throw new y(`No vector upsert executor available for reindex mode '${e.requestedMode}'`,g.USAGE)}function kT(e,t){return e.map((n,r)=>({id:n.metadata.id,vector:Mc(t[r],`reindex embeddings output at index ${r}`),payload:{id:n.metadata.id,type:n.metadata.type,status:n.metadata.status,priority:n.metadata.priority,updated_at:n.metadata.updated_at}}))}async function ST(e){le(e.progressEnabled,`embedding_start items=${e.plan.staleDocuments.length} unchanged_items=${e.plan.freshDocuments}`);let t=await vT({pmRoot:e.pmRoot,settings:e.settings,requestedMode:e.requestedMode,activeEmbeddingProvider:e.activeEmbeddingProvider,extensionEmbedding:e.extensionEmbedding,documentCandidates:e.documentCandidates,metadataDocuments:e.metadataDocuments,staleDocuments:e.plan.staleDocuments,ledgerEmbedding:e.plan.ledgerEmbedding,resetRequired:e.plan.resetRequired,semanticWarnings:e.semanticWarnings,reindexWarnings:e.reindexWarnings,semanticSummary:e.semanticSummary,progressEnabled:e.progressEnabled});t.resetRequired?(le(e.progressEnabled,"vector_reset_start"),await mT(e.activeVectorStore,e.extensionVectorAdapter,e.plan.ledgerEntries,e.settings,e.semanticWarnings,e.plan.ledgerEmbedding?t.vectorDimension:void 0),le(e.progressEnabled,"vector_reset_complete")):await Dg(e.activeVectorStore,e.extensionVectorAdapter,e.plan.orphanIds,e.settings,e.semanticWarnings);let n=kT(t.staleDocuments,t.vectors);return e.semanticSummary.embedded_items=t.vectors.length,await bT({requestedMode:e.requestedMode,activeVectorStore:e.activeVectorStore,extensionVectorAdapter:e.extensionVectorAdapter,settings:e.settings,points:n,semanticWarnings:e.semanticWarnings,semanticSummary:e.semanticSummary,progressEnabled:e.progressEnabled}),{staleDocuments:t.staleDocuments,embeddingMetadata:jd(t.embeddingIdentity,t.vectorDimension)}}async function ET(e){let t=await yT(e);e.semanticSummary.stale_items=t.staleDocuments.length,e.semanticSummary.unchanged_items=t.freshDocuments;let n=Object.fromEntries(e.metadataDocuments.map(o=>[o.metadata.id,o.metadata.updated_at]));if(le(e.progressEnabled,`semantic_stale_items stale=${t.staleDocuments.length} total=${e.metadataDocuments.length} unchanged=${t.freshDocuments} full=${e.forceFullSemantic||t.resetRequired}`),t.staleDocuments.length===0)return le(e.progressEnabled,`embedding_skipped unchanged_items=${t.freshDocuments}`),e.semanticWarnings.push(`search_semantic_reindex_skipped_unchanged:count=${t.freshDocuments}`),await Dg(e.activeVectorStore,e.extensionVectorAdapter,t.orphanIds,e.settings,e.semanticWarnings),{documentsForKeywordArtifacts:e.documentsForKeywordArtifacts,vectorizationLedgerEntries:n,vectorizationEmbeddingMetadata:t.ledgerEmbedding};let r=await ST({...e,plan:t});t.freshDocuments>0&&e.semanticWarnings.push(`search_semantic_reindex_skipped_unchanged:count=${t.freshDocuments}`);let i=new Map(r.staleDocuments.map(o=>[o.metadata.id,o]));return{documentsForKeywordArtifacts:e.metadataDocuments.map(o=>i.get(o.metadata.id)??o),vectorizationLedgerEntries:n,vectorizationEmbeddingMetadata:r.embeddingMetadata}}async function xT(e){let t=Lr.join(e.pmRoot,Nc),n=Lr.join(e.pmRoot,Lc),r=os(e.settings),i=e.documentsForKeywordArtifacts.map(s=>JSON.stringify(aT(s,e.mode,r))).join(`
|
|
72
72
|
`);le(e.progressEnabled,"writing keyword artifacts"),await ne(t,`${JSON.stringify(e.manifest,null,2)}
|
|
73
73
|
`),await ne(n,`${i}
|
|
74
74
|
`);let o=[];if(e.mode!=="keyword")try{le(e.progressEnabled,"writing vectorization status ledger"),await Ud(e.pmRoot,e.vectorizationLedgerEntries,e.vectorizationEmbeddingMetadata)}catch(s){o.push(`search_vectorization_status_ledger_write_failed:${s instanceof Error?s.message:String(s)}`)}return o}async function t2(e,t){let n=oT(e.mode),r=iT(e),i=e.full===!0;le(r,`start mode=${n}`);let o=N(process.cwd(),t.path);await te(o);let s=ui(await T(o)).settings,a=null;try{a=await ce(o,wd,s.locks.ttl_seconds,q(void 0,"pm-reindex"),!1,s.governance.force_required_for_stale_lock,s.locks.wait_ms)}catch(c){throw c instanceof y&&c.exitCode===g.CONFLICT?new y("Another pm reindex run is already active for this project. Wait for it to finish before starting a new keyword, semantic, or hybrid reindex.",g.CONFLICT,{code:"reindex_already_running",type:"urn:pm-cli:error:reindex_already_running",why:"Semantic reindex can be expensive and duplicate runs compete for the same local embedding model and vector store.",nextSteps:["Check active pm reindex processes before starting another reindex.","Rerun with --progress when you need non-interactive visibility."]}):c}try{let c=cT(s),l=lT(s),d=hT({requestedMode:n,pmRoot:o,settings:s,extensionEmbedding:c,extensionVectorAdapter:l}),u=n;le(r,"loading item corpus");let m=await _T({pmRoot:o,settings:s}),f=m.warnings,{documentCandidates:p,metadataDocuments:_}=m;le(r,`loaded_items=${_.length}`);let h=C(),w=pT(u,h,_),v=Lr.join(o,Nc),k=Lr.join(o,Lc),S=u==="keyword"?await jc(o,p,s.schema,f):_,x=[],A={},E=null,b=fT(u);if(u==="keyword"&&await gT({pmRoot:o,settings:s,forceFullSemantic:i,extensionEmbedding:c,reindexWarnings:f}),u!=="keyword"){let z=await ET({pmRoot:o,settings:s,requestedMode:n,activeEmbeddingProvider:d.activeEmbeddingProvider,activeVectorStore:d.activeVectorStore,extensionEmbedding:c,extensionVectorAdapter:l,documentCandidates:p,metadataDocuments:_,documentsForKeywordArtifacts:S,forceFullSemantic:i,reindexWarnings:f,semanticWarnings:x,semanticSummary:b,progressEnabled:r});S=z.documentsForKeywordArtifacts,A=z.vectorizationLedgerEntries,E=z.vectorizationEmbeddingMetadata}let P=await xT({pmRoot:o,mode:u,manifest:w,documentsForKeywordArtifacts:S,settings:s,vectorizationLedgerEntries:A,vectorizationEmbeddingMetadata:E,progressEnabled:r}),U=[...await X({path:v,scope:"project",op:"reindex:manifest"}),...await X({path:k,scope:"project",op:"reindex:embeddings"}),...await Vr({mode:u,total_items:_.length})];return le(r,"done"),{ok:!0,mode:u,total_items:_.length,semantic:b,artifacts:{manifest:Nc,embeddings:Lc},warnings:[...f,...x,...P,...U],generated_at:h}}finally{await a?.()}}export{L as a,Ie as b,Ze as c,yn as d,Qd as e,tu as f,Wt as g,ds as h,Gg as i,fs as j,ps as k,ou as l,vn as m,tr as n,_s as o,ly as p,uu as q,nr as r,gs as s,vi as t,ys as u,fu as v,pu as w,hu as x,Ym as y,xD as z,tv as A,nv as B,tt as C,iP as D,bv as E,my as F,UT as G,yu as H,hy as I,s$ as J,cb as K,cN as L,uN as M,mN as N,fr as O,fN as P,pN as Q,hN as R,_N as S,gN as T,yN as U,wN as V,vN as W,bN as X,kN as Y,SN as Z,pp as _,ba as $,eD as aa,fm as ba,j$ as ca,O as da,se as ea,F$ as fa,bs as ga,U$ as ha,z$ as ia,Cu as ja,H$ as ka,W$ as la,G$ as ma,Oy as na,q$ as oa,B$ as pa,ks as qa,V$ as ra,J$ as sa,vs as ta,K$ as ua,Y$ as va,$u as wa,X$ as xa,Py as ya,Pu as za,aO as Aa,sr as Ba,cO as Ca,zy as Da,Hy as Ea,lO as Fa,Wy as Ga,u_ as Ha,pO as Ia,zu as Ja,f_ as Ka,Rz as La,Cz as Ma,ar as Na,Ai as Oa,Wu as Pa,Gu as Qa,qu as Ra,Bu as Sa,Yu as Ta,Zu as Ua,Qu as Va,nm as Wa,Ot as Xa,zj as Ya,Hj as Za,Wj as _a,Gj as $a,tF as ab,Qp as bb,Ma as cb,bF as db,yt as eb,kF as fb,SF as gb,Yx as hb,eI as ib,fh as jb,lw as kb,im as lb,za as mb,_1 as nb,g1 as ob,Ci as pb,Ti as qb,jh as rb,pU as sb,Fh as tb,zh as ub,Hh as vb,qh as wb,Vh as xb,ER as yb,xR as zb,Dz as Ab,Pz as Bb,Nz as Cb,Lz as Db,AR as Eb,RR as Fb,CR as Gb,Mz as Hb,__ as Ib,$R as Jb,g_ as Kb,ac as Lb,w_ as Mb,OR as Nb,DR as Ob,PR as Pb,uc as Qb,mc as Rb,Vz as Sb,Jz as Tb,Kz as Ub,d0 as Vb,ZH as Wb,sg as Xb,Dr as Yb,lg as Zb,dg as _b,ug as $b,Ac as ac,yC as bc,DW as cc,nG as dc,dG as ec,Sg as fc,Eg as gc,xg as hc,PG as ic,VG as jc,JG as kc,KG as lc,t2 as mc};
|
|
75
|
-
//# sourceMappingURL=chunk-
|
|
75
|
+
//# sourceMappingURL=chunk-6J2YCGSN.js.map
|