mirror of
https://github.com/Shu-Ying/farm_service.git
synced 2026-11-03 03:00:02 +08:00
437 lines
793 KiB
JavaScript
437 lines
793 KiB
JavaScript
#!/usr/bin/env node
|
||
import { createRequire as __cometCreateRequire } from 'module';
|
||
const require = __cometCreateRequire(import.meta.url);
|
||
var kA=Object.create;var op=Object.defineProperty;var SA=Object.getOwnPropertyDescriptor;var NA=Object.getOwnPropertyNames;var EA=Object.getPrototypeOf,xA=Object.prototype.hasOwnProperty;var nc=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,r)=>(typeof require<"u"?require:e)[r]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});var A=(t,e,r)=>()=>{if(r)throw r[0];try{return t&&(e=t(t=0)),e}catch(n){throw r=[n],n}};var R=(t,e)=>()=>{try{return e||t((e={exports:{}}).exports,e),e.exports}catch(r){throw e=0,r}},PA=(t,e)=>{for(var r in e)op(t,r,{get:e[r],enumerable:!0})},CA=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of NA(e))!xA.call(t,i)&&i!==r&&op(t,i,{get:()=>e[i],enumerable:!(n=SA(e,i))||n.enumerable});return t};var Ce=(t,e,r)=>(r=t!=null?kA(EA(t)):{},CA(e||!t||!t.__esModule?op(r,"default",{value:t,enumerable:!0}):r,t));var K=R(he=>{"use strict";var ap=Symbol.for("yaml.alias"),Qy=Symbol.for("yaml.document"),ic=Symbol.for("yaml.map"),Zy=Symbol.for("yaml.pair"),sp=Symbol.for("yaml.scalar"),oc=Symbol.for("yaml.seq"),mr=Symbol.for("yaml.node.type"),RA=t=>!!t&&typeof t=="object"&&t[mr]===ap,AA=t=>!!t&&typeof t=="object"&&t[mr]===Qy,_A=t=>!!t&&typeof t=="object"&&t[mr]===ic,jA=t=>!!t&&typeof t=="object"&&t[mr]===Zy,ev=t=>!!t&&typeof t=="object"&&t[mr]===sp,IA=t=>!!t&&typeof t=="object"&&t[mr]===oc;function tv(t){if(t&&typeof t=="object")switch(t[mr]){case ic:case oc:return!0}return!1}function TA(t){if(t&&typeof t=="object")switch(t[mr]){case ap:case ic:case sp:case oc:return!0}return!1}var $A=t=>(ev(t)||tv(t))&&!!t.anchor;he.ALIAS=ap;he.DOC=Qy;he.MAP=ic;he.NODE_TYPE=mr;he.PAIR=Zy;he.SCALAR=sp;he.SEQ=oc;he.hasAnchor=$A;he.isAlias=RA;he.isCollection=tv;he.isDocument=AA;he.isMap=_A;he.isNode=TA;he.isPair=jA;he.isScalar=ev;he.isSeq=IA});var Go=R(cp=>{"use strict";var de=K(),Ke=Symbol("break visit"),rv=Symbol("skip children"),Vt=Symbol("remove node");function ac(t,e){let r=nv(e);de.isDocument(t)?Mi(null,t.contents,r,Object.freeze([t]))===Vt&&(t.contents=null):Mi(null,t,r,Object.freeze([]))}ac.BREAK=Ke;ac.SKIP=rv;ac.REMOVE=Vt;function Mi(t,e,r,n){let i=iv(t,e,r,n);if(de.isNode(i)||de.isPair(i))return ov(t,n,i),Mi(t,i,r,n);if(typeof i!="symbol"){if(de.isCollection(e)){n=Object.freeze(n.concat(e));for(let o=0;o<e.items.length;++o){let a=Mi(o,e.items[o],r,n);if(typeof a=="number")o=a-1;else{if(a===Ke)return Ke;a===Vt&&(e.items.splice(o,1),o-=1)}}}else if(de.isPair(e)){n=Object.freeze(n.concat(e));let o=Mi("key",e.key,r,n);if(o===Ke)return Ke;o===Vt&&(e.key=null);let a=Mi("value",e.value,r,n);if(a===Ke)return Ke;a===Vt&&(e.value=null)}}return i}async function sc(t,e){let r=nv(e);de.isDocument(t)?await Li(null,t.contents,r,Object.freeze([t]))===Vt&&(t.contents=null):await Li(null,t,r,Object.freeze([]))}sc.BREAK=Ke;sc.SKIP=rv;sc.REMOVE=Vt;async function Li(t,e,r,n){let i=await iv(t,e,r,n);if(de.isNode(i)||de.isPair(i))return ov(t,n,i),Li(t,i,r,n);if(typeof i!="symbol"){if(de.isCollection(e)){n=Object.freeze(n.concat(e));for(let o=0;o<e.items.length;++o){let a=await Li(o,e.items[o],r,n);if(typeof a=="number")o=a-1;else{if(a===Ke)return Ke;a===Vt&&(e.items.splice(o,1),o-=1)}}}else if(de.isPair(e)){n=Object.freeze(n.concat(e));let o=await Li("key",e.key,r,n);if(o===Ke)return Ke;o===Vt&&(e.key=null);let a=await Li("value",e.value,r,n);if(a===Ke)return Ke;a===Vt&&(e.value=null)}}return i}function nv(t){return typeof t=="object"&&(t.Collection||t.Node||t.Value)?Object.assign({Alias:t.Node,Map:t.Node,Scalar:t.Node,Seq:t.Node},t.Value&&{Map:t.Value,Scalar:t.Value,Seq:t.Value},t.Collection&&{Map:t.Collection,Seq:t.Collection},t):t}function iv(t,e,r,n){if(typeof r=="function")return r(t,e,n);if(de.isMap(e))return r.Map?.(t,e,n);if(de.isSeq(e))return r.Seq?.(t,e,n);if(de.isPair(e))return r.Pair?.(t,e,n);if(de.isScalar(e))return r.Scalar?.(t,e,n);if(de.isAlias(e))return r.Alias?.(t,e,n)}function ov(t,e,r){let n=e[e.length-1];if(de.isCollection(n))n.items[t]=r;else if(de.isPair(n))t==="key"?n.key=r:n.value=r;else if(de.isDocument(n))n.contents=r;else{let i=de.isAlias(n)?"alias":"scalar";throw new Error(`Cannot replace node with ${i} parent`)}}cp.visit=ac;cp.visitAsync=sc});var lp=R(sv=>{"use strict";var av=K(),OA=Go(),MA={"!":"%21",",":"%2C","[":"%5B","]":"%5D","{":"%7B","}":"%7D"},LA=t=>t.replace(/[!,[\]{}]/g,e=>MA[e]),Uo=class t{constructor(e,r){this.docStart=null,this.docEnd=!1,this.yaml=Object.assign({},t.defaultYaml,e),this.tags=Object.assign({},t.defaultTags,r)}clone(){let e=new t(this.yaml,this.tags);return e.docStart=this.docStart,e}atDocument(){let e=new t(this.yaml,this.tags);switch(this.yaml.version){case"1.1":this.atNextDocument=!0;break;case"1.2":this.atNextDocument=!1,this.yaml={explicit:t.defaultYaml.explicit,version:"1.2"},this.tags=Object.assign({},t.defaultTags);break}return e}add(e,r){this.atNextDocument&&(this.yaml={explicit:t.defaultYaml.explicit,version:"1.1"},this.tags=Object.assign({},t.defaultTags),this.atNextDocument=!1);let n=e.trim().split(/[ \t]+/),i=n.shift();switch(i){case"%TAG":{if(n.length!==2&&(r(0,"%TAG directive should contain exactly two parts"),n.length<2))return!1;let[o,a]=n;return this.tags[o]=a,!0}case"%YAML":{if(this.yaml.explicit=!0,n.length!==1)return r(0,"%YAML directive should contain exactly one part"),!1;let[o]=n;if(o==="1.1"||o==="1.2")return this.yaml.version=o,!0;{let a=/^\d+\.\d+$/.test(o);return r(6,`Unsupported YAML version ${o}`,a),!1}}default:return r(0,`Unknown directive ${i}`,!0),!1}}tagName(e,r){if(e==="!")return"!";if(e[0]!=="!")return r(`Not a valid tag: ${e}`),null;if(e[1]==="<"){let a=e.slice(2,-1);return a==="!"||a==="!!"?(r(`Verbatim tags aren't resolved, so ${e} is invalid.`),null):(e[e.length-1]!==">"&&r("Verbatim tags must end with a >"),a)}let[,n,i]=e.match(/^(.*!)([^!]*)$/s);i||r(`The ${e} tag has no suffix`);let o=this.tags[n];if(o)try{return o+decodeURIComponent(i)}catch(a){return r(String(a)),null}return n==="!"?e:(r(`Could not resolve tag: ${e}`),null)}tagString(e){for(let[r,n]of Object.entries(this.tags))if(e.startsWith(n))return r+LA(e.substring(n.length));return e[0]==="!"?e:`!<${e}>`}toString(e){let r=this.yaml.explicit?[`%YAML ${this.yaml.version||"1.2"}`]:[],n=Object.entries(this.tags),i;if(e&&n.length>0&&av.isNode(e.contents)){let o={};OA.visit(e.contents,(a,s)=>{av.isNode(s)&&s.tag&&(o[s.tag]=!0)}),i=Object.keys(o)}else i=[];for(let[o,a]of n)o==="!!"&&a==="tag:yaml.org,2002:"||(!e||i.some(s=>s.startsWith(a)))&&r.push(`%TAG ${o} ${a}`);return r.join(`
|
||
`)}};Uo.defaultYaml={explicit:!1,version:"1.2"};Uo.defaultTags={"!!":"tag:yaml.org,2002:"};sv.Directives=Uo});var cc=R(Jo=>{"use strict";var cv=K(),DA=Go();function BA(t){if(/[\x00-\x19\s,[\]{}]/.test(t)){let r=`Anchor must not contain whitespace or control characters: ${JSON.stringify(t)}`;throw new Error(r)}return!0}function lv(t){let e=new Set;return DA.visit(t,{Value(r,n){n.anchor&&e.add(n.anchor)}}),e}function dv(t,e){for(let r=1;;++r){let n=`${t}${r}`;if(!e.has(n))return n}}function FA(t,e){let r=[],n=new Map,i=null;return{onAnchor:o=>{r.push(o),i??(i=lv(t));let a=dv(e,i);return i.add(a),a},setAnchors:()=>{for(let o of r){let a=n.get(o);if(typeof a=="object"&&a.anchor&&(cv.isScalar(a.node)||cv.isCollection(a.node)))a.node.anchor=a.anchor;else{let s=new Error("Failed to resolve repeated object (this should not happen)");throw s.source=o,s}}},sourceObjects:n}}Jo.anchorIsValid=BA;Jo.anchorNames=lv;Jo.createNodeAnchors=FA;Jo.findNewAnchor=dv});var dp=R(uv=>{"use strict";function Yo(t,e,r,n){if(n&&typeof n=="object")if(Array.isArray(n))for(let i=0,o=n.length;i<o;++i){let a=n[i],s=Yo(t,n,String(i),a);s===void 0?delete n[i]:s!==a&&(n[i]=s)}else if(n instanceof Map)for(let i of Array.from(n.keys())){let o=n.get(i),a=Yo(t,n,i,o);a===void 0?n.delete(i):a!==o&&n.set(i,a)}else if(n instanceof Set)for(let i of Array.from(n)){let o=Yo(t,n,i,i);o===void 0?n.delete(i):o!==i&&(n.delete(i),n.add(o))}else for(let[i,o]of Object.entries(n)){let a=Yo(t,n,i,o);a===void 0?delete n[i]:a!==o&&(n[i]=a)}return t.call(e,r,n)}uv.applyReviver=Yo});var Wr=R(fv=>{"use strict";var KA=K();function pv(t,e,r){if(Array.isArray(t))return t.map((n,i)=>pv(n,String(i),r));if(t&&typeof t.toJSON=="function"){if(!r||!KA.hasAnchor(t))return t.toJSON(e,r);let n={aliasCount:0,count:1,res:void 0};r.anchors.set(t,n),r.onCreate=o=>{n.res=o,delete r.onCreate};let i=t.toJSON(e,r);return r.onCreate&&r.onCreate(i),i}return typeof t=="bigint"&&!r?.keep?Number(t):t}fv.toJS=pv});var lc=R(hv=>{"use strict";var HA=dp(),mv=K(),WA=Wr(),up=class{constructor(e){Object.defineProperty(this,mv.NODE_TYPE,{value:e})}clone(){let e=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));return this.range&&(e.range=this.range.slice()),e}toJS(e,{mapAsMap:r,maxAliasCount:n,onAnchor:i,reviver:o}={}){if(!mv.isDocument(e))throw new TypeError("A document argument is required");let a={anchors:new Map,doc:e,keep:!0,mapAsMap:r===!0,mapKeyWarned:!1,maxAliasCount:typeof n=="number"?n:100},s=WA.toJS(this,"",a);if(typeof i=="function")for(let{count:c,res:l}of a.anchors.values())i(l,c);return typeof o=="function"?HA.applyReviver(o,{"":s},"",s):s}};hv.NodeBase=up});var Xo=R(gv=>{"use strict";var VA=cc(),qA=Go(),Di=K(),zA=lc(),GA=Wr(),pp=class extends zA.NodeBase{constructor(e){super(Di.ALIAS),this.source=e,Object.defineProperty(this,"tag",{set(){throw new Error("Alias nodes cannot have tags")}})}resolve(e,r){if(r?.maxAliasCount===0)throw new ReferenceError("Alias resolution is disabled");let n;r?.aliasResolveCache?n=r.aliasResolveCache:(n=[],qA.visit(e,{Node:(o,a)=>{(Di.isAlias(a)||Di.hasAnchor(a))&&n.push(a)}}),r&&(r.aliasResolveCache=n));let i;for(let o of n){if(o===this)break;o.anchor===this.source&&(i=o)}return i}toJSON(e,r){if(!r)return{source:this.source};let{anchors:n,doc:i,maxAliasCount:o}=r,a=this.resolve(i,r);if(!a){let c=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw new ReferenceError(c)}let s=n.get(a);if(s||(GA.toJS(a,null,r),s=n.get(a)),s?.res===void 0){let c="This should not happen: Alias anchor was not resolved?";throw new ReferenceError(c)}if(o>=0&&(s.count+=1,s.aliasCount===0&&(s.aliasCount=dc(i,a,n)),s.count*s.aliasCount>o)){let c="Excessive alias count indicates a resource exhaustion attack";throw new ReferenceError(c)}return s.res}toString(e,r,n){let i=`*${this.source}`;if(e){if(VA.anchorIsValid(this.source),e.options.verifyAliasOrder&&!e.anchors.has(this.source)){let o=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw new Error(o)}if(e.implicitKey)return`${i} `}return i}};function dc(t,e,r){if(Di.isAlias(e)){let n=e.resolve(t),i=r&&n&&r.get(n);return i?i.count*i.aliasCount:0}else if(Di.isCollection(e)){let n=0;for(let i of e.items){let o=dc(t,i,r);o>n&&(n=o)}return n}else if(Di.isPair(e)){let n=dc(t,e.key,r),i=dc(t,e.value,r);return Math.max(n,i)}return 1}gv.Alias=pp});var ae=R(fp=>{"use strict";var UA=K(),JA=lc(),YA=Wr(),XA=t=>!t||typeof t!="function"&&typeof t!="object",Vr=class extends JA.NodeBase{constructor(e){super(UA.SCALAR),this.value=e}toJSON(e,r){return r?.keep?this.value:YA.toJS(this.value,e,r)}toString(){return String(this.value)}};Vr.BLOCK_FOLDED="BLOCK_FOLDED";Vr.BLOCK_LITERAL="BLOCK_LITERAL";Vr.PLAIN="PLAIN";Vr.QUOTE_DOUBLE="QUOTE_DOUBLE";Vr.QUOTE_SINGLE="QUOTE_SINGLE";fp.Scalar=Vr;fp.isScalarValue=XA});var Qo=R(vv=>{"use strict";var QA=Xo(),Tn=K(),yv=ae(),ZA="tag:yaml.org,2002:";function e_(t,e,r){if(e){let n=r.filter(o=>o.tag===e),i=n.find(o=>!o.format)??n[0];if(!i)throw new Error(`Tag ${e} not found`);return i}return r.find(n=>n.identify?.(t)&&!n.format)}function t_(t,e,r){if(Tn.isDocument(t)&&(t=t.contents),Tn.isNode(t))return t;if(Tn.isPair(t)){let u=r.schema[Tn.MAP].createNode?.(r.schema,null,r);return u.items.push(t),u}(t instanceof String||t instanceof Number||t instanceof Boolean||typeof BigInt<"u"&&t instanceof BigInt)&&(t=t.valueOf());let{aliasDuplicateObjects:n,onAnchor:i,onTagObj:o,schema:a,sourceObjects:s}=r,c;if(n&&t&&typeof t=="object"){if(c=s.get(t),c)return c.anchor??(c.anchor=i(t)),new QA.Alias(c.anchor);c={anchor:null,node:null},s.set(t,c)}e?.startsWith("!!")&&(e=ZA+e.slice(2));let l=e_(t,e,a.tags);if(!l){if(t&&typeof t.toJSON=="function"&&(t=t.toJSON()),!t||typeof t!="object"){let u=new yv.Scalar(t);return c&&(c.node=u),u}l=t instanceof Map?a[Tn.MAP]:Symbol.iterator in Object(t)?a[Tn.SEQ]:a[Tn.MAP]}o&&(o(l),delete r.onTagObj);let d=l?.createNode?l.createNode(r.schema,t,r):typeof l?.nodeClass?.from=="function"?l.nodeClass.from(r.schema,t,r):new yv.Scalar(t);return e?d.tag=e:l.default||(d.tag=l.tag),c&&(c.node=d),d}vv.createNode=t_});var pc=R(uc=>{"use strict";var r_=Qo(),qt=K(),n_=lc();function mp(t,e,r){let n=r;for(let i=e.length-1;i>=0;--i){let o=e[i];if(typeof o=="number"&&Number.isInteger(o)&&o>=0){let a=[];a[o]=n,n=a}else n=new Map([[o,n]])}return r_.createNode(n,void 0,{aliasDuplicateObjects:!1,keepUndefined:!1,onAnchor:()=>{throw new Error("This should not happen, please report a bug.")},schema:t,sourceObjects:new Map})}var wv=t=>t==null||typeof t=="object"&&!!t[Symbol.iterator]().next().done,hp=class extends n_.NodeBase{constructor(e,r){super(e),Object.defineProperty(this,"schema",{value:r,configurable:!0,enumerable:!1,writable:!0})}clone(e){let r=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));return e&&(r.schema=e),r.items=r.items.map(n=>qt.isNode(n)||qt.isPair(n)?n.clone(e):n),this.range&&(r.range=this.range.slice()),r}addIn(e,r){if(wv(e))this.add(r);else{let[n,...i]=e,o=this.get(n,!0);if(qt.isCollection(o))o.addIn(i,r);else if(o===void 0&&this.schema)this.set(n,mp(this.schema,i,r));else throw new Error(`Expected YAML collection at ${n}. Remaining path: ${i}`)}}deleteIn(e){let[r,...n]=e;if(n.length===0)return this.delete(r);let i=this.get(r,!0);if(qt.isCollection(i))return i.deleteIn(n);throw new Error(`Expected YAML collection at ${r}. Remaining path: ${n}`)}getIn(e,r){let[n,...i]=e,o=this.get(n,!0);return i.length===0?!r&&qt.isScalar(o)?o.value:o:qt.isCollection(o)?o.getIn(i,r):void 0}hasAllNullValues(e){return this.items.every(r=>{if(!qt.isPair(r))return!1;let n=r.value;return n==null||e&&qt.isScalar(n)&&n.value==null&&!n.commentBefore&&!n.comment&&!n.tag})}hasIn(e){let[r,...n]=e;if(n.length===0)return this.has(r);let i=this.get(r,!0);return qt.isCollection(i)?i.hasIn(n):!1}setIn(e,r){let[n,...i]=e;if(i.length===0)this.set(n,r);else{let o=this.get(n,!0);if(qt.isCollection(o))o.setIn(i,r);else if(o===void 0&&this.schema)this.set(n,mp(this.schema,i,r));else throw new Error(`Expected YAML collection at ${n}. Remaining path: ${i}`)}}};uc.Collection=hp;uc.collectionFromPath=mp;uc.isEmptyPath=wv});var Zo=R(fc=>{"use strict";var i_=t=>t.replace(/^(?!$)(?: $)?/gm,"#");function gp(t,e){return/^\n+$/.test(t)?t.substring(1):e?t.replace(/^(?! *$)/gm,e):t}var o_=(t,e,r)=>t.endsWith(`
|
||
`)?gp(r,e):r.includes(`
|
||
`)?`
|
||
`+gp(r,e):(t.endsWith(" ")?"":" ")+r;fc.indentComment=gp;fc.lineComment=o_;fc.stringifyComment=i_});var kv=R(ea=>{"use strict";var a_="flow",yp="block",mc="quoted";function s_(t,e,r="flow",{indentAtStart:n,lineWidth:i=80,minContentWidth:o=20,onFold:a,onOverflow:s}={}){if(!i||i<0)return t;i<o&&(o=0);let c=Math.max(1+o,1+i-e.length);if(t.length<=c)return t;let l=[],d={},u=i-e.length;typeof n=="number"&&(n>i-Math.max(2,o)?l.push(0):u=i-n);let p,f,m=!1,g=-1,h=-1,w=-1;r===yp&&(g=bv(t,g,e.length),g!==-1&&(u=g+c));for(let v;v=t[g+=1];){if(r===mc&&v==="\\"){switch(h=g,t[g+1]){case"x":g+=3;break;case"u":g+=5;break;case"U":g+=9;break;default:g+=1}w=g}if(v===`
|
||
`)r===yp&&(g=bv(t,g,e.length)),u=g+e.length+c,p=void 0;else{if(v===" "&&f&&f!==" "&&f!==`
|
||
`&&f!==" "){let b=t[g+1];b&&b!==" "&&b!==`
|
||
`&&b!==" "&&(p=g)}if(g>=u)if(p)l.push(p),u=p+c,p=void 0;else if(r===mc){for(;f===" "||f===" ";)f=v,v=t[g+=1],m=!0;let b=g>w+1?g-2:h-1;if(d[b])return t;l.push(b),d[b]=!0,u=b+c,p=void 0}else m=!0}f=v}if(m&&s&&s(),l.length===0)return t;a&&a();let y=t.slice(0,l[0]);for(let v=0;v<l.length;++v){let b=l[v],k=l[v+1]||t.length;b===0?y=`
|
||
${e}${t.slice(0,k)}`:(r===mc&&d[b]&&(y+=`${t[b]}\\`),y+=`
|
||
${e}${t.slice(b+1,k)}`)}return y}function bv(t,e,r){let n=e,i=e+1,o=t[i];for(;o===" "||o===" ";)if(e<i+r)o=t[++e];else{do o=t[++e];while(o&&o!==`
|
||
`);n=e,i=e+1,o=t[i]}return n}ea.FOLD_BLOCK=yp;ea.FOLD_FLOW=a_;ea.FOLD_QUOTED=mc;ea.foldFlowLines=s_});var ra=R(Sv=>{"use strict";var Et=ae(),qr=kv(),gc=(t,e)=>({indentAtStart:e?t.indent.length:t.indentAtStart,lineWidth:t.options.lineWidth,minContentWidth:t.options.minContentWidth}),yc=t=>/^(%|---|\.\.\.)/m.test(t);function c_(t,e,r){if(!e||e<0)return!1;let n=e-r,i=t.length;if(i<=n)return!1;for(let o=0,a=0;o<i;++o)if(t[o]===`
|
||
`){if(o-a>n)return!0;if(a=o+1,i-a<=n)return!1}return!0}function ta(t,e){let r=JSON.stringify(t);if(e.options.doubleQuotedAsJSON)return r;let{implicitKey:n}=e,i=e.options.doubleQuotedMinMultiLineLength,o=e.indent||(yc(t)?" ":""),a="",s=0;for(let c=0,l=r[c];l;l=r[++c])if(l===" "&&r[c+1]==="\\"&&r[c+2]==="n"&&(a+=r.slice(s,c)+"\\ ",c+=1,s=c,l="\\"),l==="\\")switch(r[c+1]){case"u":{a+=r.slice(s,c);let d=r.substr(c+2,4);switch(d){case"0000":a+="\\0";break;case"0007":a+="\\a";break;case"000b":a+="\\v";break;case"001b":a+="\\e";break;case"0085":a+="\\N";break;case"00a0":a+="\\_";break;case"2028":a+="\\L";break;case"2029":a+="\\P";break;default:d.substr(0,2)==="00"?a+="\\x"+d.substr(2):a+=r.substr(c,6)}c+=5,s=c+1}break;case"n":if(n||r[c+2]==='"'||r.length<i)c+=1;else{for(a+=r.slice(s,c)+`
|
||
|
||
`;r[c+2]==="\\"&&r[c+3]==="n"&&r[c+4]!=='"';)a+=`
|
||
`,c+=2;a+=o,r[c+2]===" "&&(a+="\\"),c+=1,s=c+1}break;default:c+=1}return a=s?a+r.slice(s):r,n?a:qr.foldFlowLines(a,o,qr.FOLD_QUOTED,gc(e,!1))}function vp(t,e){if(e.options.singleQuote===!1||e.implicitKey&&t.includes(`
|
||
`)||/[ \t]\n|\n[ \t]/.test(t))return ta(t,e);let r=e.indent||(yc(t)?" ":""),n="'"+t.replace(/'/g,"''").replace(/\n+/g,`$&
|
||
${r}`)+"'";return e.implicitKey?n:qr.foldFlowLines(n,r,qr.FOLD_FLOW,gc(e,!1))}function Bi(t,e){let{singleQuote:r}=e.options,n;if(r===!1)n=ta;else{let i=t.includes('"'),o=t.includes("'");i&&!o?n=vp:o&&!i?n=ta:n=r?vp:ta}return n(t,e)}var wp;try{wp=new RegExp(`(^|(?<!
|
||
))
|
||
+(?!
|
||
|$)`,"g")}catch{wp=/\n+(?!\n|$)/g}function hc({comment:t,type:e,value:r},n,i,o){let{blockQuote:a,commentString:s,lineWidth:c}=n.options;if(!a||/\n[\t ]+$/.test(r))return Bi(r,n);let l=n.indent||(n.forceBlockIndent||yc(r)?" ":""),d=a==="literal"?!0:a==="folded"||e===Et.Scalar.BLOCK_FOLDED?!1:e===Et.Scalar.BLOCK_LITERAL?!0:!c_(r,c,l.length);if(!r)return d?`|
|
||
`:`>
|
||
`;let u,p;for(p=r.length;p>0;--p){let k=r[p-1];if(k!==`
|
||
`&&k!==" "&&k!==" ")break}let f=r.substring(p),m=f.indexOf(`
|
||
`);m===-1?u="-":r===f||m!==f.length-1?(u="+",o&&o()):u="",f&&(r=r.slice(0,-f.length),f[f.length-1]===`
|
||
`&&(f=f.slice(0,-1)),f=f.replace(wp,`$&${l}`));let g=!1,h,w=-1;for(h=0;h<r.length;++h){let k=r[h];if(k===" ")g=!0;else if(k===`
|
||
`)w=h;else break}let y=r.substring(0,w<h?w+1:h);y&&(r=r.substring(y.length),y=y.replace(/\n+/g,`$&${l}`));let b=(g?l?"2":"1":"")+u;if(t&&(b+=" "+s(t.replace(/ ?[\r\n]+/g," ")),i&&i()),!d){let k=r.replace(/\n+/g,`
|
||
$&`).replace(/(?:^|\n)([\t ].*)(?:([\n\t ]*)\n(?![\n\t ]))?/g,"$1$2").replace(/\n+/g,`$&${l}`),S=!1,E=gc(n,!0);a!=="folded"&&e!==Et.Scalar.BLOCK_FOLDED&&(E.onOverflow=()=>{S=!0});let N=qr.foldFlowLines(`${y}${k}${f}`,l,qr.FOLD_BLOCK,E);if(!S)return`>${b}
|
||
${l}${N}`}return r=r.replace(/\n+/g,`$&${l}`),`|${b}
|
||
${l}${y}${r}${f}`}function l_(t,e,r,n){let{type:i,value:o}=t,{actualString:a,implicitKey:s,indent:c,indentStep:l,inFlow:d}=e;if(s&&o.includes(`
|
||
`)||d&&/[[\]{},]/.test(o))return Bi(o,e);if(/^[\n\t ,[\]{}#&*!|>'"%@`]|^[?-]$|^[?-][ \t]|[\n:][ \t]|[ \t]\n|[\n\t ]#|[\n\t :]$/.test(o))return s||d||!o.includes(`
|
||
`)?Bi(o,e):hc(t,e,r,n);if(!s&&!d&&i!==Et.Scalar.PLAIN&&o.includes(`
|
||
`))return hc(t,e,r,n);if(yc(o)){if(c==="")return e.forceBlockIndent=!0,hc(t,e,r,n);if(s&&c===l)return Bi(o,e)}let u=o.replace(/\n+/g,`$&
|
||
${c}`);if(a){let p=g=>g.default&&g.tag!=="tag:yaml.org,2002:str"&&g.test?.test(u),{compat:f,tags:m}=e.doc.schema;if(m.some(p)||f?.some(p))return Bi(o,e)}return s?u:qr.foldFlowLines(u,c,qr.FOLD_FLOW,gc(e,!1))}function d_(t,e,r,n){let{implicitKey:i,inFlow:o}=e,a=typeof t.value=="string"?t:Object.assign({},t,{value:String(t.value)}),{type:s}=t;s!==Et.Scalar.QUOTE_DOUBLE&&/[\x00-\x08\x0b-\x1f\x7f-\x9f\u{D800}-\u{DFFF}]/u.test(a.value)&&(s=Et.Scalar.QUOTE_DOUBLE);let c=d=>{switch(d){case Et.Scalar.BLOCK_FOLDED:case Et.Scalar.BLOCK_LITERAL:return i||o?Bi(a.value,e):hc(a,e,r,n);case Et.Scalar.QUOTE_DOUBLE:return ta(a.value,e);case Et.Scalar.QUOTE_SINGLE:return vp(a.value,e);case Et.Scalar.PLAIN:return l_(a,e,r,n);default:return null}},l=c(s);if(l===null){let{defaultKeyType:d,defaultStringType:u}=e.options,p=i&&d||u;if(l=c(p),l===null)throw new Error(`Unsupported default string type ${p}`)}return l}Sv.stringifyString=d_});var na=R(bp=>{"use strict";var u_=cc(),zr=K(),p_=Zo(),f_=ra();function m_(t,e){let r=Object.assign({blockQuote:!0,commentString:p_.stringifyComment,defaultKeyType:null,defaultStringType:"PLAIN",directives:null,doubleQuotedAsJSON:!1,doubleQuotedMinMultiLineLength:40,falseStr:"false",flowCollectionPadding:!0,indentSeq:!0,lineWidth:80,minContentWidth:20,nullStr:"null",simpleKeys:!1,singleQuote:null,trailingComma:!1,trueStr:"true",verifyAliasOrder:!0},t.schema.toStringOptions,e),n;switch(r.collectionStyle){case"block":n=!1;break;case"flow":n=!0;break;default:n=null}return{anchors:new Set,doc:t,flowCollectionPadding:r.flowCollectionPadding?" ":"",indent:"",indentStep:typeof r.indent=="number"?" ".repeat(r.indent):" ",inFlow:n,options:r}}function h_(t,e){if(e.tag){let i=t.filter(o=>o.tag===e.tag);if(i.length>0)return i.find(o=>o.format===e.format)??i[0]}let r,n;if(zr.isScalar(e)){n=e.value;let i=t.filter(o=>o.identify?.(n));if(i.length>1){let o=i.filter(a=>a.test);o.length>0&&(i=o)}r=i.find(o=>o.format===e.format)??i.find(o=>!o.format)}else n=e,r=t.find(i=>i.nodeClass&&n instanceof i.nodeClass);if(!r){let i=n?.constructor?.name??(n===null?"null":typeof n);throw new Error(`Tag not resolved for ${i} value`)}return r}function g_(t,e,{anchors:r,doc:n}){if(!n.directives)return"";let i=[],o=(zr.isScalar(t)||zr.isCollection(t))&&t.anchor;o&&u_.anchorIsValid(o)&&(r.add(o),i.push(`&${o}`));let a=t.tag??(e.default?null:e.tag);return a&&i.push(n.directives.tagString(a)),i.join(" ")}function y_(t,e,r,n){if(zr.isPair(t))return t.toString(e,r,n);if(zr.isAlias(t)){if(e.doc.directives)return t.toString(e);if(e.resolvedAliases?.has(t))throw new TypeError("Cannot stringify circular structure without alias nodes");e.resolvedAliases?e.resolvedAliases.add(t):e.resolvedAliases=new Set([t]),t=t.resolve(e.doc)}let i,o=zr.isNode(t)?t:e.doc.createNode(t,{onTagObj:c=>i=c});i??(i=h_(e.doc.schema.tags,o));let a=g_(o,i,e);a.length>0&&(e.indentAtStart=(e.indentAtStart??0)+a.length+1);let s=typeof i.stringify=="function"?i.stringify(o,e,r,n):zr.isScalar(o)?f_.stringifyString(o,e,r,n):o.toString(e,r,n);return a?zr.isScalar(o)||s[0]==="{"||s[0]==="["?`${a} ${s}`:`${a}
|
||
${e.indent}${s}`:s}bp.createStringifyContext=m_;bp.stringify=y_});var Pv=R(xv=>{"use strict";var hr=K(),Nv=ae(),Ev=na(),ia=Zo();function v_({key:t,value:e},r,n,i){let{allNullValues:o,doc:a,indent:s,indentStep:c,options:{commentString:l,indentSeq:d,simpleKeys:u}}=r,p=hr.isNode(t)&&t.comment||null;if(u){if(p)throw new Error("With simple keys, key nodes cannot have comments");if(hr.isCollection(t)||!hr.isNode(t)&&typeof t=="object"){let E="With simple keys, collection cannot be used as a key value";throw new Error(E)}}let f=!u&&(!t||p&&e==null&&!r.inFlow||hr.isCollection(t)||(hr.isScalar(t)?t.type===Nv.Scalar.BLOCK_FOLDED||t.type===Nv.Scalar.BLOCK_LITERAL:typeof t=="object"));r=Object.assign({},r,{allNullValues:!1,implicitKey:!f&&(u||!o),indent:s+c});let m=!1,g=!1,h=Ev.stringify(t,r,()=>m=!0,()=>g=!0);if(!f&&!r.inFlow&&h.length>1024){if(u)throw new Error("With simple keys, single line scalar must not span more than 1024 characters");f=!0}if(r.inFlow){if(o||e==null)return m&&n&&n(),h===""?"?":f?`? ${h}`:h}else if(o&&!u||e==null&&f)return h=`? ${h}`,p&&!m?h+=ia.lineComment(h,r.indent,l(p)):g&&i&&i(),h;m&&(p=null),f?(p&&(h+=ia.lineComment(h,r.indent,l(p))),h=`? ${h}
|
||
${s}:`):(h=`${h}:`,p&&(h+=ia.lineComment(h,r.indent,l(p))));let w,y,v;hr.isNode(e)?(w=!!e.spaceBefore,y=e.commentBefore,v=e.comment):(w=!1,y=null,v=null,e&&typeof e=="object"&&(e=a.createNode(e))),r.implicitKey=!1,!f&&!p&&hr.isScalar(e)&&(r.indentAtStart=h.length+1),g=!1,!d&&c.length>=2&&!r.inFlow&&!f&&hr.isSeq(e)&&!e.flow&&!e.tag&&!e.anchor&&(r.indent=r.indent.substring(2));let b=!1,k=Ev.stringify(e,r,()=>b=!0,()=>g=!0),S=" ";if(p||w||y){if(S=w?`
|
||
`:"",y){let E=l(y);S+=`
|
||
${ia.indentComment(E,r.indent)}`}k===""&&!r.inFlow?S===`
|
||
`&&v&&(S=`
|
||
|
||
`):S+=`
|
||
${r.indent}`}else if(!f&&hr.isCollection(e)){let E=k[0],N=k.indexOf(`
|
||
`),P=N!==-1,_=r.inFlow??e.flow??e.items.length===0;if(P||!_){let j=!1;if(P&&(E==="&"||E==="!")){let x=k.indexOf(" ");E==="&"&&x!==-1&&x<N&&k[x+1]==="!"&&(x=k.indexOf(" ",x+1)),(x===-1||N<x)&&(j=!0)}j||(S=`
|
||
${r.indent}`)}}else(k===""||k[0]===`
|
||
`)&&(S="");return h+=S+k,r.inFlow?b&&n&&n():v&&!b?h+=ia.lineComment(h,r.indent,l(v)):g&&i&&i(),h}xv.stringifyPair=v_});var Sp=R(kp=>{"use strict";var Cv=nc("process");function w_(t,...e){t==="debug"&&console.log(...e)}function b_(t,e){(t==="debug"||t==="warn")&&(typeof Cv.emitWarning=="function"?Cv.emitWarning(e):console.warn(e))}kp.debug=w_;kp.warn=b_});var Sc=R(kc=>{"use strict";var bc=K(),Rv=ae(),vc="<<",wc={identify:t=>t===vc||typeof t=="symbol"&&t.description===vc,default:"key",tag:"tag:yaml.org,2002:merge",test:/^<<$/,resolve:()=>Object.assign(new Rv.Scalar(Symbol(vc)),{addToJSMap:Av}),stringify:()=>vc},k_=(t,e)=>(wc.identify(e)||bc.isScalar(e)&&(!e.type||e.type===Rv.Scalar.PLAIN)&&wc.identify(e.value))&&t?.doc.schema.tags.some(r=>r.tag===wc.tag&&r.default);function Av(t,e,r){let n=_v(t,r);if(bc.isSeq(n))for(let i of n.items)Np(t,e,i);else if(Array.isArray(n))for(let i of n)Np(t,e,i);else Np(t,e,n)}function Np(t,e,r){let n=_v(t,r);if(!bc.isMap(n))throw new Error("Merge sources must be maps or map aliases");let i=n.toJSON(null,t,Map);for(let[o,a]of i)e instanceof Map?e.has(o)||e.set(o,a):e instanceof Set?e.add(o):Object.prototype.hasOwnProperty.call(e,o)||Object.defineProperty(e,o,{value:a,writable:!0,enumerable:!0,configurable:!0});return e}function _v(t,e){return t&&bc.isAlias(e)?e.resolve(t.doc,t):e}kc.addMergeToJSMap=Av;kc.isMergeKey=k_;kc.merge=wc});var xp=R(Tv=>{"use strict";var S_=Sp(),jv=Sc(),N_=na(),Iv=K(),Ep=Wr();function E_(t,e,{key:r,value:n}){if(Iv.isNode(r)&&r.addToJSMap)r.addToJSMap(t,e,n);else if(jv.isMergeKey(t,r))jv.addMergeToJSMap(t,e,n);else{let i=Ep.toJS(r,"",t);if(e instanceof Map)e.set(i,Ep.toJS(n,i,t));else if(e instanceof Set)e.add(i);else{let o=x_(r,i,t),a=Ep.toJS(n,o,t);o in e?Object.defineProperty(e,o,{value:a,writable:!0,enumerable:!0,configurable:!0}):e[o]=a}}return e}function x_(t,e,r){if(e===null)return"";if(typeof e!="object")return String(e);if(Iv.isNode(t)&&r?.doc){let n=N_.createStringifyContext(r.doc,{});n.anchors=new Set;for(let o of r.anchors.keys())n.anchors.add(o.anchor);n.inFlow=!0,n.inStringifyKey=!0;let i=t.toString(n);if(!r.mapKeyWarned){let o=JSON.stringify(i);o.length>40&&(o=o.substring(0,36)+'..."'),S_.warn(r.doc.options.logLevel,`Keys with collection values will be stringified due to JS Object restrictions: ${o}. Set mapAsMap: true to use object keys.`),r.mapKeyWarned=!0}return i}return JSON.stringify(e)}Tv.addPairToJSMap=E_});var Gr=R(Pp=>{"use strict";var $v=Qo(),P_=Pv(),C_=xp(),Nc=K();function R_(t,e,r){let n=$v.createNode(t,void 0,r),i=$v.createNode(e,void 0,r);return new Ec(n,i)}var Ec=class t{constructor(e,r=null){Object.defineProperty(this,Nc.NODE_TYPE,{value:Nc.PAIR}),this.key=e,this.value=r}clone(e){let{key:r,value:n}=this;return Nc.isNode(r)&&(r=r.clone(e)),Nc.isNode(n)&&(n=n.clone(e)),new t(r,n)}toJSON(e,r){let n=r?.mapAsMap?new Map:{};return C_.addPairToJSMap(r,n,this)}toString(e,r,n){return e?.doc?P_.stringifyPair(this,e,r,n):JSON.stringify(this)}};Pp.Pair=Ec;Pp.createPair=R_});var Cp=R(Mv=>{"use strict";var $n=K(),Ov=na(),xc=Zo();function A_(t,e,r){return(e.inFlow??t.flow?j_:__)(t,e,r)}function __({comment:t,items:e},r,{blockItemPrefix:n,flowChars:i,itemIndent:o,onChompKeep:a,onComment:s}){let{indent:c,options:{commentString:l}}=r,d=Object.assign({},r,{indent:o,type:null}),u=!1,p=[];for(let m=0;m<e.length;++m){let g=e[m],h=null;if($n.isNode(g))!u&&g.spaceBefore&&p.push(""),Pc(r,p,g.commentBefore,u),g.comment&&(h=g.comment);else if($n.isPair(g)){let y=$n.isNode(g.key)?g.key:null;y&&(!u&&y.spaceBefore&&p.push(""),Pc(r,p,y.commentBefore,u))}u=!1;let w=Ov.stringify(g,d,()=>h=null,()=>u=!0);h&&(w+=xc.lineComment(w,o,l(h))),u&&h&&(u=!1),p.push(n+w)}let f;if(p.length===0)f=i.start+i.end;else{f=p[0];for(let m=1;m<p.length;++m){let g=p[m];f+=g?`
|
||
${c}${g}`:`
|
||
`}}return t?(f+=`
|
||
`+xc.indentComment(l(t),c),s&&s()):u&&a&&a(),f}function j_({items:t},e,{flowChars:r,itemIndent:n}){let{indent:i,indentStep:o,flowCollectionPadding:a,options:{commentString:s}}=e;n+=o;let c=Object.assign({},e,{indent:n,inFlow:!0,type:null}),l=!1,d=0,u=[];for(let m=0;m<t.length;++m){let g=t[m],h=null;if($n.isNode(g))g.spaceBefore&&u.push(""),Pc(e,u,g.commentBefore,!1),g.comment&&(h=g.comment);else if($n.isPair(g)){let y=$n.isNode(g.key)?g.key:null;y&&(y.spaceBefore&&u.push(""),Pc(e,u,y.commentBefore,!1),y.comment&&(l=!0));let v=$n.isNode(g.value)?g.value:null;v?(v.comment&&(h=v.comment),v.commentBefore&&(l=!0)):g.value==null&&y?.comment&&(h=y.comment)}h&&(l=!0);let w=Ov.stringify(g,c,()=>h=null);l||(l=u.length>d||w.includes(`
|
||
`)),m<t.length-1?w+=",":e.options.trailingComma&&(e.options.lineWidth>0&&(l||(l=u.reduce((y,v)=>y+v.length+2,2)+(w.length+2)>e.options.lineWidth)),l&&(w+=",")),h&&(w+=xc.lineComment(w,n,s(h))),u.push(w),d=u.length}let{start:p,end:f}=r;if(u.length===0)return p+f;if(!l){let m=u.reduce((g,h)=>g+h.length+2,2);l=e.options.lineWidth>0&&m>e.options.lineWidth}if(l){let m=p;for(let g of u)m+=g?`
|
||
${o}${i}${g}`:`
|
||
`;return`${m}
|
||
${i}${f}`}else return`${p}${a}${u.join(" ")}${a}${f}`}function Pc({indent:t,options:{commentString:e}},r,n,i){if(n&&i&&(n=n.replace(/^\n+/,"")),n){let o=xc.indentComment(e(n),t);r.push(o.trimStart())}}Mv.stringifyCollection=A_});var Jr=R(Ap=>{"use strict";var I_=Cp(),T_=xp(),$_=pc(),Ur=K(),Cc=Gr(),O_=ae();function oa(t,e){let r=Ur.isScalar(e)?e.value:e;for(let n of t)if(Ur.isPair(n)&&(n.key===e||n.key===r||Ur.isScalar(n.key)&&n.key.value===r))return n}var Rp=class extends $_.Collection{static get tagName(){return"tag:yaml.org,2002:map"}constructor(e){super(Ur.MAP,e),this.items=[]}static from(e,r,n){let{keepUndefined:i,replacer:o}=n,a=new this(e),s=(c,l)=>{if(typeof o=="function")l=o.call(r,c,l);else if(Array.isArray(o)&&!o.includes(c))return;(l!==void 0||i)&&a.items.push(Cc.createPair(c,l,n))};if(r instanceof Map)for(let[c,l]of r)s(c,l);else if(r&&typeof r=="object")for(let c of Object.keys(r))s(c,r[c]);return typeof e.sortMapEntries=="function"&&a.items.sort(e.sortMapEntries),a}add(e,r){let n;Ur.isPair(e)?n=e:!e||typeof e!="object"||!("key"in e)?n=new Cc.Pair(e,e?.value):n=new Cc.Pair(e.key,e.value);let i=oa(this.items,n.key),o=this.schema?.sortMapEntries;if(i){if(!r)throw new Error(`Key ${n.key} already set`);Ur.isScalar(i.value)&&O_.isScalarValue(n.value)?i.value.value=n.value:i.value=n.value}else if(o){let a=this.items.findIndex(s=>o(n,s)<0);a===-1?this.items.push(n):this.items.splice(a,0,n)}else this.items.push(n)}delete(e){let r=oa(this.items,e);return r?this.items.splice(this.items.indexOf(r),1).length>0:!1}get(e,r){let i=oa(this.items,e)?.value;return(!r&&Ur.isScalar(i)?i.value:i)??void 0}has(e){return!!oa(this.items,e)}set(e,r){this.add(new Cc.Pair(e,r),!0)}toJSON(e,r,n){let i=n?new n:r?.mapAsMap?new Map:{};r?.onCreate&&r.onCreate(i);for(let o of this.items)T_.addPairToJSMap(r,i,o);return i}toString(e,r,n){if(!e)return JSON.stringify(this);for(let i of this.items)if(!Ur.isPair(i))throw new Error(`Map items must all be pairs; found ${JSON.stringify(i)} instead`);return!e.allNullValues&&this.hasAllNullValues(!1)&&(e=Object.assign({},e,{allNullValues:!0})),I_.stringifyCollection(this,e,{blockItemPrefix:"",flowChars:{start:"{",end:"}"},itemIndent:e.indent||"",onChompKeep:n,onComment:r})}};Ap.YAMLMap=Rp;Ap.findPair=oa});var Fi=R(Dv=>{"use strict";var M_=K(),Lv=Jr(),L_={collection:"map",default:!0,nodeClass:Lv.YAMLMap,tag:"tag:yaml.org,2002:map",resolve(t,e){return M_.isMap(t)||e("Expected a mapping for this tag"),t},createNode:(t,e,r)=>Lv.YAMLMap.from(t,e,r)};Dv.map=L_});var Yr=R(Bv=>{"use strict";var D_=Qo(),B_=Cp(),F_=pc(),Ac=K(),K_=ae(),H_=Wr(),_p=class extends F_.Collection{static get tagName(){return"tag:yaml.org,2002:seq"}constructor(e){super(Ac.SEQ,e),this.items=[]}add(e){this.items.push(e)}delete(e){let r=Rc(e);return typeof r!="number"?!1:this.items.splice(r,1).length>0}get(e,r){let n=Rc(e);if(typeof n!="number")return;let i=this.items[n];return!r&&Ac.isScalar(i)?i.value:i}has(e){let r=Rc(e);return typeof r=="number"&&r<this.items.length}set(e,r){let n=Rc(e);if(typeof n!="number")throw new Error(`Expected a valid index, not ${e}.`);let i=this.items[n];Ac.isScalar(i)&&K_.isScalarValue(r)?i.value=r:this.items[n]=r}toJSON(e,r){let n=[];r?.onCreate&&r.onCreate(n);let i=0;for(let o of this.items)n.push(H_.toJS(o,String(i++),r));return n}toString(e,r,n){return e?B_.stringifyCollection(this,e,{blockItemPrefix:"- ",flowChars:{start:"[",end:"]"},itemIndent:(e.indent||"")+" ",onChompKeep:n,onComment:r}):JSON.stringify(this)}static from(e,r,n){let{replacer:i}=n,o=new this(e);if(r&&Symbol.iterator in Object(r)){let a=0;for(let s of r){if(typeof i=="function"){let c=r instanceof Set?s:String(a++);s=i.call(r,c,s)}o.items.push(D_.createNode(s,void 0,n))}}return o}};function Rc(t){let e=Ac.isScalar(t)?t.value:t;return e&&typeof e=="string"&&(e=Number(e)),typeof e=="number"&&Number.isInteger(e)&&e>=0?e:null}Bv.YAMLSeq=_p});var Ki=R(Kv=>{"use strict";var W_=K(),Fv=Yr(),V_={collection:"seq",default:!0,nodeClass:Fv.YAMLSeq,tag:"tag:yaml.org,2002:seq",resolve(t,e){return W_.isSeq(t)||e("Expected a sequence for this tag"),t},createNode:(t,e,r)=>Fv.YAMLSeq.from(t,e,r)};Kv.seq=V_});var aa=R(Hv=>{"use strict";var q_=ra(),z_={identify:t=>typeof t=="string",default:!0,tag:"tag:yaml.org,2002:str",resolve:t=>t,stringify(t,e,r,n){return e=Object.assign({actualString:!0},e),q_.stringifyString(t,e,r,n)}};Hv.string=z_});var _c=R(qv=>{"use strict";var Wv=ae(),Vv={identify:t=>t==null,createNode:()=>new Wv.Scalar(null),default:!0,tag:"tag:yaml.org,2002:null",test:/^(?:~|[Nn]ull|NULL)?$/,resolve:()=>new Wv.Scalar(null),stringify:({source:t},e)=>typeof t=="string"&&Vv.test.test(t)?t:e.options.nullStr};qv.nullTag=Vv});var jp=R(Gv=>{"use strict";var G_=ae(),zv={identify:t=>typeof t=="boolean",default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:[Tt]rue|TRUE|[Ff]alse|FALSE)$/,resolve:t=>new G_.Scalar(t[0]==="t"||t[0]==="T"),stringify({source:t,value:e},r){if(t&&zv.test.test(t)){let n=t[0]==="t"||t[0]==="T";if(e===n)return t}return e?r.options.trueStr:r.options.falseStr}};Gv.boolTag=zv});var Hi=R(Uv=>{"use strict";function U_({format:t,minFractionDigits:e,tag:r,value:n}){if(typeof n=="bigint")return String(n);let i=typeof n=="number"?n:Number(n);if(!isFinite(i))return isNaN(i)?".nan":i<0?"-.inf":".inf";let o=Object.is(n,-0)?"-0":JSON.stringify(n);if(!t&&e&&(!r||r==="tag:yaml.org,2002:float")&&/^-?\d/.test(o)&&!o.includes("e")){let a=o.indexOf(".");a<0&&(a=o.length,o+=".");let s=e-(o.length-a-1);for(;s-- >0;)o+="0"}return o}Uv.stringifyNumber=U_});var Tp=R(jc=>{"use strict";var J_=ae(),Ip=Hi(),Y_={identify:t=>typeof t=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^(?:[-+]?\.(?:inf|Inf|INF)|\.nan|\.NaN|\.NAN)$/,resolve:t=>t.slice(-3).toLowerCase()==="nan"?NaN:t[0]==="-"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,stringify:Ip.stringifyNumber},X_={identify:t=>typeof t=="number",default:!0,tag:"tag:yaml.org,2002:float",format:"EXP",test:/^[-+]?(?:\.[0-9]+|[0-9]+(?:\.[0-9]*)?)[eE][-+]?[0-9]+$/,resolve:t=>parseFloat(t),stringify(t){let e=Number(t.value);return isFinite(e)?e.toExponential():Ip.stringifyNumber(t)}},Q_={identify:t=>typeof t=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^[-+]?(?:\.[0-9]+|[0-9]+\.[0-9]*)$/,resolve(t){let e=new J_.Scalar(parseFloat(t)),r=t.indexOf(".");return r!==-1&&t[t.length-1]==="0"&&(e.minFractionDigits=t.length-r-1),e},stringify:Ip.stringifyNumber};jc.float=Q_;jc.floatExp=X_;jc.floatNaN=Y_});var Op=R(Tc=>{"use strict";var Jv=Hi(),Ic=t=>typeof t=="bigint"||Number.isInteger(t),$p=(t,e,r,{intAsBigInt:n})=>n?BigInt(t):parseInt(t.substring(e),r);function Yv(t,e,r){let{value:n}=t;return Ic(n)&&n>=0?r+n.toString(e):Jv.stringifyNumber(t)}var Z_={identify:t=>Ic(t)&&t>=0,default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^0o[0-7]+$/,resolve:(t,e,r)=>$p(t,2,8,r),stringify:t=>Yv(t,8,"0o")},ej={identify:Ic,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9]+$/,resolve:(t,e,r)=>$p(t,0,10,r),stringify:Jv.stringifyNumber},tj={identify:t=>Ic(t)&&t>=0,default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^0x[0-9a-fA-F]+$/,resolve:(t,e,r)=>$p(t,2,16,r),stringify:t=>Yv(t,16,"0x")};Tc.int=ej;Tc.intHex=tj;Tc.intOct=Z_});var Qv=R(Xv=>{"use strict";var rj=Fi(),nj=_c(),ij=Ki(),oj=aa(),aj=jp(),Mp=Tp(),Lp=Op(),sj=[rj.map,ij.seq,oj.string,nj.nullTag,aj.boolTag,Lp.intOct,Lp.int,Lp.intHex,Mp.floatNaN,Mp.floatExp,Mp.float];Xv.schema=sj});var tw=R(ew=>{"use strict";var cj=ae(),lj=Fi(),dj=Ki();function Zv(t){return typeof t=="bigint"||Number.isInteger(t)}var $c=({value:t})=>JSON.stringify(t),uj=[{identify:t=>typeof t=="string",default:!0,tag:"tag:yaml.org,2002:str",resolve:t=>t,stringify:$c},{identify:t=>t==null,createNode:()=>new cj.Scalar(null),default:!0,tag:"tag:yaml.org,2002:null",test:/^null$/,resolve:()=>null,stringify:$c},{identify:t=>typeof t=="boolean",default:!0,tag:"tag:yaml.org,2002:bool",test:/^true$|^false$/,resolve:t=>t==="true",stringify:$c},{identify:Zv,default:!0,tag:"tag:yaml.org,2002:int",test:/^-?(?:0|[1-9][0-9]*)$/,resolve:(t,e,{intAsBigInt:r})=>r?BigInt(t):parseInt(t,10),stringify:({value:t})=>Zv(t)?t.toString():JSON.stringify(t)},{identify:t=>typeof t=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^-?(?:0|[1-9][0-9]*)(?:\.[0-9]*)?(?:[eE][-+]?[0-9]+)?$/,resolve:t=>parseFloat(t),stringify:$c}],pj={default:!0,tag:"",test:/^/,resolve(t,e){return e(`Unresolved plain scalar ${JSON.stringify(t)}`),t}},fj=[lj.map,dj.seq].concat(uj,pj);ew.schema=fj});var Bp=R(rw=>{"use strict";var sa=nc("buffer"),Dp=ae(),mj=ra(),hj={identify:t=>t instanceof Uint8Array,default:!1,tag:"tag:yaml.org,2002:binary",resolve(t,e){if(typeof sa.Buffer=="function")return sa.Buffer.from(t,"base64");if(typeof atob=="function"){let r=atob(t.replace(/[\n\r]/g,"")),n=new Uint8Array(r.length);for(let i=0;i<r.length;++i)n[i]=r.charCodeAt(i);return n}else return e("This environment does not support reading binary tags; either Buffer or atob is required"),t},stringify({comment:t,type:e,value:r},n,i,o){if(!r)return"";let a=r,s;if(typeof sa.Buffer=="function")s=a instanceof sa.Buffer?a.toString("base64"):sa.Buffer.from(a.buffer).toString("base64");else if(typeof btoa=="function"){let c="";for(let l=0;l<a.length;++l)c+=String.fromCharCode(a[l]);s=btoa(c)}else throw new Error("This environment does not support writing binary tags; either Buffer or btoa is required");if(e??(e=Dp.Scalar.BLOCK_LITERAL),e!==Dp.Scalar.QUOTE_DOUBLE){let c=Math.max(n.options.lineWidth-n.indent.length,n.options.minContentWidth),l=Math.ceil(s.length/c),d=new Array(l);for(let u=0,p=0;u<l;++u,p+=c)d[u]=s.substr(p,c);s=d.join(e===Dp.Scalar.BLOCK_LITERAL?`
|
||
`:" ")}return mj.stringifyString({comment:t,type:e,value:s},n,i,o)}};rw.binary=hj});var Lc=R(Mc=>{"use strict";var Oc=K(),Fp=Gr(),gj=ae(),yj=Yr();function nw(t,e){if(Oc.isSeq(t))for(let r=0;r<t.items.length;++r){let n=t.items[r];if(!Oc.isPair(n)){if(Oc.isMap(n)){n.items.length>1&&e("Each pair must have its own sequence indicator");let i=n.items[0]||new Fp.Pair(new gj.Scalar(null));if(n.commentBefore&&(i.key.commentBefore=i.key.commentBefore?`${n.commentBefore}
|
||
${i.key.commentBefore}`:n.commentBefore),n.comment){let o=i.value??i.key;o.comment=o.comment?`${n.comment}
|
||
${o.comment}`:n.comment}n=i}t.items[r]=Oc.isPair(n)?n:new Fp.Pair(n)}}else e("Expected a sequence for this tag");return t}function iw(t,e,r){let{replacer:n}=r,i=new yj.YAMLSeq(t);i.tag="tag:yaml.org,2002:pairs";let o=0;if(e&&Symbol.iterator in Object(e))for(let a of e){typeof n=="function"&&(a=n.call(e,String(o++),a));let s,c;if(Array.isArray(a))if(a.length===2)s=a[0],c=a[1];else throw new TypeError(`Expected [key, value] tuple: ${a}`);else if(a&&a instanceof Object){let l=Object.keys(a);if(l.length===1)s=l[0],c=a[s];else throw new TypeError(`Expected tuple with one key, not ${l.length} keys`)}else s=a;i.items.push(Fp.createPair(s,c,r))}return i}var vj={collection:"seq",default:!1,tag:"tag:yaml.org,2002:pairs",resolve:nw,createNode:iw};Mc.createPairs=iw;Mc.pairs=vj;Mc.resolvePairs=nw});var Wp=R(Hp=>{"use strict";var ow=K(),Kp=Wr(),ca=Jr(),wj=Yr(),aw=Lc(),On=class t extends wj.YAMLSeq{constructor(){super(),this.add=ca.YAMLMap.prototype.add.bind(this),this.delete=ca.YAMLMap.prototype.delete.bind(this),this.get=ca.YAMLMap.prototype.get.bind(this),this.has=ca.YAMLMap.prototype.has.bind(this),this.set=ca.YAMLMap.prototype.set.bind(this),this.tag=t.tag}toJSON(e,r){if(!r)return super.toJSON(e);let n=new Map;r?.onCreate&&r.onCreate(n);for(let i of this.items){let o,a;if(ow.isPair(i)?(o=Kp.toJS(i.key,"",r),a=Kp.toJS(i.value,o,r)):o=Kp.toJS(i,"",r),n.has(o))throw new Error("Ordered maps must not include duplicate keys");n.set(o,a)}return n}static from(e,r,n){let i=aw.createPairs(e,r,n),o=new this;return o.items=i.items,o}};On.tag="tag:yaml.org,2002:omap";var bj={collection:"seq",identify:t=>t instanceof Map,nodeClass:On,default:!1,tag:"tag:yaml.org,2002:omap",resolve(t,e){let r=aw.resolvePairs(t,e),n=[];for(let{key:i}of r.items)ow.isScalar(i)&&(n.includes(i.value)?e(`Ordered maps must not include duplicate keys: ${i.value}`):n.push(i.value));return Object.assign(new On,r)},createNode:(t,e,r)=>On.from(t,e,r)};Hp.YAMLOMap=On;Hp.omap=bj});var uw=R(Vp=>{"use strict";var sw=ae();function cw({value:t,source:e},r){return e&&(t?lw:dw).test.test(e)?e:t?r.options.trueStr:r.options.falseStr}var lw={identify:t=>t===!0,default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:Y|y|[Yy]es|YES|[Tt]rue|TRUE|[Oo]n|ON)$/,resolve:()=>new sw.Scalar(!0),stringify:cw},dw={identify:t=>t===!1,default:!0,tag:"tag:yaml.org,2002:bool",test:/^(?:N|n|[Nn]o|NO|[Ff]alse|FALSE|[Oo]ff|OFF)$/,resolve:()=>new sw.Scalar(!1),stringify:cw};Vp.falseTag=dw;Vp.trueTag=lw});var pw=R(Dc=>{"use strict";var kj=ae(),qp=Hi(),Sj={identify:t=>typeof t=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^(?:[-+]?\.(?:inf|Inf|INF)|\.nan|\.NaN|\.NAN)$/,resolve:t=>t.slice(-3).toLowerCase()==="nan"?NaN:t[0]==="-"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,stringify:qp.stringifyNumber},Nj={identify:t=>typeof t=="number",default:!0,tag:"tag:yaml.org,2002:float",format:"EXP",test:/^[-+]?(?:[0-9][0-9_]*)?(?:\.[0-9_]*)?[eE][-+]?[0-9]+$/,resolve:t=>parseFloat(t.replace(/_/g,"")),stringify(t){let e=Number(t.value);return isFinite(e)?e.toExponential():qp.stringifyNumber(t)}},Ej={identify:t=>typeof t=="number",default:!0,tag:"tag:yaml.org,2002:float",test:/^[-+]?(?:[0-9][0-9_]*)?\.[0-9_]*$/,resolve(t){let e=new kj.Scalar(parseFloat(t.replace(/_/g,""))),r=t.indexOf(".");if(r!==-1){let n=t.substring(r+1).replace(/_/g,"");n[n.length-1]==="0"&&(e.minFractionDigits=n.length)}return e},stringify:qp.stringifyNumber};Dc.float=Ej;Dc.floatExp=Nj;Dc.floatNaN=Sj});var mw=R(da=>{"use strict";var fw=Hi(),la=t=>typeof t=="bigint"||Number.isInteger(t);function Bc(t,e,r,{intAsBigInt:n}){let i=t[0];if((i==="-"||i==="+")&&(e+=1),t=t.substring(e).replace(/_/g,""),n){switch(r){case 2:t=`0b${t}`;break;case 8:t=`0o${t}`;break;case 16:t=`0x${t}`;break}let a=BigInt(t);return i==="-"?BigInt(-1)*a:a}let o=parseInt(t,r);return i==="-"?-1*o:o}function zp(t,e,r){let{value:n}=t;if(la(n)){let i=n.toString(e);return n<0?"-"+r+i.substr(1):r+i}return fw.stringifyNumber(t)}var xj={identify:la,default:!0,tag:"tag:yaml.org,2002:int",format:"BIN",test:/^[-+]?0b[0-1_]+$/,resolve:(t,e,r)=>Bc(t,2,2,r),stringify:t=>zp(t,2,"0b")},Pj={identify:la,default:!0,tag:"tag:yaml.org,2002:int",format:"OCT",test:/^[-+]?0[0-7_]+$/,resolve:(t,e,r)=>Bc(t,1,8,r),stringify:t=>zp(t,8,"0")},Cj={identify:la,default:!0,tag:"tag:yaml.org,2002:int",test:/^[-+]?[0-9][0-9_]*$/,resolve:(t,e,r)=>Bc(t,0,10,r),stringify:fw.stringifyNumber},Rj={identify:la,default:!0,tag:"tag:yaml.org,2002:int",format:"HEX",test:/^[-+]?0x[0-9a-fA-F_]+$/,resolve:(t,e,r)=>Bc(t,2,16,r),stringify:t=>zp(t,16,"0x")};da.int=Cj;da.intBin=xj;da.intHex=Rj;da.intOct=Pj});var Up=R(Gp=>{"use strict";var Hc=K(),Fc=Gr(),Kc=Jr(),Mn=class t extends Kc.YAMLMap{constructor(e){super(e),this.tag=t.tag}add(e){let r;Hc.isPair(e)?r=e:e&&typeof e=="object"&&"key"in e&&"value"in e&&e.value===null?r=new Fc.Pair(e.key,null):r=new Fc.Pair(e,null),Kc.findPair(this.items,r.key)||this.items.push(r)}get(e,r){let n=Kc.findPair(this.items,e);return!r&&Hc.isPair(n)?Hc.isScalar(n.key)?n.key.value:n.key:n}set(e,r){if(typeof r!="boolean")throw new Error(`Expected boolean value for set(key, value) in a YAML set, not ${typeof r}`);let n=Kc.findPair(this.items,e);n&&!r?this.items.splice(this.items.indexOf(n),1):!n&&r&&this.items.push(new Fc.Pair(e))}toJSON(e,r){return super.toJSON(e,r,Set)}toString(e,r,n){if(!e)return JSON.stringify(this);if(this.hasAllNullValues(!0))return super.toString(Object.assign({},e,{allNullValues:!0}),r,n);throw new Error("Set items must all have null values")}static from(e,r,n){let{replacer:i}=n,o=new this(e);if(r&&Symbol.iterator in Object(r))for(let a of r)typeof i=="function"&&(a=i.call(r,a,a)),o.items.push(Fc.createPair(a,null,n));return o}};Mn.tag="tag:yaml.org,2002:set";var Aj={collection:"map",identify:t=>t instanceof Set,nodeClass:Mn,default:!1,tag:"tag:yaml.org,2002:set",createNode:(t,e,r)=>Mn.from(t,e,r),resolve(t,e){if(Hc.isMap(t)){if(t.hasAllNullValues(!0))return Object.assign(new Mn,t);e("Set items must all have null values")}else e("Expected a mapping for this tag");return t}};Gp.YAMLSet=Mn;Gp.set=Aj});var Yp=R(Wc=>{"use strict";var _j=Hi();function Jp(t,e){let r=t[0],n=r==="-"||r==="+"?t.substring(1):t,i=a=>e?BigInt(a):Number(a),o=n.replace(/_/g,"").split(":").reduce((a,s)=>a*i(60)+i(s),i(0));return r==="-"?i(-1)*o:o}function hw(t){let{value:e}=t,r=a=>a;if(typeof e=="bigint")r=a=>BigInt(a);else if(isNaN(e)||!isFinite(e))return _j.stringifyNumber(t);let n="";e<0&&(n="-",e*=r(-1));let i=r(60),o=[e%i];return e<60?o.unshift(0):(e=(e-o[0])/i,o.unshift(e%i),e>=60&&(e=(e-o[0])/i,o.unshift(e))),n+o.map(a=>String(a).padStart(2,"0")).join(":").replace(/000000\d*$/,"")}var jj={identify:t=>typeof t=="bigint"||Number.isInteger(t),default:!0,tag:"tag:yaml.org,2002:int",format:"TIME",test:/^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+$/,resolve:(t,e,{intAsBigInt:r})=>Jp(t,r),stringify:hw},Ij={identify:t=>typeof t=="number",default:!0,tag:"tag:yaml.org,2002:float",format:"TIME",test:/^[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\.[0-9_]*$/,resolve:t=>Jp(t,!1),stringify:hw},gw={identify:t=>t instanceof Date,default:!0,tag:"tag:yaml.org,2002:timestamp",test:RegExp("^([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})(?:(?:t|T|[ \\t]+)([0-9]{1,2}):([0-9]{1,2}):([0-9]{1,2}(\\.[0-9]+)?)(?:[ \\t]*(Z|[-+][012]?[0-9](?::[0-9]{2})?))?)?$"),resolve(t){let e=t.match(gw.test);if(!e)throw new Error("!!timestamp expects a date, starting with yyyy-mm-dd");let[,r,n,i,o,a,s]=e.map(Number),c=e[7]?Number((e[7]+"00").substr(1,3)):0,l=Date.UTC(r,n-1,i,o||0,a||0,s||0,c),d=e[8];if(d&&d!=="Z"){let u=Jp(d,!1);Math.abs(u)<30&&(u*=60),l-=6e4*u}return new Date(l)},stringify:({value:t})=>t?.toISOString().replace(/(T00:00:00)?\.000Z$/,"")??""};Wc.floatTime=Ij;Wc.intTime=jj;Wc.timestamp=gw});var ww=R(vw=>{"use strict";var Tj=Fi(),$j=_c(),Oj=Ki(),Mj=aa(),Lj=Bp(),yw=uw(),Xp=pw(),Vc=mw(),Dj=Sc(),Bj=Wp(),Fj=Lc(),Kj=Up(),Qp=Yp(),Hj=[Tj.map,Oj.seq,Mj.string,$j.nullTag,yw.trueTag,yw.falseTag,Vc.intBin,Vc.intOct,Vc.int,Vc.intHex,Xp.floatNaN,Xp.floatExp,Xp.float,Lj.binary,Dj.merge,Bj.omap,Fj.pairs,Kj.set,Qp.intTime,Qp.floatTime,Qp.timestamp];vw.schema=Hj});var Aw=R(tf=>{"use strict";var Nw=Fi(),Wj=_c(),Ew=Ki(),Vj=aa(),qj=jp(),Zp=Tp(),ef=Op(),zj=Qv(),Gj=tw(),xw=Bp(),ua=Sc(),Pw=Wp(),Cw=Lc(),bw=ww(),Rw=Up(),qc=Yp(),kw=new Map([["core",zj.schema],["failsafe",[Nw.map,Ew.seq,Vj.string]],["json",Gj.schema],["yaml11",bw.schema],["yaml-1.1",bw.schema]]),Sw={binary:xw.binary,bool:qj.boolTag,float:Zp.float,floatExp:Zp.floatExp,floatNaN:Zp.floatNaN,floatTime:qc.floatTime,int:ef.int,intHex:ef.intHex,intOct:ef.intOct,intTime:qc.intTime,map:Nw.map,merge:ua.merge,null:Wj.nullTag,omap:Pw.omap,pairs:Cw.pairs,seq:Ew.seq,set:Rw.set,timestamp:qc.timestamp},Uj={"tag:yaml.org,2002:binary":xw.binary,"tag:yaml.org,2002:merge":ua.merge,"tag:yaml.org,2002:omap":Pw.omap,"tag:yaml.org,2002:pairs":Cw.pairs,"tag:yaml.org,2002:set":Rw.set,"tag:yaml.org,2002:timestamp":qc.timestamp};function Jj(t,e,r){let n=kw.get(e);if(n&&!t)return r&&!n.includes(ua.merge)?n.concat(ua.merge):n.slice();let i=n;if(!i)if(Array.isArray(t))i=[];else{let o=Array.from(kw.keys()).filter(a=>a!=="yaml11").map(a=>JSON.stringify(a)).join(", ");throw new Error(`Unknown schema "${e}"; use one of ${o} or define customTags array`)}if(Array.isArray(t))for(let o of t)i=i.concat(o);else typeof t=="function"&&(i=t(i.slice()));return r&&(i=i.concat(ua.merge)),i.reduce((o,a)=>{let s=typeof a=="string"?Sw[a]:a;if(!s){let c=JSON.stringify(a),l=Object.keys(Sw).map(d=>JSON.stringify(d)).join(", ");throw new Error(`Unknown custom tag ${c}; use one of ${l}`)}return o.includes(s)||o.push(s),o},[])}tf.coreKnownTags=Uj;tf.getTags=Jj});var of=R(_w=>{"use strict";var rf=K(),Yj=Fi(),Xj=Ki(),Qj=aa(),zc=Aw(),Zj=(t,e)=>t.key<e.key?-1:t.key>e.key?1:0,nf=class t{constructor({compat:e,customTags:r,merge:n,resolveKnownTags:i,schema:o,sortMapEntries:a,toStringDefaults:s}){this.compat=Array.isArray(e)?zc.getTags(e,"compat"):e?zc.getTags(null,e):null,this.name=typeof o=="string"&&o||"core",this.knownTags=i?zc.coreKnownTags:{},this.tags=zc.getTags(r,this.name,n),this.toStringOptions=s??null,Object.defineProperty(this,rf.MAP,{value:Yj.map}),Object.defineProperty(this,rf.SCALAR,{value:Qj.string}),Object.defineProperty(this,rf.SEQ,{value:Xj.seq}),this.sortMapEntries=typeof a=="function"?a:a===!0?Zj:null}clone(){let e=Object.create(t.prototype,Object.getOwnPropertyDescriptors(this));return e.tags=this.tags.slice(),e}};_w.Schema=nf});var Iw=R(jw=>{"use strict";var eI=K(),af=na(),pa=Zo();function tI(t,e){let r=[],n=e.directives===!0;if(e.directives!==!1&&t.directives){let c=t.directives.toString(t);c?(r.push(c),n=!0):t.directives.docStart&&(n=!0)}n&&r.push("---");let i=af.createStringifyContext(t,e),{commentString:o}=i.options;if(t.commentBefore){r.length!==1&&r.unshift("");let c=o(t.commentBefore);r.unshift(pa.indentComment(c,""))}let a=!1,s=null;if(t.contents){if(eI.isNode(t.contents)){if(t.contents.spaceBefore&&n&&r.push(""),t.contents.commentBefore){let d=o(t.contents.commentBefore);r.push(pa.indentComment(d,""))}i.forceBlockIndent=!!t.comment,s=t.contents.comment}let c=s?void 0:()=>a=!0,l=af.stringify(t.contents,i,()=>s=null,c);s&&(l+=pa.lineComment(l,"",o(s))),(l[0]==="|"||l[0]===">")&&r[r.length-1]==="---"?r[r.length-1]=`--- ${l}`:r.push(l)}else r.push(af.stringify(t.contents,i));if(t.directives?.docEnd)if(t.comment){let c=o(t.comment);c.includes(`
|
||
`)?(r.push("..."),r.push(pa.indentComment(c,""))):r.push(`... ${c}`)}else r.push("...");else{let c=t.comment;c&&a&&(c=c.replace(/^\n+/,"")),c&&((!a||s)&&r[r.length-1]!==""&&r.push(""),r.push(pa.indentComment(o(c),"")))}return r.join(`
|
||
`)+`
|
||
`}jw.stringifyDocument=tI});var fa=R(Tw=>{"use strict";var rI=Xo(),Wi=pc(),ct=K(),nI=Gr(),iI=Wr(),oI=of(),aI=Iw(),sf=cc(),sI=dp(),cI=Qo(),cf=lp(),lf=class t{constructor(e,r,n){this.commentBefore=null,this.comment=null,this.errors=[],this.warnings=[],Object.defineProperty(this,ct.NODE_TYPE,{value:ct.DOC});let i=null;typeof r=="function"||Array.isArray(r)?i=r:n===void 0&&r&&(n=r,r=void 0);let o=Object.assign({intAsBigInt:!1,keepSourceTokens:!1,logLevel:"warn",prettyErrors:!0,strict:!0,stringKeys:!1,uniqueKeys:!0,version:"1.2"},n);this.options=o;let{version:a}=o;n?._directives?(this.directives=n._directives.atDocument(),this.directives.yaml.explicit&&(a=this.directives.yaml.version)):this.directives=new cf.Directives({version:a}),this.setSchema(a,n),this.contents=e===void 0?null:this.createNode(e,i,n)}clone(){let e=Object.create(t.prototype,{[ct.NODE_TYPE]:{value:ct.DOC}});return e.commentBefore=this.commentBefore,e.comment=this.comment,e.errors=this.errors.slice(),e.warnings=this.warnings.slice(),e.options=Object.assign({},this.options),this.directives&&(e.directives=this.directives.clone()),e.schema=this.schema.clone(),e.contents=ct.isNode(this.contents)?this.contents.clone(e.schema):this.contents,this.range&&(e.range=this.range.slice()),e}add(e){Vi(this.contents)&&this.contents.add(e)}addIn(e,r){Vi(this.contents)&&this.contents.addIn(e,r)}createAlias(e,r){if(!e.anchor){let n=sf.anchorNames(this);e.anchor=!r||n.has(r)?sf.findNewAnchor(r||"a",n):r}return new rI.Alias(e.anchor)}createNode(e,r,n){let i;if(typeof r=="function")e=r.call({"":e},"",e),i=r;else if(Array.isArray(r)){let h=y=>typeof y=="number"||y instanceof String||y instanceof Number,w=r.filter(h).map(String);w.length>0&&(r=r.concat(w)),i=r}else n===void 0&&r&&(n=r,r=void 0);let{aliasDuplicateObjects:o,anchorPrefix:a,flow:s,keepUndefined:c,onTagObj:l,tag:d}=n??{},{onAnchor:u,setAnchors:p,sourceObjects:f}=sf.createNodeAnchors(this,a||"a"),m={aliasDuplicateObjects:o??!0,keepUndefined:c??!1,onAnchor:u,onTagObj:l,replacer:i,schema:this.schema,sourceObjects:f},g=cI.createNode(e,d,m);return s&&ct.isCollection(g)&&(g.flow=!0),p(),g}createPair(e,r,n={}){let i=this.createNode(e,null,n),o=this.createNode(r,null,n);return new nI.Pair(i,o)}delete(e){return Vi(this.contents)?this.contents.delete(e):!1}deleteIn(e){return Wi.isEmptyPath(e)?this.contents==null?!1:(this.contents=null,!0):Vi(this.contents)?this.contents.deleteIn(e):!1}get(e,r){return ct.isCollection(this.contents)?this.contents.get(e,r):void 0}getIn(e,r){return Wi.isEmptyPath(e)?!r&&ct.isScalar(this.contents)?this.contents.value:this.contents:ct.isCollection(this.contents)?this.contents.getIn(e,r):void 0}has(e){return ct.isCollection(this.contents)?this.contents.has(e):!1}hasIn(e){return Wi.isEmptyPath(e)?this.contents!==void 0:ct.isCollection(this.contents)?this.contents.hasIn(e):!1}set(e,r){this.contents==null?this.contents=Wi.collectionFromPath(this.schema,[e],r):Vi(this.contents)&&this.contents.set(e,r)}setIn(e,r){Wi.isEmptyPath(e)?this.contents=r:this.contents==null?this.contents=Wi.collectionFromPath(this.schema,Array.from(e),r):Vi(this.contents)&&this.contents.setIn(e,r)}setSchema(e,r={}){typeof e=="number"&&(e=String(e));let n;switch(e){case"1.1":this.directives?this.directives.yaml.version="1.1":this.directives=new cf.Directives({version:"1.1"}),n={resolveKnownTags:!1,schema:"yaml-1.1"};break;case"1.2":case"next":this.directives?this.directives.yaml.version=e:this.directives=new cf.Directives({version:e}),n={resolveKnownTags:!0,schema:"core"};break;case null:this.directives&&delete this.directives,n=null;break;default:{let i=JSON.stringify(e);throw new Error(`Expected '1.1', '1.2' or null as first argument, but found: ${i}`)}}if(r.schema instanceof Object)this.schema=r.schema;else if(n)this.schema=new oI.Schema(Object.assign(n,r));else throw new Error("With a null YAML version, the { schema: Schema } option is required")}toJS({json:e,jsonArg:r,mapAsMap:n,maxAliasCount:i,onAnchor:o,reviver:a}={}){let s={anchors:new Map,doc:this,keep:!e,mapAsMap:n===!0,mapKeyWarned:!1,maxAliasCount:typeof i=="number"?i:100},c=iI.toJS(this.contents,r??"",s);if(typeof o=="function")for(let{count:l,res:d}of s.anchors.values())o(d,l);return typeof a=="function"?sI.applyReviver(a,{"":c},"",c):c}toJSON(e,r){return this.toJS({json:!0,jsonArg:e,mapAsMap:!1,onAnchor:r})}toString(e={}){if(this.errors.length>0)throw new Error("Document with errors cannot be stringified");if("indent"in e&&(!Number.isInteger(e.indent)||Number(e.indent)<=0)){let r=JSON.stringify(e.indent);throw new Error(`"indent" option must be a positive integer, not ${r}`)}return aI.stringifyDocument(this,e)}};function Vi(t){if(ct.isCollection(t))return!0;throw new Error("Expected a YAML collection as document contents")}Tw.Document=lf});var ga=R(ha=>{"use strict";var ma=class extends Error{constructor(e,r,n,i){super(),this.name=e,this.code=n,this.message=i,this.pos=r}},df=class extends ma{constructor(e,r,n){super("YAMLParseError",e,r,n)}},uf=class extends ma{constructor(e,r,n){super("YAMLWarning",e,r,n)}},lI=(t,e)=>r=>{if(r.pos[0]===-1)return;r.linePos=r.pos.map(s=>e.linePos(s));let{line:n,col:i}=r.linePos[0];r.message+=` at line ${n}, column ${i}`;let o=i-1,a=t.substring(e.lineStarts[n-1],e.lineStarts[n]).replace(/[\n\r]+$/,"");if(o>=60&&a.length>80){let s=Math.min(o-39,a.length-79);a="…"+a.substring(s),o-=s-1}if(a.length>80&&(a=a.substring(0,79)+"…"),n>1&&/^ *$/.test(a.substring(0,o))){let s=t.substring(e.lineStarts[n-2],e.lineStarts[n-1]);s.length>80&&(s=s.substring(0,79)+`…
|
||
`),a=s+a}if(/[^ ]/.test(a)){let s=1,c=r.linePos[1];c?.line===n&&c.col>i&&(s=Math.max(1,Math.min(c.col-i,80-o)));let l=" ".repeat(o)+"^".repeat(s);r.message+=`:
|
||
|
||
${a}
|
||
${l}
|
||
`}};ha.YAMLError=ma;ha.YAMLParseError=df;ha.YAMLWarning=uf;ha.prettifyError=lI});var ya=R($w=>{"use strict";function dI(t,{flow:e,indicator:r,next:n,offset:i,onError:o,parentIndent:a,startOnNewline:s}){let c=!1,l=s,d=s,u="",p="",f=!1,m=!1,g=null,h=null,w=null,y=null,v=null,b=null,k=null;for(let N of t)switch(m&&(N.type!=="space"&&N.type!=="newline"&&N.type!=="comma"&&o(N.offset,"MISSING_CHAR","Tags and anchors must be separated from the next token by white space"),m=!1),g&&(l&&N.type!=="comment"&&N.type!=="newline"&&o(g,"TAB_AS_INDENT","Tabs are not allowed as indentation"),g=null),N.type){case"space":!e&&(r!=="doc-start"||n?.type!=="flow-collection")&&N.source.includes(" ")&&(g=N),d=!0;break;case"comment":{d||o(N,"MISSING_CHAR","Comments must be separated from other tokens by white space characters");let P=N.source.substring(1)||" ";u?u+=p+P:u=P,p="",l=!1;break}case"newline":l?u?u+=N.source:(!b||r!=="seq-item-ind")&&(c=!0):p+=N.source,l=!0,f=!0,(h||w)&&(y=N),d=!0;break;case"anchor":h&&o(N,"MULTIPLE_ANCHORS","A node can have at most one anchor"),N.source.endsWith(":")&&o(N.offset+N.source.length-1,"BAD_ALIAS","Anchor ending in : is ambiguous",!0),h=N,k??(k=N.offset),l=!1,d=!1,m=!0;break;case"tag":{w&&o(N,"MULTIPLE_TAGS","A node can have at most one tag"),w=N,k??(k=N.offset),l=!1,d=!1,m=!0;break}case r:(h||w)&&o(N,"BAD_PROP_ORDER",`Anchors and tags must be after the ${N.source} indicator`),b&&o(N,"UNEXPECTED_TOKEN",`Unexpected ${N.source} in ${e??"collection"}`),b=N,l=r==="seq-item-ind"||r==="explicit-key-ind",d=!1;break;case"comma":if(e){v&&o(N,"UNEXPECTED_TOKEN",`Unexpected , in ${e}`),v=N,l=!1,d=!1;break}default:o(N,"UNEXPECTED_TOKEN",`Unexpected ${N.type} token`),l=!1,d=!1}let S=t[t.length-1],E=S?S.offset+S.source.length:i;return m&&n&&n.type!=="space"&&n.type!=="newline"&&n.type!=="comma"&&(n.type!=="scalar"||n.source!=="")&&o(n.offset,"MISSING_CHAR","Tags and anchors must be separated from the next token by white space"),g&&(l&&g.indent<=a||n?.type==="block-map"||n?.type==="block-seq")&&o(g,"TAB_AS_INDENT","Tabs are not allowed as indentation"),{comma:v,found:b,spaceBefore:c,comment:u,hasNewline:f,anchor:h,tag:w,newlineAfterProp:y,end:E,start:k??E}}$w.resolveProps=dI});var Gc=R(Ow=>{"use strict";function pf(t){if(!t)return null;switch(t.type){case"alias":case"scalar":case"double-quoted-scalar":case"single-quoted-scalar":if(t.source.includes(`
|
||
`))return!0;if(t.end){for(let e of t.end)if(e.type==="newline")return!0}return!1;case"flow-collection":for(let e of t.items){for(let r of e.start)if(r.type==="newline")return!0;if(e.sep){for(let r of e.sep)if(r.type==="newline")return!0}if(pf(e.key)||pf(e.value))return!0}return!1;default:return!0}}Ow.containsNewline=pf});var ff=R(Mw=>{"use strict";var uI=Gc();function pI(t,e,r){if(e?.type==="flow-collection"){let n=e.end[0];n.indent===t&&(n.source==="]"||n.source==="}")&&uI.containsNewline(e)&&r(n,"BAD_INDENT","Flow end indicator should be more indented than parent",!0)}}Mw.flowIndentCheck=pI});var mf=R(Dw=>{"use strict";var Lw=K();function fI(t,e,r){let{uniqueKeys:n}=t.options;if(n===!1)return!1;let i=typeof n=="function"?n:(o,a)=>o===a||Lw.isScalar(o)&&Lw.isScalar(a)&&o.value===a.value;return e.some(o=>i(o.key,r))}Dw.mapIncludes=fI});var Vw=R(Ww=>{"use strict";var Bw=Gr(),mI=Jr(),Fw=ya(),hI=Gc(),Kw=ff(),gI=mf(),Hw="All mapping items must start at the same column";function yI({composeNode:t,composeEmptyNode:e},r,n,i,o){let a=o?.nodeClass??mI.YAMLMap,s=new a(r.schema);r.atRoot&&(r.atRoot=!1);let c=n.offset,l=null;for(let d of n.items){let{start:u,key:p,sep:f,value:m}=d,g=Fw.resolveProps(u,{indicator:"explicit-key-ind",next:p??f?.[0],offset:c,onError:i,parentIndent:n.indent,startOnNewline:!0}),h=!g.found;if(h){if(p&&(p.type==="block-seq"?i(c,"BLOCK_AS_IMPLICIT_KEY","A block sequence may not be used as an implicit map key"):"indent"in p&&p.indent!==n.indent&&i(c,"BAD_INDENT",Hw)),!g.anchor&&!g.tag&&!f){l=g.end,g.comment&&(s.comment?s.comment+=`
|
||
`+g.comment:s.comment=g.comment);continue}(g.newlineAfterProp||hI.containsNewline(p))&&i(p??u[u.length-1],"MULTILINE_IMPLICIT_KEY","Implicit keys need to be on a single line")}else g.found?.indent!==n.indent&&i(c,"BAD_INDENT",Hw);r.atKey=!0;let w=g.end,y=p?t(r,p,g,i):e(r,w,u,null,g,i);r.schema.compat&&Kw.flowIndentCheck(n.indent,p,i),r.atKey=!1,gI.mapIncludes(r,s.items,y)&&i(w,"DUPLICATE_KEY","Map keys must be unique");let v=Fw.resolveProps(f??[],{indicator:"map-value-ind",next:m,offset:y.range[2],onError:i,parentIndent:n.indent,startOnNewline:!p||p.type==="block-scalar"});if(c=v.end,v.found){h&&(m?.type==="block-map"&&!v.hasNewline&&i(c,"BLOCK_AS_IMPLICIT_KEY","Nested mappings are not allowed in compact mappings"),r.options.strict&&g.start<v.found.offset-1024&&i(y.range,"KEY_OVER_1024_CHARS","The : indicator must be at most 1024 chars after the start of an implicit block mapping key"));let b=m?t(r,m,v,i):e(r,c,f,null,v,i);r.schema.compat&&Kw.flowIndentCheck(n.indent,m,i),c=b.range[2];let k=new Bw.Pair(y,b);r.options.keepSourceTokens&&(k.srcToken=d),s.items.push(k)}else{h&&i(y.range,"MISSING_CHAR","Implicit map keys need to be followed by map values"),v.comment&&(y.comment?y.comment+=`
|
||
`+v.comment:y.comment=v.comment);let b=new Bw.Pair(y);r.options.keepSourceTokens&&(b.srcToken=d),s.items.push(b)}}return l&&l<c&&i(l,"IMPOSSIBLE","Map comment with trailing content"),s.range=[n.offset,c,l??c],s}Ww.resolveBlockMap=yI});var zw=R(qw=>{"use strict";var vI=Yr(),wI=ya(),bI=ff();function kI({composeNode:t,composeEmptyNode:e},r,n,i,o){let a=o?.nodeClass??vI.YAMLSeq,s=new a(r.schema);r.atRoot&&(r.atRoot=!1),r.atKey&&(r.atKey=!1);let c=n.offset,l=null;for(let{start:d,value:u}of n.items){let p=wI.resolveProps(d,{indicator:"seq-item-ind",next:u,offset:c,onError:i,parentIndent:n.indent,startOnNewline:!0});if(!p.found)if(p.anchor||p.tag||u)u?.type==="block-seq"?i(p.end,"BAD_INDENT","All sequence items must start at the same column"):i(c,"MISSING_CHAR","Sequence item without - indicator");else{l=p.end,p.comment&&(s.comment=p.comment);continue}let f=u?t(r,u,p,i):e(r,p.end,d,null,p,i);r.schema.compat&&bI.flowIndentCheck(n.indent,u,i),c=f.range[2],s.items.push(f)}return s.range=[n.offset,c,l??c],s}qw.resolveBlockSeq=kI});var qi=R(Gw=>{"use strict";function SI(t,e,r,n){let i="";if(t){let o=!1,a="";for(let s of t){let{source:c,type:l}=s;switch(l){case"space":o=!0;break;case"comment":{r&&!o&&n(s,"MISSING_CHAR","Comments must be separated from other tokens by white space characters");let d=c.substring(1)||" ";i?i+=a+d:i=d,a="";break}case"newline":i&&(a+=c),o=!0;break;default:n(s,"UNEXPECTED_TOKEN",`Unexpected ${l} at node end`)}e+=c.length}}return{comment:i,offset:e}}Gw.resolveEnd=SI});var Xw=R(Yw=>{"use strict";var NI=K(),EI=Gr(),Uw=Jr(),xI=Yr(),PI=qi(),Jw=ya(),CI=Gc(),RI=mf(),hf="Block collections are not allowed within flow collections",gf=t=>t&&(t.type==="block-map"||t.type==="block-seq");function AI({composeNode:t,composeEmptyNode:e},r,n,i,o){let a=n.start.source==="{",s=a?"flow map":"flow sequence",c=o?.nodeClass??(a?Uw.YAMLMap:xI.YAMLSeq),l=new c(r.schema);l.flow=!0;let d=r.atRoot;d&&(r.atRoot=!1),r.atKey&&(r.atKey=!1);let u=n.offset+n.start.source.length;for(let h=0;h<n.items.length;++h){let w=n.items[h],{start:y,key:v,sep:b,value:k}=w,S=Jw.resolveProps(y,{flow:s,indicator:"explicit-key-ind",next:v??b?.[0],offset:u,onError:i,parentIndent:n.indent,startOnNewline:!1});if(!S.found){if(!S.anchor&&!S.tag&&!b&&!k){h===0&&S.comma?i(S.comma,"UNEXPECTED_TOKEN",`Unexpected , in ${s}`):h<n.items.length-1&&i(S.start,"UNEXPECTED_TOKEN",`Unexpected empty item in ${s}`),S.comment&&(l.comment?l.comment+=`
|
||
`+S.comment:l.comment=S.comment),u=S.end;continue}!a&&r.options.strict&&CI.containsNewline(v)&&i(v,"MULTILINE_IMPLICIT_KEY","Implicit keys of flow sequence pairs need to be on a single line")}if(h===0)S.comma&&i(S.comma,"UNEXPECTED_TOKEN",`Unexpected , in ${s}`);else if(S.comma||i(S.start,"MISSING_CHAR",`Missing , between ${s} items`),S.comment){let E="";e:for(let N of y)switch(N.type){case"comma":case"space":break;case"comment":E=N.source.substring(1);break e;default:break e}if(E){let N=l.items[l.items.length-1];NI.isPair(N)&&(N=N.value??N.key),N.comment?N.comment+=`
|
||
`+E:N.comment=E,S.comment=S.comment.substring(E.length+1)}}if(!a&&!b&&!S.found){let E=k?t(r,k,S,i):e(r,S.end,b,null,S,i);l.items.push(E),u=E.range[2],gf(k)&&i(E.range,"BLOCK_IN_FLOW",hf)}else{r.atKey=!0;let E=S.end,N=v?t(r,v,S,i):e(r,E,y,null,S,i);gf(v)&&i(N.range,"BLOCK_IN_FLOW",hf),r.atKey=!1;let P=Jw.resolveProps(b??[],{flow:s,indicator:"map-value-ind",next:k,offset:N.range[2],onError:i,parentIndent:n.indent,startOnNewline:!1});if(P.found){if(!a&&!S.found&&r.options.strict){if(b)for(let x of b){if(x===P.found)break;if(x.type==="newline"){i(x,"MULTILINE_IMPLICIT_KEY","Implicit keys of flow sequence pairs need to be on a single line");break}}S.start<P.found.offset-1024&&i(P.found,"KEY_OVER_1024_CHARS","The : indicator must be at most 1024 chars after the start of an implicit flow sequence key")}}else k&&("source"in k&&k.source?.[0]===":"?i(k,"MISSING_CHAR",`Missing space after : in ${s}`):i(P.start,"MISSING_CHAR",`Missing , or : between ${s} items`));let _=k?t(r,k,P,i):P.found?e(r,P.end,b,null,P,i):null;_?gf(k)&&i(_.range,"BLOCK_IN_FLOW",hf):P.comment&&(N.comment?N.comment+=`
|
||
`+P.comment:N.comment=P.comment);let j=new EI.Pair(N,_);if(r.options.keepSourceTokens&&(j.srcToken=w),a){let x=l;RI.mapIncludes(r,x.items,N)&&i(E,"DUPLICATE_KEY","Map keys must be unique"),x.items.push(j)}else{let x=new Uw.YAMLMap(r.schema);x.flow=!0,x.items.push(j);let C=(_??N).range;x.range=[N.range[0],C[1],C[2]],l.items.push(x)}u=_?_.range[2]:P.end}}let p=a?"}":"]",[f,...m]=n.end,g=u;if(f?.source===p)g=f.offset+f.source.length;else{let h=s[0].toUpperCase()+s.substring(1),w=d?`${h} must end with a ${p}`:`${h} in block collection must be sufficiently indented and end with a ${p}`;i(u,d?"MISSING_CHAR":"BAD_INDENT",w),f&&f.source.length!==1&&m.unshift(f)}if(m.length>0){let h=PI.resolveEnd(m,g,r.options.strict,i);h.comment&&(l.comment?l.comment+=`
|
||
`+h.comment:l.comment=h.comment),l.range=[n.offset,g,h.offset]}else l.range=[n.offset,g,g];return l}Yw.resolveFlowCollection=AI});var Zw=R(Qw=>{"use strict";var _I=K(),jI=ae(),II=Jr(),TI=Yr(),$I=Vw(),OI=zw(),MI=Xw();function yf(t,e,r,n,i,o){let a=r.type==="block-map"?$I.resolveBlockMap(t,e,r,n,o):r.type==="block-seq"?OI.resolveBlockSeq(t,e,r,n,o):MI.resolveFlowCollection(t,e,r,n,o),s=a.constructor;return i==="!"||i===s.tagName?(a.tag=s.tagName,a):(i&&(a.tag=i),a)}function LI(t,e,r,n,i){let o=n.tag,a=o?e.directives.tagName(o.source,p=>i(o,"TAG_RESOLVE_FAILED",p)):null;if(r.type==="block-seq"){let{anchor:p,newlineAfterProp:f}=n,m=p&&o?p.offset>o.offset?p:o:p??o;m&&(!f||f.offset<m.offset)&&i(m,"MISSING_CHAR","Missing newline after block sequence props")}let s=r.type==="block-map"?"map":r.type==="block-seq"?"seq":r.start.source==="{"?"map":"seq";if(!o||!a||a==="!"||a===II.YAMLMap.tagName&&s==="map"||a===TI.YAMLSeq.tagName&&s==="seq")return yf(t,e,r,i,a);let c=e.schema.tags.find(p=>p.tag===a&&p.collection===s);if(!c){let p=e.schema.knownTags[a];if(p?.collection===s)e.schema.tags.push(Object.assign({},p,{default:!1})),c=p;else return p?i(o,"BAD_COLLECTION_TYPE",`${p.tag} used for ${s} collection, but expects ${p.collection??"scalar"}`,!0):i(o,"TAG_RESOLVE_FAILED",`Unresolved tag: ${a}`,!0),yf(t,e,r,i,a)}let l=yf(t,e,r,i,a,c),d=c.resolve?.(l,p=>i(o,"TAG_RESOLVE_FAILED",p),e.options)??l,u=_I.isNode(d)?d:new jI.Scalar(d);return u.range=l.range,u.tag=a,c?.format&&(u.format=c.format),u}Qw.composeCollection=LI});var wf=R(eb=>{"use strict";var vf=ae();function DI(t,e,r){let n=e.offset,i=BI(e,t.options.strict,r);if(!i)return{value:"",type:null,comment:"",range:[n,n,n]};let o=i.mode===">"?vf.Scalar.BLOCK_FOLDED:vf.Scalar.BLOCK_LITERAL,a=e.source?FI(e.source):[],s=a.length;for(let g=a.length-1;g>=0;--g){let h=a[g][1];if(h===""||h==="\r")s=g;else break}if(s===0){let g=i.chomp==="+"&&a.length>0?`
|
||
`.repeat(Math.max(1,a.length-1)):"",h=n+i.length;return e.source&&(h+=e.source.length),{value:g,type:o,comment:i.comment,range:[n,h,h]}}let c=e.indent+i.indent,l=e.offset+i.length,d=0;for(let g=0;g<s;++g){let[h,w]=a[g];if(w===""||w==="\r")i.indent===0&&h.length>c&&(c=h.length);else{h.length<c&&r(l+h.length,"MISSING_CHAR","Block scalars with more-indented leading empty lines must use an explicit indentation indicator"),i.indent===0&&(c=h.length),d=g,c===0&&!t.atRoot&&r(l,"BAD_INDENT","Block scalar values in collections must be indented");break}l+=h.length+w.length+1}for(let g=a.length-1;g>=s;--g)a[g][0].length>c&&(s=g+1);let u="",p="",f=!1;for(let g=0;g<d;++g)u+=a[g][0].slice(c)+`
|
||
`;for(let g=d;g<s;++g){let[h,w]=a[g];l+=h.length+w.length+1;let y=w[w.length-1]==="\r";if(y&&(w=w.slice(0,-1)),w&&h.length<c){let b=`Block scalar lines must not be less indented than their ${i.indent?"explicit indentation indicator":"first line"}`;r(l-w.length-(y?2:1),"BAD_INDENT",b),h=""}o===vf.Scalar.BLOCK_LITERAL?(u+=p+h.slice(c)+w,p=`
|
||
`):h.length>c||w[0]===" "?(p===" "?p=`
|
||
`:!f&&p===`
|
||
`&&(p=`
|
||
|
||
`),u+=p+h.slice(c)+w,p=`
|
||
`,f=!0):w===""?p===`
|
||
`?u+=`
|
||
`:p=`
|
||
`:(u+=p+w,p=" ",f=!1)}switch(i.chomp){case"-":break;case"+":for(let g=s;g<a.length;++g)u+=`
|
||
`+a[g][0].slice(c);u[u.length-1]!==`
|
||
`&&(u+=`
|
||
`);break;default:u+=`
|
||
`}let m=n+i.length+e.source.length;return{value:u,type:o,comment:i.comment,range:[n,m,m]}}function BI({offset:t,props:e},r,n){if(e[0].type!=="block-scalar-header")return n(e[0],"IMPOSSIBLE","Block scalar header not found"),null;let{source:i}=e[0],o=i[0],a=0,s="",c=-1;for(let p=1;p<i.length;++p){let f=i[p];if(!s&&(f==="-"||f==="+"))s=f;else{let m=Number(f);!a&&m?a=m:c===-1&&(c=t+p)}}c!==-1&&n(c,"UNEXPECTED_TOKEN",`Block scalar header includes extra characters: ${i}`);let l=!1,d="",u=i.length;for(let p=1;p<e.length;++p){let f=e[p];switch(f.type){case"space":l=!0;case"newline":u+=f.source.length;break;case"comment":r&&!l&&n(f,"MISSING_CHAR","Comments must be separated from other tokens by white space characters"),u+=f.source.length,d=f.source.substring(1);break;case"error":n(f,"UNEXPECTED_TOKEN",f.message),u+=f.source.length;break;default:{let m=`Unexpected token in block scalar header: ${f.type}`;n(f,"UNEXPECTED_TOKEN",m);let g=f.source;g&&typeof g=="string"&&(u+=g.length)}}}return{mode:o,indent:a,chomp:s,comment:d,length:u}}function FI(t){let e=t.split(/\n( *)/),r=e[0],n=r.match(/^( *)/),o=[n?.[1]?[n[1],r.slice(n[1].length)]:["",r]];for(let a=1;a<e.length;a+=2)o.push([e[a],e[a+1]]);return o}eb.resolveBlockScalar=DI});var kf=R(rb=>{"use strict";var bf=ae(),KI=qi();function HI(t,e,r){let{offset:n,type:i,source:o,end:a}=t,s,c,l=(p,f,m)=>r(n+p,f,m);switch(i){case"scalar":s=bf.Scalar.PLAIN,c=WI(o,l);break;case"single-quoted-scalar":s=bf.Scalar.QUOTE_SINGLE,c=VI(o,l);break;case"double-quoted-scalar":s=bf.Scalar.QUOTE_DOUBLE,c=qI(o,l);break;default:return r(t,"UNEXPECTED_TOKEN",`Expected a flow scalar value, but found: ${i}`),{value:"",type:null,comment:"",range:[n,n+o.length,n+o.length]}}let d=n+o.length,u=KI.resolveEnd(a,d,e,r);return{value:c,type:s,comment:u.comment,range:[n,d,u.offset]}}function WI(t,e){let r="";switch(t[0]){case" ":r="a tab character";break;case",":r="flow indicator character ,";break;case"%":r="directive indicator character %";break;case"|":case">":{r=`block scalar indicator ${t[0]}`;break}case"@":case"`":{r=`reserved character ${t[0]}`;break}}return r&&e(0,"BAD_SCALAR_START",`Plain value cannot start with ${r}`),tb(t)}function VI(t,e){return(t[t.length-1]!=="'"||t.length===1)&&e(t.length,"MISSING_CHAR","Missing closing 'quote"),tb(t.slice(1,-1)).replace(/''/g,"'")}function tb(t){let e,r;try{e=new RegExp(`(.*?)(?<![ ])[ ]*\r?
|
||
`,"sy"),r=new RegExp(`[ ]*(.*?)(?:(?<![ ])[ ]*)?\r?
|
||
`,"sy")}catch{e=/(.*?)[ \t]*\r?\n/sy,r=/[ \t]*(.*?)[ \t]*\r?\n/sy}let n=e.exec(t);if(!n)return t;let i=n[1],o=" ",a=e.lastIndex;for(r.lastIndex=a;n=r.exec(t);)n[1]===""?o===`
|
||
`?i+=o:o=`
|
||
`:(i+=o+n[1],o=" "),a=r.lastIndex;let s=/[ \t]*(.*)/sy;return s.lastIndex=a,n=s.exec(t),i+o+(n?.[1]??"")}function qI(t,e){let r="";for(let n=1;n<t.length-1;++n){let i=t[n];if(!(i==="\r"&&t[n+1]===`
|
||
`))if(i===`
|
||
`){let{fold:o,offset:a}=zI(t,n);r+=o,n=a}else if(i==="\\"){let o=t[++n],a=GI[o];if(a)r+=a;else if(o===`
|
||
`)for(o=t[n+1];o===" "||o===" ";)o=t[++n+1];else if(o==="\r"&&t[n+1]===`
|
||
`)for(o=t[++n+1];o===" "||o===" ";)o=t[++n+1];else if(o==="x"||o==="u"||o==="U"){let s=o==="x"?2:o==="u"?4:8;r+=UI(t,n+1,s,e),n+=s}else{let s=t.substr(n-1,2);e(n-1,"BAD_DQ_ESCAPE",`Invalid escape sequence ${s}`),r+=s}}else if(i===" "||i===" "){let o=n,a=t[n+1];for(;a===" "||a===" ";)a=t[++n+1];a!==`
|
||
`&&!(a==="\r"&&t[n+2]===`
|
||
`)&&(r+=n>o?t.slice(o,n+1):i)}else r+=i}return(t[t.length-1]!=='"'||t.length===1)&&e(t.length,"MISSING_CHAR",'Missing closing "quote'),r}function zI(t,e){let r="",n=t[e+1];for(;(n===" "||n===" "||n===`
|
||
`||n==="\r")&&!(n==="\r"&&t[e+2]!==`
|
||
`);)n===`
|
||
`&&(r+=`
|
||
`),e+=1,n=t[e+1];return r||(r=" "),{fold:r,offset:e}}var GI={0:"\0",a:"\x07",b:"\b",e:"\x1B",f:"\f",n:`
|
||
`,r:"\r",t:" ",v:"\v",N:"
",_:" ",L:"\u2028",P:"\u2029"," ":" ",'"':'"',"/":"/","\\":"\\"," ":" "};function UI(t,e,r,n){let i=t.substr(e,r),a=i.length===r&&/^[0-9a-fA-F]+$/.test(i)?parseInt(i,16):NaN;try{return String.fromCodePoint(a)}catch{let s=t.substr(e-2,r+2);return n(e-2,"BAD_DQ_ESCAPE",`Invalid escape sequence ${s}`),s}}rb.resolveFlowScalar=HI});var ob=R(ib=>{"use strict";var Ln=K(),nb=ae(),JI=wf(),YI=kf();function XI(t,e,r,n){let{value:i,type:o,comment:a,range:s}=e.type==="block-scalar"?JI.resolveBlockScalar(t,e,n):YI.resolveFlowScalar(e,t.options.strict,n),c=r?t.directives.tagName(r.source,u=>n(r,"TAG_RESOLVE_FAILED",u)):null,l;t.options.stringKeys&&t.atKey?l=t.schema[Ln.SCALAR]:c?l=QI(t.schema,i,c,r,n):e.type==="scalar"?l=ZI(t,i,e,n):l=t.schema[Ln.SCALAR];let d;try{let u=l.resolve(i,p=>n(r??e,"TAG_RESOLVE_FAILED",p),t.options);d=Ln.isScalar(u)?u:new nb.Scalar(u)}catch(u){let p=u instanceof Error?u.message:String(u);n(r??e,"TAG_RESOLVE_FAILED",p),d=new nb.Scalar(i)}return d.range=s,d.source=i,o&&(d.type=o),c&&(d.tag=c),l.format&&(d.format=l.format),a&&(d.comment=a),d}function QI(t,e,r,n,i){if(r==="!")return t[Ln.SCALAR];let o=[];for(let s of t.tags)if(!s.collection&&s.tag===r)if(s.default&&s.test)o.push(s);else return s;for(let s of o)if(s.test?.test(e))return s;let a=t.knownTags[r];return a&&!a.collection?(t.tags.push(Object.assign({},a,{default:!1,test:void 0})),a):(i(n,"TAG_RESOLVE_FAILED",`Unresolved tag: ${r}`,r!=="tag:yaml.org,2002:str"),t[Ln.SCALAR])}function ZI({atKey:t,directives:e,schema:r},n,i,o){let a=r.tags.find(s=>(s.default===!0||t&&s.default==="key")&&s.test?.test(n))||r[Ln.SCALAR];if(r.compat){let s=r.compat.find(c=>c.default&&c.test?.test(n))??r[Ln.SCALAR];if(a.tag!==s.tag){let c=e.tagString(a.tag),l=e.tagString(s.tag),d=`Value may be parsed as either ${c} or ${l}`;o(i,"TAG_RESOLVE_FAILED",d,!0)}}return a}ib.composeScalar=XI});var sb=R(ab=>{"use strict";function eT(t,e,r){if(e){r??(r=e.length);for(let n=r-1;n>=0;--n){let i=e[n];switch(i.type){case"space":case"comment":case"newline":t-=i.source.length;continue}for(i=e[++n];i?.type==="space";)t+=i.source.length,i=e[++n];break}}return t}ab.emptyScalarPosition=eT});var db=R(Nf=>{"use strict";var tT=Xo(),rT=K(),nT=Zw(),cb=ob(),iT=qi(),oT=sb(),aT={composeNode:lb,composeEmptyNode:Sf};function lb(t,e,r,n){let i=t.atKey,{spaceBefore:o,comment:a,anchor:s,tag:c}=r,l,d=!0;switch(e.type){case"alias":l=sT(t,e,n),(s||c)&&n(e,"ALIAS_PROPS","An alias node must not specify any properties");break;case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":case"block-scalar":l=cb.composeScalar(t,e,c,n),s&&(l.anchor=s.source.substring(1));break;case"block-map":case"block-seq":case"flow-collection":try{l=nT.composeCollection(aT,t,e,r,n),s&&(l.anchor=s.source.substring(1))}catch(u){let p=u instanceof Error?u.message:String(u);n(e,"RESOURCE_EXHAUSTION",p)}break;default:{let u=e.type==="error"?e.message:`Unsupported token (type: ${e.type})`;n(e,"UNEXPECTED_TOKEN",u),d=!1}}return l??(l=Sf(t,e.offset,void 0,null,r,n)),s&&l.anchor===""&&n(s,"BAD_ALIAS","Anchor cannot be an empty string"),i&&t.options.stringKeys&&(!rT.isScalar(l)||typeof l.value!="string"||l.tag&&l.tag!=="tag:yaml.org,2002:str")&&n(c??e,"NON_STRING_KEY","With stringKeys, all keys must be strings"),o&&(l.spaceBefore=!0),a&&(e.type==="scalar"&&e.source===""?l.comment=a:l.commentBefore=a),t.options.keepSourceTokens&&d&&(l.srcToken=e),l}function Sf(t,e,r,n,{spaceBefore:i,comment:o,anchor:a,tag:s,end:c},l){let d={type:"scalar",offset:oT.emptyScalarPosition(e,r,n),indent:-1,source:""},u=cb.composeScalar(t,d,s,l);return a&&(u.anchor=a.source.substring(1),u.anchor===""&&l(a,"BAD_ALIAS","Anchor cannot be an empty string")),i&&(u.spaceBefore=!0),o&&(u.comment=o,u.range[2]=c),u}function sT({options:t},{offset:e,source:r,end:n},i){let o=new tT.Alias(r.substring(1));o.source===""&&i(e,"BAD_ALIAS","Alias cannot be an empty string"),o.source.endsWith(":")&&i(e+r.length-1,"BAD_ALIAS","Alias ending in : is ambiguous",!0);let a=e+r.length,s=iT.resolveEnd(n,a,t.strict,i);return o.range=[e,a,s.offset],s.comment&&(o.comment=s.comment),o}Nf.composeEmptyNode=Sf;Nf.composeNode=lb});var fb=R(pb=>{"use strict";var cT=fa(),ub=db(),lT=qi(),dT=ya();function uT(t,e,{offset:r,start:n,value:i,end:o},a){let s=Object.assign({_directives:e},t),c=new cT.Document(void 0,s),l={atKey:!1,atRoot:!0,directives:c.directives,options:c.options,schema:c.schema},d=dT.resolveProps(n,{indicator:"doc-start",next:i??o?.[0],offset:r,onError:a,parentIndent:0,startOnNewline:!0});d.found&&(c.directives.docStart=!0,i&&(i.type==="block-map"||i.type==="block-seq")&&!d.hasNewline&&a(d.end,"MISSING_CHAR","Block collection cannot start on same line with directives-end marker")),c.contents=i?ub.composeNode(l,i,d,a):ub.composeEmptyNode(l,d.end,n,null,d,a);let u=c.contents.range[2],p=lT.resolveEnd(o,u,!1,a);return p.comment&&(c.comment=p.comment),c.range=[r,u,p.offset],c}pb.composeDoc=uT});var xf=R(gb=>{"use strict";var pT=nc("process"),fT=lp(),mT=fa(),va=ga(),mb=K(),hT=fb(),gT=qi();function wa(t){if(typeof t=="number")return[t,t+1];if(Array.isArray(t))return t.length===2?t:[t[0],t[1]];let{offset:e,source:r}=t;return[e,e+(typeof r=="string"?r.length:1)]}function hb(t){let e="",r=!1,n=!1;for(let i=0;i<t.length;++i){let o=t[i];switch(o[0]){case"#":e+=(e===""?"":n?`
|
||
|
||
`:`
|
||
`)+(o.substring(1)||" "),r=!0,n=!1;break;case"%":t[i+1]?.[0]!=="#"&&(i+=1),r=!1;break;default:r||(n=!0),r=!1}}return{comment:e,afterEmptyLine:n}}var Ef=class{constructor(e={}){this.doc=null,this.atDirectives=!1,this.prelude=[],this.errors=[],this.warnings=[],this.onError=(r,n,i,o)=>{let a=wa(r);o?this.warnings.push(new va.YAMLWarning(a,n,i)):this.errors.push(new va.YAMLParseError(a,n,i))},this.directives=new fT.Directives({version:e.version||"1.2"}),this.options=e}decorate(e,r){let{comment:n,afterEmptyLine:i}=hb(this.prelude);if(n){let o=e.contents;if(r)e.comment=e.comment?`${e.comment}
|
||
${n}`:n;else if(i||e.directives.docStart||!o)e.commentBefore=n;else if(mb.isCollection(o)&&!o.flow&&o.items.length>0){let a=o.items[0];mb.isPair(a)&&(a=a.key);let s=a.commentBefore;a.commentBefore=s?`${n}
|
||
${s}`:n}else{let a=o.commentBefore;o.commentBefore=a?`${n}
|
||
${a}`:n}}if(r){for(let o=0;o<this.errors.length;++o)e.errors.push(this.errors[o]);for(let o=0;o<this.warnings.length;++o)e.warnings.push(this.warnings[o])}else e.errors=this.errors,e.warnings=this.warnings;this.prelude=[],this.errors=[],this.warnings=[]}streamInfo(){return{comment:hb(this.prelude).comment,directives:this.directives,errors:this.errors,warnings:this.warnings}}*compose(e,r=!1,n=-1){for(let i of e)yield*this.next(i);yield*this.end(r,n)}*next(e){switch(pT.env.LOG_STREAM&&console.dir(e,{depth:null}),e.type){case"directive":this.directives.add(e.source,(r,n,i)=>{let o=wa(e);o[0]+=r,this.onError(o,"BAD_DIRECTIVE",n,i)}),this.prelude.push(e.source),this.atDirectives=!0;break;case"document":{let r=hT.composeDoc(this.options,this.directives,e,this.onError);this.atDirectives&&!r.directives.docStart&&this.onError(e,"MISSING_CHAR","Missing directives-end/doc-start indicator line"),this.decorate(r,!1),this.doc&&(yield this.doc),this.doc=r,this.atDirectives=!1;break}case"byte-order-mark":case"space":break;case"comment":case"newline":this.prelude.push(e.source);break;case"error":{let r=e.source?`${e.message}: ${JSON.stringify(e.source)}`:e.message,n=new va.YAMLParseError(wa(e),"UNEXPECTED_TOKEN",r);this.atDirectives||!this.doc?this.errors.push(n):this.doc.errors.push(n);break}case"doc-end":{if(!this.doc){let n="Unexpected doc-end without preceding document";this.errors.push(new va.YAMLParseError(wa(e),"UNEXPECTED_TOKEN",n));break}this.doc.directives.docEnd=!0;let r=gT.resolveEnd(e.end,e.offset+e.source.length,this.doc.options.strict,this.onError);if(this.decorate(this.doc,!0),r.comment){let n=this.doc.comment;this.doc.comment=n?`${n}
|
||
${r.comment}`:r.comment}this.doc.range[2]=r.offset;break}default:this.errors.push(new va.YAMLParseError(wa(e),"UNEXPECTED_TOKEN",`Unsupported token ${e.type}`))}}*end(e=!1,r=-1){if(this.doc)this.decorate(this.doc,!0),yield this.doc,this.doc=null;else if(e){let n=Object.assign({_directives:this.directives},this.options),i=new mT.Document(void 0,n);this.atDirectives&&this.onError(r,"MISSING_CHAR","Missing directives-end indicator line"),i.range=[0,r,r],this.decorate(i,!1),yield i}}};gb.Composer=Ef});var wb=R(Uc=>{"use strict";var yT=wf(),vT=kf(),wT=ga(),yb=ra();function bT(t,e=!0,r){if(t){let n=(i,o,a)=>{let s=typeof i=="number"?i:Array.isArray(i)?i[0]:i.offset;if(r)r(s,o,a);else throw new wT.YAMLParseError([s,s+1],o,a)};switch(t.type){case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return vT.resolveFlowScalar(t,e,n);case"block-scalar":return yT.resolveBlockScalar({options:{strict:e}},t,n)}}return null}function kT(t,e){let{implicitKey:r=!1,indent:n,inFlow:i=!1,offset:o=-1,type:a="PLAIN"}=e,s=yb.stringifyString({type:a,value:t},{implicitKey:r,indent:n>0?" ".repeat(n):"",inFlow:i,options:{blockQuote:!0,lineWidth:-1}}),c=e.end??[{type:"newline",offset:-1,indent:n,source:`
|
||
`}];switch(s[0]){case"|":case">":{let l=s.indexOf(`
|
||
`),d=s.substring(0,l),u=s.substring(l+1)+`
|
||
`,p=[{type:"block-scalar-header",offset:o,indent:n,source:d}];return vb(p,c)||p.push({type:"newline",offset:-1,indent:n,source:`
|
||
`}),{type:"block-scalar",offset:o,indent:n,props:p,source:u}}case'"':return{type:"double-quoted-scalar",offset:o,indent:n,source:s,end:c};case"'":return{type:"single-quoted-scalar",offset:o,indent:n,source:s,end:c};default:return{type:"scalar",offset:o,indent:n,source:s,end:c}}}function ST(t,e,r={}){let{afterKey:n=!1,implicitKey:i=!1,inFlow:o=!1,type:a}=r,s="indent"in t?t.indent:null;if(n&&typeof s=="number"&&(s+=2),!a)switch(t.type){case"single-quoted-scalar":a="QUOTE_SINGLE";break;case"double-quoted-scalar":a="QUOTE_DOUBLE";break;case"block-scalar":{let l=t.props[0];if(l.type!=="block-scalar-header")throw new Error("Invalid block scalar header");a=l.source[0]===">"?"BLOCK_FOLDED":"BLOCK_LITERAL";break}default:a="PLAIN"}let c=yb.stringifyString({type:a,value:e},{implicitKey:i||s===null,indent:s!==null&&s>0?" ".repeat(s):"",inFlow:o,options:{blockQuote:!0,lineWidth:-1}});switch(c[0]){case"|":case">":NT(t,c);break;case'"':Pf(t,c,"double-quoted-scalar");break;case"'":Pf(t,c,"single-quoted-scalar");break;default:Pf(t,c,"scalar")}}function NT(t,e){let r=e.indexOf(`
|
||
`),n=e.substring(0,r),i=e.substring(r+1)+`
|
||
`;if(t.type==="block-scalar"){let o=t.props[0];if(o.type!=="block-scalar-header")throw new Error("Invalid block scalar header");o.source=n,t.source=i}else{let{offset:o}=t,a="indent"in t?t.indent:-1,s=[{type:"block-scalar-header",offset:o,indent:a,source:n}];vb(s,"end"in t?t.end:void 0)||s.push({type:"newline",offset:-1,indent:a,source:`
|
||
`});for(let c of Object.keys(t))c!=="type"&&c!=="offset"&&delete t[c];Object.assign(t,{type:"block-scalar",indent:a,props:s,source:i})}}function vb(t,e){if(e)for(let r of e)switch(r.type){case"space":case"comment":t.push(r);break;case"newline":return t.push(r),!0}return!1}function Pf(t,e,r){switch(t.type){case"scalar":case"double-quoted-scalar":case"single-quoted-scalar":t.type=r,t.source=e;break;case"block-scalar":{let n=t.props.slice(1),i=e.length;t.props[0].type==="block-scalar-header"&&(i-=t.props[0].source.length);for(let o of n)o.offset+=i;delete t.props,Object.assign(t,{type:r,source:e,end:n});break}case"block-map":case"block-seq":{let i={type:"newline",offset:t.offset+e.length,indent:t.indent,source:`
|
||
`};delete t.items,Object.assign(t,{type:r,source:e,end:[i]});break}default:{let n="indent"in t?t.indent:-1,i="end"in t&&Array.isArray(t.end)?t.end.filter(o=>o.type==="space"||o.type==="comment"||o.type==="newline"):[];for(let o of Object.keys(t))o!=="type"&&o!=="offset"&&delete t[o];Object.assign(t,{type:r,indent:n,source:e,end:i})}}}Uc.createScalarToken=kT;Uc.resolveAsScalar=bT;Uc.setScalarValue=ST});var kb=R(bb=>{"use strict";var ET=t=>"type"in t?Yc(t):Jc(t);function Yc(t){switch(t.type){case"block-scalar":{let e="";for(let r of t.props)e+=Yc(r);return e+t.source}case"block-map":case"block-seq":{let e="";for(let r of t.items)e+=Jc(r);return e}case"flow-collection":{let e=t.start.source;for(let r of t.items)e+=Jc(r);for(let r of t.end)e+=r.source;return e}case"document":{let e=Jc(t);if(t.end)for(let r of t.end)e+=r.source;return e}default:{let e=t.source;if("end"in t&&t.end)for(let r of t.end)e+=r.source;return e}}}function Jc({start:t,key:e,sep:r,value:n}){let i="";for(let o of t)i+=o.source;if(e&&(i+=Yc(e)),r)for(let o of r)i+=o.source;return n&&(i+=Yc(n)),i}bb.stringify=ET});var xb=R(Eb=>{"use strict";var Cf=Symbol("break visit"),xT=Symbol("skip children"),Sb=Symbol("remove item");function Dn(t,e){"type"in t&&t.type==="document"&&(t={start:t.start,value:t.value}),Nb(Object.freeze([]),t,e)}Dn.BREAK=Cf;Dn.SKIP=xT;Dn.REMOVE=Sb;Dn.itemAtPath=(t,e)=>{let r=t;for(let[n,i]of e){let o=r?.[n];if(o&&"items"in o)r=o.items[i];else return}return r};Dn.parentCollection=(t,e)=>{let r=Dn.itemAtPath(t,e.slice(0,-1)),n=e[e.length-1][0],i=r?.[n];if(i&&"items"in i)return i;throw new Error("Parent collection not found")};function Nb(t,e,r){let n=r(e,t);if(typeof n=="symbol")return n;for(let i of["key","value"]){let o=e[i];if(o&&"items"in o){for(let a=0;a<o.items.length;++a){let s=Nb(Object.freeze(t.concat([[i,a]])),o.items[a],r);if(typeof s=="number")a=s-1;else{if(s===Cf)return Cf;s===Sb&&(o.items.splice(a,1),a-=1)}}typeof n=="function"&&i==="key"&&(n=n(e,t))}}return typeof n=="function"?n(e,t):n}Eb.visit=Dn});var Xc=R(He=>{"use strict";var Rf=wb(),PT=kb(),CT=xb(),Af="\uFEFF",_f="",jf="",If="",RT=t=>!!t&&"items"in t,AT=t=>!!t&&(t.type==="scalar"||t.type==="single-quoted-scalar"||t.type==="double-quoted-scalar"||t.type==="block-scalar");function _T(t){switch(t){case Af:return"<BOM>";case _f:return"<DOC>";case jf:return"<FLOW_END>";case If:return"<SCALAR>";default:return JSON.stringify(t)}}function jT(t){switch(t){case Af:return"byte-order-mark";case _f:return"doc-mode";case jf:return"flow-error-end";case If:return"scalar";case"---":return"doc-start";case"...":return"doc-end";case"":case`
|
||
`:case`\r
|
||
`:return"newline";case"-":return"seq-item-ind";case"?":return"explicit-key-ind";case":":return"map-value-ind";case"{":return"flow-map-start";case"}":return"flow-map-end";case"[":return"flow-seq-start";case"]":return"flow-seq-end";case",":return"comma"}switch(t[0]){case" ":case" ":return"space";case"#":return"comment";case"%":return"directive-line";case"*":return"alias";case"&":return"anchor";case"!":return"tag";case"'":return"single-quoted-scalar";case'"':return"double-quoted-scalar";case"|":case">":return"block-scalar-header"}return null}He.createScalarToken=Rf.createScalarToken;He.resolveAsScalar=Rf.resolveAsScalar;He.setScalarValue=Rf.setScalarValue;He.stringify=PT.stringify;He.visit=CT.visit;He.BOM=Af;He.DOCUMENT=_f;He.FLOW_END=jf;He.SCALAR=If;He.isCollection=RT;He.isScalar=AT;He.prettyToken=_T;He.tokenType=jT});var Of=R(Cb=>{"use strict";var ba=Xc();function xt(t){switch(t){case void 0:case" ":case`
|
||
`:case"\r":case" ":return!0;default:return!1}}var Pb=new Set("0123456789ABCDEFabcdef"),IT=new Set("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz-#;/?:@&=+$_.!~*'()"),Qc=new Set(",[]{}"),TT=new Set(` ,[]{}
|
||
\r `),Tf=t=>!t||TT.has(t),$f=class{constructor(){this.atEnd=!1,this.blockScalarIndent=-1,this.blockScalarKeep=!1,this.buffer="",this.flowKey=!1,this.flowLevel=0,this.indentNext=0,this.indentValue=0,this.lineEndPos=null,this.next=null,this.pos=0}*lex(e,r=!1){if(e){if(typeof e!="string")throw TypeError("source is not a string");this.buffer=this.buffer?this.buffer+e:e,this.lineEndPos=null}this.atEnd=!r;let n=this.next??"stream";for(;n&&(r||this.hasChars(1));)n=yield*this.parseNext(n)}atLineEnd(){let e=this.pos,r=this.buffer[e];for(;r===" "||r===" ";)r=this.buffer[++e];return!r||r==="#"||r===`
|
||
`?!0:r==="\r"?this.buffer[e+1]===`
|
||
`:!1}charAt(e){return this.buffer[this.pos+e]}continueScalar(e){let r=this.buffer[e];if(this.indentNext>0){let n=0;for(;r===" ";)r=this.buffer[++n+e];if(r==="\r"){let i=this.buffer[n+e+1];if(i===`
|
||
`||!i&&!this.atEnd)return e+n+1}return r===`
|
||
`||n>=this.indentNext||!r&&!this.atEnd?e+n:-1}if(r==="-"||r==="."){let n=this.buffer.substr(e,3);if((n==="---"||n==="...")&&xt(this.buffer[e+3]))return-1}return e}getLine(){let e=this.lineEndPos;return(typeof e!="number"||e!==-1&&e<this.pos)&&(e=this.buffer.indexOf(`
|
||
`,this.pos),this.lineEndPos=e),e===-1?this.atEnd?this.buffer.substring(this.pos):null:(this.buffer[e-1]==="\r"&&(e-=1),this.buffer.substring(this.pos,e))}hasChars(e){return this.pos+e<=this.buffer.length}setNext(e){return this.buffer=this.buffer.substring(this.pos),this.pos=0,this.lineEndPos=null,this.next=e,null}peek(e){return this.buffer.substr(this.pos,e)}*parseNext(e){switch(e){case"stream":return yield*this.parseStream();case"line-start":return yield*this.parseLineStart();case"block-start":return yield*this.parseBlockStart();case"doc":return yield*this.parseDocument();case"flow":return yield*this.parseFlowCollection();case"quoted-scalar":return yield*this.parseQuotedScalar();case"block-scalar":return yield*this.parseBlockScalar();case"plain-scalar":return yield*this.parsePlainScalar()}}*parseStream(){let e=this.getLine();if(e===null)return this.setNext("stream");if(e[0]===ba.BOM&&(yield*this.pushCount(1),e=e.substring(1)),e[0]==="%"){let r=e.length,n=e.indexOf("#");for(;n!==-1;){let o=e[n-1];if(o===" "||o===" "){r=n-1;break}else n=e.indexOf("#",n+1)}for(;;){let o=e[r-1];if(o===" "||o===" ")r-=1;else break}let i=(yield*this.pushCount(r))+(yield*this.pushSpaces(!0));return yield*this.pushCount(e.length-i),this.pushNewline(),"stream"}if(this.atLineEnd()){let r=yield*this.pushSpaces(!0);return yield*this.pushCount(e.length-r),yield*this.pushNewline(),"stream"}return yield ba.DOCUMENT,yield*this.parseLineStart()}*parseLineStart(){let e=this.charAt(0);if(!e&&!this.atEnd)return this.setNext("line-start");if(e==="-"||e==="."){if(!this.atEnd&&!this.hasChars(4))return this.setNext("line-start");let r=this.peek(3);if((r==="---"||r==="...")&&xt(this.charAt(3)))return yield*this.pushCount(3),this.indentValue=0,this.indentNext=0,r==="---"?"doc":"stream"}return this.indentValue=yield*this.pushSpaces(!1),this.indentNext>this.indentValue&&!xt(this.charAt(1))&&(this.indentNext=this.indentValue),yield*this.parseBlockStart()}*parseBlockStart(){let[e,r]=this.peek(2);if(!r&&!this.atEnd)return this.setNext("block-start");if((e==="-"||e==="?"||e===":")&&xt(r)){let n=(yield*this.pushCount(1))+(yield*this.pushSpaces(!0));return this.indentNext=this.indentValue+1,this.indentValue+=n,"block-start"}return"doc"}*parseDocument(){yield*this.pushSpaces(!0);let e=this.getLine();if(e===null)return this.setNext("doc");let r=yield*this.pushIndicators();switch(e[r]){case"#":yield*this.pushCount(e.length-r);case void 0:return yield*this.pushNewline(),yield*this.parseLineStart();case"{":case"[":return yield*this.pushCount(1),this.flowKey=!1,this.flowLevel=1,"flow";case"}":case"]":return yield*this.pushCount(1),"doc";case"*":return yield*this.pushUntil(Tf),"doc";case'"':case"'":return yield*this.parseQuotedScalar();case"|":case">":return r+=yield*this.parseBlockScalarHeader(),r+=yield*this.pushSpaces(!0),yield*this.pushCount(e.length-r),yield*this.pushNewline(),yield*this.parseBlockScalar();default:return yield*this.parsePlainScalar()}}*parseFlowCollection(){let e,r,n=-1;do e=yield*this.pushNewline(),e>0?(r=yield*this.pushSpaces(!1),this.indentValue=n=r):r=0,r+=yield*this.pushSpaces(!0);while(e+r>0);let i=this.getLine();if(i===null)return this.setNext("flow");if((n!==-1&&n<this.indentNext&&i[0]!=="#"||n===0&&(i.startsWith("---")||i.startsWith("..."))&&xt(i[3]))&&!(n===this.indentNext-1&&this.flowLevel===1&&(i[0]==="]"||i[0]==="}")))return this.flowLevel=0,yield ba.FLOW_END,yield*this.parseLineStart();let o=0;for(;i[o]===",";)o+=yield*this.pushCount(1),o+=yield*this.pushSpaces(!0),this.flowKey=!1;switch(o+=yield*this.pushIndicators(),i[o]){case void 0:return"flow";case"#":return yield*this.pushCount(i.length-o),"flow";case"{":case"[":return yield*this.pushCount(1),this.flowKey=!1,this.flowLevel+=1,"flow";case"}":case"]":return yield*this.pushCount(1),this.flowKey=!0,this.flowLevel-=1,this.flowLevel?"flow":"doc";case"*":return yield*this.pushUntil(Tf),"flow";case'"':case"'":return this.flowKey=!0,yield*this.parseQuotedScalar();case":":{let a=this.charAt(1);if(this.flowKey||xt(a)||a===",")return this.flowKey=!1,yield*this.pushCount(1),yield*this.pushSpaces(!0),"flow"}default:return this.flowKey=!1,yield*this.parsePlainScalar()}}*parseQuotedScalar(){let e=this.charAt(0),r=this.buffer.indexOf(e,this.pos+1);if(e==="'")for(;r!==-1&&this.buffer[r+1]==="'";)r=this.buffer.indexOf("'",r+2);else for(;r!==-1;){let o=0;for(;this.buffer[r-1-o]==="\\";)o+=1;if(o%2===0)break;r=this.buffer.indexOf('"',r+1)}let n=this.buffer.substring(0,r),i=n.indexOf(`
|
||
`,this.pos);if(i!==-1){for(;i!==-1;){let o=this.continueScalar(i+1);if(o===-1)break;i=n.indexOf(`
|
||
`,o)}i!==-1&&(r=i-(n[i-1]==="\r"?2:1))}if(r===-1){if(!this.atEnd)return this.setNext("quoted-scalar");r=this.buffer.length}return yield*this.pushToIndex(r+1,!1),this.flowLevel?"flow":"doc"}*parseBlockScalarHeader(){this.blockScalarIndent=-1,this.blockScalarKeep=!1;let e=this.pos;for(;;){let r=this.buffer[++e];if(r==="+")this.blockScalarKeep=!0;else if(r>"0"&&r<="9")this.blockScalarIndent=Number(r)-1;else if(r!=="-")break}return yield*this.pushUntil(r=>xt(r)||r==="#")}*parseBlockScalar(){let e=this.pos-1,r=0,n;e:for(let o=this.pos;n=this.buffer[o];++o)switch(n){case" ":r+=1;break;case`
|
||
`:e=o,r=0;break;case"\r":{let a=this.buffer[o+1];if(!a&&!this.atEnd)return this.setNext("block-scalar");if(a===`
|
||
`)break}default:break e}if(!n&&!this.atEnd)return this.setNext("block-scalar");if(r>=this.indentNext){this.blockScalarIndent===-1?this.indentNext=r:this.indentNext=this.blockScalarIndent+(this.indentNext===0?1:this.indentNext);do{let o=this.continueScalar(e+1);if(o===-1)break;e=this.buffer.indexOf(`
|
||
`,o)}while(e!==-1);if(e===-1){if(!this.atEnd)return this.setNext("block-scalar");e=this.buffer.length}}let i=e+1;for(n=this.buffer[i];n===" ";)n=this.buffer[++i];if(n===" "){for(;n===" "||n===" "||n==="\r"||n===`
|
||
`;)n=this.buffer[++i];e=i-1}else if(!this.blockScalarKeep)do{let o=e-1,a=this.buffer[o];a==="\r"&&(a=this.buffer[--o]);let s=o;for(;a===" ";)a=this.buffer[--o];if(a===`
|
||
`&&o>=this.pos&&o+1+r>s)e=o;else break}while(!0);return yield ba.SCALAR,yield*this.pushToIndex(e+1,!0),yield*this.parseLineStart()}*parsePlainScalar(){let e=this.flowLevel>0,r=this.pos-1,n=this.pos-1,i;for(;i=this.buffer[++n];)if(i===":"){let o=this.buffer[n+1];if(xt(o)||e&&Qc.has(o))break;r=n}else if(xt(i)){let o=this.buffer[n+1];if(i==="\r"&&(o===`
|
||
`?(n+=1,i=`
|
||
`,o=this.buffer[n+1]):r=n),o==="#"||e&&Qc.has(o))break;if(i===`
|
||
`){let a=this.continueScalar(n+1);if(a===-1)break;n=Math.max(n,a-2)}}else{if(e&&Qc.has(i))break;r=n}return!i&&!this.atEnd?this.setNext("plain-scalar"):(yield ba.SCALAR,yield*this.pushToIndex(r+1,!0),e?"flow":"doc")}*pushCount(e){return e>0?(yield this.buffer.substr(this.pos,e),this.pos+=e,e):0}*pushToIndex(e,r){let n=this.buffer.slice(this.pos,e);return n?(yield n,this.pos+=n.length,n.length):(r&&(yield""),0)}*pushIndicators(){let e=0;e:for(;;){switch(this.charAt(0)){case"!":e+=yield*this.pushTag(),e+=yield*this.pushSpaces(!0);continue e;case"&":e+=yield*this.pushUntil(Tf),e+=yield*this.pushSpaces(!0);continue e;case"-":case"?":case":":{let r=this.flowLevel>0,n=this.charAt(1);if(xt(n)||r&&Qc.has(n)){r?this.flowKey&&(this.flowKey=!1):this.indentNext=this.indentValue+1,e+=yield*this.pushCount(1),e+=yield*this.pushSpaces(!0);continue e}}}break e}return e}*pushTag(){if(this.charAt(1)==="<"){let e=this.pos+2,r=this.buffer[e];for(;!xt(r)&&r!==">";)r=this.buffer[++e];return yield*this.pushToIndex(r===">"?e+1:e,!1)}else{let e=this.pos+1,r=this.buffer[e];for(;r;)if(IT.has(r))r=this.buffer[++e];else if(r==="%"&&Pb.has(this.buffer[e+1])&&Pb.has(this.buffer[e+2]))r=this.buffer[e+=3];else break;return yield*this.pushToIndex(e,!1)}}*pushNewline(){let e=this.buffer[this.pos];return e===`
|
||
`?yield*this.pushCount(1):e==="\r"&&this.charAt(1)===`
|
||
`?yield*this.pushCount(2):0}*pushSpaces(e){let r=this.pos-1,n;do n=this.buffer[++r];while(n===" "||e&&n===" ");let i=r-this.pos;return i>0&&(yield this.buffer.substr(this.pos,i),this.pos=r),i}*pushUntil(e){let r=this.pos,n=this.buffer[r];for(;!e(n);)n=this.buffer[++r];return yield*this.pushToIndex(r,!1)}};Cb.Lexer=$f});var Lf=R(Rb=>{"use strict";var Mf=class{constructor(){this.lineStarts=[],this.addNewLine=e=>this.lineStarts.push(e),this.linePos=e=>{let r=0,n=this.lineStarts.length;for(;r<n;){let o=r+n>>1;this.lineStarts[o]<e?r=o+1:n=o}if(this.lineStarts[r]===e)return{line:r+1,col:1};if(r===0)return{line:0,col:e};let i=this.lineStarts[r-1];return{line:r,col:e-i+1}}}};Rb.LineCounter=Mf});var Bf=R(Tb=>{"use strict";var $T=nc("process"),Ab=Xc(),OT=Of();function Xr(t,e){for(let r=0;r<t.length;++r)if(t[r].type===e)return!0;return!1}function _b(t){for(let e=0;e<t.length;++e)switch(t[e].type){case"space":case"comment":case"newline":break;default:return e}return-1}function Ib(t){switch(t?.type){case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":case"flow-collection":return!0;default:return!1}}function Zc(t){switch(t.type){case"document":return t.start;case"block-map":{let e=t.items[t.items.length-1];return e.sep??e.start}case"block-seq":return t.items[t.items.length-1].start;default:return[]}}function zi(t){if(t.length===0)return[];let e=t.length;e:for(;--e>=0;)switch(t[e].type){case"doc-start":case"explicit-key-ind":case"map-value-ind":case"seq-item-ind":case"newline":break e}for(;t[++e]?.type==="space";);return t.splice(e,t.length)}function el(t,e){if(e.length<1e5)Array.prototype.push.apply(t,e);else for(let r=0;r<e.length;++r)t.push(e[r])}function jb(t){if(t.start.type==="flow-seq-start")for(let e of t.items)e.sep&&!e.value&&!Xr(e.start,"explicit-key-ind")&&!Xr(e.sep,"map-value-ind")&&(e.key&&(e.value=e.key),delete e.key,Ib(e.value)?e.value.end?el(e.value.end,e.sep):e.value.end=e.sep:el(e.start,e.sep),delete e.sep)}var Df=class{constructor(e){this.atNewLine=!0,this.atScalar=!1,this.indent=0,this.offset=0,this.onKeyLine=!1,this.stack=[],this.source="",this.type="",this.lexer=new OT.Lexer,this.onNewLine=e}*parse(e,r=!1){this.onNewLine&&this.offset===0&&this.onNewLine(0);for(let n of this.lexer.lex(e,r))yield*this.next(n);r||(yield*this.end())}*next(e){if(this.source=e,$T.env.LOG_TOKENS&&console.log("|",Ab.prettyToken(e)),this.atScalar){this.atScalar=!1,yield*this.step(),this.offset+=e.length;return}let r=Ab.tokenType(e);if(r)if(r==="scalar")this.atNewLine=!1,this.atScalar=!0,this.type="scalar";else{switch(this.type=r,yield*this.step(),r){case"newline":this.atNewLine=!0,this.indent=0,this.onNewLine&&this.onNewLine(this.offset+e.length);break;case"space":this.atNewLine&&e[0]===" "&&(this.indent+=e.length);break;case"explicit-key-ind":case"map-value-ind":case"seq-item-ind":this.atNewLine&&(this.indent+=e.length);break;case"doc-mode":case"flow-error-end":return;default:this.atNewLine=!1}this.offset+=e.length}else{let n=`Not a YAML token: ${e}`;yield*this.pop({type:"error",offset:this.offset,message:n,source:e}),this.offset+=e.length}}*end(){for(;this.stack.length>0;)yield*this.pop()}get sourceToken(){return{type:this.type,offset:this.offset,indent:this.indent,source:this.source}}*step(){let e=this.peek(1);if(this.type==="doc-end"&&e?.type!=="doc-end"){for(;this.stack.length>0;)yield*this.pop();this.stack.push({type:"doc-end",offset:this.offset,source:this.source});return}if(!e)return yield*this.stream();switch(e.type){case"document":return yield*this.document(e);case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return yield*this.scalar(e);case"block-scalar":return yield*this.blockScalar(e);case"block-map":return yield*this.blockMap(e);case"block-seq":return yield*this.blockSequence(e);case"flow-collection":return yield*this.flowCollection(e);case"doc-end":return yield*this.documentEnd(e)}yield*this.pop()}peek(e){return this.stack[this.stack.length-e]}*pop(e){let r=e??this.stack.pop();if(!r)yield{type:"error",offset:this.offset,source:"",message:"Tried to pop an empty stack"};else if(this.stack.length===0)yield r;else{let n=this.peek(1);switch(r.type==="block-scalar"?r.indent="indent"in n?n.indent:0:r.type==="flow-collection"&&n.type==="document"&&(r.indent=0),r.type==="flow-collection"&&jb(r),n.type){case"document":n.value=r;break;case"block-scalar":n.props.push(r);break;case"block-map":{let i=n.items[n.items.length-1];if(i.value){n.items.push({start:[],key:r,sep:[]}),this.onKeyLine=!0;return}else if(i.sep)i.value=r;else{Object.assign(i,{key:r,sep:[]}),this.onKeyLine=!i.explicitKey;return}break}case"block-seq":{let i=n.items[n.items.length-1];i.value?n.items.push({start:[],value:r}):i.value=r;break}case"flow-collection":{let i=n.items[n.items.length-1];!i||i.value?n.items.push({start:[],key:r,sep:[]}):i.sep?i.value=r:Object.assign(i,{key:r,sep:[]});return}default:yield*this.pop(),yield*this.pop(r)}if((n.type==="document"||n.type==="block-map"||n.type==="block-seq")&&(r.type==="block-map"||r.type==="block-seq")){let i=r.items[r.items.length-1];i&&!i.sep&&!i.value&&i.start.length>0&&_b(i.start)===-1&&(r.indent===0||i.start.every(o=>o.type!=="comment"||o.indent<r.indent))&&(n.type==="document"?n.end=i.start:n.items.push({start:i.start}),r.items.splice(-1,1))}}}*stream(){switch(this.type){case"directive-line":yield{type:"directive",offset:this.offset,source:this.source};return;case"byte-order-mark":case"space":case"comment":case"newline":yield this.sourceToken;return;case"doc-mode":case"doc-start":{let e={type:"document",offset:this.offset,start:[]};this.type==="doc-start"&&e.start.push(this.sourceToken),this.stack.push(e);return}}yield{type:"error",offset:this.offset,message:`Unexpected ${this.type} token in YAML stream`,source:this.source}}*document(e){if(e.value)return yield*this.lineEnd(e);switch(this.type){case"doc-start":{_b(e.start)!==-1?(yield*this.pop(),yield*this.step()):e.start.push(this.sourceToken);return}case"anchor":case"tag":case"space":case"comment":case"newline":e.start.push(this.sourceToken);return}let r=this.startBlockValue(e);r?this.stack.push(r):yield{type:"error",offset:this.offset,message:`Unexpected ${this.type} token in YAML document`,source:this.source}}*scalar(e){if(this.type==="map-value-ind"){let r=Zc(this.peek(2)),n=zi(r),i;e.end?(i=e.end,i.push(this.sourceToken),delete e.end):i=[this.sourceToken];let o={type:"block-map",offset:e.offset,indent:e.indent,items:[{start:n,key:e,sep:i}]};this.onKeyLine=!0,this.stack[this.stack.length-1]=o}else yield*this.lineEnd(e)}*blockScalar(e){switch(this.type){case"space":case"comment":case"newline":e.props.push(this.sourceToken);return;case"scalar":if(e.source=this.source,this.atNewLine=!0,this.indent=0,this.onNewLine){let r=this.source.indexOf(`
|
||
`)+1;for(;r!==0;)this.onNewLine(this.offset+r),r=this.source.indexOf(`
|
||
`,r)+1}yield*this.pop();break;default:yield*this.pop(),yield*this.step()}}*blockMap(e){let r=e.items[e.items.length-1];switch(this.type){case"newline":if(this.onKeyLine=!1,r.value){let n="end"in r.value?r.value.end:void 0;(Array.isArray(n)?n[n.length-1]:void 0)?.type==="comment"?n?.push(this.sourceToken):e.items.push({start:[this.sourceToken]})}else r.sep?r.sep.push(this.sourceToken):r.start.push(this.sourceToken);return;case"space":case"comment":if(r.value)e.items.push({start:[this.sourceToken]});else if(r.sep)r.sep.push(this.sourceToken);else{if(this.atIndentedComment(r.start,e.indent)){let i=e.items[e.items.length-2]?.value?.end;if(Array.isArray(i)){el(i,r.start),i.push(this.sourceToken),e.items.pop();return}}r.start.push(this.sourceToken)}return}if(this.indent>=e.indent){let n=!this.onKeyLine&&this.indent===e.indent,i=n&&(r.sep||r.explicitKey)&&this.type!=="seq-item-ind",o=[];if(i&&r.sep&&!r.value){let a=[];for(let s=0;s<r.sep.length;++s){let c=r.sep[s];switch(c.type){case"newline":a.push(s);break;case"space":break;case"comment":c.indent>e.indent&&(a.length=0);break;default:a.length=0}}a.length>=2&&(o=r.sep.splice(a[1]))}switch(this.type){case"anchor":case"tag":i||r.value?(o.push(this.sourceToken),e.items.push({start:o}),this.onKeyLine=!0):r.sep?r.sep.push(this.sourceToken):r.start.push(this.sourceToken);return;case"explicit-key-ind":!r.sep&&!r.explicitKey?(r.start.push(this.sourceToken),r.explicitKey=!0):i||r.value?(o.push(this.sourceToken),e.items.push({start:o,explicitKey:!0})):this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken],explicitKey:!0}]}),this.onKeyLine=!0;return;case"map-value-ind":if(r.explicitKey)if(r.sep)if(r.value)e.items.push({start:[],key:null,sep:[this.sourceToken]});else if(Xr(r.sep,"map-value-ind"))this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:o,key:null,sep:[this.sourceToken]}]});else if(Ib(r.key)&&!Xr(r.sep,"newline")){let a=zi(r.start),s=r.key,c=r.sep;c.push(this.sourceToken),delete r.key,delete r.sep,this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:a,key:s,sep:c}]})}else o.length>0?r.sep=r.sep.concat(o,this.sourceToken):r.sep.push(this.sourceToken);else if(Xr(r.start,"newline"))Object.assign(r,{key:null,sep:[this.sourceToken]});else{let a=zi(r.start);this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:a,key:null,sep:[this.sourceToken]}]})}else r.sep?r.value||i?e.items.push({start:o,key:null,sep:[this.sourceToken]}):Xr(r.sep,"map-value-ind")?this.stack.push({type:"block-map",offset:this.offset,indent:this.indent,items:[{start:[],key:null,sep:[this.sourceToken]}]}):r.sep.push(this.sourceToken):Object.assign(r,{key:null,sep:[this.sourceToken]});this.onKeyLine=!0;return;case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":{let a=this.flowScalar(this.type);i||r.value?(e.items.push({start:o,key:a,sep:[]}),this.onKeyLine=!0):r.sep?this.stack.push(a):(Object.assign(r,{key:a,sep:[]}),this.onKeyLine=!0);return}default:{let a=this.startBlockValue(e);if(a){if(a.type==="block-seq"){if(!r.explicitKey&&r.sep&&!Xr(r.sep,"newline")){yield*this.pop({type:"error",offset:this.offset,message:"Unexpected block-seq-ind on same line with key",source:this.source});return}}else n&&e.items.push({start:o});this.stack.push(a);return}}}}yield*this.pop(),yield*this.step()}*blockSequence(e){let r=e.items[e.items.length-1];switch(this.type){case"newline":if(r.value){let n="end"in r.value?r.value.end:void 0;(Array.isArray(n)?n[n.length-1]:void 0)?.type==="comment"?n?.push(this.sourceToken):e.items.push({start:[this.sourceToken]})}else r.start.push(this.sourceToken);return;case"space":case"comment":if(r.value)e.items.push({start:[this.sourceToken]});else{if(this.atIndentedComment(r.start,e.indent)){let i=e.items[e.items.length-2]?.value?.end;if(Array.isArray(i)){el(i,r.start),i.push(this.sourceToken),e.items.pop();return}}r.start.push(this.sourceToken)}return;case"anchor":case"tag":if(r.value||this.indent<=e.indent)break;r.start.push(this.sourceToken);return;case"seq-item-ind":if(this.indent!==e.indent)break;r.value||Xr(r.start,"seq-item-ind")?e.items.push({start:[this.sourceToken]}):r.start.push(this.sourceToken);return}if(this.indent>e.indent){let n=this.startBlockValue(e);if(n){this.stack.push(n);return}}yield*this.pop(),yield*this.step()}*flowCollection(e){let r=e.items[e.items.length-1];if(this.type==="flow-error-end"){let n;do yield*this.pop(),n=this.peek(1);while(n?.type==="flow-collection")}else if(e.end.length===0){switch(this.type){case"comma":case"explicit-key-ind":!r||r.sep?e.items.push({start:[this.sourceToken]}):r.start.push(this.sourceToken);return;case"map-value-ind":!r||r.value?e.items.push({start:[],key:null,sep:[this.sourceToken]}):r.sep?r.sep.push(this.sourceToken):Object.assign(r,{key:null,sep:[this.sourceToken]});return;case"space":case"comment":case"newline":case"anchor":case"tag":!r||r.value?e.items.push({start:[this.sourceToken]}):r.sep?r.sep.push(this.sourceToken):r.start.push(this.sourceToken);return;case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":{let i=this.flowScalar(this.type);!r||r.value?e.items.push({start:[],key:i,sep:[]}):r.sep?this.stack.push(i):Object.assign(r,{key:i,sep:[]});return}case"flow-map-end":case"flow-seq-end":e.end.push(this.sourceToken);return}let n=this.startBlockValue(e);n?this.stack.push(n):(yield*this.pop(),yield*this.step())}else{let n=this.peek(2);if(n.type==="block-map"&&(this.type==="map-value-ind"&&n.indent===e.indent||this.type==="newline"&&!n.items[n.items.length-1].sep))yield*this.pop(),yield*this.step();else if(this.type==="map-value-ind"&&n.type!=="flow-collection"){let i=Zc(n),o=zi(i);jb(e);let a=e.end.splice(1,e.end.length);a.push(this.sourceToken);let s={type:"block-map",offset:e.offset,indent:e.indent,items:[{start:o,key:e,sep:a}]};this.onKeyLine=!0,this.stack[this.stack.length-1]=s}else yield*this.lineEnd(e)}}flowScalar(e){if(this.onNewLine){let r=this.source.indexOf(`
|
||
`)+1;for(;r!==0;)this.onNewLine(this.offset+r),r=this.source.indexOf(`
|
||
`,r)+1}return{type:e,offset:this.offset,indent:this.indent,source:this.source}}startBlockValue(e){switch(this.type){case"alias":case"scalar":case"single-quoted-scalar":case"double-quoted-scalar":return this.flowScalar(this.type);case"block-scalar-header":return{type:"block-scalar",offset:this.offset,indent:this.indent,props:[this.sourceToken],source:""};case"flow-map-start":case"flow-seq-start":return{type:"flow-collection",offset:this.offset,indent:this.indent,start:this.sourceToken,items:[],end:[]};case"seq-item-ind":return{type:"block-seq",offset:this.offset,indent:this.indent,items:[{start:[this.sourceToken]}]};case"explicit-key-ind":{this.onKeyLine=!0;let r=Zc(e),n=zi(r);return n.push(this.sourceToken),{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:n,explicitKey:!0}]}}case"map-value-ind":{this.onKeyLine=!0;let r=Zc(e),n=zi(r);return{type:"block-map",offset:this.offset,indent:this.indent,items:[{start:n,key:null,sep:[this.sourceToken]}]}}}return null}atIndentedComment(e,r){return this.type!=="comment"||this.indent<=r?!1:e.every(n=>n.type==="newline"||n.type==="space")}*documentEnd(e){this.type!=="doc-mode"&&(e.end?e.end.push(this.sourceToken):e.end=[this.sourceToken],this.type==="newline"&&(yield*this.pop()))}*lineEnd(e){switch(this.type){case"comma":case"doc-start":case"doc-end":case"flow-seq-end":case"flow-map-end":case"map-value-ind":yield*this.pop(),yield*this.step();break;case"newline":this.onKeyLine=!1;default:e.end?e.end.push(this.sourceToken):e.end=[this.sourceToken],this.type==="newline"&&(yield*this.pop())}}};Tb.Parser=Df});var Db=R(Sa=>{"use strict";var $b=xf(),MT=fa(),ka=ga(),LT=Sp(),DT=K(),BT=Lf(),Ob=Bf();function Mb(t){let e=t.prettyErrors!==!1;return{lineCounter:t.lineCounter||e&&new BT.LineCounter||null,prettyErrors:e}}function FT(t,e={}){let{lineCounter:r,prettyErrors:n}=Mb(e),i=new Ob.Parser(r?.addNewLine),o=new $b.Composer(e),a=Array.from(o.compose(i.parse(t)));if(n&&r)for(let s of a)s.errors.forEach(ka.prettifyError(t,r)),s.warnings.forEach(ka.prettifyError(t,r));return a.length>0?a:Object.assign([],{empty:!0},o.streamInfo())}function Lb(t,e={}){let{lineCounter:r,prettyErrors:n}=Mb(e),i=new Ob.Parser(r?.addNewLine),o=new $b.Composer(e),a=null;for(let s of o.compose(i.parse(t),!0,t.length))if(!a)a=s;else if(a.options.logLevel!=="silent"){a.errors.push(new ka.YAMLParseError(s.range.slice(0,2),"MULTIPLE_DOCS","Source contains multiple documents; please use YAML.parseAllDocuments()"));break}return n&&r&&(a.errors.forEach(ka.prettifyError(t,r)),a.warnings.forEach(ka.prettifyError(t,r))),a}function KT(t,e,r){let n;typeof e=="function"?n=e:r===void 0&&e&&typeof e=="object"&&(r=e);let i=Lb(t,r);if(!i)return null;if(i.warnings.forEach(o=>LT.warn(i.options.logLevel,o)),i.errors.length>0){if(i.options.logLevel!=="silent")throw i.errors[0];i.errors=[]}return i.toJS(Object.assign({reviver:n},r))}function HT(t,e,r){let n=null;if(typeof e=="function"||Array.isArray(e)?n=e:r===void 0&&e&&(r=e),typeof r=="string"&&(r=r.length),typeof r=="number"){let i=Math.round(r);r=i<1?void 0:i>8?{indent:8}:{indent:i}}if(t===void 0){let{keepUndefined:i}=r??e??{};if(!i)return}return DT.isDocument(t)&&!n?t.toString(r):new MT.Document(t,n,r).toString(r)}Sa.parse=KT;Sa.parseAllDocuments=FT;Sa.parseDocument=Lb;Sa.stringify=HT});var Ne=R(q=>{"use strict";var WT=xf(),VT=fa(),qT=of(),Ff=ga(),zT=Xo(),Qr=K(),GT=Gr(),UT=ae(),JT=Jr(),YT=Yr(),XT=Xc(),QT=Of(),ZT=Lf(),e$=Bf(),tl=Db(),Bb=Go();q.Composer=WT.Composer;q.Document=VT.Document;q.Schema=qT.Schema;q.YAMLError=Ff.YAMLError;q.YAMLParseError=Ff.YAMLParseError;q.YAMLWarning=Ff.YAMLWarning;q.Alias=zT.Alias;q.isAlias=Qr.isAlias;q.isCollection=Qr.isCollection;q.isDocument=Qr.isDocument;q.isMap=Qr.isMap;q.isNode=Qr.isNode;q.isPair=Qr.isPair;q.isScalar=Qr.isScalar;q.isSeq=Qr.isSeq;q.Pair=GT.Pair;q.Scalar=UT.Scalar;q.YAMLMap=JT.YAMLMap;q.YAMLSeq=YT.YAMLSeq;q.CST=XT;q.Lexer=QT.Lexer;q.LineCounter=ZT.LineCounter;q.Parser=e$.Parser;q.parse=tl.parse;q.parseAllDocuments=tl.parseAllDocuments;q.parseDocument=tl.parseDocument;q.stringify=tl.stringify;q.visit=Bb.visit;q.visitAsync=Bb.visitAsync});import Zr from"path";function qb(t,e){return Gi[e][t]}function o$(t,e,r,n){let i=/^(\s*)([a-z_]+):/u.exec(t);if(!i)return null;let o=i[1].length,a=i[2];if(o===0&&a in Gi.en)return a;if(o===2&&e){let s=`${e}.${a}`;if(s in Gi.en)return s}if(o===4&&e==="knowledge"&&n==="remote"){let s=`knowledge.remote.${a}`;if(s in Gi.en)return s}if(o===4&&e==="knowledge"&&n==="local"){let s=`knowledge.local.${a}`;if(s in Gi.en)return s}if(o===2&&e===null&&a==="hook")return"hook";if(o===2&&e==="hook"&&a==="allow_paths")return"hook.allow_paths";if(o===4&&e==="native"&&r==="snapshot"){let s=`native.snapshot.${a}`;if(s in Gi.en)return s}return null}function Ji(t,e){let r=[],n=null,i=null,o=null;for(let a of(0,Ea.stringify)(t).trimEnd().split(`
|
||
`)){let s=o$(a,n,i,o);if(s){let c=a.match(/^\s*/u)?.[0]??"";for(let l of qb(s,e).split(`
|
||
`))r.push(`${c}${l}`)}r.push(a),/^[a-z_]+:/u.test(a)?(a.startsWith("native:")?n="native":a.startsWith("classic:")?n="classic":a.startsWith("hook:")?n="hook":a.startsWith("memory:")?n="memory":a.startsWith("knowledge:")?n="knowledge":n=null,i=null,o=null):/^ {2}[a-z_]+:/u.test(a)&&(n==="native"&&(i=a.startsWith(" snapshot:")?"snapshot":null),n==="knowledge"&&(o=a.startsWith(" local:")?"local":a.startsWith(" remote:")?"remote":null))}return r.push(""),r.join(`
|
||
`)}function a$(t,e){if(typeof t!="string")throw new Error(`${e} must be a string`);let r=t.trim();if(r.length===0||Zr.posix.isAbsolute(r)||Zr.win32.isAbsolute(r)||/^(?:~|[\\/])/u.test(r))throw new Error(`${e} must be a project-relative path`);if(r===".")return[];let n=r.replaceAll("\\","/").split("/");if(n.some(i=>i===".."))throw new Error(`${e} must stay inside the project root`);if(n.some(i=>i===""||i==="."))throw new Error(`${e} must not contain empty or dot path segments`);return n}function Fn(t){let e=a$(t,"native.artifact_root");return e.length===0?".":e.join("/")}function zb(t,e="docs"){let r=t??e;if(r!=="legacy"&&r!=="docs")throw new Error("classic.artifact_layout must be legacy or docs");return r}function Yi(t,e,r=!1){if(typeof t!="string")throw new Error(`${e} must be a string`);let n=t.trim().replaceAll("\\","/");if(n.length===0||Zr.posix.isAbsolute(n)||Zr.win32.isAbsolute(n)||/^(?:~|[\\/])/u.test(n))throw new Error(`${e} must be relative to its declared path base`);let i=n.split("/");if(i.some(o=>o===".."))throw new Error(`${e} must stay inside its declared path base`);if(i.some(o=>o===""||o==="."))throw new Error(`${e} must not contain empty or dot path segments`);if(!r&&/[*?]/u.test(n))throw new Error(`${e} cannot contain wildcards`);return i.join("/")}function gr(t,e){if(!t||typeof t!="object"||Array.isArray(t))throw new Error(`${e} must be a mapping`);return t}function Gb(t,e,r){let n=t??e;if(n!=="en"&&n!=="zh-CN")throw new Error(`${r} must be en or zh-CN`);return n}function il(t,e){if(typeof t!="string"||t.length===0||t.includes("\\")||t.includes("\0")||t.startsWith("/")||t.split("/").includes(".."))throw new Error(`${e} contains an unsafe pattern`);if(t.length>rl)throw new Error(`${e} exceeds ${rl} characters`);let r=0;for(let n=0;n<t.length;n+=1)t[n]==="?"?r+=1:t[n]==="*"&&(r+=1,t[n+1]==="*"&&(n+=1));if(r>nl)throw new Error(`${e} contains more than ${nl} wildcard tokens`);return t}function Wb(t,e,r){if(t===void 0)return[...r];if(!Array.isArray(t))throw new Error(`${e} contains an unsafe pattern`);return[...new Set(t.map(n=>il(n,e)))].sort((n,i)=>n.localeCompare(i,"en"))}function Na(t,e,r){let n=t??e;if(!Number.isSafeInteger(n)||n<1)throw new Error(`${r} must be a positive integer`);return n}function Vb(t,e,r){let n=Na(t,e,r);if(n>Math.floor(Number.MAX_SAFE_INTEGER/(1024*1024)))throw new Error(`${r} is too large to convert to bytes safely`);return n}function s$(t){if(t===void 0)return{...We,include:[...We.include],exclude:[...We.exclude]};let e=gr(t,"native.snapshot");return{include:Wb(e.include,"native.snapshot.include",We.include),exclude:Wb(e.exclude,"native.snapshot.exclude",We.exclude),max_files:Na(e.max_files,We.max_files,"native.snapshot.max_files"),max_total_bytes:Na(e.max_total_bytes,We.max_total_bytes,"native.snapshot.max_total_bytes"),max_duration_ms:Na(e.max_duration_ms,We.max_duration_ms,"native.snapshot.max_duration_ms"),max_selection_records:Na(e.max_selection_records,We.max_selection_records,"native.snapshot.max_selection_records")}}function c$(t){if(t===void 0)return;let e=gr(t,"native.pending_root_move"),r=e.id,n=e.from_artifact_root,i=e.to_artifact_root,o=e.stage;if(typeof r!="string"||!/^[a-f0-9-]{8,}$/u.test(r))throw new Error("native.pending_root_move.id is invalid");if(typeof n!="string"||typeof i!="string")throw new Error("native.pending_root_move roots must be strings");if(o!=="copying"&&o!=="ready"&&o!=="switched")throw new Error("native.pending_root_move.stage is invalid");let a;if(e.cleanup!==void 0){let s=gr(e.cleanup,"native.pending_root_move.cleanup"),c=s.kind,l=s.state,d=s.manifest_hash;if(c!=="forward-source"&&c!=="restart-staging"&&c!=="rollback-destination"&&c!=="rollback-staging")throw new Error("native.pending_root_move.cleanup.kind is invalid");if(l!=="prepared"&&l!=="quarantined"&&l!=="deleting")throw new Error("native.pending_root_move.cleanup.state is invalid");if(typeof d!="string"||!/^[a-f0-9]{64}$/u.test(d))throw new Error("native.pending_root_move.cleanup.manifest_hash is invalid");a={kind:c,state:l,manifestHash:d}}return{id:r,fromArtifactRoot:Fn(n),toArtifactRoot:Fn(i),stage:o,...a?{cleanup:a}:{}}}function l$(t){if(t===void 0)return;let e=gr(t,"native.finish");if(e.pull_request===void 0)return{};let r=gr(e.pull_request,"native.finish.pull_request");if(r.provider!=="repository-command")throw new Error("native.finish.pull_request.provider must be repository-command");if(!Array.isArray(r.command)||r.command.length===0)throw new Error("native.finish.pull_request.command must be a non-empty array");if(r.command.length>64)throw new Error("native.finish.pull_request.command must contain at most 64 arguments");let n=r.command.map((o,a)=>{if(typeof o!="string"||o.trim().length===0||o.length>4096||/[\0\r\n]/u.test(o))throw new Error(`native.finish.pull_request.command[${a}] must be a non-empty single-line string of at most 4096 characters`);return o});if(Zr.posix.isAbsolute(n[0])||Zr.win32.isAbsolute(n[0]))throw new Error("native.finish.pull_request.command[0] must be a bare executable name or a project-relative path");let i=r.timeout_ms??t$;if(!Number.isSafeInteger(i)||i<1||i>Hb)throw new Error(`native.finish.pull_request.timeout_ms must be an integer between 1 and ${Hb}`);return{pull_request:{provider:"repository-command",command:n,timeout_ms:i}}}function d$(t,e={}){let r=gr(t,"native"),n=r.artifact_root??(e.allowMissingArtifactRoot?"docs":void 0);if(typeof n!="string")throw new Error("native.artifact_root must be a string");let i=r.clarification_mode??"batch";if(i!=="sequential"&&i!=="batch")throw new Error("native.clarification_mode must be sequential or batch");let o=r.archive_confirmation??"automatic";if(o!=="automatic"&&o!=="required")throw new Error("native.archive_confirmation must be automatic or required");let a=r.max_verify_failures??Kf;if(!Number.isSafeInteger(a)||a<1)throw new Error("native.max_verify_failures must be a positive integer");let s=r.document_writes??"allow";if(s!=="allow"&&s!=="revert")throw new Error("native.document_writes must be allow or revert");let c=c$(r.pending_root_move),l=l$(r.finish);return{artifact_root:Fn(n),language:Gb(r.language,"en","native.language"),clarification_mode:i,archive_confirmation:o,max_verify_failures:a,...s==="revert"?{document_writes:s}:{},snapshot:s$(r.snapshot),...l?{finish:l}:{},...c?{pending_root_move:c}:{}}}function u$(t){let e=gr(t,"classic"),r=e.context_compression??"off";if(r!=="off"&&r!=="beta")throw new Error("classic.context_compression must be off or beta");let n=e.review_mode??"standard";if(n!=="off"&&n!=="standard"&&n!=="thorough")throw new Error("classic.review_mode must be off, standard, or thorough");let i=e.auto_transition??!0;if(typeof i!="boolean")throw new Error("classic.auto_transition must be true or false");let o=e.document_evidence??"neutral";if(o!=="neutral"&&o!=="strict")throw new Error("classic.document_evidence must be neutral or strict");return{artifact_layout:zb(e.artifact_layout),language:Gb(e.language,"zh-CN","classic.language"),context_compression:r,review_mode:n,auto_transition:i,...o==="strict"?{document_evidence:o}:{}}}function p$(t){let r=gr(t,"hook").allow_paths??[];if(!Array.isArray(r))throw new Error("hook.allow_paths must be an array");return{allow_paths:[...new Set(r.map((n,i)=>Yi(n,`hook.allow_paths[${i}]`)))]}}function f$(t){if(t===void 0)return{...Bn};let e=gr(t,"memory"),r=e.learning??Bn.learning,n=e.retrieval??Bn.retrieval;if(typeof r!="boolean")throw new Error("memory.learning must be true or false");if(typeof n!="boolean")throw new Error("memory.retrieval must be true or false");return{learning:r,retrieval:n}}function Hf(t,e){if(t===null||typeof t!="object"||Array.isArray(t))throw new Error(`${e} must be a mapping`);return t}function m$(t,e){if(typeof t!="string")throw new Error(`${e} must be a string`);let r=t.trim();if(r.length===0||r.includes("\\")||r.includes("\0")||Zr.posix.isAbsolute(r)||Zr.win32.isAbsolute(r)||r.startsWith("~")||r.split("/").some(i=>i===""||i==="."||i===".."))throw new Error(`${e} must be a safe project-relative glob`);if(!r.toLowerCase().endsWith(".md"))throw new Error(`${e} must target a Markdown file ending in .md`);if(r.length>Fb)throw new Error(`${e} exceeds ${Fb} characters`);let n=0;for(let i=0;i<r.length;i+=1)r[i]==="?"?n+=1:r[i]==="*"&&(n+=1,r[i+1]==="*"&&(i+=1));if(n>Kb)throw new Error(`${e} contains more than ${Kb} wildcard tokens`);return r}function h$(t){let e=Hf(t,"knowledge.local"),r=e.include??[];if(!Array.isArray(r))throw new Error("knowledge.local.include must be an array");let n={include:[...new Set(r.map((i,o)=>m$(i,`knowledge.local.include[${o}]`)))],max_file_mb:Vb(e.max_file_mb,Qe.max_file_mb,"knowledge.local.max_file_mb"),max_total_mb:Vb(e.max_total_mb,Qe.max_total_mb,"knowledge.local.max_total_mb")};if(n.max_file_mb>n.max_total_mb)throw new Error("knowledge.local.max_file_mb must not exceed max_total_mb");return n}function g$(t){if(typeof t!="string"||t.trim().length===0)throw new Error("knowledge.remote.endpoint must be a non-empty URL");let e;try{e=new URL(t)}catch{throw new Error("knowledge.remote.endpoint must be a valid URL")}let r=e.hostname.toLowerCase().replace(/^\[|\]$/gu,""),n=r==="localhost"||r==="127.0.0.1"||r==="::1";if(e.protocol!=="https:"&&!(e.protocol==="http:"&&n))throw new Error("knowledge.remote.endpoint must use HTTPS (HTTP is allowed for loopback)");return e.toString()}function y$(t){let e=Hf(t,"knowledge.remote"),r=g$(e.endpoint),n=e.token_env;if(n!==void 0&&(typeof n!="string"||!/^[A-Za-z_][A-Za-z0-9_]*$/u.test(n)))throw new Error("knowledge.remote.token_env must be an environment variable name");let i=e.scope;if(i!==void 0&&(typeof i!="string"||i.length>512))throw new Error("knowledge.remote.scope must be a string of at most 512 characters");let o=e.timeout_ms??5e3;if(typeof o!="number"||!Number.isSafeInteger(o)||o<100||o>3e4)throw new Error("knowledge.remote.timeout_ms must be an integer between 100 and 30000");return{endpoint:r,...n===void 0?{}:{token_env:n},...i===void 0?{}:{scope:i},timeout_ms:o}}function v$(t){if(t===void 0)return{...Ui};let e=Hf(t,"knowledge"),r=e.provider??"local";if(r!=="local"&&r!=="remote")throw new Error("knowledge.provider must be local or remote");let n=e.local===void 0?void 0:h$(e.local);if(r==="local")return{provider:r,...n?{local:n}:{}};let i=e.remote===void 0?void 0:y$(e.remote);if(i===void 0)throw new Error("knowledge.remote must be configured when knowledge.provider is remote");return{provider:r,...n?{local:n}:{},remote:i}}function w$(t){let e=t??!0;if(typeof e!="boolean")throw new Error("ambient_resume must be true or false");return e}function b$(t,e,r,n,i,o,a,s){let c=t.schema!==void 0;if(!(c||t.default_workflow!==void 0||t.workflows!==void 0||!s.allowPartialProject&&t.native!==void 0)||s.allowPartialProject&&!c)return null;if(t.schema!=="comet.project.v1")throw new Error("Unsupported Comet project schema");if(t.default_workflow!=="native"&&t.default_workflow!=="classic")throw new Error("default_workflow must be native or classic");let d=t.workflows??[t.default_workflow];if(!Array.isArray(d)||d.length===0||d.some(p=>p!=="native"&&p!=="classic"))throw new Error("workflows must contain native and/or classic");let u=[...new Set(d)];if(!u.includes(t.default_workflow))throw new Error("workflows must include default_workflow");if(u.includes("native")&&!i)throw new Error("native must be a mapping");return{schema:"comet.project.v1",default_workflow:t.default_workflow,workflows:u,ambient_resume:a,...e?{hook:e}:{},memory:r,knowledge:n,...i?{native:i}:{},...o?{classic:o}:{}}}function zt(t,e={}){let r=(0,Ea.parseDocument)(t,{uniqueKeys:!0});if(r.errors.length>0)throw new Error(`Invalid .comet/config.yaml: ${r.errors[0].message}`);let n=r.toJS();if(n==null)return{value:{},config:null,ambient_resume:!0};if(typeof n!="object"||Array.isArray(n))throw new Error("Invalid .comet/config.yaml: root must be a mapping");let i=n,o=w$(i.ambient_resume),a=i.hook===void 0?void 0:p$(i.hook),s=f$(i.memory),c=v$(i.knowledge),l=i.native===void 0?void 0:d$(i.native,{allowMissingArtifactRoot:e.allowMissingNativeFields}),d=i.classic===void 0?void 0:u$(i.classic),u=b$(i,a,s,c,l,d,o,{allowPartialProject:e.allowPartialProject??!1});return{value:i,config:u,ambient_resume:o,memory:s,knowledge:c,...a?{hook:a}:{},...l?{native:l}:{},...d?{classic:d}:{}}}function Ub(t){return{id:t.id,from_artifact_root:t.fromArtifactRoot,to_artifact_root:t.toArtifactRoot,stage:t.stage,...t.cleanup?{cleanup:{kind:t.cleanup.kind,state:t.cleanup.state,manifest_hash:t.cleanup.manifestHash}}:{}}}function Jb(t){let e=t.knowledge??{...Ui};return{schema:t.schema,default_workflow:t.default_workflow,workflows:t.workflows??[t.default_workflow],ambient_resume:t.ambient_resume,memory:t.memory??{...Bn},knowledge:{provider:e.provider,...e.local?{local:{include:[...e.local.include],max_file_mb:e.local.max_file_mb??Qe.max_file_mb,max_total_mb:e.local.max_total_mb??Qe.max_total_mb}}:{},...e.remote?{remote:{endpoint:e.remote.endpoint,timeout_ms:e.remote.timeout_ms,...e.remote.token_env===void 0?{}:{token_env:e.remote.token_env},...e.remote.scope===void 0?{}:{scope:e.remote.scope}}}:{}},...t.hook?{hook:{allow_paths:[...t.hook.allow_paths]}}:{},...t.native?{native:{artifact_root:t.native.artifact_root,language:t.native.language,clarification_mode:t.native.clarification_mode,archive_confirmation:t.native.archive_confirmation,max_verify_failures:t.native.max_verify_failures,...t.native.document_writes?{document_writes:t.native.document_writes}:{},...t.native.finish?.pull_request?{finish:{pull_request:{provider:t.native.finish.pull_request.provider,command:[...t.native.finish.pull_request.command],timeout_ms:t.native.finish.pull_request.timeout_ms}}}:{},...t.native.pending_root_move?{pending_root_move:Ub(t.native.pending_root_move)}:{}}}:{},...t.classic?{classic:{artifact_layout:t.classic.artifact_layout,language:t.classic.language,context_compression:t.classic.context_compression,review_mode:t.classic.review_mode,auto_transition:t.classic.auto_transition,...t.classic.document_evidence?{document_evidence:t.classic.document_evidence}:{}}}:{}}}function Xe(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:{}}function xa(t,e){let r=Jb(e),n=zt((0,Ea.stringify)(r)).config;if(!n)throw new Error("Unsupported Comet project schema");let i={...t,schema:n.schema,default_workflow:n.default_workflow,workflows:n.workflows,ambient_resume:n.ambient_resume};if(n.hook&&(i.hook={...Xe(t.hook),allow_paths:[...n.hook.allow_paths]}),n.memory){let o=Xe(t.memory);i.memory={...o,learning:n.memory.learning,retrieval:n.memory.retrieval}}if(n.knowledge){let o=Xe(t.knowledge),a={...o,provider:n.knowledge.provider};if(n.knowledge.local?a.local={...Xe(o.local),include:[...n.knowledge.local.include],max_file_mb:n.knowledge.local.max_file_mb,max_total_mb:n.knowledge.local.max_total_mb}:delete a.local,n.knowledge.remote){let c={...Xe(o.remote),endpoint:n.knowledge.remote.endpoint,timeout_ms:n.knowledge.remote.timeout_ms,...n.knowledge.remote.token_env===void 0?{}:{token_env:n.knowledge.remote.token_env},...n.knowledge.remote.scope===void 0?{}:{scope:n.knowledge.remote.scope}};n.knowledge.remote.token_env===void 0&&delete c.token_env,n.knowledge.remote.scope===void 0&&delete c.scope,a.remote=c}else delete a.remote;i.knowledge=a}if(n.native){let o=Xe(t.native),a={...o,artifact_root:n.native.artifact_root,language:n.native.language,clarification_mode:n.native.clarification_mode,archive_confirmation:n.native.archive_confirmation,max_verify_failures:n.native.max_verify_failures,...n.native.document_writes?{document_writes:n.native.document_writes}:{}};if(n.native.finish?.pull_request){let s=Xe(o.finish);a.finish={...s,pull_request:{...Xe(s.pull_request),provider:n.native.finish.pull_request.provider,command:[...n.native.finish.pull_request.command],timeout_ms:n.native.finish.pull_request.timeout_ms}}}else{let s={...Xe(o.finish)};delete s.pull_request,Object.keys(s).length>0?a.finish=s:delete a.finish}if(delete a.snapshot,n.native.pending_root_move){let s=Xe(o.pending_root_move),c=Ub(n.native.pending_root_move),l=Xe(s.cleanup),d=Xe(c.cleanup);a.pending_root_move={...s,...c,...c.cleanup?{cleanup:{...l,...d}}:{}}}else delete a.pending_root_move;i.native=a}return n.classic&&(i.classic={...Xe(t.classic),artifact_layout:n.classic.artifact_layout,language:n.classic.language,context_compression:n.classic.context_compression,review_mode:n.classic.review_mode,auto_transition:n.classic.auto_transition,...n.classic.document_evidence?{document_evidence:n.classic.document_evidence}:{}}),i}function ol(t="docs",e="en"){return{schema:"comet.project.v1",default_workflow:"native",ambient_resume:!0,memory:{...Bn},knowledge:{...Ui},native:{artifact_root:Fn(t),language:e,clarification_mode:"batch",archive_confirmation:"automatic",max_verify_failures:Kf,snapshot:{...We,include:[...We.include],exclude:[...We.exclude]}}}}var Ea,en,rl,nl,Fb,Kb,Kf,Bn,Qe,Ui,t$,Hb,r$,n$,i$,We,Gi,ge=A(()=>{"use strict";Ea=Ce(Ne(),1),en=Number.MAX_SAFE_INTEGER,rl=1024,nl=64,Fb=1024,Kb=64,Kf=5,Bn={learning:!0,retrieval:!0},Qe={include:[],max_file_mb:1,max_total_mb:32},Ui={provider:"local"},t$=12e4,Hb=6e5,r$=[".agents/skills/**",".amazonq/skills/**",".augment/skills/**",".bob/skills/**",".claude/skills/**",".cline/skills/**",".codebuddy/skills/**",".workbuddy/skills/**",".continue/skills/**",".cospec/skills/**",".crush/skills/**",".cursor/skills/**",".devin/skills/**",".dsh/skills/**",".factory/skills/**",".forge/skills/**",".gemini/skills/**",".github/skills/**",".grok/skills/**",".iflow/skills/**",".junie/skills/**",".kilocode/skills/**",".kimi-code/skills/**",".kiro/skills/**",".lingma/skills/**",".mimocode/skills/**",".opencode/skills/**",".omp/skills/**",".pi/skills/**",".qoder/skills/**",".qwen/skills/**",".roo/skills/**",".trae-cn/skills/**",".trae/skills/**",".windsurf/skills/**",".zcode/skills/**"],n$=["**/.idea/**","**/.vscode/**",".codex/skills/**","**/node_modules/**","**/.next/**","**/.nuxt/**","**/.output/**","**/.svelte-kit/**","**/.vite/**","**/.parcel-cache/**","**/.turbo/**","**/.nx/cache/**","**/dist/**","**/build/**","**/out/**","**/coverage/**","**/.nyc_output/**","**/target/**","**/.gradle/**","**/.cxx/**","**/.externalNativeBuild/**","**/captures/**","**/__pycache__/**","**/.pytest_cache/**","**/.mypy_cache/**","**/.ruff_cache/**","**/.tox/**","**/.nox/**","**/.venv/**","**/venv/**","**/obj/**","**/CMakeFiles/**","**/cmake-build-*/**","**/.cache/**","**/tmp/**","**/temp/**","**/logs/**","**/*.tsbuildinfo","**/*.log","**/.DS_Store","**/Thumbs.db"],i$=[...r$,...n$].sort((t,e)=>t.localeCompare(e,"en")),We={include:["**/*"],exclude:[...i$],max_files:1e4,max_total_bytes:1024*1024*1024,max_duration_ms:6e4,max_selection_records:2e4},Gi={en:{schema:"# Configuration schema used by Comet. Do not edit this value.",default_workflow:"# Default workflow entered by /comet. Must also appear in workflows.",workflows:"# Workflows enabled in this project: native, classic, or both.",ambient_resume:`# Enables automatic recovery through the read-only Ambient Resume probe for both Native and Classic. Set false to disable it.
|
||
# ambient_resume: true | false`,memory:"# Project policy for automatic personal-memory learning and retrieval.","memory.learning":`# Allows workflow events in this project to form new personal memories automatically.
|
||
# learning: true | false`,"memory.retrieval":`# Allows personal memories to be injected into Agent context for this project.
|
||
# retrieval: true | false`,knowledge:"# Project knowledge retrieval provider used by ordinary Comet tasks.","knowledge.provider":`# Provider for project knowledge.
|
||
# provider: local | remote`,"knowledge.local":"# Additional project-relative Markdown globs used by the local provider.","knowledge.local.include":"# One project-relative Markdown glob per list item; appended to the built-in corpus.","knowledge.local.max_file_mb":"# Maximum size in MB for one local Markdown document. Increase it for long specifications or verification reports.","knowledge.local.max_total_mb":"# Maximum total size in MB of the local Markdown retrieval corpus.","knowledge.remote":"# Fixed Comet Retrieval API v1 settings used when provider is remote.","knowledge.remote.endpoint":"# HTTPS endpoint; loopback HTTP is allowed.","knowledge.remote.token_env":"# Optional environment variable containing the bearer token.","knowledge.remote.scope":"# Optional opaque remote knowledge scope.","knowledge.remote.timeout_ms":"# Remote request timeout in milliseconds (100-30000).",hook:"# Hook write policy shared by Native and Classic. Paths are project-relative.","hook.allow_paths":"# Project-relative directories allowed during guarded phases. Use one path per list item; empty by default.",native:"# Native workflow settings. They do not change Classic state or behavior.","native.artifact_root":"# Root directory where Native stores Comet specs and changes. Runtime data stays under .comet.","native.language":`# Artifact language used by Native workflow documents.
|
||
# language: en | zh-CN`,"native.clarification_mode":`# Controls how Native asks clarifying questions: batch asks every currently answerable question per round (default), sequential asks one at a time.
|
||
# clarification_mode: batch | sequential`,"native.archive_confirmation":`# Controls whether Native archives automatically after a successful preview or waits for explicit user confirmation.
|
||
# archive_confirmation: automatic | required`,"native.max_verify_failures":"# Maximum failed Verify outcomes allowed for one confirmed acceptance target before Native stops the completion loop.","native.document_writes":`# Controls documentation file writes during Shape, Verify, and Archive: allow treats them as neutral instead of returning the change to Build, revert restores the strict behavior.
|
||
# document_writes: allow | revert`,"native.finish":"# Optional repository-owned finish providers. Native keeps commit, push, generic remote verification, and recovery ownership.","native.snapshot":"# Controls the auditable project scope and bounded work used by Native content snapshots.","native.snapshot.include":"# Selects the project-relative paths included in Native snapshots. Patterns use / and support *, **, and ?.","native.snapshot.exclude":"# Removes paths from the included scope. Exclusions are bound into each new change baseline.","native.snapshot.max_files":"# Bounds the number of files captured by one snapshot. Increase it for large monorepos.","native.snapshot.max_total_bytes":"# Bounds the total file content hashed by one snapshot. Content is streamed and does not depend on Git hashes.","native.snapshot.max_duration_ms":"# Bounds snapshot capture time in milliseconds. Increase it together with the byte budget on slower or larger repositories.","native.snapshot.max_selection_records":"# Bounds Git selection records and physical enumeration nodes per snapshot. Raise it for monorepos whose tracked plus untracked file list exceeds the default.",classic:"# Classic workflow settings. They do not change Native state or behavior.","classic.artifact_layout":`# Selects the Classic artifact layout. The default is docs; update preserves detected root-level legacy artifacts.
|
||
# artifact_layout: legacy | docs`,"classic.language":`# Artifact language used by Classic workflow documents.
|
||
# language: en | zh-CN`,"classic.context_compression":`# Controls beta context compression for new Classic changes.
|
||
# context_compression: off | beta`,"classic.review_mode":`# Sets the default review depth for new Classic changes.
|
||
# review_mode: off | standard | thorough`,"classic.auto_transition":`# Automatically enters the next Classic phase after a phase passes.
|
||
# auto_transition: true | false`,"classic.document_evidence":`# Controls how documentation edits affect recorded check evidence: neutral keeps build and verify evidence valid when only documentation files changed, strict binds every working-tree file again.
|
||
# document_evidence: neutral | strict`},"zh-CN":{schema:"# Comet 使用的配置格式版本,请勿修改此值。",default_workflow:"# `/comet` 默认进入的工作流;该值也必须出现在 workflows 中。",workflows:"# 此项目启用的工作流,可填写 native、classic 或同时启用两者。",ambient_resume:`# 是否启用只读的环境感知恢复探针,同时作用于 Native 和 Classic;设为 false 可关闭自动工作流恢复。
|
||
# ambient_resume: true | false`,memory:"# 当前项目的个人记忆自动学习与注入策略。","memory.learning":`# 是否允许当前项目通过工作流事件自动沉淀新的个人记忆。
|
||
# 可选值:true | false`,"memory.retrieval":`# 是否允许当前项目把个人记忆自动注入 Agent 上下文。
|
||
# 可选值:true | false`,knowledge:"# 普通 Comet 任务使用的项目知识检索 Provider。","knowledge.provider":`# 项目知识 Provider。
|
||
# 可选值:local | remote`,"knowledge.local":"# Local Provider 额外加载的项目相对 Markdown 路径。","knowledge.local.include":"# 每项填写一个项目相对 Markdown glob;会追加到内置语料。","knowledge.local.max_file_mb":"# 单个本地 Markdown 文档允许参与检索的最大 MB 数;较长的规格或验证报告可按需提高。","knowledge.local.max_total_mb":"# 本地 Markdown 检索语料允许读取的总 MB 数。","knowledge.remote":"# provider 为 remote 时使用的固定 Comet Retrieval API v1 配置。","knowledge.remote.endpoint":"# HTTPS 地址;loopback 地址允许使用 HTTP。","knowledge.remote.token_env":"# 可选的 Bearer Token 环境变量名。","knowledge.remote.scope":"# 可选的不透明远端知识库范围。","knowledge.remote.timeout_ms":"# 远端请求超时时间(毫秒,100-30000)。",hook:"# Native 和 Classic 共享的 Hook 写入策略;路径必须是项目相对路径。","hook.allow_paths":"# 在受保护阶段允许写入的项目相对目录;每项填写一个目录,默认为空。",native:"# Native 工作流配置,不会改变 Classic 的状态或行为。","native.artifact_root":"# Native 规格和 change 的存放根目录;运行时数据始终位于 .comet。","native.language":`# Native 工作流文档使用的产物语言。
|
||
# 可选值:en | zh-CN`,"native.clarification_mode":`# Native 提问澄清问题的方式:batch 每轮一次提出当前所有可回答的问题(默认),sequential 每轮只问一个。
|
||
# 可选值:batch | sequential`,"native.archive_confirmation":`# Native 归档检查成功后自动归档,或等待用户明确确认。
|
||
# 可选值:automatic | required`,"native.max_verify_failures":"# 同一个已确认验收目标最多允许的 Verify 失败次数;达到上限后停止完成循环。","native.document_writes":`# Shape、Verify 和 Archive 阶段的文档类写入处理方式:allow 视为中性写入、不再把 change 打回 Build,revert 恢复严格行为。
|
||
# 可选值:allow | revert`,"native.finish":"# 可选的仓库自有收尾 provider;提交、推送、通用远端核验和恢复仍由 Native 负责。","native.snapshot":"# Native 内容快照使用的可审计项目范围与有界工作预算。","native.snapshot.include":"# Native 快照纳入的项目相对路径;模式使用 /,支持 *、** 和 ?。","native.snapshot.exclude":"# 从纳入范围中排除路径;新 change 会把排除策略绑定到 baseline。","native.snapshot.max_files":"# 单次快照最多捕获的文件数;大型 monorepo 可按需提高。","native.snapshot.max_total_bytes":"# 单次快照最多哈希的文件内容总字节数;内容采用流式读取,不依赖 Git hash。","native.snapshot.max_duration_ms":"# 单次快照的最长执行时间(毫秒);较慢或更大的仓库应与字节预算一并提高。","native.snapshot.max_selection_records":"# 单次快照的 Git 选择记录数与物理枚举节点数上限;tracked 加 untracked 清单超过默认值的大型 monorepo 可按需提高。",classic:"# Classic 工作流配置,不会改变 Native 的状态或行为。","classic.artifact_layout":`# Classic 产物布局;默认使用 docs,update 检测到根目录 legacy 产物时予以保留。
|
||
# 可选值:legacy | docs`,"classic.language":`# Classic 工作流文档使用的产物语言。
|
||
# 可选值:en | zh-CN`,"classic.context_compression":`# 新建 Classic change 是否启用 beta 上下文压缩。
|
||
# 可选值:off | beta`,"classic.review_mode":`# 新建 Classic change 默认使用的审查深度。
|
||
# 可选值:off | standard | thorough`,"classic.auto_transition":`# Classic 阶段通过后是否自动进入下一阶段。
|
||
# 可选值:true | false`,"classic.document_evidence":`# 文档编辑对已记录检查证据的影响:neutral 在只有文档文件变化时保持 build 和 verify 证据有效,strict 重新绑定工作区的全部文件。
|
||
# 可选值:neutral | strict`}}});import{existsSync as Yb,promises as Kn}from"fs";import z from"path";import k$ from"os";async function Wf(t){try{return await Kn.lstat(t),!0}catch(e){if(e.code==="ENOENT")return!1;throw e}}async function N$(t){try{let e=await Kn.readFile(t,"utf8");return/^schema:\s*comet\.project\.v1\s*$/mu.test(e)}catch(e){if(e.code==="ENOENT")return!1;throw e}}function Qi(t,e){let r=z.relative(t,e);return r===""||!z.isAbsolute(r)&&r!==".."&&!r.startsWith(`..${z.sep}`)}async function Xi(t){let e=[],r=t;for(;!await Wf(r);){let i=z.dirname(r);if(i===r)break;e.push(z.basename(r)),r=i}let n=await Kn.realpath(r);return z.resolve(n,...e.reverse())}async function Vf(t){try{return(await Kn.lstat(t)).isSymbolicLink()}catch(e){if(e.code==="ENOENT")return!1;throw e}}async function Pa(t){let e=z.resolve(t);try{(await Kn.stat(e)).isDirectory()||(e=z.dirname(e))}catch(i){if(i.code!=="ENOENT")throw i}let r=e,n=z.resolve(k$.homedir());for(;;){if(!(e===n&&r!==n)){let a=z.join(e,...qf.split("/")),s=e===r||await N$(a);if(await Wf(a)&&s)return e}if(await Wf(z.join(e,".git")))return e;let o=z.dirname(e);if(o===e)return r;e=o}}function zf(t){return Fn(t)}async function E$(t,e){let r=zf(e),n=z.resolve(t,...r.split("/")),i=await Kn.realpath(t),o=await Xi(n);if(!Qi(i,o))throw new Error("native.artifact_root resolves outside the project root");return n}async function Hn(t,e){let r=zf(e),n=await E$(t,r),i=z.join(n,"comet");if(await Vf(i))throw new Error("The configured Native comet root must not be a symbolic link");let[o,a]=await Promise.all([Xi(n),Xi(i)]);if(!Qi(o,a))throw new Error("The configured Native comet root resolves outside its artifact root");let s=z.resolve(t),c=z.join(s,".comet","runtime","native");if(await Vf(c))throw new Error("The Native Runtime root must not be a symbolic link");let[l,d]=await Promise.all([Kn.realpath(s),Xi(c)]);if(!Qi(l,d))throw new Error("The Native Runtime root resolves outside the project root");return{projectRoot:s,configFile:z.join(t,...qf.split("/")),artifactRoot:n,artifactRootRef:r,nativeRoot:i,specsDir:z.join(i,"specs"),changesDir:z.join(i,"changes"),archiveDir:z.join(i,"archive"),runtimeDir:c,changesRuntimeDir:z.join(c,"changes"),locksDir:z.join(c,"locks"),transactionsDir:z.join(c,"transactions")}}function Xb(t){if(!S$.test(t))throw new Error(`Invalid Native change name: ${t}`)}function tn(t,e){Xb(e);let r=z.join(t.changesRuntimeDir,e);if(!Ze(t.changesRuntimeDir,r))throw new Error("Native change Runtime path escaped");return r}function x$(t,e){Xb(e);let r=z.join(t.changesDir,e,"runtime");if(!Ze(t.changesDir,r))throw new Error("Legacy Native change Runtime path escaped");return r}function rn(t,e){let r=tn(t,e);if(Yb(r))return r;let n=x$(t,e);return Yb(n)?n:r}function Wn(t,e){let r=z.resolve(e);if(Ze(t.runtimeDir,r))return t.runtimeDir;if(Ze(t.nativeRoot,r))return t.nativeRoot;throw new Error(`Path is outside Native document and Runtime roots: ${e}`)}function Ze(t,e){return Qi(z.resolve(t),z.resolve(e))}async function te(t,e){let r=z.resolve(t),n=z.resolve(e);if(!Qi(r,n))throw new Error(`Path is outside the Native root: ${e}`);if(await Vf(r))throw new Error(`Native root must not be a symbolic link: ${t}`);let[i,o]=await Promise.all([Xi(r),Xi(n)]);if(!Qi(i,o))throw new Error(`Path resolves outside the Native root: ${e}`);return n}var qf,S$,se=A(()=>{"use strict";ge();qf=".comet/config.yaml",S$=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/u});import{AsyncLocalStorage as D$}from"node:async_hooks";function al(){let t=nk.getStore();return t?.active?t:null}function em(){al()?.entries.clear()}async function ik(t){if(al()!==null)return t();let e={entries:new Map,active:!0};return nk.run(e,async()=>{try{return await t()}finally{e.active=!1,e.entries.clear()}})}function ok(t,e){let r=t;for(let n of e)r+="\0"+(typeof n=="string"?n:JSON.stringify(n));return r}function ye(t,e){return(...r)=>{let n=al();if(n===null)return e(...r);let i=ok(`async:${t}`,r),o=n.entries.get(i);if(o)return o.value;let a=e(...r).catch(s=>{throw n.entries.get(i)?.value===a&&n.entries.delete(i),s});return n.entries.set(i,{value:a}),a}}function tm(t,e){return(...r)=>{let n=al();if(n===null)return e(...r);let i=ok(`sync:${t}`,r),o=n.entries.get(i);if(o)return o.value;let a=e(...r);return n.entries.set(i,{value:a}),a}}var nk,yr=A(()=>{"use strict";nk=new D$});function nn(t){return t!==0&&t!==0n&&t!=="0"}function vr(t,e){return nn(t.dev)&&nn(e.dev)&&nn(t.ino)&&nn(e.ino)}function Y(t,e){let r=nn(t.dev)&&nn(e.dev);if(r&&t.dev!==e.dev)return!1;let n=nn(t.ino)&&nn(e.ino);return n&&t.ino!==e.ino?!1:r&&n?!0:t.birthtime===e.birthtime}var Ra=A(()=>{"use strict"});import{constants as on,promises as Ve}from"fs";import{createHash as K$}from"node:crypto";function nm(t){return"birthtimeNs"in t&&typeof t.birthtimeNs=="bigint"?t.birthtimeNs:t.birthtimeMs}function ak(t){return"ctimeNs"in t&&typeof t.ctimeNs=="bigint"?t.ctimeNs:t.ctimeMs}function sn(t){return{dev:t.dev,ino:t.ino,birthtime:nm(t)}}function an(t,e){let r=sn(t),n=sn(e);return vr(r,n)?Y(r,n):Y(r,n)&&nm(t)===nm(e)&&ak(t)===ak(e)&&t.size===e.size}async function Zi(t,e,r={}){if(!Number.isSafeInteger(e)||e<1)throw new Error("race-safe read byte limit must be a positive integer");let n=r.label??"file",i=r.bigint===!0,o=await Ve.lstat(t,{bigint:i});if(!o.isFile()||o.isSymbolicLink())throw new Ee("not-regular-file",`${n} must be a regular file`);if(BigInt(o.size)>BigInt(e))throw new Ee("too-large",`${n} exceeds ${e} bytes`);let a=await Ve.realpath(t);await r.verify?.("pre-open",{realPath:a,identity:sn(o)});let s=process.platform==="win32"?on.O_RDONLY:on.O_RDONLY|on.O_NOFOLLOW|on.O_NONBLOCK,c;try{c=await Ve.open(t,s)}catch(l){throw l.code==="ELOOP"?new Ee("not-regular-file",`${n} must be a regular file`,{cause:l}):l}try{let[l,d,u]=await Promise.all([c.stat({bigint:i}),Ve.lstat(t,{bigint:i}),Ve.realpath(t)]);if(!l.isFile()||!d.isFile()||d.isSymbolicLink()||u!==a||!an(o,l)||!an(o,d))throw new Ee("changed",`${n} changed while opening`);await r.verify?.("post-open",{realPath:u,identity:sn(l)}),await r.hooks?.afterOpen?.();let p=[],f=0,m=Buffer.allocUnsafe(Math.min(64*1024,e+1));for(;;){let y=e+1-f,{bytesRead:v}=await c.read(m,0,Math.min(m.length,y),null);if(v===0)break;if(f+=v,f>e)throw new Ee("too-large",`${n} exceeds ${e} bytes`);p.push(Buffer.from(m.subarray(0,v)))}await r.hooks?.beforeFinalCheck?.();let[g,h,w]=await Promise.all([c.stat({bigint:i}),Ve.lstat(t,{bigint:i}),Ve.realpath(t)]);if(!h.isFile()||h.isSymbolicLink()||w!==a||!an(o,g)||!an(o,h))throw new Ee("changed",`${n} changed while reading`);return await r.verify?.("post-read",{realPath:w,identity:sn(g)}),{bytes:Buffer.concat(p,f),stat:g,realPath:w}}finally{await c.close()}}async function sk(t,e={}){let r=e.label??"file",n=e.bigint===!0,i=await Ve.lstat(t,{bigint:n});if(!i.isFile()||i.isSymbolicLink())throw new Ee("not-regular-file",`${r} must be a regular file`);let o=await Ve.realpath(t);await e.verify?.("pre-open",{realPath:o,identity:sn(i)});let a=process.platform==="win32"?on.O_RDONLY:on.O_RDONLY|on.O_NOFOLLOW|on.O_NONBLOCK,s;try{s=await Ve.open(t,a)}catch(c){throw c.code==="ELOOP"?new Ee("not-regular-file",`${r} must be a regular file`,{cause:c}):c}try{let[c,l,d]=await Promise.all([s.stat({bigint:n}),Ve.lstat(t,{bigint:n}),Ve.realpath(t)]);if(!c.isFile()||!l.isFile()||l.isSymbolicLink()||d!==o||!an(i,c)||!an(i,l))throw new Ee("changed",`${r} changed while opening`);await e.verify?.("post-open",{realPath:d,identity:sn(c)}),await e.hooks?.afterOpen?.();let u=K$(e.algorithm??"sha256"),p=Buffer.allocUnsafe(64*1024);for(;;){let{bytesRead:h}=await s.read(p,0,p.length,null);if(h===0)break;u.update(p.subarray(0,h))}await e.hooks?.beforeFinalCheck?.();let[f,m,g]=await Promise.all([s.stat({bigint:n}),Ve.lstat(t,{bigint:n}),Ve.realpath(t)]);if(!m.isFile()||m.isSymbolicLink()||g!==o||!an(i,f)||!an(i,m))throw new Ee("changed",`${r} changed while reading`);return await e.verify?.("post-read",{realPath:g,identity:sn(f)}),{digest:u.digest("hex"),stat:f,realPath:g}}finally{await s.close()}}var Ee,Aa=A(()=>{"use strict";Ra();Ee=class extends Error{reason;constructor(e,r,n){super(r,n),this.name="RaceSafeReadError",this.reason=e}}});import{promises as sl}from"fs";import cn from"path";async function wr(t,e,r){let n=await $(t,e,{label:r.label,expected:"file"});if(!n.exists){let o=new Error(`${r.label} does not exist`);throw o.code="ENOENT",o}let i=await im(n.projectRoot,r.label);return sk(n.target,{...r,verify:async(o,a)=>{if(!cl(i,a.realPath))throw new Error(`${r.label} resolves outside the project root`);await om(n.projectRoot,i,n.relative.split("/"),{label:r.label,expected:"file"})}})}function H$(t){let e=t?.code;return e==="ENOENT"||e==="ENOTDIR"}function cl(t,e){let r=cn.relative(t,e);return r===""||!cn.isAbsolute(r)&&r!==".."&&!r.startsWith(`..${cn.sep}`)}async function im(t,e){let r=cn.resolve(t),n=await sl.lstat(r);if(!n.isDirectory()||n.isSymbolicLink())throw new Error(`${e} project root must be a real directory`);return sl.realpath(r)}async function om(t,e,r,n){let i=t;for(let o=0;o<r.length;o++){i=cn.join(i,r[o]);let a;try{a=await sl.lstat(i)}catch(d){if(H$(d))return{exists:!1,kind:"missing"};throw d}let s=cn.relative(t,i).replaceAll("\\","/");if(a.isSymbolicLink())throw new Error(`${n.label} crosses a symbolic link or junction at ${s}`);let c=o===r.length-1;if(!c&&!a.isDirectory())throw new Error(`${n.label} ancestor ${s} must be a real directory`);if(c&&(n.expected==="file"&&!a.isFile()||n.expected==="directory"&&!a.isDirectory()||n.expected==="any"&&!a.isFile()&&!a.isDirectory()))throw new Error(`${n.label} must be a real ${n.expected}`);let l=await sl.realpath(i);if(!cl(e,l))throw new Error(`${n.label} resolves outside the project root`);if(c)return{exists:!0,kind:a.isFile()?"file":a.isDirectory()?"directory":"missing"}}return{exists:!0,kind:"directory"}}async function $(t,e,r){let n=Yi(e,r.label),i=cn.resolve(t),o=await im(i,r.label),a=n.split("/"),s=cn.resolve(i,...a);if(!cl(i,s))throw new Error(`${r.label} must stay inside the project root`);let c=await om(i,o,a,r);return{projectRoot:i,target:s,relative:n,exists:c.exists,kind:c.kind}}async function am(t,e,r){return(await $(t,e,{...r,expected:"file"})).exists}async function O(t,e,r,n){let i=await $(t,e,{label:n.label,expected:"file"});if(!i.exists){let a=new Error(`${n.label} does not exist`);throw a.code="ENOENT",a}let o=await im(i.projectRoot,n.label);return Zi(i.target,r,{...n,verify:async(a,s)=>{if(!cl(o,s.realPath))throw new Error(`${n.label} resolves outside the project root`);await om(i.projectRoot,o,i.relative.split("/"),{label:n.label,expected:"file"})}})}var Q=A(()=>{"use strict";Aa();ge()});import{createHash as W$}from"crypto";function sm(t,e){return t.exists===e.exists&&t.sha256===e.sha256}function V$(t){let e=t?.code;return e==="ENOENT"||e==="ENOTDIR"}async function br(t,e={}){return(await eo(t,e)).document}async function ck(t){try{return(await O(t,Pt,en,{label:Pt})).bytes}catch(e){if(V$(e))return null;throw e}}function lk(t){return t?{exists:!0,sha256:W$("sha256").update(t).digest("hex")}:{exists:!1,sha256:null}}async function kr(t){return lk(await ck(t))}async function eo(t,e={}){let r=await ck(t);return{document:r?zt(r.toString("utf8"),e):null,identity:lk(r)}}async function Re(t){return(await br(t))?.config??null}var Pt,qe=A(()=>{"use strict";ge();Q();Pt=".comet/config.yaml"});import{promises as lm}from"node:fs";async function dm(t,e){let r;for(let n=0;n<=cm.length;n+=1)try{return await t()}catch(i){r=i;let o=i.code;if(n===cm.length||!q$.has(o??""))throw i;await new Promise(a=>setTimeout(a,cm[n]))}throw r}async function ll(t,e){await dm(()=>lm.rename(t,e),`rename ${e}`)}async function to(t){await dm(()=>lm.unlink(t),`unlink ${t}`)}async function dl(t,e){await dm(()=>lm.link(t,e),`link ${e}`)}var q$,cm,ul=A(()=>{"use strict";q$=new Set(["EPERM","EACCES","EBUSY","ENOTEMPTY"]),cm=[50,100,200]});import{randomUUID as z$}from"crypto";import{constants as G$,promises as ue}from"fs";import ve from"path";async function hl(t,e){try{return await dl(t,e),{linked:!0}}catch(r){let n=r.code;if(n!=="ENOTSUP"&&n!=="EOPNOTSUPP")throw r}return await ue.copyFile(t,e,G$.COPYFILE_EXCL),{linked:!1}}function zn(t,e){let r=ve.relative(t,e);return r===""||!ve.isAbsolute(r)&&r!==".."&&!r.startsWith(`..${ve.sep}`)}function pl(t){return{dev:t.dev,ino:t.ino,birthtime:t.birthtimeMs}}function U$(t,e){return Y(t,pl(e))}function fl(t,e){return Y(pl(t),pl(e))}function dk(t,e){return fl(t,e)&&t.birthtimeMs===e.birthtimeMs&&t.ctimeMs===e.ctimeMs&&t.mtimeMs===e.mtimeMs&&t.size===e.size}async function ml(t){let e=await ue.lstat(t);if(!e.isDirectory()||e.isSymbolicLink())throw new Error(`Contained atomic write parent must be a real directory: ${t}`);return{path:t,realPath:await ue.realpath(t),...pl(e)}}async function Sr(t){for(let e of t){let r=await ue.lstat(e.path);if(!r.isDirectory()||r.isSymbolicLink()||!U$(e,r)||await ue.realpath(e.path)!==e.realPath)throw new Error(`Contained atomic write parent changed before commit: ${e.path}`)}}async function J$(t,e,r){let[n,i]=await Promise.all([ue.lstat(t),ue.realpath(t),Sr(r)]);if(!n.isFile()||n.isSymbolicLink()||!fl(n,e)||!zn(r[0].realPath,i))throw new Error("Contained atomic write temporary file changed after close");return n}async function Y$(t,e){let r=ve.resolve(t),n=ve.resolve(e);if(!zn(r,n))throw new Error(`Contained atomic write parent is outside its managed root: ${e}`);let i=[await ml(r)],o=ve.relative(r,n).split(ve.sep).filter(Boolean),a=r;for(let s of o){await Sr(i),a=ve.join(a,s);try{await ue.mkdir(a)}catch(l){if(l.code!=="EEXIST")throw l}let c=await ml(a);if(!zn(i[0].realPath,c.realPath))throw new Error(`Contained atomic write parent resolves outside its managed root: ${a}`);i.push(c)}return await Sr(i),i}async function X$(t,e){let r=ve.resolve(t),n=ve.resolve(e);if(!zn(r,n))throw new Error(`Contained file parent is outside its managed root: ${e}`);let i=[await ml(r)],o=ve.relative(r,n).split(ve.sep).filter(Boolean),a=r;for(let s of o){a=ve.join(a,s);try{let c=await ml(a);if(!zn(i[0].realPath,c.realPath))throw new Error(`Contained file parent resolves outside its managed root: ${a}`);i.push(c)}catch(c){if(c.code==="ENOENT")return null;throw c}}return await Sr(i),i}async function uk(t){let e;try{e=await ue.open(t,"r"),await e.sync()}catch(r){let n=r.code;if(!["EACCES","EBADF","EINVAL","EISDIR","ENOTSUP","EPERM"].includes(n??""))throw r}finally{await e?.close()}}async function Q$(t,e,r){let n=ve.dirname(t),i=await Y$(r.containedRoot,n),o=ve.join(n,`.${ve.basename(t)}.${z$()}.tmp`),a,s,c;try{await r.beforeTemporaryOpen?.(),a=await ue.open(o,"wx"),s=await a.stat();let[l,d]=await Promise.all([ue.lstat(o),ue.realpath(o)]);if(await Sr(i),!l.isFile()||l.isSymbolicLink()||!fl(s,l)||!zn(i[0].realPath,d))throw new Error("Contained atomic write temporary file opened outside its managed parent");if(typeof e=="string"?await a.writeFile(e,"utf8"):await a.writeFile(e),await a.sync(),c=await a.stat(),!fl(s,c))throw new Error("Contained atomic write temporary file changed while writing");if(await a.close(),a=void 0,await r.afterTemporaryClose?.(),!c)throw new Error("Contained atomic write temporary file was not written");c=await J$(o,c,i),await r.beforeCommit?.(),await Sr(i);let u=await ue.lstat(o);if(!u.isFile()||u.isSymbolicLink()||!c||!dk(u,c))throw new Error("Contained atomic write temporary file changed before commit");r.exclusive?(await hl(o,t),await ue.unlink(o)):await ll(o,t),await uk(n)}catch(l){await a?.close();try{await Sr(i),await ue.rm(o,{force:!0})}catch{}throw l}}async function we(t,e,r){await Q$(t,e,r)}async function _a(t,e){let r=ve.dirname(t),n=await X$(e.containedRoot,r);if(!n)return!1;let i,o;try{i=await ue.lstat(t),o=await ue.realpath(t)}catch(c){if(c.code==="ENOENT")return!1;throw c}if(!i.isFile()||i.isSymbolicLink()||!zn(n[0].realPath,o))throw new Error("Contained file removal target must be a regular file inside its managed root");await e.beforeRemove?.(),await Sr(n);let[a,s]=await Promise.all([ue.lstat(t),ue.realpath(t)]);if(!a.isFile()||a.isSymbolicLink()||!dk(i,a)||s!==o)throw new Error("Contained file removal target changed before removal");return await to(t),await Sr(n),await uk(r),!0}var Ct=A(()=>{"use strict";ul();Ra()});import{createHash as Z$,randomUUID as e0}from"crypto";import{promises as ln}from"fs";function hk(t){return`.comet/config.yaml.${t}.next`}function gk(t){return`.comet/config.yaml.${t}.quarantine`}function t0(t){return`.comet/config-write-transaction.${t}.cleanup`}function um(t){return Z$("sha256").update(t).digest("hex")}function yk(t){let e=t?.code;return e==="ENOENT"||e==="ENOTDIR"}async function fm(t){let e;try{e=(await O(t,gl,pm,{label:"project config write transaction"})).bytes}catch(a){if(yk(a))return null;throw a}let r;try{r=JSON.parse(e.toString("utf8"))}catch{throw new Error("Invalid project config write transaction: expected JSON")}if(!r||typeof r!="object"||Array.isArray(r))throw new Error("Invalid project config write transaction: expected an object");let n=r,i=Object.keys(n).sort(),o=["candidate","expected_sha256","id","output_sha256","owner_pid","quarantine","schema"].sort();if(i.join(`
|
||
`)!==o.join(`
|
||
`))throw new Error("Invalid project config write transaction: unexpected fields");if(n.schema!==fk)throw new Error("Invalid project config write transaction: unsupported schema");if(typeof n.id!="string"||!mk.test(n.id))throw new Error("Invalid project config write transaction: invalid id");if(typeof n.owner_pid!="number"||!Number.isSafeInteger(n.owner_pid)||n.owner_pid<=0)throw new Error("Invalid project config write transaction: invalid owner pid");if(typeof n.expected_sha256!="string"||!yl.test(n.expected_sha256)||typeof n.output_sha256!="string"||!yl.test(n.output_sha256))throw new Error("Invalid project config write transaction: invalid config hash");if(n.candidate!==hk(n.id)||n.quarantine!==gk(n.id))throw new Error("Invalid project config write transaction: paths do not match its id");return{journal:n,source:e.toString("utf8")}}async function vl(t,e){try{let{bytes:r}=await O(t,e,pm,{label:e});return um(r)}catch(r){if(yk(r))return null;throw r}}async function pk(t,e,r,n){let i=await $(t,e,{label:e,expected:"file"});if(!i.exists)return!1;let o=`${e}.${e0()}.cleanup`,a=await $(t,o,{label:`${e} cleanup`,expected:"file"});if(a.exists)throw new Error(`Owned cleanup path already exists: ${o}`);if(await ln.rename(i.target,a.target),await n?.(e,o),await vl(t,o)!==r){try{let c=await $(t,e,{label:e,expected:"file"});c.exists||(await ln.link(a.target,c.target),await ln.unlink(a.target))}catch{}throw new Error(`Refusing to remove modified project config transaction file: ${e}`)}return await ln.unlink(a.target),!0}function r0(t){if(t===process.pid)return!0;try{return process.kill(t,0),!0}catch(e){return e.code!=="ESRCH"}}async function n0(t,e){let r=t0(e.journal.id),n=await $(t,r,{label:"project config write transaction cleanup",expected:"file"});if(n.exists)throw new Error("Project config write transaction cleanup path already exists");let i=await $(t,gl,{label:"project config write transaction",expected:"file"});if(!i.exists)throw new Error("Project config write transaction changed before cleanup");await ln.rename(i.target,n.target);let o=await O(t,r,pm,{label:"project config write transaction cleanup"});if(um(o.bytes)!==um(e.source)){try{let a=await $(t,gl,{label:"project config write transaction",expected:"file"});a.exists||await ln.link(n.target,a.target)}catch{}throw new Error("Project config write transaction changed before cleanup")}await ln.unlink(n.target)}async function vk(t,e,r,n){if(!mk.test(e))throw new Error("Invalid project config write transaction id");if(!yl.test(r)||!yl.test(n))throw new Error("Invalid project config write transaction hash");if(await fm(t))throw new Error("An unfinished project config write transaction exists; run comet doctor --repair");let i={schema:fk,id:e,owner_pid:process.pid,expected_sha256:r,output_sha256:n,candidate:hk(e),quarantine:gk(e)};return await we((await $(t,gl,{label:"project config write transaction",expected:"file"})).target,`${JSON.stringify(i,null,2)}
|
||
`,{containedRoot:t,exclusive:!0}),{candidate:i.candidate,quarantine:i.quarantine}}async function wl(t){let e=await fm(t);if(!e)return null;let{journal:r}=e,[n,i,o]=await Promise.all([kr(t),vl(t,r.candidate),vl(t,r.quarantine)]);if(i!==null&&i!==r.output_sha256)throw new Error("Project config write transaction candidate changed after creation");if(o!==null&&o!==r.expected_sha256)throw new Error("Project config write transaction quarantine changed after creation");let a;return!n.exists&&o===r.expected_sha256?a="config-quarantined":n.sha256===r.output_sha256?a="published-cleanup-pending":n.exists&&n.sha256!==r.expected_sha256&&n.sha256!==r.output_sha256?a="successor-preserved-cleanup-pending":a="prepared",{id:r.id,stage:a,candidate:r.candidate,quarantine:r.quarantine,allowedRepair:"rollback-or-cleanup"}}async function bl(t,e={}){let r=await fm(t);if(!r)return!1;let{journal:n}=r;if(e.ownerId!==n.id&&r0(n.owner_pid))throw new Error(`Project config write transaction ${n.id} is still active in process ${n.owner_pid}`);if(!await wl(t))return!1;let o=await kr(t),a=await vl(t,n.quarantine);if(!o.exists){if(a!==n.expected_sha256)throw new Error("Cannot recover project config write transaction: the config and owned quarantine are missing");let s=await $(t,Pt,{label:Pt,expected:"file"}),c=await $(t,n.quarantine,{label:"project config write transaction quarantine",expected:"file"});try{await ln.link(c.target,s.target)}catch(l){if(l.code!=="EEXIST")throw l}if(o=await kr(t),!o.exists)throw new Error("Cannot recover project config write transaction: config publish failed")}return await pk(t,n.candidate,n.output_sha256,e.testHooks?.afterOwnedFileQuarantine),o.exists&&await pk(t,n.quarantine,n.expected_sha256,e.testHooks?.afterOwnedFileQuarantine),await n0(t,r),!0}var fk,gl,pm,mk,yl,mm=A(()=>{"use strict";Ct();qe();Q();fk="comet.project-config-write.v1",gl=".comet/config-write-transaction.json",pm=16*1024,mk=/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/,yl=/^[0-9a-f]{64}$/});import{createHash as wk,randomUUID as i0}from"crypto";import{promises as bk}from"fs";import hm from"path";async function kl(t,e){if(!e)return;let r=await kr(t);if(!sm(r,e))throw new Error("Project config changed before commit; rerun the operation")}async function Sl(t,e,r={}){zt(e,{allowPartialProject:r.allowPartialProject??!1});let n=hm.resolve(t);if(await wl(n))throw new Error("An unfinished project config write transaction exists; run comet doctor --repair");let i=r.expectedIdentity??await kr(n);await kl(n,i);let o=await $(n,Pt,{label:Pt,expected:"file"}),a=i0(),s=wk("sha256").update(e).digest("hex"),c=i.exists&&i.sha256?await vk(n,a,i.sha256,s):null,l=c!==null,d=c?.candidate??`.comet/config.yaml.${a}.next`,u=hm.join(n,...d.split("/")),p=c?.quarantine??null;try{if(await we(u,e,{containedRoot:n,exclusive:!0}),await r.beforeCommit?.(),await kl(n,i),await $(n,d,{label:"project config candidate",expected:"file"}),i.exists){if(!p)throw new Error("Project config write transaction was not created");let m=hm.join(n,...p.split("/"));if(await $(n,Pt,{label:Pt,expected:"file"}),(await $(n,p,{label:"project config quarantine",expected:"file"})).exists)throw new Error("Project config quarantine already exists");await bk.rename(o.target,m);let{bytes:h}=await O(n,p,en,{label:"project config quarantine"});if(wk("sha256").update(h).digest("hex")!==i.sha256)throw new Error("Project config changed before final publish; successor was preserved")}else if(o.exists)throw new Error("Project config changed before final publish; successor was preserved");await r.beforePublish?.(),await $(n,d,{label:"project config candidate",expected:"file"});try{await hl(u,o.target)}catch(m){throw new Error("Project config final publish failed; successor was preserved",{cause:m})}let f=await kr(n);if(!f.exists||f.sha256!==s)throw new Error("Project config changed during final publish; successor was preserved");l&&(await bl(n,{ownerId:a}),l=!1)}catch(f){if(l)try{await bl(n,{ownerId:a})&&(l=!1)}catch{}throw f}finally{l||await o0(n,d).catch(()=>!1)}}async function o0(t,e){let r=await $(t,e,{label:e,expected:"file"});return r.exists?(await bk.unlink(r.target),!0):!1}async function kk(t,e,r,n={}){await Sl(t,Ji(e,r),n)}async function gm(t,e,r={}){let n=await eo(t,{allowPartialProject:!0,allowMissingNativeFields:!0}),i=xa(n.document?.value??{},e),o=e.native?.language==="zh-CN"||e.classic?.language==="zh-CN"?"zh-CN":"en";await kk(t,i,o,{...r,expectedIdentity:r.expectedIdentity??n.identity})}var ro=A(()=>{"use strict";Ct();ge();qe();Q();mm()});import Ae from"path";function _k(t,e){let r=Ae.relative(t,e);return r===""||!Ae.isAbsolute(r)&&r!==".."&&!r.startsWith(`..${Ae.sep}`)}function w0(t,e){let r=Ae.isAbsolute(e)?Ae.resolve(e):Ae.resolve(t,e),n=Ae.relative(Ae.resolve(t),r);return n===""||Ae.isAbsolute(n)||n===".."||n.startsWith(`..${Ae.sep}`)?null:n.replaceAll("\\","/")}function jk(t){return process.platform==="win32"?t.toLowerCase():t}async function mn(t,e,r=[]){let n=Ae.isAbsolute(e)?Ae.resolve(e):Ae.resolve(t,e),i=Ae.resolve(t);if(!_k(i,n)||r.some(c=>_k(Ae.resolve(c),n)))return null;let o=w0(t,e);if(!o)return null;let s=(await v0(t)).allow_paths.find(c=>{let l=jk(o),d=jk(c);return l===d||l.startsWith(`${d}/`)});return s?`${o} (configured Hook allow path: ${s})`:null}var v0,Oa=A(()=>{"use strict";yr();qe();v0=ye("hookWritePolicy",async t=>(await Re(t))?.hook??{allow_paths:[]})});import{AsyncLocalStorage as b0}from"node:async_hooks";import{performance as Cl}from"node:perf_hooks";function bm(t=0){k0+=1,S0+=t;let e=N0.getStore();e&&(e.gitCommands+=1,e.gitDurationMs+=t)}function Nr(t){let e=Cl.now();try{return t()}finally{bm(Cl.now()-e)}}async function Ik(t){let e=Cl.now();try{return await t()}finally{bm(Cl.now()-e)}}var k0,S0,N0,no=A(()=>{"use strict";k0=0,S0=0,N0=new b0});import{spawn as km}from"node:child_process";import{existsSync as Tk}from"node:fs";import Jn from"node:path";function Sm(t,e){let r=e.toLowerCase();return Object.entries(t).find(([n,i])=>n.toLowerCase()===r&&i!==void 0)?.[1]}function R0(t){let e=(Sm(t,"PATHEXT")??".COM;.EXE;.BAT;.CMD").split(";").map(r=>r.trim().toLowerCase()).filter(Boolean);return[...new Set([...e,".ps1"])]}function A0(t,e,r){let i=Jn.win32.isAbsolute(t)||/[\\/]/u.test(t)?[""]:(Sm(e,"PATH")??"").split(Jn.delimiter).map(s=>s.trim().replace(/^"(.*)"$/u,"$1")).filter(Boolean),a=Jn.win32.extname(t)?[t]:R0(e).map(s=>`${t}${s}`);return i.flatMap(s=>a.map(c=>s?Jn.join(s,c):Jn.resolve(r,c)))}function io(t,e,r){return A0(t,e,r).find(n=>Tk(n))??t}function _0(t){let e=Sm(t,"SystemRoot");if(e){let r=Jn.join(e,"System32","WindowsPowerShell","v1.0","powershell.exe");if(Tk(r))return r}return"powershell.exe"}function Ma(t){if(t.some(e=>P0.test(e)))throw new Error("Windows batch check arguments must not contain shell syntax")}function j0(t,e,r){let n=Buffer.from(JSON.stringify({command:t,arguments:[...e]}),"utf8").toString("base64"),i=Buffer.from(C0,"utf16le").toString("base64");return km(_0(r.env),["-NoLogo","-NoProfile","-NonInteractive","-InputFormat","None","-OutputFormat","Text","-ExecutionPolicy","Bypass","-EncodedCommand",i],{cwd:r.cwd,env:{...r.env,COMET_COMMAND_PAYLOAD:n},shell:!1,windowsHide:!0,detached:!1,stdio:["ignore","pipe","pipe"]})}function Nm(t,e,r){let n=r.env??process.env;if(process.platform!=="win32")return km(t,[...e],{cwd:r.cwd,env:n,shell:!1,windowsHide:!0,detached:!0,stdio:["ignore","pipe","pipe"]});let i=io(t,n,r.cwd),o=Jn.win32.extname(i).toLowerCase();return x0.has(o)&&Ma(e),E0.has(o)?j0(i,e,{cwd:r.cwd,env:n}):km(i,[...e],{cwd:r.cwd,env:n,shell:!1,windowsHide:!0,detached:!1,stdio:["ignore","pipe","pipe"]})}var E0,x0,P0,C0,La=A(()=>{"use strict";E0=new Set([".bat",".cmd",".ps1"]),x0=new Set([".bat",".cmd"]),P0=/[&|<>()^%"!\r\n]/u,C0=["$ProgressPreference = 'SilentlyContinue'","$encoded = $env:COMET_COMMAND_PAYLOAD","Remove-Item Env:COMET_COMMAND_PAYLOAD -ErrorAction SilentlyContinue","$json = [Text.Encoding]::UTF8.GetString([Convert]::FromBase64String($encoded))","$payload = ConvertFrom-Json $json","$commandArgs = @($payload.arguments)","& $payload.command @commandArgs","if ($null -eq $LASTEXITCODE) { if ($?) { exit 0 } else { exit 1 } }","exit $LASTEXITCODE"].join("; ")});import{execFile as I0,execFileSync as T0}from"node:child_process";import Da from"node:path";async function hn(t,e,r={}){let n=r.timeoutMs??$k,i=r.maxBufferBytes??Ok;if(!Number.isSafeInteger(n)||n<1||!Number.isSafeInteger(i)||i<1)throw new Error("External command limits must be positive integers");let o=Da.resolve(r.cwd??process.cwd()),a=r.env??process.env,s=process.platform==="win32"?io(t,a,o):t,c=process.platform==="win32"&&/\.(?:bat|cmd)$/iu.test(s);c&&Ma(e);let l=()=>new Promise((d,u)=>{let p=!1,f=I0(s,[...e],{cwd:o,env:a,encoding:"utf8",maxBuffer:i,windowsHide:!0,shell:c},(w,y,v)=>{p||(p=!0,clearTimeout(h),r.signal?.removeEventListener("abort",g),w?u(new Er(t,e,v.trim(),{cause:w,timedOut:Mk(w)})):d(y))}),m=w=>{p||(p=!0,clearTimeout(h),r.signal?.removeEventListener("abort",g),f.kill("SIGKILL"),f.stdin?.destroy(),f.stdout?.destroy(),f.stderr?.destroy(),f.unref(),u(new Er(t,e,"",{timedOut:w})))},g=()=>m(!1),h=setTimeout(()=>m(!0),n);r.signal?.addEventListener("abort",g,{once:!0}),r.signal?.aborted&&g(),f.stdin?.end(r.input)});return/^(?:git|git\.exe)$/iu.test(Da.win32.basename(t))?Ik(l):l()}function Mk(t){return t instanceof Error&&(t.code==="ETIMEDOUT"||t.killed===!0&&t.signal==="SIGTERM")}function Lk(t,e,r={}){let n=r.timeoutMs??$k,i=r.maxBufferBytes??Ok;if(!Number.isSafeInteger(n)||n<1)throw new Error("External command timeout must be a positive integer");if(!Number.isSafeInteger(i)||i<1)throw new Error("External command max buffer must be a positive integer");let o=Da.resolve(r.cwd??process.cwd()),a=r.env??process.env,s=process.platform==="win32"?io(t,a,o):t,c=Da.win32.extname(s).toLowerCase(),l=c===".bat"||c===".cmd";process.platform==="win32"&&l&&Ma(e);try{let d=()=>T0(s,[...e],{cwd:o,env:a,...r.input!==void 0?{input:r.input}:{},encoding:"utf8",stdio:[r.input===void 0?"ignore":"pipe","pipe","pipe"],timeout:n,maxBuffer:i,windowsHide:!0,shell:process.platform==="win32"&&l});return/^(?:git|git\.exe)$/iu.test(Da.win32.basename(t))?Nr(d):d()}catch(d){let u=typeof d.stderr=="string"?d.stderr.trim():Buffer.isBuffer(d.stderr)?d.stderr.toString("utf8").trim():"";throw new Er(t,e,u,{cause:d,timedOut:Mk(d)})}}var $k,Ok,Er,Ba=A(()=>{"use strict";no();La();$k=6e4,Ok=8*1024*1024;Er=class extends Error{constructor(r,n,i,o){super(`${r} ${n.join(" ")} failed${i?`: ${i}`:""}`,o);this.command=r;this.args=n;this.stderr=i;this.name="ExternalCommandError",this.timedOut=o?.timedOut===!0}command;args;stderr;timedOut}});import{createHash as xm,randomUUID as $0}from"node:crypto";import{promises as tt}from"node:fs";import O0 from"node:os";import Ge from"node:path";async function Em(t,e){let r=await tt.lstat(t,{bigint:!0});if(!r.isFile()||r.isSymbolicLink()||r.size>BigInt(e))throw new Error("Invalid process probe cache");let n=await tt.readFile(t),i=await tt.lstat(t,{bigint:!0});if(r.ino!==i.ino||r.ctimeNs!==i.ctimeNs||r.size!==i.size)throw new Error("Process probe cache changed");return n}async function Fk(t){try{let e=JSON.parse((await Em(Ge.join(t,"probe.json"),4096)).toString("utf8"));if(!/^probe-[a-f0-9-]+\.exe$/u.test(e.file??""))return null;let r=Ge.join(t,e.file),n=await Em(r,65536);return xm("sha256").update(n).digest("hex")===e.hash?r:null}catch{return null}}async function D0(t,e){let r,n=$0(),i=Ge.join(t,`probe-${n}.cs`),o=Ge.join(t,`probe-${n}.exe`),a=Ge.join(t,`probe-${n}.json`);try{if(await tt.mkdir(t,{recursive:!0,mode:448}),(await tt.lstat(t)).isSymbolicLink())return null;r=await tt.open(Ge.join(t,"prepare.lock"),"wx",384);let s=await Fk(t);if(s)return s;await tt.writeFile(i,Bk,{flag:"wx",mode:384});let c;for(let d of["Framework64","Framework"]){let u=Ge.join(e,"Microsoft.NET",d,"v4.0.30319","csc.exe");try{await tt.access(u),c=u;break}catch{}}if(!c)return null;await hn(c,["/nologo","/target:exe","/platform:anycpu",`/out:${o}`,i],{timeoutMs:1500,maxBufferBytes:4096});let l=xm("sha256").update(await Em(o,65536)).digest("hex");return await tt.writeFile(a,JSON.stringify({file:Ge.basename(o),hash:l}),{flag:"wx",mode:384}),await tt.rename(a,Ge.join(t,"probe.json")),o}catch{return null}finally{await tt.unlink(i).catch(()=>{}),await tt.unlink(a).catch(()=>{}),r&&(await r.close().catch(()=>{}),await tt.unlink(Ge.join(t,"prepare.lock")).catch(()=>{}))}}async function Dk(t,e,r){try{let n=await hn(Ge.join(e,"System32","wbem","WMIC.exe"),["process","where",`processid=${t}`,"get","creationdate","/value"],{timeoutMs:300,maxBufferBytes:4096,signal:r}),i=/^CreationDate=(\S+)/mu.exec(n);if(i)return`win32-wmic:${i[1]}`}catch{}if(r.aborted)return null;try{let i=(await hn(Ge.join(e,"System32","WindowsPowerShell","v1.0","powershell.exe"),["-NoLogo","-NoProfile","-NonInteractive","-Command",`(Get-Process -Id ${t} -ErrorAction Stop).StartTime.ToUniversalTime().Ticks.ToString()`],{timeoutMs:1e3,maxBufferBytes:4096,signal:r})).trim();return/^\d+$/u.test(i)?`win32-ps:${i}`:null}catch{return null}}function B0(t,e){let r=Rl.get(t);if(r&&performance.now()<r.retryAfter)return r.promise;let n={promise:D0(t,e),retryAfter:1/0};return Rl.set(t,n),n.promise.then(i=>{Rl.get(t)===n&&(i?Rl.delete(t):n.retryAfter=performance.now()+L0)}),n.promise}async function Kk(t,e={}){if(!Number.isSafeInteger(t)||t<=0)return null;let r=e.systemRoot??process.env.SystemRoot??"C:\\Windows",n=Ge.join(e.cacheRoot??Ge.join(O0.tmpdir(),"comet-process-identity"),M0),i=async l=>{if(!l)return null;try{let u=(await hn(l,[String(t)],{timeoutMs:1e3,maxBufferBytes:4096})).trim();return/^\d+$/u.test(u)?`win32-ps:${u}`:null}catch{return null}},o=await Fk(n);if(o){let l=await i(o);return l||Dk(t,r,new AbortController().signal)}let a=B0(n,r),s=new AbortController,c=l=>{if(!l)throw new Error("Probe unavailable");return l};try{return await Promise.any([a.then(i).then(c),Dk(t,r,s.signal).then(c)])}catch{return null}finally{s.abort()}}var Bk,M0,L0,Rl,Hk=A(()=>{"use strict";Ba();Bk=`using System;
|
||
using System.Runtime.InteropServices;
|
||
class CometProcessIdentity {
|
||
[DllImport("kernel32.dll")] static extern IntPtr OpenProcess(uint access, bool inherit, int pid);
|
||
[DllImport("kernel32.dll")] static extern bool GetProcessTimes(IntPtr process, out long creation, out long exit, out long kernel, out long user);
|
||
[DllImport("kernel32.dll")] static extern bool CloseHandle(IntPtr handle);
|
||
static int Main(string[] args) {
|
||
int pid; if(args.Length != 1 || !int.TryParse(args[0], out pid) || pid <= 0) return 1;
|
||
IntPtr handle=OpenProcess(0x1000, false, pid); if(handle == IntPtr.Zero) return 1;
|
||
try { long creation, exit, kernel, user; if(!GetProcessTimes(handle,out creation,out exit,out kernel,out user)) return 1;
|
||
Console.WriteLine(DateTime.FromFileTimeUtc(creation).Ticks.ToString(System.Globalization.CultureInfo.InvariantCulture)); return 0;
|
||
} finally { CloseHandle(handle); }
|
||
}
|
||
}`,M0=xm("sha256").update(Bk).digest("hex"),L0=1e4,Rl=new Map});import{promises as Wk}from"node:fs";function K0(t){let e=Cm.get(t);if(e){if(Date.now()-e.at>F0){Cm.delete(t);return}return e.value}}async function Yn(t){if(t===process.pid&&Pm!==null)return Pm;let e=K0(t);if(e!==void 0)return e;let r=Al.get(t);r||(r=H0(t),Al.set(t,r));let n=await r;return Al.get(t)===r&&Al.delete(t),t===process.pid&&n!==null&&(Pm=n),n===null&&Cm.set(t,{value:null,at:Date.now()}),n}async function H0(t){if(!Number.isSafeInteger(t)||t<=0)return null;try{if(process.platform==="linux"){let[e,r]=await Promise.all([Wk.readFile(`/proc/${t}/stat`,"utf8"),Wk.readFile("/proc/sys/kernel/random/boot_id","utf8")]),n=e.slice(e.lastIndexOf(")")+2).trim().split(/\s+/u)[19];return/^\d+$/u.test(n??"")?`linux:${r.trim()}:${n}`:null}if(process.platform==="win32")return await Kk(t);if(process.platform==="darwin"){let e=(await hn("/bin/ps",["-p",String(t),"-o","lstart="],{timeoutMs:5e3,maxBufferBytes:4096,env:{...process.env,LC_ALL:"C",TZ:"UTC0"}})).trim();return e?`darwin:${e}`:null}}catch{}return null}function _l(t){let e=t.indexOf(":");return e===-1?"":t.slice(0,e)}async function Fa(t,e){if(!Number.isSafeInteger(t)||t<=0)return"alive";try{process.kill(t,0)}catch(n){if(n.code==="ESRCH")return"dead"}if(!e)return"unknown";let r=await Yn(t);return r===e?"alive":r===null||_l(r)!==_l(e)&&Vk.has(_l(r))&&Vk.has(_l(e))?"unknown":"dead"}var Pm,F0,Cm,Al,Vk,Ka=A(()=>{"use strict";Ba();Hk();Pm=null,F0=1e4,Cm=new Map,Al=new Map;Vk=new Set(["win32-wmic","win32-ps"])});var Il=A(()=>{"use strict"});var Uk=A(()=>{"use strict"});var _m=A(()=>{"use strict";Il()});var Jk=A(()=>{"use strict";Il();_m()});function eO(t){let e=t?.code;return e==="ENOENT"||e==="ENOTDIR"}function tO(t){let e=(0,Yk.parseDocument)(t,{uniqueKeys:!0});if(e.errors.length>0)throw new Error(`Invalid global Comet config: ${e.errors[0].message}`);let r=e.toJS();if(r==null)return{};if(typeof r!="object"||Array.isArray(r))throw new Error("Invalid global Comet config: root must be a mapping");return r}function Qk(t){if(t.native?.pending_root_move)throw new Error("Global Comet config cannot contain native.pending_root_move");let e=t.native?(({pending_root_move:r,...n})=>n)(t.native):void 0;return{...t,schema:"comet.global.v1",...e?{native:e}:{}}}function rO(t){let e=zt(JSON.stringify({...t,schema:"comet.project.v1"})).config;if(!e)throw new Error("Invalid global Comet config: workflow template is incomplete");return Qk(e)}function nO(t){let e=zt(t,{allowPartialProject:!0,allowMissingNativeFields:!0});if(!e.native&&!e.classic)return null;let r=e.native?"native":"classic",n=e.native?.language??e.classic?.language??"en",i=ol(e.native?.artifact_root??"docs",n);return{schema:"comet.global.v1",default_workflow:r,workflows:[r],ambient_resume:e.ambient_resume,...e.native?{native:{...i.native,...e.native}}:{},...e.classic?{classic:e.classic}:{}}}function Zk(t){let e=tO(t);if(Object.keys(e).length===0)return null;if(e.schema===void 0)return nO(t);if(e.schema!=="comet.global.v1")throw new Error("Unsupported Comet global schema");return rO(e)}async function jm(t){try{let e=await O(t,Xk,en,{label:"global Comet config"});return Zk(e.bytes.toString("utf8"))}catch(e){if(eO(e))return null;throw e}}var Yk,Xk,Im=A(()=>{"use strict";Yk=Ce(Ne(),1);Ct();ge();Q();Xk=".comet/config.yaml"});var sY,eS=A(()=>{"use strict";Ct();Q();sY=4*1024*1024});import iO from"node:path";function $l(t){return iO.join(t,".comet","current-change.json")}function oO(t){return!!t&&typeof t=="object"&&!Array.isArray(t)}function tS(t){return t===null||typeof t=="string"}function aO(t){let e;try{e=JSON.parse(t)}catch(r){throw new Error(`current change selection contains invalid JSON: ${r instanceof Error?r.message:String(r)}`,{cause:r})}if(!oO(e))throw new Error("current change selection must be a JSON object");if(e.version===1){if(typeof e.change!="string")throw new Error("legacy current change selection change must be a string");if(e.branch!==void 0&&!tS(e.branch))throw new Error("legacy current change selection branch must be a string or null");return{selection:{schema:Tl,workflow:"classic",change:e.change,branch:e.branch??null},legacy:!0}}if(e.schema!==Tl)throw new Error(`current change selection schema must be ${Tl}`);if(e.workflow!=="native"&&e.workflow!=="classic")throw new Error("current change selection workflow must be native or classic");if(typeof e.change!="string")throw new Error("current change selection change must be a string");if(!tS(e.branch))throw new Error("current change selection branch must be a string or null");if(e.workflow==="native"&&e.branch!==null)throw new Error("Native current change selection branch must be null");return{selection:e,legacy:!1}}async function Xn(t){let e;try{let n=$l(t),{bytes:i}=await Zi(n,rS,{label:"current change selection"});e=i.toString("utf8")}catch(n){if(n.code==="ENOENT")return{status:"missing"};throw new Error(`cannot read current change selection: ${n instanceof Error?n.message:String(n)}`,{cause:n})}return{status:"selected",...aO(e)}}var Tl,rS,Wa=A(()=>{"use strict";Aa();Tl="comet.selection.v2",rS=16*1024});var aS=A(()=>{"use strict";Il();Ct();Uk();Jk();ge();Im();Q();qe();ro();eS();Oa();Wa();mm();_m()});import{TextDecoder as sO}from"util";function sS(t){return{dev:t.dev,ino:t.ino,birthtime:t.birthtimeMs}}function cO(t,e){try{return new sO("utf-8",{fatal:!0}).decode(t.bytes)}catch(r){throw new Error(`${e} is not valid UTF-8`,{cause:r})}}async function Tm(t,e,r,n,i={}){try{let o=await O(t,e,r,{label:n,hooks:i.hooks});return{result:o,text:cO(o,n)}}catch(o){let a=o.code;if(a==="ENOENT"||a==="ENOTDIR")return null;throw o}}async function cS(t,e,r,n,i={}){return(await Tm(t,e,r,n,i))?.text??null}async function lS(t,e,r,n,i,o={}){if(Buffer.byteLength(r,"utf8")>n)throw new Error(`${i} exceeds ${n} bytes`);let a=await Tm(t,e,n,i),s=await $(t,e,{label:i,expected:"file"});await we(s.target,r,{containedRoot:s.projectRoot,beforeCommit:async()=>{await o.beforeCommit?.();let c=await Tm(t,e,n,i);if(!(!a&&!c)){if(!a||!c)throw new Error(`${i} changed before commit`);if(a.result.realPath!==c.result.realPath||!Y(sS(a.result.stat),sS(c.result.stat))||a.text!==c.text)throw new Error(`${i} changed before commit`)}}})}async function dS(t,e,r,n={}){let i=await $(t,e,{label:r,expected:"file"});return i.exists?_a(i.target,{containedRoot:i.projectRoot,beforeRemove:n.beforeRemove}):!1}var uS=A(()=>{"use strict";aS();Ra()});var hS={};PA(hS,{RUN_STATE_FILE:()=>ao,applyRunStateToDocument:()=>fS,readRunState:()=>Ol,removeRunState:()=>$m,runStateFromDocument:()=>Qn,writeRunState:()=>Ml});import lO from"path";function qa(t,e){let r=t[e];if(typeof r!="string"||r.length===0)throw new Error(`Invalid Run state: ${e} must be a non-empty string`);return r}function Va(t,e){let r=qa(t,e);if(lO.isAbsolute(r)||/^(?:[A-Za-z]:|[\\/]|~)/u.test(r)||r.split(/[\\/]/u).includes(".."))throw new Error(`Invalid Run state: ${e} must stay inside the change directory`);return r}function dO(t){let e=t.run_retries??"{}",r;try{r=typeof e=="string"?JSON.parse(e):e}catch(n){throw new Error("Invalid Run state: run_retries must be a JSON object",{cause:n})}if(!r||typeof r!="object"||Array.isArray(r))throw new Error("Invalid Run state: run_retries must be a JSON object");for(let n of Object.values(r))if(!Number.isInteger(n)||Number(n)<0)throw new Error("Invalid Run state: retry counts must be non-negative integers");return r}function Qn(t){if(!t.run_id)return null;let e=qa(t,"run_id"),r=qa(t,"skill"),n=qa(t,"skill_version"),i=qa(t,"skill_hash"),o=Va(t,"pending_ref"),a=Va(t,"trajectory_ref"),s=Va(t,"context_ref"),c=Va(t,"artifacts_ref"),l=Va(t,"checkpoint_ref"),d=Number(t.iteration);if(!Number.isInteger(d)||d<0)throw new Error("Invalid Run state: iteration must be a non-negative integer");if(t.orchestration!=="deterministic"&&t.orchestration!=="adaptive")throw new Error("Invalid Run state: orchestration must be deterministic or adaptive");if(t.run_status!=="running"&&t.run_status!=="waiting"&&t.run_status!=="completed"&&t.run_status!=="failed")throw new Error("Invalid Run state: run_status is invalid");return{runId:e,skill:r,skillVersion:n,skillHash:i,orchestration:t.orchestration,currentStep:pS(t,"current_step"),iteration:d,pending:pS(t,"pending"),pendingRef:o,trajectoryRef:a,contextRef:s,artifactsRef:c,checkpointRef:l,status:t.run_status,retries:dO(t)}}function fS(t,e){e?t.run_id=e.runId:delete t.run_id}function uO(t){return{runId:t.runId,skill:t.skill,skillVersion:t.skillVersion,skillHash:t.skillHash,orchestration:t.orchestration,currentStep:t.currentStep,iteration:t.iteration,pending:t.pending,pendingRef:t.pendingRef,trajectoryRef:t.trajectoryRef,contextRef:t.contextRef,artifactsRef:t.artifactsRef,checkpointRef:t.checkpointRef,status:t.status,retries:t.retries}}function pO(t){let e={run_id:t.runId,skill:t.skill,skill_version:t.skillVersion,skill_hash:t.skillHash,orchestration:t.orchestration,current_step:t.currentStep,iteration:t.iteration,pending:t.pending,pending_ref:t.pendingRef,trajectory_ref:t.trajectoryRef,context_ref:t.contextRef,artifacts_ref:t.artifactsRef,checkpoint_ref:t.checkpointRef,run_status:t.status,run_retries:JSON.stringify(t.retries)};return Qn(e)}async function Ol(t,e={}){let r=await cS(t,ao,mS,"Run state",e);if(r===null)return null;let n=JSON.parse(r);return pO(n)}async function Ml(t,e,r={}){await lS(t,ao,JSON.stringify(uO(e),null,2),mS,"Run state",r)}async function $m(t,e={}){await dS(t,ao,"Run state",e)}var pS,ao,mS,za=A(()=>{"use strict";uS();pS=(t,e)=>{let r=t[e];return r==null?null:String(r)};ao=".comet/run-state.json",mS=Number.MAX_SAFE_INTEGER});import{execFileSync as oM}from"node:child_process";function cM(t,e){try{return Nr(()=>oM("git",["-C",t,...e],{encoding:"utf8",stdio:["ignore","pipe","pipe"],timeout:aM,maxBuffer:sM,windowsHide:!0}))}catch(r){let n=typeof r.stderr=="string"?r.stderr.trim():Buffer.isBuffer(r.stderr)?r.stderr.toString("utf8").trim():"";throw new Um(t,e,n)}}function At(t,e){return cM(t,e).trim()}var aM,sM,Um,lt=A(()=>{"use strict";no();aM=3e4,sM=8*1024*1024,Um=class extends Error{constructor(r,n,i){super(`git ${n.join(" ")} failed${i?`: ${i}`:""}`);this.cwd=r;this.args=n;this.stderr=i;this.name="GitCommandError"}cwd;args;stderr}});function YM(t){return t.toLowerCase().startsWith(".env")}function Ul(t){let r=t.replaceAll("\\","/").split("/").filter(Boolean).map(n=>n.toLowerCase());return r.some(n=>YM(n))?"environment-file":r.some(n=>JM.has(n))?"credential-config":r.includes(".git")?"git-metadata":r.some(n=>UM.has(n))?"dependency-or-cache":r.join("/")===".comet/config.yaml"?"comet-config":r.join("/")===".comet/current-change.json"?"comet-selection":null}var UM,JM,Jl=A(()=>{"use strict";UM=new Set([".cache",".git",".gradle",".gnupg",".mypy_cache",".next",".npm",".pnpm-store",".pytest_cache",".ssh",".turbo",".venv",".yarn","__pycache__","node_modules","venv"]),JM=new Set([".git-credentials",".netrc",".npmrc",".pypirc","auth.json","credentials.json"])});var vn=A(()=>{"use strict";Ra()});import{createHash as XM}from"node:crypto";import{promises as jt}from"node:fs";import dt from"node:path";import{TextDecoder as QM}from"node:util";function th(t,e){let r=dt.relative(t,e);return r===""||!dt.isAbsolute(r)&&r!==".."&&!r.startsWith(`..${dt.sep}`)}function ZM(t){let e=dt.posix.normalize(t);if(t.length===0||t!==t.trim()||t.includes("\\")||Array.from(t).some(i=>{let o=i.codePointAt(0)??0;return o<=31||o===127})||dt.posix.isAbsolute(e)||/^(?:[A-Za-z]:|~)/u.test(t)||t.split("/").includes("..")||e!==t||e==="."||t.endsWith("/"))throw new Error(`Native artifact ref must be normalized and relative: ${t}`);let r=t.toLowerCase(),n=Ul(t);if(n||r==="runtime"||r.startsWith("runtime/"))throw new Error(`Native artifact ref is excluded as sensitive (${n??"native-runtime"}): ${t}`);return t}function eL(t){if(!Number.isSafeInteger(t)||t<1)throw new Error("Native artifact byte limit must be a positive integer");return t}function tL(t,e){return Y({...t,birthtime:t.birthtimeMs},{...e,birthtime:e.birthtimeMs})}function Yl(t,e){let r={...t,birthtime:t.birthtimeMs},n={...e,birthtime:e.birthtimeMs};return vr(r,n)?Y(r,n):Y(r,n)&&t.birthtimeMs===e.birthtimeMs&&t.ctimeMs===e.ctimeMs&&t.size===e.size}async function uN(t){let e=await jt.lstat(t);if(!e.isDirectory()||e.isSymbolicLink())throw new Error(`Native artifact parent must be a real directory: ${t}`);return{path:t,realPath:await jt.realpath(t),dev:e.dev,ino:e.ino,birthtimeMs:e.birthtimeMs}}async function rL(t,e){let r=dt.resolve(t),n=dt.resolve(e);if(!th(r,n))throw new Error("Native artifact path is outside its root");let i=[await uN(r)],o=r;for(let a of dt.relative(r,n).split(dt.sep).filter(Boolean)){o=dt.join(o,a);let s=await uN(o);if(!th(i[0].realPath,s.realPath))throw new Error(`Native artifact parent resolves outside its root: ${o}`);i.push(s)}return i}async function pN(t){for(let e of t){let r=await jt.lstat(e.path);if(!r.isDirectory()||r.isSymbolicLink()||!tL(e,r)||await jt.realpath(e.path)!==e.realPath)throw new Error(`Native artifact parent changed while reading: ${e.path}`)}}async function ne(t){let e=ZM(t.ref),r=t.maxBytes===null?null:eL(t.maxBytes??rh),n=dt.resolve(t.root,...e.split("/")),i=await rL(t.root,dt.dirname(n));await t.hooks?.afterParentChainCaptured?.();let o=await jt.lstat(n);if(!o.isFile()||o.isSymbolicLink())throw new Error(`Native artifact must be a regular file: ${e}`);if(r!==null&&o.size>r)throw new Error(`Native artifact exceeds ${r} bytes: ${e}`);let a=await jt.realpath(n);if(!th(i[0].realPath,a))throw new Error(`Native artifact resolves outside its root: ${e}`);let s=await jt.open(n,"r");try{let[c,l,d]=await Promise.all([s.stat(),jt.lstat(n),jt.realpath(n)]);if(await pN(i),!c.isFile()||!l.isFile()||l.isSymbolicLink()||d!==a||!Yl(o,c)||!Yl(c,l))throw new Error(`Native artifact changed while opening: ${e}`);await t.hooks?.afterOpen?.();let u=[],p=0,f=Buffer.allocUnsafe(r===null?64*1024:Math.min(64*1024,r+1));for(;;){let v=r===null?f.length:r+1-p,b=await s.read(f,0,Math.min(f.length,v),null);if(b.bytesRead===0)break;if(p+=b.bytesRead,r!==null&&p>r)throw new Error(`Native artifact exceeds ${r} bytes: ${e}`);u.push(Buffer.from(f.subarray(0,b.bytesRead)))}await t.hooks?.beforeFinalCheck?.();let[m,g,h]=await Promise.all([s.stat(),jt.lstat(n),jt.realpath(n)]);if(await pN(i),!g.isFile()||g.isSymbolicLink()||h!==a||!Yl(c,m)||!Yl(c,g))throw new Error(`Native artifact changed while reading: ${e}`);let w=Buffer.concat(u,p),y;try{y=new QM("utf-8",{fatal:!0}).decode(w)}catch(v){throw new Error(`Native artifact is not valid UTF-8: ${e}`,{cause:v})}return{ref:e,size:p,hash:t.includeHash===!1?null:XM("sha256").update(w).digest("hex"),text:y}}finally{await s.close()}}var rh,wn=A(()=>{"use strict";Jl();vn();rh=1024*1024});import{randomUUID as nL}from"crypto";import{promises as Ie}from"fs";import It from"path";function Xl(t,e){let r=It.relative(t,e);return r===""||!It.isAbsolute(r)&&r!==".."&&!r.startsWith(`..${It.sep}`)}function iL(t,e){return Y({...t,birthtime:t.birthtimeMs},{...e,birthtime:e.birthtimeMs})}function Ql(t,e){return Y({dev:t.dev,ino:t.ino,birthtime:t.birthtimeMs},{dev:e.dev,ino:e.ino,birthtime:e.birthtimeMs})}function oL(t,e){return Ql(t,e)&&t.birthtimeMs===e.birthtimeMs&&t.ctimeMs===e.ctimeMs&&t.mtimeMs===e.mtimeMs&&t.size===e.size}async function fN(t){let e=await Ie.lstat(t);if(!e.isDirectory()||e.isSymbolicLink())throw new Error(`Native atomic write parent must be a real directory: ${t}`);return{path:t,realPath:await Ie.realpath(t),dev:e.dev,ino:e.ino,birthtimeMs:e.birthtimeMs}}async function fo(t){for(let e of t){let r=await Ie.lstat(e.path);if(!r.isDirectory()||r.isSymbolicLink()||!iL(e,r)||await Ie.realpath(e.path)!==e.realPath)throw new Error(`Native atomic write parent changed before commit: ${e.path}`)}}async function aL(t,e,r){let[n,i]=await Promise.all([Ie.lstat(t),Ie.realpath(t),r?fo(r):Promise.resolve()]);if(!n.isFile()||n.isSymbolicLink()||!Ql(n,e)||r&&!Xl(r[0].realPath,i))throw new Error("Native atomic write temporary file changed after close");return n}async function sL(t,e){let r=It.resolve(t),n=It.resolve(e);if(!Xl(r,n))throw new Error(`Native atomic write parent is outside its managed root: ${e}`);let i=[await fN(r)],o=It.relative(r,n).split(It.sep).filter(Boolean),a=r;for(let s of o){await fo(i),a=It.join(a,s);try{await Ie.mkdir(a)}catch(l){if(l.code!=="EEXIST")throw l}let c=await fN(a);if(!Xl(i[0].realPath,c.realPath))throw new Error(`Native atomic write parent resolves outside its managed root: ${a}`);i.push(c)}return await fo(i),i}async function cL(t){let e;try{e=await Ie.open(t,"r"),await e.sync()}catch(r){let n=r.code;if(!["EACCES","EBADF","EINVAL","EISDIR","ENOTSUP","EPERM"].includes(n??""))throw r}finally{await e?.close()}}async function lL(t,e,r={}){let n=It.dirname(t),i=r.containedRoot?await sL(r.containedRoot,n):null;i||await Ie.mkdir(n,{recursive:!0});let o=It.join(n,`.${It.basename(t)}.${nL()}.tmp`),a,s,c;try{if(await r.beforeTemporaryOpen?.(),a=await Ie.open(o,"wx"),s=await a.stat(),i){let[l,d]=await Promise.all([Ie.lstat(o),Ie.realpath(o)]);if(await fo(i),!l.isFile()||l.isSymbolicLink()||!Ql(s,l)||!Xl(i[0].realPath,d))throw new Error("Native atomic write temporary file opened outside its managed parent")}if(typeof e=="string"?await a.writeFile(e,"utf8"):await a.writeFile(e),await a.sync(),c=await a.stat(),!Ql(s,c))throw new Error("Native atomic write temporary file changed while writing");if(await a.close(),a=void 0,await r.afterTemporaryClose?.(),!c)throw new Error("Native atomic write temporary file was not written");if(c=await aL(o,c,i),await r.beforeCommit?.(),i){await fo(i);let l=await Ie.lstat(o);if(!l.isFile()||l.isSymbolicLink()||!c||!oL(l,c))throw new Error("Native atomic write temporary file changed before commit")}r.exclusive?(await dl(o,t),await to(o)):await ll(o,t),await cL(n)}catch(l){if(await a?.close(),!i)await Ie.rm(o,{force:!0});else try{await fo(i),await Ie.rm(o,{force:!0})}catch{}throw l}}async function Rr(t,e,r={}){await lL(t,e,r)}async function Jt(t,e,r={}){await Rr(t,JSON.stringify(e,null,2)+`
|
||
`,r)}var ke=A(()=>{"use strict";ul();vn()});function pL(t,e){return nh[t][e]}function Zl(t){return hN.get(t.trim().toLocaleLowerCase("en-US"))??null}function ed(t,e={}){let r=["outcome","scope","nonGoals","acceptanceExamples"];return e.compact||r.push("constraints","decisions","openQuestions","verificationExpectations"),r.map(n=>`# ${pL(t,n)}
|
||
`).join(`
|
||
`)}var nh,dL,uL,hN,mN,mo=A(()=>{"use strict";nh={en:{outcome:"Outcome",scope:"Scope",nonGoals:"Non-goals",acceptanceExamples:"Acceptance examples",constraints:"Constraints and invariants",decisions:"Decisions",openQuestions:"Open questions",verificationExpectations:"Verification expectations"},"zh-CN":{outcome:"目标",scope:"范围",nonGoals:"非目标",acceptanceExamples:"验收示例",constraints:"约束与不变量",decisions:"决策",openQuestions:"待解决问题",verificationExpectations:"验证预期"}},dL={en:{verification:"Verification",currentResult:"Current result",acceptance:"Acceptance",checks:"Checks",blockers:"Blockers",risks:"Risks and skipped work",previousIterations:"Previous iterations",conclusion:"Conclusion"},"zh-CN":{verification:"验证",currentResult:"当前结果",acceptance:"验收",checks:"检查",blockers:"阻塞项",risks:"风险与跳过的工作",previousIterations:"之前的迭代",conclusion:"结论"}},uL={en:{acceptanceEvidence:"Acceptance evidence",commandsAndResults:"Commands and results",skippedChecks:"Skipped checks",specConsistency:"Spec consistency",knownLimitationsAndRisks:"Known limitations and risks",conclusion:"Conclusion"},"zh-CN":{acceptanceEvidence:"验收证据",commandsAndResults:"命令与结果",skippedChecks:"跳过的检查",specConsistency:"规格一致性",knownLimitationsAndRisks:"已知限制与风险",conclusion:"结论"}},hN=new Map,mN=new Map;for(let t of Object.keys(nh)){for(let[e,r]of Object.entries(nh[t]))hN.set(r.toLocaleLowerCase("en-US"),e);for(let[e,r]of Object.entries(dL[t]))mN.set(r.toLocaleLowerCase("en-US"),e);for(let[e,r]of Object.entries(uL[t]))mN.set(r.toLocaleLowerCase("en-US"),e)}});async function Yt(t){let e=(await br(t))?.config??null;return e?.native?e:null}async function rd(t){let e=await Yt(t);if(e?.native.pending_root_move)throw new Error(`Native root move ${e.native.pending_root_move.id} is incomplete; use comet native doctor --repair`)}var td,Tt=A(()=>{"use strict";ge();qe();ro();ke();se();td=il});import{AsyncLocalStorage as fL}from"async_hooks";import{randomUUID as vN}from"crypto";import{promises as ut}from"fs";import wN from"os";import ce from"path";function gL(t){if(!/^[a-z][a-z0-9-]*$/u.test(t))throw new Error(`Invalid Native lock name: ${t}`);return`${t}.lock`}function yL(t,e){if(!t||typeof t!="object"||Array.isArray(t))throw new Error(`Invalid Native lock metadata: ${e}`);let r=t;if(typeof r.id!="string"||r.id.length===0||typeof r.pid!="number"||!Number.isSafeInteger(r.pid)||r.pid<1||typeof r.hostname!="string"||r.hostname.length===0||typeof r.createdAt!="string"||r.createdAt.length===0||typeof r.operation!="string"||r.operation.length===0||r.processIdentity!==void 0&&(typeof r.processIdentity!="string"||r.processIdentity.length===0))throw new Error(`Invalid Native lock metadata: ${e}`);return r}function bN(t){return{device:t.dev.toString(),inode:t.ino.toString(),size:t.size.toString(),birthtimeNs:t.birthtimeNs.toString(),ctimeNs:t.ctimeNs.toString(),mtimeNs:t.mtimeNs.toString()}}function id(t,e){let r={dev:t.device,ino:t.inode,birthtime:t.birthtimeNs},n={dev:e.device,ino:e.inode,birthtime:e.birthtimeNs};return vr(r,n)?Y(r,n):Y(r,n)&&t.size===e.size}function os(t,e){return id(t,e)&&t.size===e.size&&t.birthtimeNs===e.birthtimeNs&&t.ctimeNs===e.ctimeNs&&t.mtimeNs===e.mtimeNs}function vL(t,e){return t.status!==e.status?!1:!t.owner||!t.identity||!e.owner||!e.identity?t.owner===e.owner&&t.identity===e.identity:t.owner.id===e.owner.id&&os(t.identity,e.identity)}async function pt(t){let e,r;try{let n=await Zi(t,gN,{bigint:!0,label:"Native lock"});e=n.bytes,r=n.stat}catch(n){if(n.code==="ENOENT")return null;throw n instanceof Ee?n.reason==="too-large"?new Error(`Native lock metadata exceeds ${gN} bytes: ${t}`,{cause:n}):n.reason==="not-regular-file"?new Error(`Native lock must be a regular file: ${t}`,{cause:n}):new Error(`Native lock changed while reading: ${t}`,{cause:n}):n}return{file:t,owner:yL(JSON.parse(e.toString("utf8")),t),identity:bN(r)}}async function wL(t){return(await pt(t))?.owner??null}async function oh(t){if(!t)return{status:"missing",owner:null,identity:null};if(t.owner.hostname!==wN.hostname())return{status:"unknown",owner:t.owner,identity:t.identity};let e=await Fa(t.owner.pid,t.owner.processIdentity);return{status:e==="alive"?"active":e==="dead"?"stale":"unknown",owner:t.owner,identity:t.identity}}async function bL(t,e){try{await ut.lstat(e);return}catch(r){if(r.code!=="ENOENT")throw r}try{await ut.rename(t,e)}catch(r){if(r.code!=="ENOENT")throw r}}async function od(t,e){let r=await pt(t.file);if(!r)return"missing";if(r.owner.id!==t.owner.id)throw new Error(`Native lock ownership changed: ${t.file}`);if(!os(r.identity,t.identity))throw new Error(`Native lock identity changed: ${t.file}`);await ut.mkdir(e,{recursive:!0});let n=ce.join(e,`${ce.basename(t.file)}.${t.owner.id}.${vN()}.removed`);try{await ut.rename(t.file,n)}catch(o){if(o.code==="ENOENT")return"missing";throw o}let i=await pt(n);if(!i||i.owner.id!==t.owner.id||!id(i.identity,t.identity))throw await bL(n,t.file),new Error(`Native lock changed before quarantine: ${t.file}`);return await ut.rm(n,{force:!0}),"removed"}async function kN(t){let e=await Yn(process.pid);return{id:vN(),pid:process.pid,hostname:wN.hostname(),createdAt:new Date().toISOString(),operation:t,...e===null?{}:{processIdentity:e}}}async function SN(t,e){let r;try{r=await ut.open(t,"wx")}catch(o){if(o.code==="EEXIST"){let a=await wL(t);throw new Error(`Native lock is already held: ${t}${a?` by pid ${a.pid} for ${a.operation}`:""}`,{cause:o})}throw o}let n;try{await r.writeFile(JSON.stringify(e,null,2)+`
|
||
`,"utf8"),await r.sync(),n=bN(await r.stat({bigint:!0}))}finally{await r.close()}let i=await pt(t);if(!n||!i||i.owner.id!==e.id||!id(i.identity,n))throw new Error(`Native lock changed after write: ${t}`);return i.identity}async function kL(t,e){let r=await te(t.runtimeDir,t.locksDir);await ut.mkdir(r,{recursive:!0});let n=await te(t.runtimeDir,ce.join(r,ih));await ut.mkdir(n,{recursive:!0});let i=await kN(e),o=ce.join(n,`.${i.id}.tmp`),a=ce.join(n,`${i.id}.claim`);try{let s=await SN(o,i);await ut.rename(o,a);let c=await pt(a);if(!c||!id(s,c.identity))throw new Error(`Native lock coordinator claim changed while publishing: ${a}`);return{file:a,nativeRoot:t.runtimeDir,locksDir:r,owner:i,identity:c.identity}}finally{await ut.rm(o,{force:!0})}}async function SL(t){let e=ce.dirname(t.file),r=!1,n=ce.basename(t.file);for(let i of await ut.readdir(e,{withFileTypes:!0})){if(!i.isFile()||i.isSymbolicLink()||!i.name.endsWith(".claim"))continue;let o=ce.join(e,i.name);if(ce.resolve(o)!==ce.resolve(t.file))try{let a=await pt(o),s=await oh(a);if(s.status==="missing")continue;let c=await pt(o);if(!c)continue;if(!a||c.owner.id!==a.owner.id||!os(c.identity,a.identity)){i.name<n&&(r=!0);continue}if(s.status==="stale"&&a){await od(a,e);continue}i.name<n&&(r=!0)}catch{i.name<n&&(r=!0)}}return r}async function NN(t){let e=await pt(t.file);if(e){if(e.owner.id!==t.owner.id||!os(e.identity,t.identity))throw new Error(`Native lock coordinator ownership changed: ${t.file}`);await od(e,ce.dirname(t.file))}}async function NL(t,e){let r=Date.now()+mL;for(;;){let n=await kL(t,e);if(!await SL(n))return n;if(await NN(n),Date.now()>=r)throw new Error(`Native lock coordinator is busy: ${t.locksDir}`);await new Promise(i=>setTimeout(i,2+Math.floor(Math.random()*7)))}}async function EL(t){let e=nd.get(t)??Promise.resolve(),r,n=new Promise(o=>{r=o}),i=e.then(()=>n);return nd.set(t,i),await e,()=>{r(),nd.get(t)===i&&nd.delete(t)}}async function ah(t,e,r){let n=ce.resolve(t.locksDir),i=yN.getStore();if(i?.has(n))return r();let o=await EL(n);try{let a=await NL(t,e),s=new Map(i??[]);return s.set(n,a),await yN.run(s,async()=>{try{return await r()}finally{await NN(a)}})}finally{o()}}async function EN(t,e,r){return ah(t,`acquire ${e}`,async()=>{let n=await te(t.runtimeDir,t.locksDir);await ut.mkdir(n,{recursive:!0});let i=await te(t.runtimeDir,ce.join(n,gL(e))),o=await kN(r),a=await SN(i,o);return{file:i,nativeRoot:t.runtimeDir,locksDir:n,owner:o,identity:a}})}async function xN(t){await pt(t.file)&&await ah({runtimeDir:t.nativeRoot,locksDir:t.locksDir},`release ${ce.basename(t.file)}`,async()=>{let e=await pt(t.file);if(!e)return;if(e.owner.id!==t.owner.id)throw new Error(`Native lock ownership changed: ${t.file}`);if(!os(e.identity,t.identity))throw new Error(`Native lock identity changed: ${t.file}`);let r=ce.join(t.locksDir,ih);await od(e,r)})}function xL(t,e=Date.now()){if(!t)return 0;let r=Date.parse(t.createdAt);return Number.isFinite(r)?Math.max(0,e-r):Number.POSITIVE_INFINITY}async function PN(t){return oh(await pt(t))}async function CN(t,e,r,n={}){return ah(t,`take over ${ce.basename(e)}`,async()=>{let i=await te(t.runtimeDir,t.locksDir),o=await te(t.runtimeDir,e);if(ce.resolve(ce.dirname(o))!==ce.resolve(i))throw new Error(`Native lock takeover target is outside the lock directory: ${e}`);let a=await pt(o),s=await oh(a);if(s.status==="missing")return{status:"missing"};if(r&&!vL(r,s))return{status:"changed",diagnosis:s};let c=n.allowAgedUnknown===!0&&s.status==="unknown"&&xL(a?.owner??null)>=hL;if(s.status!=="stale"&&!c||!a)return{status:"changed",diagnosis:s};let l=ce.join(i,ih);return await od(a,l)==="removed"?{status:"removed",owner:a.owner}:{status:"missing"}})}var gN,ih,mL,hL,yN,nd,sh=A(()=>{"use strict";Aa();Ka();se();vn();gN=16*1024,ih=".coordinator",mL=5e3,hL=900*1e3,yN=new fL,nd=new Map});import{createHash as PL}from"node:crypto";function ai(t){return t.replaceAll(`\r
|
||
`,`
|
||
`).replaceAll("\r",`
|
||
`)}function go(t){return PL("sha256").update(ai(t)).digest("hex")}function ph(t,e){if(!t||typeof t!="object"||Array.isArray(t))throw new D(`${e} must be an object`);return t}function IN(t,e,r){let n=Object.keys(t).filter(i=>!e.has(i));if(n.length>0)throw new D(`${r} has unknown field(s): ${n.join(", ")}`)}function fh(t,e){if(typeof t!="string"||t.trim().length===0)throw new D(`${e} must be a non-empty string`);return t.trim()}function AN(t,e){if(t!==void 0){if(typeof t!="string")throw new D(`${e} must be text`);return ai(t).replace(/^\n+|\n+$/gu,"")}}function ad(t,e){let r=fh(t,e).toLowerCase();if(!RL.test(r))throw new D(`${e} must be a SHA-256 hash`);return r}function _N(t,e,r){let n=ph(t,e),i=Object.entries(n);if(i.length>RN)throw new D(`${e} must contain at most ${RN} entries`);let o={};for(let[a,s]of i){if(dh(a,`${e} ID`)!==a)throw new D(`${e} ID must be normalized: ${a}`);s===null&&r?o[a]=null:o[a]=ad(s,`${e}.${a}`)}return o}function dh(t,e){let r=fh(t,e);if(!jN.test(r))throw new D(`${e} is not a valid stable requirement ID`);return r}function AL(t,e){let r=fh(t,e);if(!CL.test(r))throw new D(`${e} is not a valid capability ID`);return r}function _L(t,e){let r=`Native delta operations[${e}]`,n=ph(t,r);IN(n,new Set(["id","operation","to_id","title","body","expected_hash"]),r);let i=dh(n.id,`${r}.id`),o=n.operation;if(!["add","modify","remove","rename"].includes(String(o)))throw new D(`${r}.operation is invalid`);let a=o,s=n.to_id===void 0?void 0:dh(n.to_id,`${r}.to_id`),c=AN(n.title,`${r}.title`),l=AN(n.body,`${r}.body`),d=n.expected_hash===void 0?void 0:ad(n.expected_hash,`${r}.expected_hash`);if(a==="add"){if(s!==void 0||d!==void 0||!l?.trim())throw new D(`${r} add requires body and forbids to_id and expected_hash`)}else if(a==="modify"){if(s!==void 0||!d||!l?.trim())throw new D(`${r} modify requires body and expected_hash and forbids to_id`)}else if(a==="remove"){if(s!==void 0||c!==void 0||l!==void 0||!d)throw new D(`${r} remove requires expected_hash and forbids to_id, title, and body`)}else if(s===void 0||s===i||!d||l==="")throw new D(`${r} rename requires a different to_id and expected_hash`);return{id:i,operation:a,...s===void 0?{}:{to_id:s},...c===void 0?{}:{title:c},...l===void 0?{}:{body:l},...d===void 0?{}:{expected_hash:d}}}function jL(t){let e=ph(t,"Native delta");if(IN(e,new Set(["schema","capability","base_hash","base_version","legacy_hash","base_requirements","independent_requirements","operations"]),"Native delta"),e.schema!==ch)throw new D(`Native delta schema must be ${ch}`);let r=AL(e.capability,"Native delta capability"),n=ad(e.base_hash,"Native delta base_hash");if(!Number.isSafeInteger(e.base_version)||Number(e.base_version)<1)throw new D("Native delta base_version must be a positive integer");let i=e.legacy_hash===void 0?void 0:ad(e.legacy_hash,"Native delta legacy_hash"),o;e.base_requirements!==void 0&&(o=_N(e.base_requirements,"Native delta base_requirements",!1));let a=e.independent_requirements===void 0?void 0:_N(e.independent_requirements,"Native delta independent_requirements",!0);if(!Array.isArray(e.operations))throw new D("Native delta operations must be an array");let s=e.operations.map(_L),c=new Set;for(let[l,d]of s.entries()){let u=[d.id,...d.to_id===void 0?[]:[d.to_id]];for(let p of u){if(c.has(p))throw new D(`Native delta operations contain duplicate or overlapping requirement ID ${p} at ${l}`);c.add(p)}}if(a!==void 0){if(o===void 0)throw new D("Native delta independent_requirements requires base_requirements");for(let[l,d]of Object.entries(a)){if(c.has(l))throw new D(`Native delta requirement ${l} cannot be both addressed and independent`);let u=o[l];if(d===null?u!==void 0:u!==d)throw new D(`Native delta independent_requirements does not match baseline ${l}`)}}return{schema:ch,capability:r,base_hash:n,base_version:Number(e.base_version),...i===void 0?{}:{legacy_hash:i},...o===void 0?{}:{base_requirements:o},...a===void 0?{}:{independent_requirements:a},operations:s}}function IL(t){let e=(0,uh.parseDocument)(t,{uniqueKeys:!0});if(e.errors.length>0)throw new D(`Native delta is invalid YAML: ${e.errors[0].message}`);return e.toJS({mapAsMap:!1})}function as(t){return jL(typeof t=="string"?IL(t):t)}function TL(t){let e=/^\s{0,3}(#{1,6})\s+/u.exec(t);return e?e[1].length:null}function $L(t){let e=[],r=null;for(let[n,i]of t.entries()){let o=/^\s{0,3}(`{3,}|~{3,})(.*)$/u.exec(i.trimEnd());if(o){r?o[1][0]===r.marker&&o[1].length>=r.length&&o[2].trim().length===0&&(r=null):r={marker:o[1][0],length:o[1].length};continue}if(r)continue;let a=/^(\s{0,3})(#{2,6})\s+Requirement:\s*([^\s]+)(?:\s+(.*?))?\s*$/u.exec(i);if(!a)continue;let s=a[3];if(!jN.test(s))throw new D(`Native total Spec requirement ID is invalid: ${s}`);e.push({line:n,level:a[2].length,id:s,title:a[4]?.trim()??""})}return e}function oi(t){let e=ai(t),r=e.split(`
|
||
`),n=$L(r),i=[],o=new Set;for(let l of n){if(o.has(l.id))throw new D(`Native total Spec contains duplicate requirement ID ${l.id}`);o.add(l.id);let d=r.length;for(let u=l.line+1;u<r.length;u+=1){if(n.some(f=>f.line===u)){d=u;break}let p=TL(r[u]);if(p!==null&&p<=l.level){d=u;break}}i.push({start:l.line,end:d,marker:l})}let a=new Map;for(let l of i){let d=`${r.slice(l.start,l.end).join(`
|
||
`)}${l.end<r.length?`
|
||
`:""}`,u=r.slice(l.start+1,l.end).join(`
|
||
`).replace(/^\n/u,"").replace(/\n+$/u,"");a.set(l.marker.id,{id:l.marker.id,level:l.marker.level,title:l.marker.title,body:u,raw:d,startLine:l.start,endLine:l.end})}let s=[],c=0;for(let l of i)s.push(r.slice(c,l.start).join(`
|
||
`)),c=l.end;return s.push(r.slice(c).join(`
|
||
`)),{text:e,lines:r,requirements:a,legacyText:s.join(`
|
||
`)}}function mh(t){return go(t)}function Ar(t){return go(t)}function TN(t){let e=oi(t).legacyText;return go(e.split(`
|
||
`).filter(r=>r.trim().length>0).join(`
|
||
`).trim())}function $N(t,e){let r=oi(t),n=[];for(let i of e.operations){if(i.operation==="remove")continue;let o=i.operation==="rename"?i.to_id:i.id,a=r.requirements.get(o);if(!a)throw new D(`Native delta target Spec is missing requirement ${o} for ${i.operation}`);n.push(a.raw.trimEnd())}return n.length===0?"":`${n.join(`
|
||
|
||
`)}
|
||
`}function sd(t,e,r,n){let i=`${"#".repeat(t)} Requirement: ${e}${r?.trim()?` ${r.trim()}`:""}`,o=ai(n).replace(/\n+$/u,"");return[i,"",...o.split(`
|
||
`),"",""].join(`
|
||
`)}function lh(t){return t.operation==="rename"?[t.id,t.to_id]:[t.id]}function cd(t,e){if(t.operation==="rename"){if(!e)throw new D(`Rename target does not exist: ${t.id}`);return{id:t.to_id,level:e.level,title:t.title??e.title,body:t.body??e.body}}return{id:t.id,level:e?.level??2,title:t.title??e?.title,body:t.body??e?.body??""}}function OL(t,e,r){let n=oi(t),i=[...n.lines],o=n.requirements.get(e.id);if(!o)throw new D(`Requirement target disappeared: ${e.id}`);return i.splice(o.startLine,o.endLine-o.startLine,...r.split(`
|
||
`)),i.join(`
|
||
`)}function ML(t,e){let r=ai(t),n=r.length===0||r.endsWith(`
|
||
|
||
`)?"":`
|
||
`,i=`${r}${n}`;return`${i.endsWith(`
|
||
`)||i.length===0?i:`${i}
|
||
`}${e}`}function ON(t,e){if(t.operation==="add"||t.operation==="modify"){let o=e.requirements.get(t.id);if(!o)return!1;let a=cd(t,t.operation==="modify"?o:void 0);return o.raw===sd(a.level,a.id,a.title,a.body)}if(t.operation==="remove")return!1;let r=e.requirements.get(t.to_id),n=e.requirements.get(t.id);if(!r||n)return!1;let i=cd(t,{id:t.id,level:r.level,title:r.title,body:r.body,raw:r.raw,startLine:r.startLine,endLine:r.endLine});return r.raw===sd(i.level,i.id,i.title,i.body)}function LL(t,e){let r=e.requirements.get(t.id);if(t.operation==="add"){if(r)throw new D(`Add target already exists: ${t.id}`);return}if(!r)throw new D(`Native delta target does not exist: ${t.id}`);if(t.expected_hash!==mh(r.raw))throw new D(`Native delta ${t.operation} expected_hash does not match ${t.id}`);if(t.operation==="rename"&&e.requirements.has(t.to_id))throw new D(`Rename destination already exists: ${t.to_id}`)}function DL(t,e){if(t.base_requirements===void 0)return;let r=t.base_requirements,n=e.requirements;if(Object.keys(r).length!==n.size)throw new D("Native delta base_requirements must describe the complete total Spec baseline");for(let[i,o]of n)if(r[i]!==mh(o.raw))throw new D(`Native delta base_requirements does not match requirement ${i}`)}function BL(t,e){let r=TN(e.text);if(r!==go("")&&t.legacy_hash!==r)throw new D("Native delta modifying a legacy total Spec requires a matching legacy_hash")}function FL(t){let e=ai(t.baselineMarkdown),r=[],n=[];for(let o of t.delta.operations){let a=oi(e),s=a.requirements.get(o.id);if(t.allowAlreadyApplied&&ON(o,a)){n.push({id:o.id,operation:o.operation,status:"already-applied",targetIds:lh(o)});continue}if(o.operation==="add"){if(s)throw new ii([o.id],`Native delta add conflicts with existing requirement ${o.id}`);let c=cd(o,void 0);e=ML(e,sd(c.level,c.id,c.title,c.body))}else{if(!s)throw new ii([o.id],`Native delta ${o.operation} target does not exist: ${o.id}`);if(o.expected_hash!==mh(s.raw))throw new ii([o.id],`Native delta ${o.operation} conflicts with concurrent requirement ${o.id}`);let c=cd(o,s);if(o.operation==="rename"&&oi(e).requirements.has(o.to_id))throw new ii([o.id,o.to_id],`Native delta rename destination already exists: ${o.to_id}`);if(o.operation==="remove"){let l=[...oi(e).lines];l.splice(s.startLine,s.endLine-s.startLine),e=l.join(`
|
||
`)}else e=OL(e,s,sd(c.level,c.id,c.title,c.body))}r.push(...lh(o)),n.push({id:o.id,operation:o.operation,status:"changed",targetIds:lh(o)})}let i=ai(e);return{markdown:i,base_hash:t.delta.base_hash,result_hash:go(i),rebased:t.rebased,changedRequirementIds:[...new Set(r)],operationResults:n}}function MN(t){let e=oi(t.baselineMarkdown);if(go(e.text)!==t.delta.base_hash)throw new ii([t.delta.capability],`Native delta base hash does not match the current total Spec for ${t.delta.capability}`);BL(t.delta,e),DL(t.delta,e);for(let r of t.delta.operations)t.allowAlreadyApplied&&ON(r,e)||LL(r,e);return FL({baselineMarkdown:e.text,delta:t.delta,allowAlreadyApplied:t.allowAlreadyApplied??!1,rebased:!1})}var uh,ch,ho,CL,jN,RL,RN,D,ii,ld=A(()=>{"use strict";uh=Ce(Ne(),1),ch="comet.native.delta.v1",ho="delta.yaml",CL=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/u,jN=/^[a-z][a-z0-9]*(?:[._-][a-z0-9]+)*$/u,RL=/^[a-f0-9]{64}$/iu,RN=512,D=class extends Error{code="native-delta-invalid";constructor(e){super(e),this.name="NativeDeltaValidationError"}},ii=class extends Error{code="native-delta-conflict";conflictIds;constructor(e,r){super(r),this.name="NativeDeltaConflictError",this.conflictIds=[...new Set(e)]}}});var Xt,_r,jr,dd=A(()=>{"use strict";Xt="comet.native.v3",_r="comet.native.v2",jr="comet.native.v1"});import KL from"node:path";function cs(t,e){if(!t||typeof t!="object"||Array.isArray(t))throw new Error(`${e} must be a mapping`);return t}function FN(t,e,r){let n=Object.keys(t).filter(i=>!e.has(i));if(n.length>0)throw new Error(`${r} has unknown field(s): ${n.join(", ")}`)}function vo(t){if(!BN.test(t))throw new Error(`Invalid Native change name: ${t}`)}function KN(t){if(!BN.test(t))throw new Error(`Invalid Native capability id: ${t}`)}function HN(t,e){if(t.length===0||KL.isAbsolute(t)||/^(?:[A-Za-z]:|~|[\\/])/u.test(t)||t.split(/[\\/]/u).includes(".."))throw new Error(`${e} must stay inside the Native change`)}function JL(t,e){let r=cs(t,`spec_changes[${e}]`);if(FN(r,VL,`spec_changes[${e}]`),typeof r.capability!="string")throw new Error("spec change capability is required");if(KN(r.capability),r.operation!=="create"&&r.operation!=="replace"&&r.operation!=="remove")throw new Error(`Invalid spec operation for ${r.capability}`);let n=r.source,i=r.base_hash;if(n!==void 0&&typeof n!="string")throw new Error(`Spec source for ${r.capability} must be a string`);if(typeof n=="string"&&HN(n,`Spec source for ${r.capability}`),r.operation==="create"){if(!n)throw new Error(`Create spec ${r.capability} requires source`);if(i!==null)throw new Error(`Create spec ${r.capability} requires null base_hash`)}else if(r.operation==="replace"){if(!n)throw new Error(`Replace spec ${r.capability} requires source`);if(typeof i!="string"||!gh.test(i))throw new Error(`Replace spec ${r.capability} requires a SHA-256 base_hash`)}else{if(n!==void 0)throw new Error(`Remove spec ${r.capability} forbids source`);if(typeof i!="string"||!gh.test(i))throw new Error(`Remove spec ${r.capability} requires a SHA-256 base_hash`)}return{capability:r.capability,operation:r.operation,...typeof n=="string"?{source:n}:{},base_hash:i}}function YL(t){return/^\d{4}-\d{2}-\d{2}$/u.test(t)?new Date(`${t}T00:00:00.000Z`).toISOString().slice(0,10)===t:!1}function yh(t,e){if(FN(t,e,kn),typeof t.name!="string")throw new Error("Native change name is required");if(vo(t.name),t.language!=="en"&&t.language!=="zh-CN")throw new Error("Native change language must be en or zh-CN");if(typeof t.phase!="string"||!qL.has(t.phase))throw new Error("Native change phase is invalid");if(t.brief!=="brief.md")throw new Error("Native change brief must be brief.md");if(t.approval!==null&&!zL.has(t.approval))throw new Error("Native change approval is invalid");if(!Array.isArray(t.spec_changes))throw new Error("Native spec_changes must be an array");let r=t.spec_changes.map(JL),n=r.map(i=>i.capability).filter((i,o,a)=>a.indexOf(i)!==o);if(n.length>0)throw new Error(`Duplicate Native capability operation: ${[...new Set(n)].join(", ")}`);if(typeof t.verification_result!="string"||!GL.has(t.verification_result))throw new Error("Native verification_result is invalid");if(t.verification_report!==null&&typeof t.verification_report!="string")throw new Error("Native verification_report must be a string or null");if(typeof t.verification_report=="string"&&HN(t.verification_report,"Native verification_report"),typeof t.archived!="boolean")throw new Error("Native archived must be boolean");if(typeof t.created_at!="string"||!YL(t.created_at))throw new Error("Native created_at must be a valid YYYY-MM-DD date");if(t.run_id!==null&&(typeof t.run_id!="string"||t.run_id.length===0))throw new Error("Native run_id must be a non-empty string or null");return{name:t.name,language:t.language,phase:t.phase,brief:"brief.md",approval:t.approval,spec_changes:r,verification_result:t.verification_result,verification_report:t.verification_report,archived:t.archived,created_at:t.created_at,run_id:t.run_id}}function ud(t){let e=cs(t,kn);if(e.schema!==jr)throw new Error(`Expected ${jr}`);return{schema:jr,...yh(e,HL)}}function ss(t,e){if(!Number.isSafeInteger(t)||t<1)throw new Error(`${e} must be a positive integer`);return t}function hh(t,e,r){if(t===null)return null;let n=typeof t=="string"?UL.exec(t):null;if(!n||n[1]!==r)throw new Error(`${e} must be null or runtime/evidence/${r}/<sha256>.json relative to the Native change`);return t}function XL(t){if(t==null)return null;if(typeof t!="string"||!gh.test(t))throw new Error("Native approved_contract_hash must be null or a SHA-256 hash");return t}function QL(t){if(t===void 0)return"legacy-v1";if(t!=="legacy-v1")throw new Error("Native verification_protocol must be legacy-v1");return t}function pd(t){let e=cs(t,kn);if(e.schema!==_r)throw new Error(`Expected ${_r}`);if(ss(e.minimum_runtime_version,"Native v2 minimum_runtime_version")!==2)throw new Error(`Native ${_r} minimum_runtime_version must be 2`);return{schema:_r,minimum_runtime_version:2,revision:ss(e.revision,"Native v2 revision"),...yh(e,DN)}}function fd(t){let e=cs(t,kn);if(e.schema!==Xt){if(e.schema===jr||e.schema===_r){let a=e.schema===jr?ud(e):pd(e);throw new yo(a.name,a.schema)}throw new Ir(typeof e.schema=="string"?e.schema:"(missing)",typeof e.minimum_runtime_version=="number"?e.minimum_runtime_version:null)}let r=ss(e.minimum_runtime_version,"Native minimum_runtime_version");if(r>3)throw new Ir(e.schema,r);if(r!==3)throw new Error(`Native ${e.schema} minimum_runtime_version must be ${3}`);let n=ss(e.revision,"Native revision"),i=yh(e,WL),o=XL(e.approved_contract_hash);if(i.approval===null&&o!==null)throw new Error("Native approved_contract_hash requires an approval");return{schema:Xt,minimum_runtime_version:3,revision:n,verification_protocol:QL(e.verification_protocol),...i,approved_contract_hash:o,implementation_scope:hh(e.implementation_scope,"Native implementation_scope","scopes"),verification_evidence:hh(e.verification_evidence,"Native verification_evidence","verifications"),partial_allowance:hh(e.partial_allowance,"Native partial_allowance","allowances")}}function vh(t){let e=cs(t,kn);if(e.schema===jr){let i=ud(e);return{status:"migration-required",schema:i.schema,minimumRuntimeVersion:1,state:i,message:`Native change ${i.name} requires migration to ${Xt}`}}if(e.schema===_r){let i=pd(e);return{status:"migration-required",schema:i.schema,minimumRuntimeVersion:i.minimum_runtime_version,state:i,message:`Native change ${i.name} requires migration to ${Xt}`}}if(e.schema!==Xt){let i=typeof e.minimum_runtime_version=="number"&&Number.isSafeInteger(e.minimum_runtime_version)?e.minimum_runtime_version:null;return{status:"runtime-incompatible",schema:typeof e.schema=="string"?e.schema:"(missing)",minimumRuntimeVersion:i,state:null,message:new Ir(typeof e.schema=="string"?e.schema:"(missing)",i).message}}let r=ss(e.minimum_runtime_version,"Native minimum_runtime_version");if(r>3)return{status:"runtime-incompatible",schema:e.schema,minimumRuntimeVersion:r,state:null,message:new Ir(e.schema,r).message};let n=fd(e);return{status:"current",schema:n.schema,minimumRuntimeVersion:n.minimum_runtime_version,state:n}}var LN,HL,DN,WL,VL,qL,zL,GL,kn,gh,BN,UL,yo,Ir,md=A(()=>{"use strict";dd();LN=["schema","name","language","phase","brief","approval","spec_changes","verification_result","verification_report","archived","created_at","run_id"],HL=new Set(LN),DN=new Set([...LN,"minimum_runtime_version","revision"]),WL=new Set([...DN,"approved_contract_hash","implementation_scope","verification_evidence","partial_allowance","verification_protocol"]),VL=new Set(["capability","operation","source","base_hash"]),qL=new Set(["shape","build","verify","archive"]),zL=new Set(["implicit","confirmed"]),GL=new Set(["pending","pass","fail"]),kn="comet-state.yaml",gh=/^[a-f0-9]{64}$/u,BN=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/u,UL=/^runtime\/evidence\/(scopes|allowances|verifications)\/([a-f0-9]{64})\.json$/u,yo=class extends Error{constructor(r,n){super(`Native change ${r} uses ${n}; run comet native doctor ${r} --repair before mutating it`);this.change=r;this.schema=n;this.name="NativeSchemaMigrationRequiredError"}change;schema;code="native-schema-migration-required"},Ir=class extends Error{constructor(r,n){super(r!==Xt||n===null?`Unsupported Native change schema ${r} for runtime protocol ${3}`:`Native change ${r} requires runtime protocol ${n}; current protocol is ${3}`);this.schema=r;this.minimumRuntimeVersion=n;this.name="NativeRuntimeCompatibilityError"}schema;minimumRuntimeVersion;code="native-runtime-incompatible"}});import{createHash as ZL}from"crypto";function $t(t){throw new TypeError(`Value is not valid canonical JSON: ${t}`)}function eD(t,e){e.has(t)&&$t("cyclic structures are not supported"),e.add(t);try{let r=Object.keys(t);for(let n=0;n<t.length;n+=1)Object.prototype.hasOwnProperty.call(t,n)||$t("sparse arrays are not supported");return(r.length!==t.length||r.some((n,i)=>n!==String(i)))&&$t("arrays must not have named enumerable properties"),Object.getOwnPropertySymbols(t).length>0&&$t("symbol properties are not supported"),`[${t.map(n=>wh(n,e)).join(",")}]`}finally{e.delete(t)}}function tD(t,e){let r=Object.getPrototypeOf(t);r!==Object.prototype&&r!==null&&$t("only plain objects are supported"),e.has(t)&&$t("cyclic structures are not supported"),Object.getOwnPropertySymbols(t).length>0&&$t("symbol properties are not supported"),e.add(t);try{let n=Object.getOwnPropertyDescriptors(t);return`{${Object.keys(t).sort().map(a=>{let s=n[a];return(!s||!("value"in s))&&$t("accessor properties are not supported"),`${JSON.stringify(a)}:${wh(s.value,e)}`}).join(",")}}`}finally{e.delete(t)}}function wh(t,e){if(t===null)return"null";switch(typeof t){case"boolean":return t?"true":"false";case"string":return JSON.stringify(t);case"number":return Number.isFinite(t)||$t("numbers must be finite"),JSON.stringify(Object.is(t,-0)?0:t);case"object":return Array.isArray(t)?eD(t,e):tD(t,e);case"bigint":case"function":case"symbol":case"undefined":return $t(`${typeof t} values are not supported`)}return $t("unsupported value type")}function WN(t){return wh(t,new Set)}function ie(t,e){if(t.length===0)throw new TypeError("Canonical hash tag must be non-empty");if(/[\r\n]/u.test(t))throw new TypeError("Canonical hash tag must not contain a line break");return ZL("sha256").update(`${t}
|
||
${WN(e)}`).digest("hex")}var nt=A(()=>{"use strict"});function GN(t){let e=/^ {0,3}(#{1,6})[ \t]+(.+?)[ \t]*$/u.exec(t);return e?{level:e[1].length,text:e[2].replace(/[ \t]+#+[ \t]*$/u,"").trim()}:null}function VN(t,e){let r=/^ {0,3}(`{3,}|~{3,})(.*)$/u.exec(t);if(!r)return e;let n=r[1][0];return e===null?{marker:n,length:r[1].length}:n===e.marker&&r[1].length>=e.length&&r[2].trim().length===0?null:e}function qN(t){return t.includes("-->")||t.includes("--!>")}function*hd(t){let e=null,r=!1,n=null,i=new Set(["code","pre","script","style","svg","template"]),o=t.replace(/\r\n?/gu,`
|
||
`),a=0,s=0;for(;a<=o.length;){let c=o.indexOf(`
|
||
`,a),l=c===-1?o.slice(a):o.slice(a,c);if(yield{line:l,body:e===null&&!r&&n===null,index:s},s+=1,e!==null)e=VN(l,e);else if(r)qN(l)&&(r=!1);else if(n!==null)new RegExp(`</${n}\\s*>`,"iu").test(l)&&(n=null);else{let u=VN(l,null);if(u!==null)e=u;else{let p=l.trimStart();if(p.startsWith("<!--")&&!qN(p))r=!0;else{let f=/^<([A-Za-z][A-Za-z0-9-]*)\b[^>]*>/u.exec(p);f&&i.has(f[1].toLowerCase())&&!p.startsWith("</")&&!p.endsWith("/>")&&!new RegExp(`</${f[1]}\\s*>`,"iu").test(p)&&(n=f[1])}}}if(c===-1)break;a=c+1}}function ls(t){return t.normalize("NFC").replace(/\s+/gu," ").trim()}function UN(t,e,r,n=[],i="content-hash"){let o=ls(r),a=e.replaceAll("\\","/").trim(),s=n.map(ls);if(o.length===0)throw new Error(`${t} acceptance criterion must not be empty`);if(a.length===0)throw new Error(`${t} acceptance criterion source must not be empty`);return{id:i==="content-hash"?`acceptance-${ie(rD,{kind:t,source:a,context:s,text:o})}`:"",kind:t,source:a,context:s,text:o}}function JN(t,e,r="content-hash"){let n=new Set;for(let i of t){let o=r==="content-hash"?i.id:JSON.stringify([i.kind,i.source,i.context,i.text]);if(n.has(o))throw new Error(`${e} contains duplicate acceptance criteria`);n.add(o)}return t}function nD(t){let e=null,r=null,n=0,i=0;for(let{line:o,body:a,index:s}of hd(t)){i=s+1;let c=a?GN(o):null;c?.level===1&&(Zl(c.text)==="acceptanceExamples"?(n+=1,n===1&&(e=s+1)):e!==null&&r===null&&(r=s))}if(n===0||e===null)return null;if(n!==1)throw new Error("Brief must contain exactly one Acceptance examples section");return{start:e,end:r??i}}function YN(t,e="brief.md",r=zN.maxCriteria,n="content-hash"){if(!Number.isSafeInteger(r)||r<0)throw new Error("Native brief acceptance budget is invalid");let i=nD(t);if(i===null)return[];let o=null;for(let{line:l,body:d,index:u}of hd(t)){if(u<i.start||u>=i.end)continue;let p=d?/^( {0,3})[-*+][ \t]+/u.exec(l):null;if(p===null)continue;let f=p[1].length;o=o===null?f:Math.min(o,f)}let a=[],s=null,c=()=>{if(s!==null){if(a.length>=r)throw new Error(`Native acceptance exceeds its ${r}-criterion acceptance budget`);a.push(s)}};for(let{line:l,body:d,index:u}of hd(t)){if(u<i.start||u>=i.end)continue;let p=d?/^( {0,3})[-*+][ \t]+(.*)$/u.exec(l):null;p&&p[1].length===o?(c(),s=[p[2]]):s!==null&&s.push(l)}return c(),JN(a.map(l=>UN("brief-example",e,l.join(`
|
||
`),[],n)),"Brief",n)}function XN(t,e="spec.md",r=zN.maxCriteria,n="content-hash",i={}){if(!Number.isSafeInteger(r)||r<0)throw new Error("Native specification acceptance budget is invalid");let o=[],a=[],s=null,c=()=>{if(s===null)return;if(o.length>=r)throw new Error(`Native acceptance exceeds its ${r}-criterion acceptance budget`);let l=(i.resolveBriefReferences?s.body:[]).map(d=>/^\s*(?:Acceptance|验收)\s*[::]\s*(.*)$/iu.exec(d)?.[1]).filter(d=>d!==void 0);if(l.some(d=>!/^A[1-9]\d*$/u.test(d)))throw new Error("A Spec acceptance reference must be one brief ID such as A1");if(l.length>1)throw new Error("A Spec scenario may reference only one brief acceptance criterion");o.push({...UN("spec-scenario",e,[s.title,...s.body].join(`
|
||
`),s.context,n),...l[0]===void 0?{}:{briefAcceptanceRef:l[0]}}),s=null};for(let{line:l,body:d}of hd(t)){let u=d?GN(l):null,p=u?/^Scenario\s*:\s*(.*)$/iu.exec(u.text):null;if(p){for(c();a.at(-1)&&a.at(-1).level>=u.level;)a.pop();let f=ls(p[1]);if(f.length===0)throw new Error("Scenario title must not be empty");s={level:u.level,title:f,body:[],context:a.map(m=>m.text)}}else if(u){for(s!==null&&u.level<=s.level?c():s!==null&&s.body.push(l);a.at(-1)&&a.at(-1).level>=u.level;)a.pop();a.push(u)}else s!==null&&d&&s.body.push(l)}return c(),JN(o,"Specification",n)}var rD,L9,zN,QN=A(()=>{"use strict";mo();nt();rD="comet.native.acceptance.v1",L9=Object.freeze({maxItems:16,maxTextBytes:512,maxContextItems:4,maxContextItemBytes:256,maxFailedCheckIds:16,maxSerializedBytes:32*1024}),zN=Object.freeze({maxCriteria:1024})});import ZN from"node:path";function eE(t,e){if(t.length===0||t!==t.trim()||t.includes("\\")||ZN.posix.isAbsolute(t)||/^(?:[A-Za-z]:|~)/u.test(t)||t.split("/").includes("..")||ZN.posix.normalize(t)!==t||t==="."||t.endsWith("/"))throw new Error(`${e} must be a normalized change-relative ref`);return t}function iD(t,e){return t.localeCompare(e,"en")}function tE(t){let e=eE(t.briefSource??"brief.md","Native brief source"),r=[...t.specs??[]].sort((a,s)=>iD(a.capability,s.capability));if(new Set(r.map(a=>a.capability)).size!==r.length)throw new Error("Native acceptance sources contain duplicate capabilities");let n=YN(t.briefMarkdown,e,Number.MAX_SAFE_INTEGER,"none").map(({source:a,text:s})=>({source:a,text:s})),i=n.length;for(let a of r){let s=eE(a.source,`Native spec source for ${a.capability}`);for(let c of XN(a.markdown,s,Number.MAX_SAFE_INTEGER,"none",{resolveBriefReferences:t.resolveBriefReferences===!0})){if(c.briefAcceptanceRef!==void 0){let l=Number(c.briefAcceptanceRef.slice(1))-1;if(!Number.isSafeInteger(l)||l<0||l>=i)throw new Error(`Native Spec references unknown brief acceptance ${c.briefAcceptanceRef}: ${s}`);continue}n.push({source:s,text:c.text})}}let o=new Set;for(let a of n){a.text=ls(a.text);let s=a.text;if(o.has(s))throw new Error(`Native acceptance contains a duplicate criterion: ${a.text}`);o.add(s)}if(n.length===0)throw new Error("Native change must define at least one acceptance criterion");return n.map((a,s)=>({id:`A${s+1}`,source:a.source,text:a.text}))}function rE(t,e){return t.length===e.length&&t.every((r,n)=>r.source===e[n]?.source&&r.text===e[n]?.text)}var bh=A(()=>{"use strict";QN()});function Sh(t,e,r,n=""){let i=Object.keys(t),o=e.filter(s=>!Object.hasOwn(t,s)),a=i.filter(s=>!e.includes(s));if(o.length||a.length)throw new kh({code:"invalid-fields",path:n,context:r,missingFields:o,unknownFields:a,expectedFields:[...e]})}var kh,Nh=A(()=>{"use strict";kh=class extends Error{issues;constructor(e){let r=[e.missingFields.length?`missing: ${e.missingFields.join(", ")}`:"",e.unknownFields.length?`unknown: ${e.unknownFields.join(", ")}`:""].filter(Boolean).join("; ");super(`${e.context} fields are invalid at ${e.path||"/"} (${r})`),this.name="NativeInputValidationError",this.issues=[e]}}});function Eh(t,e){if(typeof t!="string"||!t.trim()||t.length>4e3||/^<[^>]+>$/u.test(t.trim()))throw new Error(`${e} must contain a concrete statement of at most 4000 characters`);return t.trim()}function xh(t){if(!Array.isArray(t))throw new Error("Native Builder acceptance_review must be an array");return t.map((e,r)=>{if(!e||typeof e!="object"||Array.isArray(e))throw new Error("Native Builder acceptance review entry must be an object");let n=e,i=`Native Builder acceptance_review[${r}]`;Sh(n,["id","status","evidence","note"],i,`/acceptance_review/${r}`);let o=n.status;if(!["implemented-with-evidence","implemented-no-evidence","not-implemented","known-fail"].includes(o))throw new Error(`${i}.status is invalid`);if(!Array.isArray(n.evidence))throw new Error(`${i}.evidence must be an array`);return{id:Eh(n.id,`${i}.id`),status:o,evidence:n.evidence.map(a=>Eh(a,`${i}.evidence`)),note:Eh(n.note,`${i}.note`)}})}function Ph(t,e){if(!e)throw new gd(t.map(({id:c})=>c),[]);let r=new Set(t.map(({id:c})=>c)),n=e.map(({id:c})=>c),i=new Set(n);if(i.size!==n.length)throw new Error("Native Builder acceptance_review contains duplicate IDs");let o=n.filter(c=>!r.has(c));if(o.length)throw new Error(`Native Builder acceptance_review contains unknown IDs: ${o.join(", ")}`);let a=t.filter(({id:c})=>!i.has(c)).map(({id:c})=>c),s=e.filter(c=>c.status!=="implemented-with-evidence"||c.evidence.length===0).map(({id:c})=>c);if(a.length||s.length)throw new gd(a,s)}var gd,Ch=A(()=>{"use strict";Nh();gd=class extends Error{constructor(r,n){super(`Native Builder handoff is incomplete${r.length?`; missing: ${r.join(", ")}`:""}${n.length?`; not ready: ${n.join(", ")}`:""}. Complete acceptance_review for every requirement and its evidence before Verify`);this.missingIds=r;this.incompleteIds=n}missingIds;incompleteIds}});var ds,us,yd=A(()=>{"use strict";ds="comet.native.v4",us="comet.native.local-execution.v4"});import{promises as aD}from"node:fs";function Te(t,e){if(!t||typeof t!="object"||Array.isArray(t))throw new Error(`${e} must be an object`);return t}function $e(t,e,r){let n=Object.keys(t).filter(i=>!e.has(i));if(n.length>0)throw new Error(`${r} has unknown field(s): ${n.join(", ")}`)}function me(t,e,r){if(typeof t!="string"||!r?.empty&&t.length===0)throw new Error(`${e} must be ${r?.empty?"a string":"a non-empty string"}`);return t}function Ah(t,e){return t===null?null:me(t,e)}function _h(t,e){let r=me(t,e);if(!dD.test(r))throw new Error(`${e} must be a SHA-256 hash`);return r}function wo(t,e){if(typeof t!="boolean")throw new Error(`${e} must be a boolean`);return t}function Z(t,e,r=0){if(!Number.isSafeInteger(t)||t<r)throw new Error(`${e} must be a safe integer greater than or equal to ${r}`);return t}function pD(t,e){return t===null?null:Z(t,e,Number.MIN_SAFE_INTEGER)}function le(t,e,r){if(typeof t!="string"||!e.includes(t))throw new Error(`${r} must be one of: ${e.join(", ")}`);return t}function Qt(t,e,r){if(!Array.isArray(t))throw new Error(`${e} must be an array`);return t.map((n,i)=>r(n,i))}function Sd(t,e){return Qt(t,e,(r,n)=>me(r,`${e}[${n}]`))}function si(t,e){if(new Set(t).size!==t.length)throw new Error(`${e} must be unique`)}function bo(t,e){let r=me(t,e);if(Number.isNaN(Date.parse(r)))throw new Error(`${e} must be an ISO date or timestamp`);return r}function bd(t,e,r=!1){let n=me(t,e);if(n.includes("\\")||n.startsWith("/")||/^[A-Za-z]:/u.test(n)||n.split("/").includes("..")||!r&&(n==="."||n.split("/").includes(".")))throw new Error(`${e} must be a portable relative path`);return n}function ft(t,e){let r=Te(t,e);return $e(r,new Set(["text","truncated"]),e),{text:me(r.text,`${e}.text`,{empty:!0}),truncated:wo(r.truncated,`${e}.truncated`)}}function fD(t,e){let r=`Native spec_changes[${e}]`,n=Te(t,r);$e(n,new Set(["capability","operation","source","delta_source","base_hash"]),r);let i=me(n.capability,`${r}.capability`);if(!cD.test(i))throw new Error(`${r}.capability is invalid`);let o=le(n.operation,["create","modify","remove"],`${r}.operation`),a=n.source===null?null:bd(n.source,`${r}.source`),s=n.delta_source===void 0?void 0:bd(n.delta_source,`${r}.delta_source`),c=n.base_hash===void 0?void 0:n.base_hash===null?null:_h(n.base_hash,`${r}.base_hash`);if(o==="remove"&&a!==null)throw new Error(`${r} remove requires source null`);if(o!=="remove"&&a===null)throw new Error(`${r} ${o} requires a source`);if(s!==void 0&&o==="remove")throw new Error(`${r} remove cannot contain delta_source`);if(s!==void 0&&c==null)throw new Error(`${r} delta_source requires a non-null base_hash`);if(c!==void 0&&s===void 0&&o!=="remove")throw new Error(`${r} base_hash requires delta_source for non-remove specs`);return{capability:i,operation:o,source:a,...s===void 0?{}:{delta_source:s},...c===void 0?{}:{base_hash:c}}}function mD(t){let e="Native workspace",r=Te(t,e);$e(r,new Set(["isolation","change_branch","target_branch","finish"]),e);let n=le(r.isolation,["current","branch","worktree"],`${e}.isolation`),i=Ah(r.change_branch,`${e}.change_branch`),o=Ah(r.target_branch,`${e}.target_branch`),a=r.finish===null?null:le(r.finish,["merge","push","pull-request","keep"],`${e}.finish`);if(n==="current"&&a!==null)throw new Error("Native current workspace cannot contain a finish action");if(n==="current"&&i===null!=(o===null))throw new Error("Native workspace branch bindings must both be present or both be null");if(n!=="current"&&(i===null||o===null))throw new Error("Native isolated workspace requires change_branch and target_branch");return{isolation:n,change_branch:i,target_branch:o,finish:a}}function hD(t){let e="Native loop",r=Te(t,e);$e(r,new Set(["stage","goal_cycle","iteration","attempt","retry_epoch","failed_iteration_count","no_progress_count","stop_reason","execution_failure_count","previous_unresolved_ids","next_action"]),e);let n=Sd(r.previous_unresolved_ids,`${e}.previous_unresolved_ids`);si(n,`${e}.previous_unresolved_ids`);let i=r.stop_reason===void 0?void 0:le(r.stop_reason,["budget","stalled"],`${e}.stop_reason`);return{stage:le(r.stage,["shape","building","verify-ready","repairing","archive-ready","await-user","blocked","done"],`${e}.stage`),goal_cycle:Z(r.goal_cycle,`${e}.goal_cycle`,1),iteration:Z(r.iteration,`${e}.iteration`),attempt:Z(r.attempt,`${e}.attempt`),retry_epoch:Z(r.retry_epoch,`${e}.retry_epoch`),failed_iteration_count:Z(r.failed_iteration_count,`${e}.failed_iteration_count`),no_progress_count:Z(r.no_progress_count,`${e}.no_progress_count`),...i===void 0?{}:{stop_reason:i},execution_failure_count:Z(r.execution_failure_count,`${e}.execution_failure_count`),previous_unresolved_ids:n,next_action:Ah(r.next_action,`${e}.next_action`)}}function gD(t,e){let r=`Native acceptance[${e}]`,n=Te(t,r);$e(n,new Set(["id","source","text","result","reason"]),r);let i=me(n.id,`${r}.id`);if(!lD.test(i))throw new Error(`${r}.id must use A1, A2, ...`);return{id:i,source:bd(n.source,`${r}.source`),text:me(n.text,`${r}.text`),result:le(n.result,["pending","passed","failed","blocked"],`${r}.result`),reason:n.reason===null?null:ft(n.reason,`${r}.reason`)}}function yD(t,e){let r=`Native builder_handoff.checks[${e}]`,n=Te(t,r);return $e(n,new Set(["name","result","note"]),r),{name:ft(n.name,`${r}.name`),result:le(n.result,["passed","failed","not-run"],`${r}.result`),note:n.note===null?null:ft(n.note,`${r}.note`)}}function vD(t){let e="Native builder_handoff",r=Te(t,e);$e(r,new Set(["candidate_id","identity_provider","builder_execution_ref","iteration","summary","addressed_acceptance_ids","acceptance_review","checks","checks_truncated","known_limits","known_limits_truncated","review","submitted_at"]),e);let n=Sd(r.addressed_acceptance_ids,`${e}.addressed_acceptance_ids`);si(n,`${e}.addressed_acceptance_ids`);let i=r.review===null||r.review===void 0?null:Te(r.review,`${e}.review`);return i&&$e(i,new Set(["status","summary","reviewer_execution_ref"]),`${e}.review`),{candidate_id:me(r.candidate_id,`${e}.candidate_id`),identity_provider:me(r.identity_provider,`${e}.identity_provider`),builder_execution_ref:me(r.builder_execution_ref,`${e}.builder_execution_ref`),iteration:Z(r.iteration,`${e}.iteration`,1),summary:ft(r.summary,`${e}.summary`),addressed_acceptance_ids:n,...r.acceptance_review===void 0?{}:{acceptance_review:xh(r.acceptance_review)},checks:Qt(r.checks,`${e}.checks`,yD),checks_truncated:wo(r.checks_truncated,`${e}.checks_truncated`),known_limits:Qt(r.known_limits,`${e}.known_limits`,(o,a)=>ft(o,`${e}.known_limits[${a}]`)),known_limits_truncated:wo(r.known_limits_truncated,`${e}.known_limits_truncated`),review:i?{status:le(i.status,["passed"],`${e}.review.status`),summary:ft(i.summary,`${e}.review.summary`),reviewer_execution_ref:me(i.reviewer_execution_ref,`${e}.review.reviewer_execution_ref`)}:null,submitted_at:bo(r.submitted_at,`${e}.submitted_at`)}}function wD(t,e){let r=`Native blockers[${e}]`,n=Te(t,r);$e(n,new Set(["owner","reason","acceptance_ids","resolution_action"]),r);let i=Sd(n.acceptance_ids,`${r}.acceptance_ids`);return si(i,`${r}.acceptance_ids`),{owner:le(n.owner,["builder","runtime","verifier","user","external"],`${r}.owner`),reason:ft(n.reason,`${r}.reason`),acceptance_ids:i,resolution_action:le(n.resolution_action,["return-build","retry-verifier","resolve-verifier-blocker","confirm-verifier-unavailable","await-user","wait-external"],`${r}.resolution_action`)}}function bD(t,e){let r=`Native verification.checks[${e}]`,n=Te(t,r);return $e(n,new Set(["id","name","argv_display","argv_truncated","cwd_ref","status","exit_code","duration_ms"]),r),{id:me(n.id,`${r}.id`),name:ft(n.name,`${r}.name`),argv_display:Qt(n.argv_display,`${r}.argv_display`,(i,o)=>ft(i,`${r}.argv_display[${o}]`)),argv_truncated:wo(n.argv_truncated,`${r}.argv_truncated`),cwd_ref:bd(n.cwd_ref,`${r}.cwd_ref`,!0),status:le(n.status,["passed","failed","interrupted"],`${r}.status`),exit_code:pD(n.exit_code,`${r}.exit_code`),duration_ms:Z(n.duration_ms,`${r}.duration_ms`)}}function kD(t){let e="Native verification",r=Te(t,e);$e(r,new Set(["candidate_id","identity_provider","verifier_execution_ref","iteration","attempt","assurance","verdict","checks","summary","risks","risks_truncated","completed_at"]),e);let n=Qt(r.checks,`${e}.checks`,bD);si(n.map(o=>o.id),`${e}.checks IDs`);let i=me(r.identity_provider,`${e}.identity_provider`);return{candidate_id:me(r.candidate_id,`${e}.candidate_id`),identity_provider:i,verifier_execution_ref:me(r.verifier_execution_ref,`${e}.verifier_execution_ref`),iteration:Z(r.iteration,`${e}.iteration`,1),attempt:Z(r.attempt,`${e}.attempt`,1),assurance:r.assurance===void 0?i==="skill-coordinated"?"skill-coordinated":"host-attested":le(r.assurance,["host-attested","skill-coordinated","semantic-verification-unavailable","user-confirmed-degraded"],`${e}.assurance`),verdict:le(r.verdict,["pass","fail","blocked"],`${e}.verdict`),checks:n,summary:ft(r.summary,`${e}.summary`),risks:Qt(r.risks,`${e}.risks`,(o,a)=>ft(o,`${e}.risks[${a}]`)),risks_truncated:wo(r.risks_truncated,`${e}.risks_truncated`),completed_at:bo(r.completed_at,`${e}.completed_at`)}}function nE(t,e){let r=`Native history[${e}]`,n=Te(t,r);$e(n,new Set(["goal_cycle","iteration","attempt","outcome","unresolved_ids","summary","completed_at"]),r);let i=Sd(n.unresolved_ids,`${r}.unresolved_ids`);return si(i,`${r}.unresolved_ids`),{goal_cycle:Z(n.goal_cycle,`${r}.goal_cycle`,1),iteration:Z(n.iteration,`${r}.iteration`),attempt:Z(n.attempt,`${r}.attempt`),outcome:le(n.outcome,["pass","fail","blocked","execution-error","recovery"],`${r}.outcome`),unresolved_ids:i,summary:ft(n.summary,`${r}.summary`),completed_at:bo(n.completed_at,`${r}.completed_at`)}}function SD(t){let e="Native history_overflow.outcome_counts",r=Te(t,e),n=["pass","fail","blocked","execution-error","recovery"];return $e(r,new Set(n),e),{pass:Z(r.pass,`${e}.pass`),fail:Z(r.fail,`${e}.fail`),blocked:Z(r.blocked,`${e}.blocked`),"execution-error":Z(r["execution-error"],`${e}.execution-error`),recovery:Z(r.recovery,`${e}.recovery`)}}function ND(t){let e="Native history_overflow",r=Te(t,e);$e(r,new Set(["dropped_entries","first_dropped_at","last_dropped_at","outcome_counts"]),e);let n=Z(r.dropped_entries,`${e}.dropped_entries`),i=r.first_dropped_at===null?null:bo(r.first_dropped_at,`${e}.first_dropped_at`),o=r.last_dropped_at===null?null:bo(r.last_dropped_at,`${e}.last_dropped_at`);if(n===0&&(i!==null||o!==null))throw new Error("Native empty history overflow cannot contain dropped timestamps");if(n>0&&(i===null||o===null))throw new Error("Native non-empty history overflow requires dropped timestamps");let a=SD(r.outcome_counts);if(Object.values(a).reduce((c,l)=>c+l,0)!==n)throw new Error("Native history overflow outcome count must equal dropped_entries");return{dropped_entries:n,first_dropped_at:i,last_dropped_at:o,outcome_counts:a}}function ED(t){let e=new Set(t.acceptance.map(r=>r.id));for(let r of t.loop.previous_unresolved_ids)if(!e.has(r))throw new Error(`Native loop references unknown acceptance ID ${r}`);for(let r of t.builder_handoff?.addressed_acceptance_ids??[])if(!e.has(r))throw new Error(`Native builder handoff references unknown ID ${r}`);t.builder_handoff?.acceptance_review&&Ph(t.acceptance,t.builder_handoff.acceptance_review);for(let r of t.blockers)for(let n of r.acceptance_ids)if(!e.has(n))throw new Error(`Native blocker references unknown ID ${n}`);if(t.builder_handoff){if(!(t.builder_handoff.iteration===t.loop.iteration||t.phase==="build"&&t.loop.stage==="repairing"&&t.builder_handoff.iteration===t.loop.iteration-1))throw new Error("Native builder handoff iteration is not current or the prior repair result");if(t.builder_handoff.review?.reviewer_execution_ref===t.builder_handoff.builder_execution_ref)throw new Error("Native reviewer execution ref must differ from the Builder execution ref")}if(t.verification){if(!t.builder_handoff)throw new Error("Native verification requires a builder handoff");if(t.verification.candidate_id!==t.builder_handoff.candidate_id)throw new Error("Native verification candidate must match the builder handoff");if(t.verification.identity_provider!==t.builder_handoff.identity_provider)throw new Error("Native Builder and Verifier identity providers must match");if(["skill-coordinated","semantic-verification-unavailable","user-confirmed-degraded"].includes(t.verification.assurance)!==(t.verification.identity_provider==="skill-coordinated"))throw new Error("Native verification assurance does not match its identity provider");if(t.verification.assurance==="semantic-verification-unavailable"&&t.verification.verdict!=="blocked")throw new Error("Native unavailable semantic verification must remain blocked");if(t.verification.assurance==="user-confirmed-degraded"&&t.verification.verdict!=="pass")throw new Error("Native user-confirmed degraded verification must be passing");if(t.verification.verifier_execution_ref===t.builder_handoff.builder_execution_ref)throw new Error("Native Builder and Verifier execution refs must differ");let n=t.verification.iteration===t.loop.iteration&&t.verification.attempt===t.loop.attempt,i=t.phase==="build"&&t.loop.stage==="repairing"&&t.verification.iteration===t.loop.iteration-1&&t.verification.iteration===t.builder_handoff.iteration;if(!n&&!i)throw new Error("Native verification iteration and attempt do not match a stable loop result")}}function xD(t){if(!{shape:new Set(["shape","await-user","blocked"]),build:new Set(["building","repairing","await-user","blocked"]),verify:new Set(["verify-ready","await-user","blocked"]),archive:new Set(["archive-ready","await-user","blocked","done"])}[t.phase].has(t.loop.stage))throw new Error(`Native loop stage ${t.loop.stage} is invalid for phase ${t.phase}`);let r=t.status==="await-user"?"await-user":t.status==="blocked"?"blocked":t.status==="done"?"done":null;if(r!==null&&t.loop.stage!==r)throw new Error(`Native status ${t.status} requires loop stage ${r}`);if(t.status==="active"&&["await-user","blocked","done"].includes(t.loop.stage))throw new Error(`Native active status cannot use loop stage ${t.loop.stage}`);if(t.archived!==(t.status==="done"))throw new Error("Native archived must be true exactly when status is done");if(t.archived&&t.phase!=="archive")throw new Error("Native archived state must be in Archive");if(t.verification_result==="pass"){if(t.verification?.verdict!=="pass")throw new Error("Native pass requires a persisted passing verification");if(t.acceptance.some(n=>n.result!=="passed"))throw new Error("Native pass requires every acceptance item to pass");if(t.verification.checks.some(n=>n.status!=="passed"))throw new Error("Native pass requires every persisted check to pass")}if(t.verification?.assurance==="semantic-verification-unavailable"&&(t.phase!=="verify"||t.status!=="await-user"||t.verification_result!=="blocked"||t.loop.next_action!=="confirm-verifier-unavailable"))throw new Error("Native unavailable semantic verification must await explicit user confirmation");if(t.verification_report!==null&&t.verification===null)throw new Error("Native verification report requires persisted verification")}function Ot(t){let e=Te(t,"Native portable state");if($e(e,uD,"Native portable state"),e.schema!==ds)throw new Error(`Native portable state schema must be ${ds}`);let r=me(e.name,"Native state name");if(!sD.test(r))throw new Error("Native state name is invalid");if(e.brief!=="brief.md")throw new Error("Native state brief must be brief.md");let n=Qt(e.spec_changes,"Native spec_changes",fD);si(n.map(s=>s.capability),"Native spec change capabilities");let i=Qt(e.acceptance,"Native acceptance",gD);si(i.map(s=>s.id),"Native acceptance IDs");let o=Qt(e.history,"Native history",nE);if(o.length>50)throw new Error(`Native history cannot exceed ${50} entries`);let a={schema:ds,name:r,language:le(e.language,["en","zh-CN"],"Native state language"),phase:le(e.phase,["shape","build","verify","archive"],"Native state phase"),status:le(e.status,["active","await-user","blocked","done"],"Native state status"),state_version:Z(e.state_version,"Native state_version",1),brief:"brief.md",...e.document_constraints_version===void 0?{}:e.document_constraints_version===1||e.document_constraints_version===2?{document_constraints_version:e.document_constraints_version}:(()=>{throw new Error("Native document_constraints_version must be 1 or 2")})(),...e.shape_confirmation_hash===void 0?{}:{shape_confirmation_hash:_h(e.shape_confirmation_hash,"Native Shape confirmation hash")},...e.children_contract_hash===void 0?{}:{children_contract_hash:_h(e.children_contract_hash,"Native children contract hash")},...e.coordination_mode===void 0?{}:{coordination_mode:le(e.coordination_mode,["multi-session","single-session"],"Native coordination mode")},spec_changes:n,workspace:mD(e.workspace),loop:hD(e.loop),acceptance:i,builder_handoff:e.builder_handoff===null?null:vD(e.builder_handoff),blockers:Qt(e.blockers,"Native blockers",wD),verification:e.verification===null?null:kD(e.verification),history:o,history_overflow:ND(e.history_overflow),verification_result:le(e.verification_result,["pending","pass","fail","blocked"],"Native verification_result"),verification_report:e.verification_report===null?null:le(e.verification_report,["verification.md"],"Native verification_report"),archived:wo(e.archived,"Native archived"),created_at:bo(e.created_at,"Native created_at")};return ED(a),xD(a),a}function ko(t,e){let r=Ot(t),n=nE(e,r.history.length),i=[...r.history,n],o={...r.history_overflow,outcome_counts:{...r.history_overflow.outcome_counts}};for(;i.length>50;){let a=i.shift();o.dropped_entries+=1,o.first_dropped_at??=a.completed_at,o.last_dropped_at=a.completed_at,o.outcome_counts[a.outcome]+=1}return Ot({...r,history:i,history_overflow:o})}function PD(t,e){let r=(0,kd.parseDocument)(t,{uniqueKeys:!0});if(r.errors.length>0)throw new Error(`${e} is invalid YAML: ${r.errors[0].message}`);return r.toJS({mapAsMap:!1})}async function ps(t){let e=await aD.readFile(t,"utf8");return Ot(PD(e,"Native portable state"))}async function iE(t,e,r={}){let n=Ot(e);await Rr(t,(0,kd.stringify)(n),r)}async function CD(t,e){let r=vd.get(t)??Promise.resolve(),n,i=new Promise(a=>{n=a}),o=r.then(()=>i);vd.set(t,o),await r;try{return await e()}finally{n(),vd.get(t)===o&&vd.delete(t)}}async function oE(t){return CD(t.file,async()=>{let e=Z(t.expectedStateVersion,"Native expected state version",1),r=Ot(t.next);if(r.state_version!==e+1)throw new Error("Native CAS next state_version must increment exactly once");let n=await ps(t.file);if(n.state_version===r.state_version&&JSON.stringify(n)===JSON.stringify(r))return n;if(n.state_version!==e)throw new wd(e,n.state_version);return await iE(t.file,r,{...t.containedRoot?{containedRoot:t.containedRoot}:{},beforeCommit:async()=>{let i=await ps(t.file);if(i.state_version!==e)throw new wd(e,i.state_version)}}),r})}var kd,sD,cD,lD,dD,uD,wd,vd,Sn=A(()=>{"use strict";Ch();kd=Ce(Ne(),1);ke();yd();sD=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/u,cD=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/u,lD=/^A[1-9][0-9]*$/u,dD=/^[a-f0-9]{64}$/u,uD=new Set(["schema","name","language","phase","status","state_version","brief","document_constraints_version","shape_confirmation_hash","children_contract_hash","coordination_mode","spec_changes","workspace","loop","acceptance","builder_handoff","blockers","verification","history","history_overflow","verification_result","verification_report","archived","created_at"]),wd=class extends Error{constructor(r,n){super(`Native state version conflict: expected ${r}, got ${n}`);this.expectedStateVersion=r;this.actualStateVersion=n;this.name="NativePortableStateVersionConflictError"}expectedStateVersion;actualStateVersion;code="native-state-version-conflict"};vd=new Map});function RD(t){if(!Number.isSafeInteger(t)||t<0)throw new Error("Native portable text byte budget must be a non-negative safe integer")}function Tr(t,e=16384){if(typeof t!="string")throw new Error("Native portable text must be a string");if(RD(e),Buffer.byteLength(t,"utf8")<=e)return{text:t,truncated:!1};let r="",n=0;for(let i of t){let o=Buffer.byteLength(i,"utf8");if(n+o>e)break;r+=i,n+=o}return{text:r,truncated:!0}}var ci=A(()=>{"use strict"});function $D(t,e){if(!t||typeof t!="object"||Array.isArray(t))throw new Error(`${e} must be an object`);return t}function OD(t,e){if(typeof t!="string")throw new Error(`${e} must be an ISO timestamp`);let r=new Date(t);if(Number.isNaN(r.valueOf())||r.toISOString()!==t)throw new Error(`${e} must be a canonical ISO timestamp`);return t}function sE(t){let e=$D(t,"Native portable migration transaction"),r=Object.keys(e).filter(n=>!AD.has(n));if(r.length>0)throw new Error(`Native portable migration transaction has unknown field(s): ${r.join(", ")}`);if(e.schema!==aE)throw new Error("Unsupported Native portable migration transaction schema");if(typeof e.id!="string"||!jD.test(e.id))throw new Error("Native portable migration transaction id is invalid");if(typeof e.change!="string"||!_D.test(e.change))throw new Error("Native portable migration transaction change is invalid");if(typeof e.fromSchema!="string"||!TD.has(e.fromSchema))throw new Error("Native portable migration transaction fromSchema is invalid");if(typeof e.status!="string"||!ID.has(e.status))throw new Error("Native portable migration transaction status is invalid");return{schema:aE,id:e.id,change:e.change,fromSchema:e.fromSchema,status:e.status,createdAt:OD(e.createdAt,"Native portable migration transaction createdAt")}}var aE,AD,_D,jD,ID,TD,cE=A(()=>{"use strict";md();bh();Sn();ci();yd();dd();aE="comet.native.portable-migration.v1",AD=new Set(["schema","id","change","fromSchema","status","createdAt"]),_D=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/u,jD=/^[a-z0-9][a-z0-9-]{7,127}$/u,ID=new Set(["prepared","yaml-committed","legacy-cleanup","committed"]),TD=new Set([jr,_r,Xt])});import MD from"node:path";function fE(t,e){if(!t||typeof t!="object"||Array.isArray(t))throw new Error(`${e} must be an object`);return t}function mE(t,e,r){let n=Object.keys(t).filter(i=>!e.has(i));if(n.length>0)throw new Error(`${r} has unknown field(s): ${n.join(", ")}`)}function jh(t,e){if(t!==void 0){if(t===null)return null;if(typeof t!="string"||!/^[a-f0-9]{64}$/iu.test(t))throw new Error(`${e} must be a SHA-256 hash or null`);return t.toLowerCase()}}function dE(t,e){if(t!==void 0){if(t!==null&&typeof t!="string")throw new Error(`${e} must be text or null`);return t}}function VD(t,e){let r=`Native portable Archive spec_changes[${e}]`,n=fE(t,r);if(mE(n,WD,r),typeof n.capability!="string"||!pE.test(n.capability))throw new Error(`${r}.capability is invalid`);if(!["create","modify","remove"].includes(String(n.operation)))throw new Error(`${r}.operation is invalid`);let i=n.operation,o=n.delta_source;if(o!==void 0&&(typeof o!="string"||o.length===0||o.includes("\\")||o.startsWith("/")||/^[A-Za-z]:/u.test(o)||o.split("/").some(p=>p==="."||p==="..")))throw new Error(`${r}.delta_source is invalid`);let a=jh(n.base_hash,`${r}.base_hash`),s=dE(n.delta_content,`${r}.delta_content`),c=dE(n.source_content,`${r}.source_content`),l=jh(n.expected_target_hash,`${r}.expected_target_hash`),d=jh(n.result_hash,`${r}.result_hash`),u=o!==void 0;if(u&&a==null)throw new Error(`${r}.delta_source requires a non-null base_hash`);if(u&&(s==null||c===void 0||c===null||d===void 0||d===null))throw new Error(`${r}.delta_source requires delta_content, source_content, and result_hash`);if(!u&&(s!==void 0||c!==void 0))throw new Error(`${r} delta transaction fields require delta_source`);if(u){let p=as(s);if(p.capability!==n.capability)throw new Error(`${r}.delta_content capability does not match capability`);if(p.base_hash!==a)throw new Error(`${r}.delta_content base_hash does not match base_hash`);if(Ar(n.content)!==d)throw new Error(`${r}.content does not match result_hash`);if(Ar(c)!==d)throw new Error(`${r}.source_content does not match result_hash`)}if(i==="remove"){if(n.source!==null||n.content!==null||o!==void 0||s!==void 0||c!==void 0||d!==void 0)throw new Error(`${r} remove requires source and content null`);return{capability:n.capability,operation:i,source:null,content:null,...a===void 0?{}:{base_hash:a},...l===void 0?{}:{expected_target_hash:l}}}if(typeof n.source!="string"||n.source.length===0||n.source.includes("\\")||n.source.startsWith("/")||/^[A-Za-z]:/u.test(n.source)||n.source.split("/").some(p=>p==="."||p===".."))throw new Error(`${r}.${i} source is invalid`);if(typeof n.content!="string")throw new Error(`${r}.${i} content is invalid`);if(d!==void 0&&(d===null||Ar(n.content)!==d))throw new Error(`${r}.content does not match result_hash`);return{capability:n.capability,operation:i,source:n.source,content:n.content,...o===void 0?{}:{delta_source:o},...a===void 0?{}:{base_hash:a},...s===void 0?{}:{delta_content:s},...c===void 0?{}:{source_content:c},...l===void 0?{}:{expected_target_hash:l},...d===void 0?{}:{result_hash:d}}}function qD(t){let e=fE(t,"Native portable Archive transaction");if(mE(e,HD,"Native portable Archive transaction"),e.schema!==lE)throw new Error("Unsupported Native portable Archive transaction schema");if(typeof e.id!="string"||!BD.test(e.id))throw new Error("Native portable Archive transaction id is invalid");if(typeof e.change!="string"||!pE.test(e.change))throw new Error("Native portable Archive transaction change is invalid");if(!Number.isSafeInteger(e.start_state_version)||Number(e.start_state_version)<0)throw new Error("Native portable Archive transaction state version is invalid");if(typeof e.archive_ref!="string"||!FD.test(e.archive_ref)||!e.archive_ref.endsWith(`-${e.change}`))throw new Error("Native portable Archive transaction ref is invalid");if(typeof e.status!="string"||!KD.has(e.status))throw new Error("Native portable Archive transaction status is invalid");if(!Array.isArray(e.spec_changes))throw new Error("Native portable Archive transaction spec changes are invalid");let r=e.spec_changes.map(VD);if(new Set(r.map(({capability:i})=>i)).size!==r.length)throw new Error("Native portable Archive transaction capabilities must be unique");if(!Number.isSafeInteger(e.next_spec_index)||Number(e.next_spec_index)<0||Number(e.next_spec_index)>r.length)throw new Error("Native portable Archive transaction spec cursor is invalid");if(typeof e.created_at!="string")throw new Error("Native portable Archive transaction timestamp is invalid");let n=new Date(e.created_at);if(Number.isNaN(n.valueOf())||n.toISOString()!==e.created_at)throw new Error("Native portable Archive transaction timestamp is invalid");return{schema:lE,id:e.id,change:e.change,start_state_version:Number(e.start_state_version),archive_ref:e.archive_ref,status:e.status,next_spec_index:Number(e.next_spec_index),spec_changes:r,created_at:e.created_at}}function Ih(t){let e=LD.exec(t);if(e)return{kind:"archive",change:e[1]};let r=DD.exec(t);return r?{kind:"migration",change:r[1]}:null}async function hE(t,e){let r=Ih(e);if(!r)return null;let n=await ne({root:t.transactionsDir,ref:e,maxBytes:null,includeHash:!1}),i=JSON.parse(n.text),o=MD.join(t.transactionsDir,e);if(r.kind==="archive"){let s=qD(i);if(s.change!==r.change)throw new Error(`Native portable transaction filename does not match ${s.change}`);return{kind:"archive",change:r.change,file:o,journal:s}}let a=sE(i);if(a.change!==r.change)throw new Error(`Native portable transaction filename does not match ${a.change}`);return{kind:"migration",change:r.change,file:o,journal:a}}function gE(t){return t.kind==="archive"||t.journal.status!=="committed"}var lE,uE,LD,DD,BD,FD,KD,HD,WD,pE,Th=A(()=>{"use strict";wn();ld();cE();lE="comet.native.archive-transaction.v4",uE="[a-z][a-z0-9]*(?:-[a-z0-9]+)*",LD=new RegExp(`^portable-archive-(${uE})\\.json$`,"u"),DD=new RegExp(`^portable-migration-(${uE})\\.json$`,"u"),BD=/^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/iu,FD=/^\d{4}-\d{2}-\d{2}-[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/u,KD=new Set(["prepared","specs-applied","state-finalized","report-aligned","moved"]),HD=new Set(["schema","id","change","start_state_version","archive_ref","status","next_spec_index","spec_changes","created_at"]),WD=new Set(["capability","operation","source","content","delta_source","base_hash","delta_content","source_content","expected_target_hash","result_hash"]),pE=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/u});import{createHash as zD}from"node:crypto";import{constants as Nd,promises as Mt}from"node:fs";import Lt from"node:path";import{TextDecoder as GD}from"node:util";function xd(t,e){let r=Lt.relative(t,e);return r===""||!Lt.isAbsolute(r)&&r!==".."&&!r.startsWith(`..${Lt.sep}`)}function UD(t){if(!Number.isSafeInteger(t)||t<1)throw new Error("Native protected file byte limit must be a positive integer");return t}function JD(t,e){return Y({...t,birthtime:t.birthtimeMs},{...e,birthtime:e.birthtimeMs})}function YD(t){return{dev:t.dev,ino:t.ino,birthtimeMs:t.birthtimeMs,ctimeMs:t.ctimeMs,mtimeMs:t.mtimeMs,size:t.size}}function Ed(t,e){return Y({...t,birthtime:t.birthtimeMs},{...e,birthtime:e.birthtimeMs})&&t.birthtimeMs===e.birthtimeMs&&t.ctimeMs===e.ctimeMs&&t.mtimeMs===e.mtimeMs&&t.size===e.size}async function $h(t,e){let r=await Mt.lstat(t);if(!r.isDirectory()||r.isSymbolicLink())throw new Error(`${e} parent must be a real directory: ${t}`);return{path:t,realPath:await Mt.realpath(t),dev:r.dev,ino:r.ino,birthtimeMs:r.birthtimeMs}}async function XD(t,e,r){let n=Lt.resolve(t),i=Lt.resolve(e);if(!xd(n,i))throw new Error(`${r} is outside its managed root`);let o=[await $h(n,r)],a=n;for(let s of Lt.relative(n,i).split(Lt.sep).filter(Boolean)){await li(o,r),a=Lt.join(a,s);let c=await $h(a,r);if(!xd(o[0].realPath,c.realPath))throw new Error(`${r} parent resolves outside its managed root: ${a}`);o.push(c)}return await li(o,r),o}async function li(t,e){for(let r of t){let n=await Mt.lstat(r.path);if(!n.isDirectory()||n.isSymbolicLink()||!JD(r,n)||await Mt.realpath(r.path)!==r.realPath)throw new Error(`${e} parent changed during I/O: ${r.path}`)}}async function QD(t,e,r){let n=[],i=0,o=Buffer.allocUnsafe(e===null?64*1024:Math.min(64*1024,e+1));for(;;){let a=e===null?o.length:e+1-i,{bytesRead:s}=await t.read(o,0,Math.min(o.length,a),null);if(s===0)break;if(i+=s,e!==null&&i>e)throw new Error(`${r} exceeds ${e} bytes`);n.push(Buffer.from(o.subarray(0,s)))}return Buffer.concat(n,i)}async function Oh(t){let e=t.maxBytes===null?null:UD(t.maxBytes),r=Lt.resolve(t.file),n=await XD(t.root,Lt.dirname(r),t.label),i=await Promise.all((t.forbiddenRoots??[]).map(d=>$h(Lt.resolve(d),t.label)));await t.hooks?.afterParentChainCaptured?.(),await li(n,t.label);let o=await Mt.lstat(r);if(!o.isFile()||o.isSymbolicLink())throw new Error(`${t.label} must be a regular file`);if(e!==null&&o.size>e)throw new Error(`${t.label} exceeds ${e} bytes`);let a=YD(o),s=await Mt.realpath(r);if(!xd(n[0].realPath,s))throw new Error(`${t.label} resolves outside its managed root`);if(i.some(d=>xd(d.realPath,s)))throw new Error(`${t.label} resolves inside an excluded root`);let c=process.platform==="win32"?Nd.O_RDONLY:Nd.O_RDONLY|Nd.O_NOFOLLOW|Nd.O_NONBLOCK,l=await Mt.open(r,c);try{let d=await l.stat();await t.hooks?.afterOpen?.();let[u,p]=await Promise.all([Mt.lstat(r),Mt.realpath(r)]);if(await li(n,t.label),await li(i,t.label),!d.isFile()||!u.isFile()||u.isSymbolicLink()||p!==s||!Ed(a,d)||!Ed(a,u))throw new Error(`${t.label} changed while opening`);await t.hooks?.beforeRead?.();let f=await QD(l,e,t.label);await t.hooks?.beforeFinalCheck?.();let[m,g,h]=await Promise.all([l.stat(),Mt.lstat(r),Mt.realpath(r)]);if(await li(n,t.label),await li(i,t.label),!g.isFile()||g.isSymbolicLink()||h!==s||!Ed(a,m)||!Ed(a,g))throw new Error(`${t.label} changed while reading`);return{bytes:f,hash:zD("sha256").update(f).digest("hex"),size:f.length}}finally{await l.close()}}async function yE(t){let e=await Oh(t),r;try{r=new GD("utf-8",{fatal:!0}).decode(e.bytes)}catch(n){throw new Error(`${t.label} is not valid UTF-8`,{cause:n})}return{...e,text:r}}var Pd=A(()=>{"use strict";ke();vn()});import $r from"path";import{TextDecoder as eB}from"util";function Rd(t,e){if(!t||typeof t!="object"||Array.isArray(t))throw new Error(`${e} must be an object`);return t}function Ad(t,e,r){let n=Object.keys(t).filter(i=>!e.has(i));if(n.length>0)throw new Error(`${r} has unknown field(s): ${n.join(", ")}`)}function bE(t){if(typeof t!="string")return!1;let e=new Date(t);return!Number.isNaN(e.valueOf())&&e.toISOString()===t}function Mh(t,e){if(typeof t!="string"||t.length===0||$r.isAbsolute(t)||/^(?:[A-Za-z]:|~|[\\/])/u.test(t)||t.split(/[\\/]/u).includes(".."))throw new Error(`${e} must stay inside the Native root`)}function Cd(t,e){if(typeof t!="string"||!/^[a-f0-9]{64}$/u.test(t))throw new Error(`${e} must be a SHA-256 hash`)}function vE(t,e){if(Mh(t,e),t.includes("\\")||t!==$r.posix.normalize(t)||t.split("/").includes(".")||t.endsWith("/")||Buffer.byteLength(t,"utf8")>1024)throw new Error(`${e} must be a normalized Native-relative ref`)}function aB(t,e){let r=Rd(t,`transaction operations[${e}]`);if(Ad(r,rB,`transaction operations[${e}]`),typeof r.id!="string"||!/^[a-z0-9][a-z0-9-]*$/u.test(r.id))throw new Error(`transaction operations[${e}].id is invalid`);if(r.type!=="write"&&r.type!=="remove"&&r.type!=="move")throw new Error(`transaction operation ${r.id} has an invalid type`);Mh(r.target,`transaction operation ${r.id} target`);for(let n of["source","staged","backup"])r[n]!==void 0&&Mh(r[n],`transaction operation ${r.id} ${n}`);if(r.type==="write"){if(r.staged===void 0||r.source!==void 0)throw new Error(`write operation ${r.id} requires staged and forbids source`)}else if(r.type==="remove"){if(r.source!==void 0||r.staged!==void 0)throw new Error(`remove operation ${r.id} forbids source and staged`)}else if(r.source===void 0||r.staged!==void 0||r.backup!==void 0)throw new Error(`move operation ${r.id} requires source and forbids staged and backup`);return r}function sB(t){let e=Rd(t,"Native Archive transaction journal");if(Ad(e,nB,"Native Archive transaction journal"),e.schema!=="comet.native.transaction.v2")throw new Error("Unsupported Native Archive transaction schema");if(typeof e.id!="string"||!/^[a-f0-9-]{8,}$/u.test(e.id))throw new Error("Native Archive transaction id is invalid");if(e.kind!=="archive")throw new Error("Native v2 transaction kind must be archive");if(typeof e.status!="string"||!wE.has(e.status))throw new Error("Native Archive transaction status is invalid");if(typeof e.change!="string"||!/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/u.test(e.change))throw new Error("Native Archive transaction change name is invalid");if(!bE(e.createdAt))throw new Error("Native Archive transaction createdAt is invalid");if(Cd(e.preflightHash,"Native Archive transaction preflightHash"),!Array.isArray(e.operations)||e.operations.length>65)throw new Error("Native Archive transaction operations must be an array");let r=e.operations.map((s,c)=>{let l=Rd(s,`Archive transaction operations[${c}]`);if(Ad(l,iB,`Archive transaction operations[${c}]`),typeof l.id!="string"||!/^[a-z0-9][a-z0-9-]*$/u.test(l.id))throw new Error(`Archive transaction operations[${c}].id is invalid`);if(l.type!=="write"&&l.type!=="remove"&&l.type!=="move")throw new Error(`Archive transaction operation ${l.id} has an invalid type`);vE(l.target,`Archive transaction operation ${l.id} target`);for(let d of["source","staged","backup"])l[d]!==void 0&&vE(l[d],`Archive transaction operation ${l.id} ${d}`);if(l.expectedTargetHash!==null&&Cd(l.expectedTargetHash,`Archive transaction operation ${l.id} expectedTargetHash`),l.type==="write"){if(l.staged===void 0||l.source!==void 0||l.expectedSourceHash!==void 0)throw new Error(`Archive write operation ${l.id} requires staged and forbids source`);if(Cd(l.stagedHash,`Archive write operation ${l.id} stagedHash`),l.expectedTargetHash===null!=(l.backup===void 0))throw new Error(`Archive write operation ${l.id} backup must match target existence`)}else if(l.type==="remove"){if(l.source!==void 0||l.staged!==void 0||l.stagedHash!==void 0||l.expectedSourceHash!==void 0||l.backup===void 0||l.expectedTargetHash===null)throw new Error(`Archive remove operation ${l.id} requires a bound target and backup`)}else{if(l.source===void 0||l.staged!==void 0||l.stagedHash!==void 0||l.backup!==void 0||l.expectedTargetHash!==null)throw new Error(`Archive move operation ${l.id} requires source and an absent target`);Cd(l.expectedSourceHash,`Archive move operation ${l.id} expectedSourceHash`)}return l}),n=r.map(s=>s.id);if(new Set(n).size!==n.length)throw new Error("Native Archive transaction operation ids must be unique");let i=`runtime/transactions/${e.id}`,o=r.filter(s=>s.type==="move");if(o.length!==1||o[0].id!=="archive-change"||o[0].source!==`changes/${e.change}`||!new RegExp(`^archive/\\d{4}-\\d{2}-\\d{2}-${e.change}$`,"u").test(o[0].target)||r.at(-1)!==o[0])throw new Error("Native Archive transaction must end with its exact change move");let a=new Set;for(let s of r.slice(0,-1)){if(s.type==="move"||!/^specs\/[a-z][a-z0-9]*(?:-[a-z0-9]+)*\/spec\.md$/u.test(s.target)||a.has(s.target))throw new Error(`Native Archive transaction spec target is invalid: ${s.target}`);if(a.add(s.target),s.staged!==void 0&&!s.staged.startsWith(`${i}/staged/specs/`))throw new Error(`Native Archive transaction staged ref is invalid: ${s.staged}`);if(s.backup!==void 0&&!s.backup.startsWith(`${i}/backups/specs/`))throw new Error(`Native Archive transaction backup ref is invalid: ${s.backup}`)}return{schema:"comet.native.transaction.v2",id:e.id,kind:"archive",status:e.status,change:e.change,createdAt:e.createdAt,preflightHash:e.preflightHash,operations:r}}function cB(t){let e=Rd(t,"Native transaction journal");if(e.schema==="comet.native.transaction.v2")return sB(e);if(Ad(e,tB,"Native transaction journal"),e.schema!=="comet.native.transaction.v1")throw new Error("Unsupported Native transaction schema");if(typeof e.id!="string"||!/^[a-f0-9-]{8,}$/u.test(e.id))throw new Error("Native transaction id is invalid");if(e.kind!=="archive"&&e.kind!=="root-move")throw new Error("Native transaction kind is invalid");if(typeof e.status!="string"||!wE.has(e.status))throw new Error("Native transaction status is invalid");if(typeof e.projectRoot!="string"||!$r.isAbsolute(e.projectRoot)||typeof e.nativeRoot!="string"||!$r.isAbsolute(e.nativeRoot))throw new Error("Native transaction roots must be absolute paths");if(e.change!==void 0&&(typeof e.change!="string"||!/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/u.test(e.change)))throw new Error("Native transaction change name is invalid");if(!bE(e.createdAt))throw new Error("Native transaction createdAt is invalid");if(!Array.isArray(e.operations))throw new Error("Native transaction operations must be an array");let r=e.operations.map(aB),n=r.map(i=>i.id);if(new Set(n).size!==n.length)throw new Error("Native transaction operation ids must be unique");return{schema:"comet.native.transaction.v1",id:e.id,kind:e.kind,status:e.status,projectRoot:e.projectRoot,nativeRoot:e.nativeRoot,...typeof e.change=="string"?{change:e.change}:{},createdAt:e.createdAt,operations:r}}function lB(t,e){if(!/^[a-f0-9-]{8,}$/u.test(e))throw new Error(`Invalid Native transaction id: ${e}`);return $r.join(t.transactionsDir,e)}function dB(t,e){let r=lB(t,e);return{directory:r,journal:$r.join(r,"transaction.json"),events:$r.join(r,"events.jsonl"),staged:$r.join(r,"staged"),backups:$r.join(r,"backups")}}async function uB(t,e){let r=dB(t,e);return await Promise.all(Object.values(r).map(n=>te(t.runtimeDir,n))),r}async function kE(t,e,r={}){let n=await uB(t,e),i=await Oh({root:t.runtimeDir,file:n.journal,maxBytes:null,label:`Native transaction journal ${e}`,hooks:r.hooks}),o=JSON.parse(oB.decode(i.bytes)),a=cB(o);if(a.id!==e)throw new Error(`Invalid Native transaction journal: ${e}`);return a}var tB,rB,nB,iB,wE,oB,SE=A(()=>{"use strict";ke();se();Pd();tB=new Set(["schema","id","kind","status","projectRoot","nativeRoot","change","createdAt","operations"]),rB=new Set(["id","type","source","target","staged","backup"]),nB=new Set(["schema","id","kind","status","change","createdAt","preflightHash","operations"]),iB=new Set(["id","type","source","target","staged","backup","expectedSourceHash","expectedTargetHash","stagedHash"]),wE=new Set(["prepared","applying","committed","rolling-back","rolled-back"]),oB=new eB("utf-8",{fatal:!0})});import{promises as pB}from"fs";import fB from"path";async function mB(t,e,r){let n;try{n=await pB.readdir(t.transactionsDir,{withFileTypes:!0})}catch(i){if(i.code==="ENOENT")return!1;throw i}for(let i of n)if(!(!i.isDirectory()||i.isSymbolicLink()))try{let o=await kE(t,i.name);if(o.id!==e&&o.status!=="committed"&&o.status!=="rolled-back")return!0}catch{return!0}for(let i of n)if(Ih(i.name))try{let o=await hE(t,i.name);if(!o||r?.kind===o.kind&&r.change===o.change)continue;if(gE(o))return!0}catch{return!0}return!1}async function hB(t,e){let r=Date.now()+5e3,n=fB.join(t.locksDir,"root-move.lock");for(;;)try{return await EN(t,"root-move",e)}catch(i){if(i.cause?.code!=="EEXIST")throw i;let a=await PN(n);if(a.status==="missing")continue;if(a.status==="stale"){let s=await CN(t,n,a);if(s.status==="removed"||s.status==="missing")continue;throw i}if(a.status!=="active"||Date.now()>=r)throw i;await new Promise(s=>setTimeout(s,5+Math.floor(Math.random()*11)))}}async function Ue(t,e,r,n){let i=await hB(t,e);try{if(await rd(t.projectRoot),await mB(t,n?.allowedTransactionId,n?.allowedPortableTransaction))throw new Error("Native transaction recovery is required before another mutation");return await r()}finally{try{await xN(i)}catch(o){process.stderr.write(`[comet] warning: could not release Native mutation lock ${i.file} (${o.message}); run comet native doctor --repair if commands start failing
|
||
`)}}}var it=A(()=>{"use strict";Tt();sh();Th();SE()});import{createHash as gB}from"crypto";function NE(t){return gB("sha256").update(t).digest("hex")}var Lh=A(()=>{"use strict"});import Bh from"path";function _d(t,e){return t.hash===e.hash&&t.recordCount===e.recordCount&&t.storedRecordCount===e.storedRecordCount&&t.stdoutBytes===e.stdoutBytes&&t.overflow===e.overflow}function MB(t,e){return t.hash===e.hash&&t.visitedNodeCount===e.visitedNodeCount&&t.recordCount===e.recordCount&&t.storedRecordCount===e.storedRecordCount&&t.encodedBytes===e.encodedBytes&&t.overflow===e.overflow&&t.unstable===e.unstable}function LB(t,e){return NE(`comet.native.snapshot-policy.v1
|
||
${JSON.stringify({include:t,exclude:e,hash:"sha256"})}`)}function Dh(t,e,r){let n=new Set(e),i=[...e];for(;i.length>0;){if(r&&!r())return null;let o=i.pop(),a=t[o];a&&(a.kind==="star"||a.kind==="globstar"||a.kind==="globstar-slash")&&!n.has(o+1)&&(n.add(o+1),i.push(o+1))}return n}function DB(t){let e=0;return()=>e>0?(e-=1,!0):t()?(e=63,!0):!1}function EE(t){let e=td(t,"Native snapshot pattern"),r=[];for(let n=0;n<e.length;n+=1){let i=e[n];i==="*"&&e[n+1]==="*"?(n+=1,e[n+1]==="/"?(n+=1,r.push({kind:"globstar-slash"})):r.push({kind:"globstar"})):i==="*"?r.push({kind:"star"}):i==="?"?r.push({kind:"question"}):r.push({kind:"literal",value:i})}return(n,i)=>{let o=i?DB(i):void 0;if(o&&!o())return!1;let a=Dh(r,new Set([0]),o);if(a===null)return!1;for(let s of n){if(o&&!o())return!1;let c=new Set;for(let l of a){if(o&&!o())return!1;let d=r[l];d&&(d.kind==="literal"&&d.value===s||d.kind==="question"&&s!=="/"?c.add(l+1):d.kind==="star"&&s!=="/"||d.kind==="globstar"?c.add(l):d.kind==="globstar-slash"&&(c.add(l),s==="/"&&c.add(l+1)))}if(a=Dh(r,c,o),a===null||a.size===0)return!1}return Dh(r,a,o)?.has(r.length)??!1}}function BB(t){if(t===void 0)return;let e=[...new Set(t.include.map(i=>td(i,"include")))].sort((i,o)=>i.localeCompare(o,"en")),r=[...new Set(t.exclude.map(i=>td(i,"exclude")))].sort((i,o)=>i.localeCompare(o,"en"));if(e.length===0)throw new Error("Native snapshot policy include must not be empty");let n=LB(e,r);if("hash"in t&&t.hash!==n)throw new Error("Native snapshot policy hash is invalid");return{manifest:{schema:"comet.native.snapshot-policy.v1",include:e,exclude:r,hash:n},includeMatchers:e.map(EE),excludeMatchers:r.map(EE),excludedDirectoryPrefixes:r.flatMap(i=>{if(!i.endsWith("/**"))return[];let o=i.slice(0,-3);return/[*?]/u.test(o)?[]:[o]}).sort((i,o)=>i.localeCompare(o,"en"))}}function mt(t,e){if(!t||typeof t!="object"||Array.isArray(t))throw new Error(`${e} must be an object`);return t}function ht(t,e,r){let n=Object.keys(t).find(i=>!e.has(i));if(n)throw new Error(`${r} contains unknown field: ${n}`)}function No(t,e){if(!Number.isSafeInteger(t)||t<1)throw new Error(`${e} must be a positive integer`);return t}function Zt(t,e){if(!Number.isSafeInteger(t)||t<0)throw new Error(`${e} must be a non-negative integer`);return t}function CE(t,e){if(typeof t!="string"||t.length===0||t.includes("\\")||t.includes("\0"))throw new Error(`${e} must be a normalized project-relative path`);let r=Bh.posix.normalize(t);if(r!==t||Bh.posix.isAbsolute(t)||r===".."||r.startsWith("../"))throw new Error(`${e} must stay inside the project root`);return t}function FB(t,e){let r=mt(t,`Native snapshot entry ${e}`);ht(r,AB,`Native snapshot entry ${e}`);let n=CE(r.path,`Native snapshot entry ${e} path`);if(typeof r.hash!="string"||!jd.test(r.hash))throw new Error(`Native snapshot entry ${e} hash is invalid`);if(r.type!=="file")throw new Error(`Native snapshot entry ${e} type is invalid`);let i={path:n,hash:r.hash,size:Zt(r.size,`Native snapshot entry ${e} size`),type:"file"};if(r.gitObjectId!==void 0){if(typeof r.gitObjectId!="string"||!OB.test(r.gitObjectId))throw new Error(`Native snapshot entry ${e} gitObjectId is invalid`);i.gitObjectId=r.gitObjectId}return i}function KB(t,e){let r=mt(t,`Native snapshot omission ${e}`);if(ht(r,_B,`Native snapshot omission ${e}`),!TB.has(r.type))throw new Error(`Native snapshot omission ${e} type is invalid`);if(!$B.has(r.reason))throw new Error(`Native snapshot omission ${e} reason is invalid`);return{path:CE(r.path,`Native snapshot omission ${e} path`),size:r.size===null?null:Zt(r.size,`Native snapshot omission ${e} size`),type:r.type,reason:r.reason}}function HB(t){let e=mt(t,"Native snapshot omission overflow");if(ht(e,jB,"Native snapshot omission overflow"),typeof e.hash!="string"||!jd.test(e.hash))throw new Error("Native snapshot omission overflow hash is invalid");let r=`native-snapshot://omitted-overflow/${e.hash}`;if(e.ref!==r)throw new Error("Native snapshot omission overflow ref is invalid");return{ref:r,hash:e.hash,count:No(e.count,"Native snapshot omission overflow count")}}function So(t,e){let r=mt(t,e);if(ht(r,PB,e),typeof r.hash!="string"||!jd.test(r.hash))throw new Error(`${e} hash is invalid`);if(typeof r.overflow!="boolean")throw new Error(`${e} overflow flag is invalid`);let n=Zt(r.recordCount,`${e} recordCount`),i=Zt(r.storedRecordCount,`${e} storedRecordCount`),o=Zt(r.stdoutBytes,`${e} stdoutBytes`);if(i>n||!r.overflow&&i!==n)throw new Error(`${e} stored record count is inconsistent`);return{hash:r.hash,recordCount:n,storedRecordCount:i,stdoutBytes:o,overflow:r.overflow}}function xE(t){let e=mt(t,"Native Git selection evidence");if(ht(e,xB,"Native Git selection evidence"),e.schema!=="comet.native.git-selection.v1")throw new Error("Native Git selection evidence schema is invalid");if(e.status!=="overflow"&&e.status!=="changed"&&e.status!=="overflow-and-changed")throw new Error("Native Git selection evidence status is invalid");let r=So(e.stageBefore,"Native Git selection stageBefore"),n=So(e.combined,"Native Git selection combined"),i=So(e.stageAfter,"Native Git selection stageAfter"),o=So(e.finalStageBefore,"Native Git selection finalStageBefore"),a=So(e.finalCombined,"Native Git selection finalCombined"),s=So(e.finalStageAfter,"Native Git selection finalStageAfter"),c=[r,n,i,o,a,s].some(u=>u.overflow),l=!_d(r,i)||!_d(i,o)||!_d(n,a)||!_d(o,s),d=c&&l?"overflow-and-changed":c?"overflow":"changed";if(!c&&!l)throw new Error("Native Git selection evidence must describe an exceptional selection");if(e.status!==d)throw new Error("Native Git selection evidence status is inconsistent");return{schema:"comet.native.git-selection.v1",status:d,stageBefore:r,combined:n,stageAfter:i,finalStageBefore:o,finalCombined:a,finalStageAfter:s}}function PE(t,e){let r=mt(t,e);if(ht(r,RB,e),typeof r.hash!="string"||!jd.test(r.hash))throw new Error(`${e} hash is invalid`);if(typeof r.overflow!="boolean"||typeof r.unstable!="boolean")throw new Error(`${e} flags are invalid`);let n=Zt(r.visitedNodeCount,`${e} visitedNodeCount`),i=Zt(r.recordCount,`${e} recordCount`),o=Zt(r.storedRecordCount,`${e} storedRecordCount`),a=Zt(r.encodedBytes,`${e} encodedBytes`);if(o>i||!r.overflow&&o!==i)throw new Error(`${e} stored record count is inconsistent`);return{hash:r.hash,visitedNodeCount:n,recordCount:i,storedRecordCount:o,encodedBytes:a,overflow:r.overflow,unstable:r.unstable}}function WB(t){let e=mt(t,"Native physical selection evidence");if(ht(e,CB,"Native physical selection evidence"),e.schema!=="comet.native.physical-selection.v1")throw new Error("Native physical selection evidence schema is invalid");if(e.status!=="overflow"&&e.status!=="changed"&&e.status!=="overflow-and-changed")throw new Error("Native physical selection evidence status is invalid");let r=PE(e.before,"Native physical selection before"),n=PE(e.after,"Native physical selection after"),i=r.overflow||n.overflow,o=r.unstable||n.unstable||!MB(r,n);if(!i&&!o)throw new Error("Native physical selection evidence must describe an exceptional selection");let a=i&&o?"overflow-and-changed":i?"overflow":"changed";if(e.status!==a)throw new Error("Native physical selection evidence status is inconsistent");return{schema:"comet.native.physical-selection.v1",status:a,before:r,after:n}}function RE(t){let e=mt(t,"Native content snapshot manifest");if(ht(e,bB,"Native content snapshot manifest"),e.schema!=="comet.native.content-snapshot.v1")throw new Error("Unsupported Native content snapshot schema");if(!IB.has(e.origin))throw new Error("Native content snapshot origin is invalid");let r;if(e.capture!==void 0){let S=mt(e.capture,"Native content snapshot capture");if(ht(S,NB,"Native content snapshot capture"),S.provider!=="git"&&S.provider!=="physical-tree")throw new Error("Native content snapshot capture provider is invalid");let E=S.gitSelection===void 0?void 0:xE(S.gitSelection),N=S.physicalSelection===void 0?void 0:WB(S.physicalSelection),P=null;if(S.projection!==void 0){let _=mt(S.projection,"Native content snapshot projection");if(ht(_,EB,"Native content snapshot projection"),_.provider!=="git")throw new Error("Native content snapshot projection provider is invalid");P={provider:"git",..._.selection===void 0?{}:{selection:xE(_.selection)}}}if(S.provider==="git"){if(N||P)throw new Error("Native Git capture cannot include physical or projection evidence");r={provider:"git",...E?{gitSelection:E}:{}}}else{if(E)throw new Error("Native physical-tree capture cannot include direct Git evidence");if(N&&P)throw new Error("Native physical-tree capture cannot combine selection and projection");r=P?{provider:"physical-tree",projection:P}:{provider:"physical-tree",...N?{physicalSelection:N}:{}}}}if(typeof e.createdAt!="string"||Number.isNaN(Date.parse(e.createdAt)))throw new Error("Native content snapshot timestamp is invalid");if(typeof e.complete!="boolean")throw new Error("Native content snapshot complete flag is invalid");let n=mt(e.limits,"Native content snapshot limits");ht(n,kB,"Native content snapshot limits");let i={maxFiles:No(n.maxFiles,"Native snapshot maxFiles"),maxFileBytes:No(n.maxFileBytes,"Native snapshot maxFileBytes"),maxTotalBytes:No(n.maxTotalBytes,"Native snapshot maxTotalBytes"),maxManifestBytes:No(n.maxManifestBytes,"Native snapshot maxManifestBytes"),...n.maxDurationMs===void 0?{}:{maxDurationMs:No(n.maxDurationMs,"Native snapshot maxDurationMs")}},o;if(e.policy!==void 0){let S=mt(e.policy,"Native snapshot policy");if(ht(S,SB,"Native snapshot policy"),S.schema!=="comet.native.snapshot-policy.v1")throw new Error("Native snapshot policy schema is invalid");if(!Array.isArray(S.include)||!Array.isArray(S.exclude))throw new Error("Native snapshot policy patterns must be arrays");o=BB({include:S.include,exclude:S.exclude,hash:S.hash,schema:"comet.native.snapshot-policy.v1"}).manifest}if(!Array.isArray(e.entries)||!Array.isArray(e.omitted))throw new Error("Native content snapshot entries and omissions must be arrays");let a=e.entries.map(FB),s=e.omitted.map(KB),c=Zt(e.omittedCount,"Native content snapshot omittedCount"),l=e.omissionOverflow===void 0?void 0:HB(e.omissionOverflow);if(a.length>i.maxFiles)throw new Error("Native content snapshot exceeds its file-count limit");if(a.some(S=>S.size>i.maxFileBytes)||a.reduce((S,E)=>S+E.size,0)>i.maxTotalBytes)throw new Error("Native content snapshot exceeds its byte limits");if(new Set(a.map(S=>S.path)).size!==a.length)throw new Error("Native content snapshot contains duplicate paths");if(s.length>vB||c<s.length)throw new Error("Native content snapshot omission count is invalid");let d=c-s.length;if(d===0&&l||d>0&&l?.count!==d)throw new Error("Native content snapshot omission overflow is inconsistent");if(e.complete!==(c===0))throw new Error("Native content snapshot completeness is inconsistent");let u=s.filter(S=>S.reason==="git-enumeration-limit"),p=s.filter(S=>S.reason==="git-selection-changed");for(let S of[...u,...p])if(S.path!=="."||S.size!==null||S.type!=="directory")throw new Error("Native Git selection omission must use the project-root sentinel");if(u.length>1||p.length>1)throw new Error("Native Git selection omissions must not be duplicated");let f=r?.provider==="git"?r.gitSelection:r?.projection?.selection,m=f?.status==="overflow"||f?.status==="overflow-and-changed",g=f?.status==="changed"||f?.status==="overflow-and-changed";if(m!==(u.length===1))throw new Error("Native Git enumeration omission and selection evidence are inconsistent");if(g!==(p.length===1))throw new Error("Native Git selection-change omission and selection evidence are inconsistent");let h=s.filter(S=>S.reason==="physical-enumeration-limit"),w=s.filter(S=>S.reason==="physical-selection-changed");for(let S of[...h,...w])if(S.path!=="."||S.size!==null||S.type!=="directory")throw new Error("Native physical selection omission must use the project-root sentinel");if(h.length>1||w.length>1)throw new Error("Native physical selection omissions must not be duplicated");let y=r?.physicalSelection,v=y?.status==="overflow"||y?.status==="overflow-and-changed",b=y?.status==="changed"||y?.status==="overflow-and-changed";if(v!==(h.length===1))throw new Error("Native physical enumeration omission and evidence are inconsistent");if(b!==(w.length===1))throw new Error("Native physical selection-change omission and evidence are inconsistent");return{schema:"comet.native.content-snapshot.v1",origin:e.origin,...r?{capture:r}:{},createdAt:e.createdAt,complete:e.complete,limits:i,...o?{policy:o}:{},entries:a,omitted:s,omittedCount:c,...l?{omissionOverflow:l}:{}}}function VB(t,e){if(!wB.test(e))throw new Error(`Invalid Native change name: ${e}`);return Bh.join(rn(t,e),"baseline-manifest.json")}async function AE(t,e){let r=VB(t,e),n=Wn(t,r);await te(n,r);try{let i=await yE({root:n,file:r,maxBytes:null,label:"Native baseline snapshot manifest"});return RE(JSON.parse(i.text))}catch(i){if(i.code==="ENOENT")return null;throw i}}var UX,vB,wB,bB,kB,SB,NB,EB,xB,PB,CB,RB,AB,_B,jB,IB,TB,$B,jd,OB,JX,YX,XX,QX,ZX,Fh=A(()=>{"use strict";no();ke();Tt();Lh();vn();se();Pd();Jl();UX={maxFiles:1e4,maxFileBytes:1024*1024*1024,maxTotalBytes:1024*1024*1024,maxManifestBytes:1024*1024*1024},vB=1e3,wB=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/u,bB=new Set(["schema","origin","capture","createdAt","complete","limits","entries","omitted","omittedCount","omissionOverflow","policy"]),kB=new Set(["maxFiles","maxFileBytes","maxTotalBytes","maxManifestBytes","maxDurationMs"]),SB=new Set(["schema","include","exclude","hash"]),NB=new Set(["provider","gitSelection","physicalSelection","projection"]),EB=new Set(["provider","selection"]),xB=new Set(["schema","status","stageBefore","combined","stageAfter","finalStageBefore","finalCombined","finalStageAfter"]),PB=new Set(["hash","recordCount","storedRecordCount","stdoutBytes","overflow"]),CB=new Set(["schema","status","before","after"]),RB=new Set(["hash","visitedNodeCount","recordCount","storedRecordCount","encodedBytes","overflow","unstable"]),AB=new Set(["path","hash","size","type","gitObjectId"]),_B=new Set(["path","size","type","reason"]),jB=new Set(["ref","hash","count"]),IB=new Set(["change-created","legacy-migration","explicit"]),TB=new Set(["file","directory","other"]),$B=new Set(["file-size","file-count","total-size","manifest-size","changed-during-read","unreadable","gitlink-unavailable","gitlink-dirty","gitlink-changed","legacy-gitlink-boundary","git-enumeration-limit","git-selection-changed","physical-enumeration-limit","physical-selection-changed"]),jd=/^[a-f0-9]{64}$/u,OB=/^(?:[a-f0-9]{40}|[a-f0-9]{64})$/u,JX=64*1024,YX=64*1024,XX={maxRecords:2e4,maxBytes:8*1024*1024,maxRecordBytes:64*1024},QX={maxNodes:2e4,maxBytes:8*1024*1024,maxPathBytes:64*1024};ZX=(1n<<256n)-1n});import{promises as fF}from"node:fs";import mF from"node:path";function Wd(t,e,r=""){if(!t||typeof t!="object"||Array.isArray(t))throw new Error(`${e} must be an object${r}`);return t}function Hd(t,e,r){let n=Object.keys(t).filter(o=>!e.has(o)),i=[...e].filter(o=>!(o in t));if(n.length>0||i.length>0){let o=[...i.length>0?[`missing ${i.join(", ")}`]:[],...n.length>0?[`unexpected ${n.join(", ")}`]:[],`expected ${[...e].join(", ")}`];throw new Error(`${r} fields are invalid: ${o.join("; ")}`)}}function mx(t,e){if(!Array.isArray(t)||!t.every(r=>typeof r=="string"))throw new Error(`${e} must be an array of strings`);return[...new Set(t)].sort((r,n)=>r.localeCompare(n,"en"))}function bF(t){let e=new Map(t.map(o=>[o.name,o])),r=new Set,n=new Set,i=o=>{if(!n.has(o)){if(r.has(o))throw new Error(`Native children dependency cycle includes ${o}`);r.add(o);for(let a of e.get(o).depends_on)i(a);r.delete(o),n.add(o)}};for(let o of t)i(o.name)}function hx(t,e,r=e){let n=new Set(e);for(let a of t){let s=a.covers.filter(c=>!n.has(c));if(s.length>0)throw new Error(`Native child ${a.name} covers unknown acceptance: ${s.join(", ")}`)}let i=new Set(t.flatMap(a=>a.covers)),o=r.filter(a=>!i.has(a));if(o.length>0)throw new Error(`Native children do not cover parent acceptance: ${o.join(", ")}`)}function wx(t,e,r){let n={missing:[],extra:[],mismatched:[],uncovered:[],unknownCovers:[]};if(t.schema===dg&&t.acceptance_index){let i=r.requiredAcceptanceIds??e??[],o=r.allowedAcceptanceIds??i,a=Object.keys(t.acceptance_index);n.missing=i.filter(l=>!(l in t.acceptance_index)),n.extra=a.filter(l=>!o.includes(l));let s=new Map((r.acceptanceCatalog??[]).map(l=>[l.id,l]));for(let l of a){let d=s.get(l),u=t.acceptance_index[l];d&&u&&(u.source!==d.source||u.text!==d.text)&&n.mismatched.push(l)}let c=new Set(a);for(let l of t.children)n.unknownCovers.push(...l.covers.filter(d=>!c.has(d)));return n.uncovered=a.filter(l=>!gx(t.children,l)),yx(n)?n:null}if(t.schema===mi&&e){let i=new Set(e);for(let o of t.children)n.unknownCovers.push(...o.covers.filter(a=>!i.has(a)));return n.uncovered=e.filter(o=>!gx(t.children,o)),yx(n)?n:null}return null}function gx(t,e){return t.some(r=>r.covers.includes(e))}function yx(t){return t.missing.length>0||t.extra.length>0||t.mismatched.length>0||t.uncovered.length>0||t.unknownCovers.length>0}function gi(t){let e=new Set(t.acceptance.map(({id:i})=>i)),r=new Set(t.acceptance.filter(({source:i})=>i===t.brief).map(({id:i})=>i)),n=new Set(r);for(let i of t.history.filter(({outcome:o})=>o==="fail"))for(let o of i.unresolved_ids)e.has(o)&&n.add(o);if(t.loop.stage==="repairing"&&t.verification_result==="fail"){let i=[...t.history].reverse().find(({outcome:o})=>o==="fail");for(let o of i?.unresolved_ids??[])r.add(o)}return{acceptanceCatalog:t.acceptance,requiredAcceptanceIds:[...r],allowedAcceptanceIds:[...n]}}function kF(t){let e=Wd(t,"Native children acceptance_index",' keyed by acceptance ID, for example A1: { source: brief.md, text: "Full acceptance text" }'),r={};for(let[n,i]of Object.entries(e)){let o=Wd(i,`Native children acceptance_index.${n}`);if(Hd(o,new Set(["source","text"]),`Native children acceptance_index.${n}`),typeof o.source!="string"||o.source.length===0)throw new Error(`Native children acceptance_index.${n}.source must be a non-empty string`);if(typeof o.text!="string"||o.text.length===0)throw new Error(`Native children acceptance_index.${n}.text must be a non-empty string`);r[n]={source:o.source,text:o.text}}return r}function SF(t,e,r){let n=r.requiredAcceptanceIds??e??[],i=r.allowedAcceptanceIds??n,o=Object.keys(t),a=n.filter(l=>!(l in t)),s=o.filter(l=>!i.includes(l));if(a.length>0||s.length>0)throw new Error(`Native children acceptance_index must match the required acceptance: missing ${a.join(", ")||"none"}; extra ${s.join(", ")||"none"}`);let c=new Map((r.acceptanceCatalog??[]).map(l=>[l.id,l]));for(let l of o){let d=c.get(l);if(!d)continue;let u=t[l];if(u.source!==d.source||u.text!==d.text){let p=["source","text"].filter(f=>u[f]!==d[f]);throw new Error(`Native children acceptance_index.${l} does not match the acceptance catalog: copy ${p.join(", ")} exactly from the current acceptance catalog`)}}}function bx(t,e,r={}){let n=(0,vx.parseDocument)(t,{uniqueKeys:!0});if(n.errors.length>0)throw new Error(`Native children contract is invalid YAML: ${n.errors[0].message}`);let i=Wd(n.toJS({mapAsMap:!1}),"Native children contract"),o=i.schema;if(o!==mi&&o!==hi)throw Hd(i,fx,"Native children contract"),new Error(`Native children schema must be ${mi} or ${hi}`);let a=o===mi?"v1":"acceptance_index"in i?"indexed-v2":"summary-v2",s=a.replace("-"," ");if(Hd(i,a==="indexed-v2"?gF:fx,"Native children contract"),!Array.isArray(i.children)||i.children.length===0)throw new Error("Native children must be a non-empty array");let c=i.children.map((p,f)=>{let m=Wd(p,`Native child ${f}`);if(Hd(m,a==="indexed-v2"?wF:a==="summary-v2"?vF:yF,`Native ${s} child fields (child ${f})`),typeof m.name!="string"||!hF.test(m.name))throw new Error(`Native child ${f} name is invalid`);let g=a==="summary-v2";if(g){if(typeof m.summary!="string"||m.summary.trim().length===0)throw new Error(`Native child ${m.name} summary must be a non-empty string`);if(m.summary.length>2e3)throw new Error(`Native child ${m.name} summary exceeds 2000 characters`)}return{name:m.name,summary:g?m.summary:null,depends_on:mx(m.depends_on,`Native child ${m.name} depends_on`),covers:a==="indexed-v2"||a==="v1"?mx(m.covers,`Native child ${m.name} covers`):[]}}),l=c.map(({name:p})=>p);if(new Set(l).size!==l.length)throw new Error("Native child names must be unique");let d=new Set(l);for(let p of c){let f=p.depends_on.filter(m=>!d.has(m));if(f.length>0)throw new Error(`Native child ${p.name} depends on unknown child: ${f.join(", ")}`)}bF(c);let u=r.policy==="advisory";if(o===dg){if(a==="indexed-v2"){let p=kF(i.acceptance_index);u||SF(p,e,r);let f=Object.keys(p);return u||hx(c,f,f),{schema:hi,acceptance_index:p,children:c}}return{schema:hi,children:c}}return e&&!u&&hx(c,e),{schema:mi,children:c}}async function yi(t){let e=mF.join(t.changeDir,lg);try{await fF.lstat(e)}catch(a){if(a.code==="ENOENT")return null;throw a}let r=await ne({root:t.changeDir,ref:lg}),n=t.policy==="advisory",i=n?{...t.validation,policy:"advisory"}:t.validation??{},o=bx(r.text,t.acceptanceIds,i);return{contract:o,hash:r.hash,size:r.size,drift:n?wx(o,t.acceptanceIds,t.validation??{}):null}}var vx,lg,mi,hi,dg,hF,fx,gF,yF,vF,wF,Vd=A(()=>{"use strict";vx=Ce(Ne(),1);wn();lg="children.yaml",mi="comet.native.children.v1",hi="comet.native.children.v2",dg=hi,hF=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/u,fx=new Set(["schema","children"]),gF=new Set(["schema","acceptance_index","children"]),yF=new Set(["name","depends_on","covers"]),vF=new Set(["name","summary","depends_on"]),wF=new Set(["name","depends_on","covers"])});var Es=A(()=>{"use strict"});var qd=A(()=>{"use strict";Nh();Es()});var jo=A(()=>{"use strict";nt();qd()});var Cn=A(()=>{"use strict";ke();nt();Vd();se();jo()});import{spawn as PF}from"node:child_process";import ug from"node:path";async function pg(t){let e=t.pid;if(e===void 0){t.kill("SIGKILL");return}if(process.platform==="win32"){let r=process.env.SystemRoot??process.env.WINDIR,n=r&&ug.win32.isAbsolute(r)?ug.win32.resolve(r):"C:\\Windows",i=ug.win32.join(n,"System32","taskkill.exe"),o=()=>new Promise(a=>{let s=!1,c=null,l=null,d=(u,p=!1)=>{s||(s=!0,l&&clearTimeout(l),p&&c?.kill("SIGKILL"),a(u))};try{c=PF(i,["/pid",String(e),"/t","/f"],{stdio:"ignore",windowsHide:!0}),c.once("error",()=>d(!1)),c.once("close",u=>d(u===0)),l=setTimeout(()=>d(!1,!0),CF)}catch{d(!1)}});for(let a=0;a<RF;a+=1)if(await o()){t.kill("SIGKILL");return}t.kill("SIGKILL"),t.stdin?.destroy(),t.stdout?.destroy(),t.stderr?.destroy();return}try{process.kill(-e,"SIGKILL")}catch(r){if(r.code!=="ESRCH")throw r}t.kill("SIGKILL")}var CF,RF,fg=A(()=>{"use strict";CF=1e3,RF=2});var Ud=A(()=>{"use strict"});var Jd=A(()=>{"use strict";La();fg();Ud()});var Sx=A(()=>{"use strict";lt();Jd();nt()});var mg=A(()=>{"use strict";lt();ke()});var Rx,gg=A(()=>{"use strict";nt();Fh();Rx=1024*1024});var Ax=A(()=>{"use strict";nt();Ud();Jl();gg()});var _x,UF,JF,YF,hZ,XF,gZ,jx=A(()=>{"use strict";nt();_x="scoped-text-safety",UF=1,JF=Object.freeze({maxFiles:256,maxFileBytes:2*1024*1024,maxTotalBytes:8*1024*1024,maxIssues:128}),YF="comet.native.checker-policy.v1",hZ=ie(YF,{policy:_x,version:UF,limits:JF,checks:["conflict-marker","space-before-tab","trailing-whitespace"],binaryHandling:"skip-and-count"}),XF=["contract-before-does-not-match-scope","implementation-before-does-not-match-scope","contract-changed-during-check","implementation-changed-during-check","contract-after-does-not-match-scope","implementation-after-does-not-match-scope"],gZ=new Set(XF)});var Ix=A(()=>{"use strict";nt();jx();Ud()});var QF,OZ,Tx=A(()=>{"use strict";ke();se();vn();gg();Ax();Ix();QF=Rx,OZ=3*QF});se();import y2 from"path";import{realpathSync as wA}from"fs";import{fileURLToPath as v2,pathToFileURL as w2}from"url";import Qb from"node:path";import{fileURLToPath as P$}from"node:url";function Gf(t){return t.charCodeAt(0)===65279?t.slice(1):t}async function Uf(t=2e3){return process.stdin.isTTY?{text:""}:!Number.isFinite(t)||t<1?{text:null}:process.stdin.readableEnded?{text:""}:await new Promise(e=>{let r=!1,n=0,i=[],o=setTimeout(()=>a({text:null}),Math.ceil(t)),a=u=>{r||(r=!0,clearTimeout(o),process.stdin.removeListener("data",s),process.stdin.removeListener("end",c),process.stdin.removeListener("close",l),process.stdin.removeListener("error",d),process.stdin.pause(),e(u))},s=u=>{let p=Buffer.isBuffer(u)?u:Buffer.from(u),f=1048576-n;if(f<=0){a({text:null});return}let m=p.subarray(0,f);i.push(m),n+=m.length,p.length>m.length&&a({text:null})},c=()=>a({text:Buffer.concat(i,n).toString("utf8")}),l=()=>{process.stdin.readableEnded||a({text:null})},d=()=>a({text:null});process.stdin.on("data",s),process.stdin.once("end",c),process.stdin.once("close",l),process.stdin.once("error",d),o.unref(),process.stdin.resume()})}var C$=new Set(["applypatch","create","createfile","deletefile","edit","editfile","patch","searchreplace","strreplaceeditor","write","writefile","writefiletool"]),R$=new Set(["glob","grep","listfiles","read","readfile","search","view"]),Zb=["file_path","filePath","path","target_file","targetFile"],ek=["file_paths","filePaths","paths","files","targets"],tk=["operations","edits"],A$=["patch","diff","patchText","patch_text","changes"],Xf=new Set(["claude","codex","windsurf","github-copilot","gemini","amazon-q","qwen","kiro","codebuddy","workbuddy","oh-my-pi","qoder","trae","trae-cn","grok","dsh","zcode"]);function Qf(t){return!!t&&typeof t=="object"&&!Array.isArray(t)}function Jf(t){return t.toLowerCase().replace(/[^a-z0-9]+/gu,"")}function _$(t){for(let e of["tool_name","toolName","tool","name"]){let r=t[e];if(typeof r=="string"&&r.trim())return r.trim()}return null}function j$(t){for(let e of["cwd","working_directory","workspaceRoot"]){let r=t[e];if(!(typeof r!="string"||!r.trim()||!Qb.isAbsolute(r.trim())))return Qb.resolve(r.trim())}}function I$(t){for(let e of["session_id","sessionId","conversation_id","conversationId"]){let r=t[e];if(typeof r=="string"&&r.trim())return r.trim().slice(0,256)}}function T$(t){for(let e of["hook_event_name","hookEventName","event_name","eventName"]){let r=t[e];if(typeof r=="string"&&r.trim())return Jf(r)}}function $$(t){for(let e of["task","prompt","user_prompt","userPrompt"]){let r=t[e];if(typeof r=="string"&&r.trim())return r.trim()}}function O$(t){if(typeof t!="string")return t;let e=t.trim();if(!e.startsWith("{")&&!e.startsWith("["))return t;try{return JSON.parse(e)}catch{return t}}function M$(t){for(let e of["tool_input","toolInput","toolArgs","tool_args","arguments"])if(t[e]!==void 0)return O$(t[e]);return t}function Yf(t){let e=[],r=[/^\*\*\* (?:Add|Update|Delete) File:\s+(.+?)\s*$/gmu,/^\+\+\+\s+(?:b\/)?(.+?)\s*$/gmu];for(let n of r)for(let i of t.matchAll(n)){let o=i[1]?.trim();o&&o!=="/dev/null"&&e.push(o)}return e}function qn(t){return[...new Set(t.flatMap(e=>{let r=e.trim();if(!r)return[];if(/^file:/iu.test(r))try{return[P$(r)]}catch{return[r]}return/^[A-Za-z]:/u.test(r)?[r]:/^[A-Za-z][A-Za-z0-9+.-]*:/u.test(r)?[]:[r]}))]}function Vn(t,e){if(typeof e=="string"){let r=e.trim();r&&t.push(r);return}if(Array.isArray(e)){for(let r of e)Vn(t,r);return}if(Qf(e)){for(let r of Zb)Vn(t,e[r]);for(let r of ek)Vn(t,e[r]);for(let r of tk)Vn(t,e[r])}}function L$(t,e){let r=[],n=[e,t].filter(Qf);for(let i of n){for(let o of Zb)Vn(r,i[o]);for(let o of ek)Vn(r,i[o]);for(let o of tk)Vn(r,i[o]);for(let o of A$){let a=i[o];typeof a=="string"&&r.push(...Yf(a))}}return typeof e=="string"&&r.push(...Yf(e)),qn(r)}function Ca(t,e){if(e?.trim()){let s=qn([e]);return{intent:s.length>0?"write":"non-write",targets:s,toolName:null}}if(!t.trim())return{intent:"unknown",targets:[],toolName:null};let r;try{r=JSON.parse(Gf(t))}catch{let s=Yf(t);if(s.length>0){let c=qn(s);return{intent:c.length>0?"write":"non-write",targets:c,toolName:"apply_patch"}}return{intent:"unknown",targets:[],toolName:null}}if(!Qf(r))return{intent:"unknown",targets:[],toolName:null};let n=_$(r),i=L$(r,M$(r)),o=j$(r),a=I$(r);if(T$(r)==="beforeagentstart"){let s=$$(r);return{intent:"context",targets:[],toolName:null,...s?{task:s}:{},...o?{cwd:o}:{},...a?{sessionId:a}:{}}}return n&&C$.has(Jf(n))?{intent:i.length>0?"write":"unknown",targets:i,toolName:n,...o?{cwd:o}:{},...a?{sessionId:a}:{}}:n&&R$.has(Jf(n))?{intent:"non-write",targets:[],toolName:n,...o?{cwd:o}:{},...a?{sessionId:a}:{}}:n?{intent:"unknown",targets:i,toolName:n,...o?{cwd:o}:{},...a?{sessionId:a}:{}}:{intent:i.length>0?"write":"unknown",targets:i,toolName:null,...o?{cwd:o}:{},...a?{sessionId:a}:{}}}async function Zf(t={}){let e=process.env.FILE_PATH;if(e?.trim()||process.stdin.isTTY)return Ca("",e);let r=await(t.readStdin??Uf)();r.text===null&&(process.stderr.write(`[COMET-HOOK] stdin timeout: the host did not provide hook input within the expected window
|
||
`),process.exit(1));try{return Ca(r.text,e)}catch{return Ca("",e)}}function rk(t,e){return Xf.has(t)?t==="github-copilot"?{exitCode:0,stdout:e.allowed?`${JSON.stringify(e.context?{additionalContext:e.context}:{})}
|
||
`:`${JSON.stringify({permissionDecision:"deny",permissionDecisionReason:e.reason})}
|
||
`,stderr:e.diagnostic?`${e.diagnostic}
|
||
`:""}:e.allowed&&e.context?{exitCode:0,stdout:`${JSON.stringify({hookSpecificOutput:{hookEventName:"PreToolUse",additionalContext:e.context}})}
|
||
`,stderr:e.diagnostic?`${e.diagnostic}
|
||
`:""}:e.allowed?{exitCode:0,stdout:"",stderr:e.diagnostic?`${e.diagnostic}
|
||
`:""}:{exitCode:2,stdout:"",stderr:`${e.reason}
|
||
`}:{exitCode:64,stdout:"",stderr:`Unsupported Comet Hook platform: ${t}
|
||
`}}yr();import tp from"path";import{promises as zl}from"fs";import rt from"path";yr();import{promises as a0}from"fs";import ze from"path";import{promises as B$}from"fs";async function rm(t){try{return await B$.access(t),!0}catch(e){if(F$(e))return!1;throw e}}function F$(t){let e=t?.code;return e==="ENOENT"||e==="ENOTDIR"}ge();qe();ro();Q();var dn=class extends Error{code="classic-layout-unavailable";constructor(e="Classic artifact layout is unavailable from .comet/config.yaml"){super(e),this.name="ClassicLayoutUnavailableError"}},Sk=".comet/config.yaml";function s0(t){let e=t?.code;return e==="ENOENT"||e==="ENOTDIR"}async function c0(t){await $(t,Sk,{label:Sk,expected:"file"})}function ja(t,e){let r=ze.resolve(t),n=e==="docs"?ze.join(r,"docs"):r,i=ze.join(n,"openspec"),o=ze.join(r,"docs","superpowers");return{projectRoot:r,artifactLayout:e,openSpecBase:n,openSpecRoot:i,changesDir:ze.join(i,"changes"),archiveDir:ze.join(i,"changes","archive"),specsDir:ze.join(i,"specs"),superpowersRoot:o,superpowersSpecsDir:ze.join(o,"specs"),superpowersPlansDir:ze.join(o,"plans"),superpowersReportsDir:ze.join(o,"reports")}}async function Nk(t){await c0(t);let e=await br(t,{allowPartialProject:!0,allowMissingNativeFields:!0});if(!e?.config)throw new dn;if(!(e.config.workflows??[e.config.default_workflow]).includes("classic"))throw new dn("Classic artifact layout is unavailable because Classic is not enabled");return e.classic?.artifact_layout??"legacy"}async function Ek(t,e){return ja(t,e??await Nk(t))}async function l0(t){try{return await a0.lstat(t),!0}catch(e){if(s0(e))return!1;throw e}}async function d0(t,e){let r=await Ek(t,e),n=r.artifactLayout==="legacy"?"docs":"legacy",i=ja(t,n).openSpecRoot,[o,a]=await Promise.all([$(r.projectRoot,pe(r.projectRoot,r.openSpecRoot),{label:"Configured Classic OpenSpec root",expected:"directory"}),l0(i)]),s=o.exists;return{paths:r,configuredRootExists:s,alternateRoot:i,alternateRootExists:a,dualRoots:s&&a}}async function u0(t){let e=[t.openSpecRoot,t.changesDir,t.archiveDir,t.specsDir,t.superpowersRoot,t.superpowersSpecsDir,t.superpowersPlansDir,t.superpowersReportsDir];for(let r of e){let n=pe(t.projectRoot,r);await $(t.projectRoot,n,{label:`Classic managed physical path ${n}`,expected:"directory"})}}async function un(t,e){let r=await d0(t,e);if(await u0(r.paths),!r.configuredRootExists){let n=pe(r.paths.projectRoot,r.paths.openSpecRoot),i=pe(r.paths.projectRoot,r.alternateRoot);throw new dn(`Configured Classic OpenSpec root is missing: ${n} (alternate ${i} is ${r.alternateRootExists?"present":"missing"})`)}return r.paths}async function Nl(t,e){let r=ze.join(ze.resolve(t),".comet","classic-root-move.json");if(await rm(r))throw new Error("Classic root move transaction is incomplete; inspect it with comet doctor and recover it explicitly before writing");let n=await un(t,e);if(!await rm(n.openSpecRoot))throw new Error(`Configured Classic OpenSpec root is missing: ${pe(n.projectRoot,n.openSpecRoot)}`);return n}function pe(t,e){return ze.relative(ze.resolve(t),e).replaceAll("\\","/")}import{promises as m0}from"fs";import Ta from"path";Ct();ge();Q();import Ia from"path";var ym=Number.MAX_SAFE_INTEGER;function xk(t,e,r){let n=Ia.resolve(t),i=Ia.isAbsolute(e)?Ia.resolve(e):Ia.resolve(n,e),o=Ia.relative(n,i).replaceAll("\\","/");return{root:n,relative:Yi(o,r),target:i}}async function pn(t,e,r){let n=xk(t,e,r.label);return $(n.root,n.relative,r)}async function Gn(t,e,r){return(await pn(t,e,{label:r.label,expected:r.expected??"any"})).exists}async function Pk(t,e,r,n){return await Gn(t,e,{label:r,expected:"file"})?(await Ck(t,e,{label:r,hooks:n})).byteLength>0:!1}async function fn(t,e,r){return(await Ck(t,e,r)).toString("utf8")}async function Ck(t,e,r){let n=xk(t,e,r.label);return(await O(n.root,n.relative,r.maxBytes??ym,{label:r.label,hooks:r.hooks})).bytes}function xl(t){return t?/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/u.test(t)?t.includes("..")?"Change name cannot contain '..' (path traversal not allowed)":null:`Invalid change name: '${t}'
|
||
Valid format: lowercase kebab-case (a-z, 0-9, single hyphens)`:"Change name cannot be empty"}function $a(t){let e=xl(t);if(e)throw new Error(e)}function h0(t,e){return{label:pe(t,e),directory:e}}async function El(t,e,r){let n=h0(t,e);if(!(await pn(t,e,{label:r,expected:"directory"})).exists)return{change:n,exists:!1,stateExists:!1};let o=await pn(t,Ta.join(e,".comet.yaml"),{label:`${r} state`,expected:"file"});return{change:n,exists:!0,stateExists:o.exists}}function Rk(t,e){let r=e.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&");return new RegExp(`^\\d{4}-\\d{2}-\\d{2}-${r}$`,"u").test(t)}async function g0(t,e,r,n={}){if(!n.skipExactCompatibility){let a=await El(t,Ta.join(e,r),`Classic archived change ${r}`);if(a.exists)return a.change}if(!(await pn(t,e,{label:"Classic archive directory",expected:"directory"})).exists)return null;let o=[];for(let a of await m0.readdir(e,{withFileTypes:!0})){if(!Rk(a.name,r))continue;let s=await El(t,Ta.join(e,a.name),`Classic archived change ${a.name}`);s.exists&&s.stateExists&&o.push(s.change)}return o.sort((a,s)=>s.directory.localeCompare(a.directory))[0]??null}async function Un(t,e=process.cwd()){$a(t);let r=await un(e),n=await El(r.projectRoot,Ta.join(r.changesDir,t),`Classic active change ${t}`);return{...n.change,exists:n.exists,stateExists:n.stateExists}}async function vm(t,e=process.cwd(),r={}){$a(t);let n=await un(e);if(r.preferredArchiveName!==void 0){let i=r.preferredArchiveName;if(i!==t&&!Rk(i,t))throw new Error(`Classic preferred archive name '${i}' does not belong to change '${t}'`);let o=await El(n.projectRoot,Ta.join(n.archiveDir,i),`Classic preferred archived change ${i}`);return o.exists&&o.stateExists?o.change:null}return g0(n.projectRoot,n.archiveDir,t,r)}import{promises as wm}from"fs";import et from"path";function Ak(t,e){let r=et.relative(t,e);return r===""||r!==".."&&!r.startsWith(`..${et.sep}`)&&!et.isAbsolute(r)}async function y0(t){let e=et.resolve(t),r=et.parse(e).root,n=[],i=e;for(;i&&i!==r;)try{let o=await wm.realpath(i);return et.join(o,...n.reverse())}catch(o){let a=o.code;if(a!=="ENOENT"&&a!=="ENOTDIR")throw o;n.push(et.basename(i)),i=et.dirname(i)}try{let o=await wm.realpath(r);return et.join(o,...n.reverse())}catch{return null}}async function Pl(t,e){let r=et.resolve(t),n=await wm.realpath(r),i=[],o=[];for(let a of qn(e)){let s=et.isAbsolute(a)?et.resolve(a):et.resolve(r,a),c=await y0(s);((c?Ak(n,c):Ak(r,s))?i:o).push(a)}return{projectTargets:i,externalTargets:o}}Oa();no();var Hm=Ce(Ne(),1);yr();import{execFileSync as xS}from"child_process";import{promises as DO}from"fs";import PS from"path";import xr from"path";import{promises as _O}from"node:fs";import{AsyncLocalStorage as jO}from"node:async_hooks";ul();Ka();import{randomUUID as qk}from"node:crypto";import{promises as Rt}from"node:fs";import zk from"node:os";import oo from"node:path";var W0=3e4,V0=20,q0=5*6e4,z0=1e4,gn=class{filePath;lockOptions;constructor(e,r={}){this.filePath=oo.resolve(e),this.lockOptions={...r}}async read(){try{return await Rt.readFile(this.filePath,"utf8")}catch(e){if(e.code==="ENOENT")return null;throw e}}async write(e){await Rt.mkdir(oo.dirname(this.filePath),{recursive:!0});let r=`${this.filePath}.${process.pid}.${qk()}.tmp`;await Rt.writeFile(r,e,"utf8"),await Rt.rename(r,this.filePath)}async withLock(e){return Ha(`${this.filePath}.lock`,e,this.lockOptions)}};async function Ha(t,e,r={}){let n=oo.resolve(t);await Rt.mkdir(oo.dirname(n),{recursive:!0});let i=Date.now(),o=r.timeoutMs??W0,a=r.retryMs??V0,s=r.malformedLockStaleMs??q0,c=await Yn(process.pid),l={pid:process.pid,nonce:qk(),createdAt:Date.now(),hostname:zk.hostname(),...c===null?{}:{processIdentity:c}},d=!1;for(;!d;){let u;try{u=await Rt.open(n,"wx"),await u.writeFile(JSON.stringify(l),"utf8"),d=!0}catch(p){if(p.code!=="EEXIST")throw p;if(await G0(n,s))continue;if(Date.now()-i>=o)throw new Error(`Timed out waiting for file lock: ${n}`,{cause:p});await new Promise(f=>setTimeout(f,a))}finally{await u?.close()}}try{return await e()}finally{await U0(n,l.nonce)}}async function G0(t,e){let r,n;try{[r,n]=await Promise.all([Rt.readFile(t,"utf8"),Rt.stat(t)])}catch(o){return o.code==="ENOENT"}let i=Gk(r);if(i!==null&&(i.hostname!==void 0&&i.hostname!==zk.hostname()||await Fa(i.pid,i.processIdentity)!=="dead"))return!1;if(i===null){let o=r.trim().length===0?z0:e;if(Date.now()-Number(n.mtimeMs)<o)return!1}try{return await Rt.readFile(t,"utf8")!==r?!1:(await Rt.rm(t),!0)}catch(o){return o.code==="ENOENT"}}async function U0(t,e){try{if(Gk(await Rt.readFile(t,"utf8"))?.nonce!==e)return;await to(t)}catch(r){let n=r.code;if(n==="ENOENT")return;process.stderr.write(`[comet] warning: could not remove lock file ${t} (${n??r}); it will be recovered automatically
|
||
`)}}function Gk(t){try{let e=JSON.parse(t);return Number.isSafeInteger(e.pid)&&Number(e.pid)>0&&typeof e.nonce=="string"&&e.nonce.length>0&&typeof e.createdAt=="number"&&Number.isFinite(e.createdAt)&&(e.hostname===void 0||typeof e.hostname=="string"&&e.hostname.length>0)&&(e.processIdentity===void 0||typeof e.processIdentity=="string"&&e.processIdentity.length>0)?{pid:Number(e.pid),nonce:e.nonce,createdAt:e.createdAt,...e.hostname===void 0?{}:{hostname:e.hostname},...e.processIdentity===void 0?{}:{processIdentity:e.processIdentity}}:null}catch{return null}}var Am=class{store;constructor(e){this.store=e}async read(){let e=await this.store.read();return e===null||e.trim().length===0?null:JSON.parse(e)}async write(e){await this.store.write(JSON.stringify(e))}async withLock(e){return this.store instanceof gn?this.store.withLock(e):e()}},jl=class{root;lockOptions;constructor(e,r={}){this.root=oo.resolve(e),this.lockOptions={...r}}async open(e,r,n){let i=`${Rm(e)}-${Rm(r)}-${Rm(n??"global")}.json`;return new Am(new gn(oo.join(this.root,i),this.lockOptions))}};function Rm(t){return t.replace(/[^A-Za-z0-9._-]/gu,"_").slice(0,120)||"plugin"}Q();var Bl=Ce(Ne(),1);Ct();Q();za();var Lm=["full","hotfix","tweak"],gS=1,vS=["open","design","build","verify","archive"],fO=["en","zh-CN"],mO=["off","beta"],hO=["subagent-driven-development","executing-plans","direct","autonomous"],gO=["plan-ready"],yO=["confirmed"],vO=["tdd","direct"],wO=["off","standard","thorough"],bO=["current","branch","worktree"],kO=["light","full"],SO=["pending","pass","fail"],NO=["pending","handled"],EO=["pending","confirmed"],Dm=["workflow","language","phase","context_compression","build_mode","build_pause","subagent_dispatch","tdd_mode","review_mode","isolation","bound_branch","verify_mode","auto_transition","base_ref","design_doc","plan","verify_result","verify_failures","check_epoch","verification_report","branch_status","created_at","verified_at","archive_confirmation","archived","direct_override","handoff_context","handoff_hash","classic_profile","classic_migration"],xO=["run_id"],wS=new Set([...Dm,...xO]),PO=["workflow","phase","design_doc","plan","build_mode","isolation","verify_mode","verify_result","verified_at","archived"];function Om(t,e){return Object.prototype.hasOwnProperty.call(t,e)}function so(t,e){let r=t[e];if(r==null||r==="")return null;if(typeof r!="string")throw new Error(`Invalid Classic state: ${e} must be a string or null`);return r}function _e(t,e,r,n=!0){let i=t[e];if(i==null||i===""){if(n)return null;throw new Error(`Invalid Classic state: ${e} is required`)}if(typeof i!="string"||!r.includes(i))throw new Error(`Invalid Classic state: ${e} must be one of ${r.join(", ")}${n?" or null":""}`);return i}function Mm(t,e,r=!0){let n=t[e];if(n==null||n===""){if(r)return null;throw new Error(`Invalid Classic state: ${e} is required`)}if(typeof n!="boolean")throw new Error(`Invalid Classic state: ${e} must be true or false`);return n}function yS(t,e,r=0){let n=t[e];if(n==null||n==="")return r;if(typeof n!="number"||!Number.isSafeInteger(n)||n<0)throw new Error(`Invalid Classic state: ${e} must be a non-negative integer`);return n}function Ll(t,e){let r=so(t,e);if(r===null)return null;if(/^(?:[A-Za-z]:|[\\/]|~)/u.test(r)||r.split(/[\\/]/u).includes(".."))throw new Error(`Invalid Classic state: ${e} must be a relative repository path`);return r}function CO(t,e){let r=so(t,e);if(r!==null&&!/^[a-f0-9]{64}$/u.test(r))throw new Error(`Invalid Classic state: ${e} must be a sha256 hex digest`);return r}function RO(t){let e=t.classic_migration;if(e==null||e==="")return null;if(e!==gS)throw new Error(`Invalid Classic state: classic_migration must be ${gS}`);return e}function AO(t){if(!Dm.some(r=>Om(t,r)))return null;for(let r of PO)if(!Om(t,r))return null;return{workflow:_e(t,"workflow",Lm,!1),language:_e(t,"language",fO),phase:_e(t,"phase",vS,!1),contextCompression:_e(t,"context_compression",mO),buildMode:_e(t,"build_mode",hO),buildPause:_e(t,"build_pause",gO),subagentDispatch:_e(t,"subagent_dispatch",yO),tddMode:_e(t,"tdd_mode",vO),reviewMode:_e(t,"review_mode",wO),isolation:_e(t,"isolation",bO),boundBranch:so(t,"bound_branch"),verifyMode:_e(t,"verify_mode",kO),autoTransition:Mm(t,"auto_transition"),baseRef:so(t,"base_ref"),designDoc:Ll(t,"design_doc"),plan:Ll(t,"plan"),verifyResult:_e(t,"verify_result",SO,!1),verifyFailures:yS(t,"verify_failures"),...Om(t,"check_epoch")?{checkEpoch:yS(t,"check_epoch")}:{},verificationReport:Ll(t,"verification_report"),branchStatus:_e(t,"branch_status",NO),createdAt:so(t,"created_at"),verifiedAt:so(t,"verified_at"),archiveConfirmation:_e(t,"archive_confirmation",EO),archived:Mm(t,"archived",!1),directOverride:Mm(t,"direct_override"),handoffContext:Ll(t,"handoff_context"),handoffHash:CO(t,"handoff_hash"),classicProfile:_e(t,"classic_profile",Lm),classicMigration:RO(t)}}function Bm(t,e){let r=e??null;if(r===null&&e===void 0&&t.run_id&&t.skill)try{r=Qn(t)}catch(n){let i=n instanceof Error?n.message:String(n);throw new Error(i.replace(/^Invalid Run state:/u,"Invalid Classic state:"),{cause:n})}return{classic:AO(t),run:r,unknownKeys:Object.keys(t).filter(n=>!wS.has(n))}}function bS(t){let e=t.workflow,r=t.phase,n=t.archived,i=t.design_doc;return{workflow:typeof e=="string"&&Lm.includes(e)?e:null,phase:typeof r=="string"&&vS.includes(r)?r:null,archived:n===!0,designDoc:typeof i=="string"&&i!==""?i:null,unknownKeys:Object.keys(t).filter(o=>!wS.has(o))}}za();var Fm=new jO,Dl=".comet-state-transaction.json";async function Fl(t,e){let r=xr.resolve(t);return Fm.getStore()===r?e():(await $(r,".comet-state.lock",{label:"Classic state lock",expected:"file"}),Ha(xr.join(r,".comet-state.lock"),()=>Fm.run(r,async()=>(await TO(r),e()))))}async function kS(t,e){try{return(await O(t,e,Number.MAX_SAFE_INTEGER,{label:"Classic state transaction"})).bytes.toString("utf8")}catch(r){if(r.code==="ENOENT")return null;throw r}}function IO(t){if(t===null)return null;if(!t||typeof t!="object"||Array.isArray(t))throw new Error("Invalid Classic transaction Run");let e=t,r=Qn({run_id:e.runId,skill:e.skill,skill_version:e.skillVersion,skill_hash:e.skillHash,orchestration:e.orchestration,current_step:e.currentStep,iteration:e.iteration,pending:e.pending,pending_ref:e.pendingRef,trajectory_ref:e.trajectoryRef,context_ref:e.contextRef,artifacts_ref:e.artifactsRef,checkpoint_ref:e.checkpointRef,run_status:e.status,run_retries:e.retries});if(!r)throw new Error("Invalid Classic transaction Run identity");return r}async function TO(t){let e=await kS(t,Dl);if(e===null)return;let r=JSON.parse(e);if(!r||r.schema!=="comet.classic.state-transaction.v1"||r.beforeYaml!==null&&typeof r.beforeYaml!="string"||typeof r.afterYaml!="string")throw new Error("Invalid Classic state transaction");let n=await kS(t,".comet.yaml");if(n!==r.beforeYaml&&n!==r.afterYaml)throw new Error("Classic state transaction conflicts with current YAML; preserve files for recovery");let i=IO(n===r.afterYaml?r.afterRun:r.beforeRun);i?await Ml(t,i):await $m(t),await _a(xr.join(t,Dl),{containedRoot:t})}function lo(t){let e=t.toJS();if(e===null)return{};if(typeof e!="object"||Array.isArray(e))throw new Error("Invalid Classic state document: root must be a mapping");return e}function $O(t){let e=["skill","skill_version","skill_hash","orchestration","current_step","iteration","pending","pending_ref","trajectory_ref","context_ref","artifacts_ref","checkpoint_ref","run_status","run_retries"];for(let r of e)t.delete(r)}function OO(t){let e=!1;for(let r of["build_command","verify_command"])t.has(r)&&(t.delete(r),e=!0);return e}async function Km(t){let e;try{e=(await O(xr.dirname(t),xr.basename(t),Number.MAX_SAFE_INTEGER,{label:"Classic state document"})).bytes.toString("utf8")}catch(n){if(n.code!=="ENOENT")throw n;return new Bl.Document({})}let r=(0,Bl.parseDocument)(e);if(r.errors.length>0)throw new Error(`Invalid Classic state document: ${r.errors[0].message}`);return lo(r),r}async function Ga(t,e={}){if(Fm.getStore()!==xr.resolve(t)){let r=await MO(t);if(r!==null)return r}return Fl(t,()=>LO(t,e))}async function co(t,e){let r=await $(t,e,{label:"Classic state snapshot",expected:"file"});if(!r.exists)return{stamp:"missing",comparable:!0};let n=await _O.lstat(r.target,{bigint:!0});if(!n.isFile()||n.isSymbolicLink())throw new Error("Classic state file changed");return{stamp:[n.dev,n.ino,n.birthtimeNs,n.ctimeNs,n.mtimeNs,n.size].join(":"),comparable:n.dev!==0n&&n.ino!==0n&&n.ctimeNs>0n}}async function SS(t){if((await co(t,".comet-state.lock")).stamp!=="missing"||(await co(t,Dl)).stamp!=="missing")return null;let n=await co(t,".comet.yaml"),i=await co(t,ao);return!n.comparable||!i.comparable?null:{yaml:n.stamp,run:i.stamp}}async function MO(t){try{let e=await SS(t);if(e===null)return null;let r=await Km(xr.join(t,".comet.yaml")),n=lo(r);if(r.has("build_command")||r.has("verify_command"))return null;let i=await Ol(t);if(!i&&n.run_id&&n.skill)return null;let o=Bm(n,i),a=await SS(t);return a===null||e.yaml!==a.yaml||e.run!==a.run||(await co(t,Dl)).stamp!=="missing"||(await co(t,".comet-state.lock")).stamp!=="missing"?null:o}catch{return null}}async function LO(t,e){let r=e.migrate!==!1,n=xr.join(t,".comet.yaml"),i=await Km(n),o=lo(i),a=OO(i);a&&(o=lo(i));let s=await Ol(t);if(!s&&o.run_id&&o.skill){let{runStateFromDocument:c}=await Promise.resolve().then(()=>(za(),hS));s=c(o),s&&r&&(await Ml(t,s),$O(i),a=!0)}return a&&r&&await we(n,i.toString(),{containedRoot:t}),Bm(lo(i),s)}async function NS(t){let e=await Km(xr.join(t,".comet.yaml"));return bS(lo(e))}Ct();Q();function BO(t){try{let e=Nr(()=>xS("git",["rev-parse","--abbrev-ref","HEAD"],{cwd:t,encoding:"utf8",stdio:["ignore","pipe","ignore"],timeout:1e4,windowsHide:!0}).trim());return e&&e!=="HEAD"?e:null}catch{return null}}var FO=tm("liveGitBranch",t=>BO(t));function KO(t){try{return Nr(()=>xS("git",["rev-parse","--is-inside-work-tree"],{cwd:t,encoding:"utf8",stdio:["ignore","pipe","ignore"],timeout:1e4,windowsHide:!0}).trim())==="true"}catch{return!1}}var HO=tm("isGitWorkTree",t=>KO(t)),WO=["current","branch","worktree"];function CS(t){return WO.includes(t)}function VO(t){return CS(t.isolation)?t.boundBranch===null&&t.currentBranch===null&&t.gitWorkTree===!1?{status:"not-applicable"}:t.boundBranch===null?t.currentBranch===null?{status:"unbound-detached"}:{status:"needs-heal",branch:t.currentBranch}:t.currentBranch===t.boundBranch?{status:"ok"}:{status:"drift",boundBranch:t.boundBranch,currentBranch:t.currentBranch}:{status:"not-applicable"}}async function Ua(t,e){return e.heal?Fl(t,()=>ES(t,e)):ES(t,e)}async function ES(t,e){let r=PS.join(t,".comet.yaml"),n=(0,Hm.parseDocument)(await DO.readFile(r,"utf8"),{uniqueKeys:!1});if(n.errors.length>0)throw new Error(`Invalid .comet.yaml: ${n.errors[0].message}`);let i=n.toJS()??{},o=typeof i.isolation=="string"?i.isolation:null,a=typeof i.bound_branch=="string"&&i.bound_branch!==""?i.bound_branch:null,s=CS(o),c=FO(e.cwd),l=s&&a===null&&c===null?HO(e.cwd):!0,d=VO({isolation:o,boundBranch:a,currentBranch:c,gitWorkTree:l});return d.status==="needs-heal"&&e.heal?(await qO(t,d.branch),{status:"healed",branch:d.branch,bindingRequired:s,currentBranch:c}):{...d,bindingRequired:s,currentBranch:c}}async function qO(t,e){return Fl(t,()=>zO(t,e))}async function zO(t,e){let r=PS.join(t,".comet.yaml"),n=(await O(t,".comet.yaml",ym,{label:"Classic branch binding"})).bytes.toString("utf8"),i=(0,Hm.parseDocument)(n,{uniqueKeys:!1});if(i.errors.length)throw new Error(`Invalid .comet.yaml: ${i.errors[0].message}`);i.set("bound_branch",e),await we(r,i.toString(),{containedRoot:t})}function GO(t){return t??"detached HEAD"}function Ja(t,e,r){return`change '${t}' is bound to branch '${e}', but current branch is '${GO(r)}'. Next: switch to branch '${e}' and rerun, or run comet state rebind ${t} after the user explicitly confirms this branch should take over the change`}function Ya(t){return`change '${t}' uses a branch-bound workspace mode but has no bound branch and HEAD is detached; checkout a branch first before continuing.`}Wa();yr();var IS=Ce(Ne(),1);Ba();import Ut from"node:path";import{createHash as Wl,randomUUID as P6}from"node:crypto";var UO=new Set(["GIT_DIR","GIT_WORK_TREE","GIT_COMMON_DIR","GIT_INDEX_FILE","GIT_OBJECT_DIRECTORY","GIT_ALTERNATE_OBJECT_DIRECTORIES","GIT_GRAFT_FILE","GIT_SHALLOW_FILE","GIT_PREFIX","GIT_IMPLICIT_WORK_TREE","GIT_NO_REPLACE_OBJECTS","GIT_REPLACE_REF_BASE","GIT_CONFIG","GIT_CONFIG_PARAMETERS","GIT_CONFIG_COUNT"]);function Wm(t=process.env){return Object.fromEntries(Object.entries(t).filter(([e])=>{let r=e.toUpperCase();return!UO.has(r)&&!/^GIT_CONFIG_(KEY|VALUE)_\d+$/u.test(r)}))}function RS(t){return{...Wm(t.environment),...t.authentication?{}:{GIT_CONFIG_GLOBAL:process.platform==="win32"?"NUL":"/dev/null",GIT_CONFIG_NOSYSTEM:"1"},GIT_TERMINAL_PROMPT:"0",GCM_INTERACTIVE:"never",SSH_ASKPASS_REQUIRE:"never",GIT_NO_REPLACE_OBJECTS:"1",GH_PROMPT_DISABLED:"1"}}function Zn(t){if(!t||typeof t!="object"||Array.isArray(t))throw new Error("Classic progress requires a JSON object");return t}function qm(t,e){let r=Object.keys(t).filter(n=>!e.includes(n));if(r.length)throw new Error(`Unknown Classic progress field(s): ${r.join(", ")}; allowed fields: ${e.join(", ")}`)}function Gt(t,e){if(typeof t!="string"||!t.trim()||t.length>4096||[...t].some(r=>r.charCodeAt(0)<32||r.charCodeAt(0)===127))throw new Error(`Invalid Classic progress ${e}`);return t}async function JO(t,e,r){let n=Ut.join(e,".comet",r);if(await Gn(t,n,{label:"Classic progress",expected:"file"}))return JSON.parse(await fn(t,n,{label:"Classic progress"}))}function YO(t,e){let r=Wl("sha256").update(e).digest("hex");return Ut.join(t,".comet","runtime","classic-delivery",`${r}.json`)}async function XO(t,e){let r=YO(t,e);if(!await Gn(t,r,{label:"Classic delivery reauthorization",expected:"file"}))return null;let n=Zn(JSON.parse(await fn(t,r,{label:"Classic delivery reauthorization"})));if(qm(n,["schemaVersion","changeIdentity","previousAuthorizationId","authorizationId","action","targetBranch","remote","authorizedRemoteUrl"]),n.schemaVersion!==1||n.changeIdentity!==e)throw new Error("Classic delivery reauthorization identity is invalid");let i=zm({action:n.action,targetBranch:n.targetBranch,...n.remote===void 0?{}:{remote:n.remote}},!0);if(i.commit!==void 0||i.prUrl!==void 0)throw new Error("Classic delivery reauthorization cannot change sealed commit or PR evidence");return{schemaVersion:1,changeIdentity:e,previousAuthorizationId:Gt(n.previousAuthorizationId,"previousAuthorizationId"),authorizationId:Gt(n.authorizationId,"authorizationId"),...i,...n.authorizedRemoteUrl===void 0?{}:{authorizedRemoteUrl:Gt(n.authorizedRemoteUrl,"authorizedRemoteUrl")}}}function zm(t,e=!1){let r=Zn(t);if(qm(r,["action","targetBranch","remote","commit","prUrl",...e?["schemaVersion","changeIdentity","authorizedRemoteUrl","authorizationId"]:[]]),!["local","push","pr"].includes(r.action))throw new Error(`Invalid Classic delivery action '${String(r.action)}'; actions: local|push|pr`);let n=Gt(r.targetBranch,"targetBranch");if(n.startsWith("-")||/[~^:?*[\\\s]/u.test(n)||n.includes("..")||n.includes("@{"))throw new Error("Invalid Classic delivery targetBranch");let i={action:r.action,targetBranch:n};if(r.remote!==void 0){let o=Gt(r.remote,"remote");if(!/^[a-zA-Z0-9][a-zA-Z0-9._-]{0,99}$/u.test(o))throw new Error("Classic delivery remote must be a name, not a URL");i.remote=o}if(r.commit!==void 0){let o=Gt(r.commit,"commit");if(!/^(?:[a-fA-F0-9]{40}|[a-fA-F0-9]{64})$/u.test(o))throw new Error("Classic delivery commit must be a full object ID");i.commit=o.toLowerCase()}if(r.prUrl!==void 0){let o=Gt(r.prUrl,"prUrl"),a=new URL(o);if(a.protocol!=="https:"||a.username||a.password)throw new Error("Invalid Classic delivery prUrl");i.prUrl=o}return i}function TS(t){let e=(0,IS.parseDocument)(t,{uniqueKeys:!0});if(e.errors.length)throw new Error("Invalid Classic delivery change state");return Zn(e.toJS())}function $S(t,e){if(typeof t.run_id=="string"&&t.run_id)return`run:${t.run_id}`;let r=t.archived===!0?Ut.basename(e).replace(/^\d{4}-\d{2}-\d{2}-/u,""):Ut.basename(e);if(typeof t.created_at!="string"||typeof t.base_ref!="string")throw new Error("Classic delivery requires stable change identity");return`legacy:${Wl("sha256").update(JSON.stringify([r,t.created_at,t.base_ref])).digest("hex")}`}async function QO(t,e){return TS(await fn(t,Ut.join(e,".comet.yaml"),{label:"Classic delivery state"}))}var Hl=class extends Error{constructor(e,r){super(`Classic delivery git command timed out: ${[e,...r].join(" ")}`)}};function Vm(t,e,r,n){return Lk(e,r,{cwd:t,timeoutMs:5e3,env:RS({authentication:n})}).trim()}function Za(t,e,r,n=!1){try{return Vm(t,e,r,n)}catch{return null}}function ZO(t,e,r,n=!1){try{return Vm(t,e,r,n)}catch(i){if(!(i instanceof Er)||!i.timedOut)return null;try{return Vm(t,e,r,n)}catch(o){if(o instanceof Er&&o.timedOut)throw new Hl(e,r);return null}}}function Xa(t,e){return Za(t,"git",["-C",t,...e])}function Qa(t,e){return ZO(t,"git",["-C",t,...e])}function AS(t,e,r=!1){return Za(t,"git",["-C",t,"remote","get-url",...r?["--push"]:[],e],!0)}function eM(t,e){let r=Ut.relative(t,e).replaceAll("\\","/");return[`:(literal)${r}`,...[".comet-state.lock",".comet-state-transaction.json"].map(n=>`:(exclude,literal)${r}/${n}`)]}function _S(t,e,r,n){let i=Ut.relative(t,e).replaceAll("\\","/"),o=eM(t,e),a=Qa(t,["show",`${r}:${i}/.comet.yaml`]);if(!a)return!1;try{let s=TS(a);return s.archived===!0&&$S(s,e)===n&&Qa(t,["merge-base","--is-ancestor",r,"HEAD"])!==null&&Qa(t,["diff","--quiet","--no-ext-diff","--no-textconv",r,"--",...o])!==null&&Qa(t,["ls-files","--others","--exclude-standard","--",...o])===""}catch(s){if(s instanceof Hl)throw s;return!1}}function tM(t,e){let r=`${Wl("sha256").update(e).digest("hex")}.json`,n=Qa(t,["rev-parse","--path-format=absolute","--git-common-dir"]);return[{root:t,file:Ut.join(t,".comet","classic-deliveries",r)},...n?[{root:n,file:Ut.join(n,"comet","classic-deliveries",r)}]:[]]}async function rM(t,e){let r=null;for(let n of tM(t,e)){if(!await Gn(n.root,n.file,{label:"Classic delivery receipt",expected:"file"}))continue;let i=Zn(JSON.parse(await fn(n.root,n.file,{label:"Classic delivery receipt"})));if(qm(i,["schemaVersion","changeIdentity","authorizationId","invalidated","commit","prUrl"]),i.schemaVersion!==1||i.changeIdentity!==e)throw new Error("Invalid Classic delivery receipt schema or identity");if(i.invalidated!==void 0&&typeof i.invalidated!="boolean")throw new Error("Invalid Classic delivery receipt invalidation");let o=zm({action:"local",targetBranch:"main",...i.commit!==void 0?{commit:i.commit}:{},...i.prUrl!==void 0?{prUrl:i.prUrl}:{}}),a={schemaVersion:1,changeIdentity:e,authorizationId:Gt(i.authorizationId,"authorizationId"),...i.invalidated===!0?{invalidated:!0}:{},...o.commit?{commit:o.commit}:{},...o.prUrl?{prUrl:o.prUrl}:{}};if(r&&JSON.stringify(r)!==JSON.stringify(a))throw new Error("Conflicting Classic delivery receipts");r=a}return r}function nM(t){return t.authorizationId===void 0?`legacy:${Wl("sha256").update(JSON.stringify(t)).digest("hex")}`:Gt(t.authorizationId,"authorizationId")}function jS(t,e,r){return e===r||Xa(t,["merge-base","--is-ancestor",e,r])!==null}function iM(t){let e=/^git@([^:/]+):([^/]+\/[^/]+)$/u.exec(t);try{let r=new URL(e?`ssh://git@${e[1]}/${e[2]}`:t);if(!["https:","ssh:"].includes(r.protocol)||r.password||r.search||r.hash||r.port||r.protocol==="https:"&&r.username)return null;let n=r.pathname.replace(/\.git\/?$/u,"").replace(/\/$/u,"").split("/").filter(Boolean);return n.length!==2||n.some(i=>!/^[a-zA-Z0-9_.-]+$/u.test(i))?null:`${r.hostname}/${n.join("/")}`.toLowerCase()}catch{return null}}function Kl(t,e){try{let r=new URL(t);if(r.protocol!=="https:"||r.username||r.password||r.port||r.search||r.hash)return null;let n=/^\/([^/]+)\/([^/]+)\/pull\/([1-9]\d*)\/?$/u.exec(r.pathname);return n&&`${r.hostname}/${n[1]}/${n[2]}`.toLowerCase()===e?`https://${r.hostname}/${n[1]}/${n[2]}/pull/${n[3]}`:null}catch{return null}}async function Gm(t,e,r={}){let n=await JO(t,e,"delivery.json");if(n===void 0)return{delivery:null,verification:{status:"needsAuthorization"}};let i=Zn(n);if(i.schemaVersion!==1)throw new Error("Unsupported Classic delivery schemaVersion");let o=zm(i,!0),a=await QO(t,e),s=$S(a,e);if(i.changeIdentity!==s)throw new Error("Classic delivery change identity mismatch");let c=nM(i),l=await XO(t,s);if(l&&l.previousAuthorizationId!==c)throw new Error("Classic delivery reauthorization is stale for the sealed authorization");let d=l?{action:l.action,targetBranch:l.targetBranch,...l.remote===void 0?{}:{remote:l.remote}}:o,u=l?.authorizationId??c,p=await rM(t,s),f=p?.authorizationId===u?p:null;if(f?.invalidated)return{delivery:null,verification:{status:"needsAuthorization",invalidated:!0}};for(let C of["commit","prUrl"]){if(C==="commit"&&f?.[C]&&d[C]&&f[C]!==d[C])throw new Error("Classic delivery receipt conflicts with authorization evidence");f?.[C]&&(d[C]=f[C])}let m=i.authorizedRemoteUrl===void 0?void 0:Gt(i.authorizedRemoteUrl,"authorizedRemoteUrl"),g=l?.authorizedRemoteUrl??m,h={...d,schemaVersion:1,changeIdentity:s,authorizationId:u,...g?{authorizedRemoteUrl:g}:{}},w=Xa(t,["symbolic-ref","--quiet","--short","HEAD"]),y=Ut.relative(t,e).replaceAll("\\","/"),v=null;!d.commit&&a.archived===!0&&(v=Xa(t,["log","-20","--format=%H","HEAD","--",`:(literal)${y}/.comet.yaml`])?.split(/\r?\n/u).find(L=>/^[a-f0-9]{40,64}$/u.test(L)&&_S(t,e,L,s))??null);let b=d.commit??v,k=!!b&&Xa(t,["cat-file","-t",b])==="commit",S=a.archived===!0&&k&&_S(t,e,b,s),E=w===d.targetBranch&&(!a.bound_branch||l!==null||a.bound_branch===w)&&S,N=!1,P=!1,_=null,j=r.verifyRemote&&d.action!=="local"?"unavailable":"notChecked",x="notChecked";if(r.verifyRemote&&E&&d.action!=="local"&&d.remote&&g&&AS(t,d.remote)===g&&AS(t,d.remote,!0)===g){let C=`refs/heads/${d.targetBranch}`,L=Za(t,"git",["-C",t,"-c","protocol.allow=never","-c","protocol.https.allow=always","-c","protocol.ssh.allow=always","-c","protocol.file.allow=always","ls-remote","--refs",d.remote,C],!0),I=L?.split(/\r?\n/u)??[],B=I.length===1?/^([a-f0-9]{40}|[a-f0-9]{64})\t(.+)$/u.exec(I[0]):null,re=B?.[2]===C?B[1]:null;N=!!b&&!!re&&jS(t,b,re),j=N?"verified":L===""?"missing":L===null||!re||Xa(t,["cat-file","-t",re])!=="commit"?"unavailable":"missing";let J=iM(g),Oi=J&&d.prUrl?Kl(d.prUrl,J):null,rp=N||L==="",Xy=Ye=>Ye.headRefName===d.targetBranch&&typeof Ye.headRefOid=="string"&&/^(?:[a-f0-9]{40}|[a-f0-9]{64})$/u.test(Ye.headRefOid)&&(N?Ye.headRefOid===re&&["OPEN","MERGED"].includes(Ye.state):L===""&&Ye.state==="MERGED"&&!!b&&jS(t,b,Ye.headRefOid));if(rp&&d.action==="pr"&&(x="unavailable"),rp&&d.action==="pr"&&Oi&&J){let Ye=Za(t,"gh",["pr","view",Oi,"--repo",J,"--json","url,headRefName,headRefOid,state"],!0);try{let fr=Ye?Zn(JSON.parse(Ye)):null;P=!!fr&&typeof fr.url=="string"&&Kl(fr.url,J)===Oi&&Xy(fr),x=P?"verified":fr?"missing":"unavailable"}catch{P=!1,x="unavailable"}}else if(rp&&d.action==="pr"&&!d.prUrl&&J){let Ye=Za(t,"gh",["pr","list","--repo",J,"--head",d.targetBranch,"--state","all","--json","url,headRefName,headRefOid,state","--limit","100"],!0);try{let fr=Ye===null?null:JSON.parse(Ye);if(!Array.isArray(fr)||fr.length>=100)throw new Error("Incomplete PR discovery");let np=fr.map(Zn).filter(ip=>typeof ip.url=="string"&&Kl(ip.url,J)&&Xy(ip));np.length===1?(_=Kl(np[0].url,J),P=!0,x="verified"):x=np.length===0?"missing":"unavailable"}catch{x="unavailable"}}}return{delivery:h,verification:{status:E&&(d.action==="local"||(d.action==="push"?N:P))?"complete":"needsVerification",currentBranch:w,commitExists:k,archiveCommitted:S,observedCommit:v,observedPrUrl:_,remoteVerified:N,prVerified:P,remoteStatus:j,prStatus:x}}}var mM=Ce(Ne(),1);lt();no();Ba();import{execFileSync as lM}from"child_process";import dM from"fs";import ei from"path";import{AsyncLocalStorage as MS}from"node:async_hooks";La();var es=new MS,LS=new MS;function uM(t){let e=es.getStore();for(let r of t)e?.set(yn(r.root),t);return t}function uo(t,e){return Nr(()=>lM("git",["-C",t,...e],{encoding:"utf8",stdio:["ignore","pipe","ignore"],timeout:1e4,windowsHide:!0}).trim())}function ts(t,e){return yn(t)===yn(e)}function yn(t){let e=ei.resolve(t);try{let r=dM.realpathSync.native(e);return process.platform==="win32"?r.toLowerCase():r}catch{return process.platform==="win32"?e.toLowerCase():e}}function Pr(t){try{let e=LS.getStore()?.get(yn(t)),r=es.getStore()?.get(e??yn(t));if(r){let c=OS(e??t,r);if(c)return c;if(r.length===0)return{isGitWorktree:!1,isSecondaryWorktree:!1,currentWorktreeRoot:null,primaryWorktreeRoot:null,currentBranch:null}}let n=ei.resolve(uo(t,["rev-parse","--show-toplevel"])),i=es.getStore()?.get(yn(n))??DS(t),o=OS(n,i);if(es.getStore()&&o)return o;let a=i[0]?.root??n,s=null;try{s=uo(t,["symbolic-ref","--quiet","--short","HEAD"])||null}catch{}return{isGitWorktree:!0,isSecondaryWorktree:!ts(n,a),currentWorktreeRoot:n,primaryWorktreeRoot:a,currentBranch:s}}catch{return{isGitWorktree:!1,isSecondaryWorktree:!1,currentWorktreeRoot:null,primaryWorktreeRoot:null,currentBranch:null}}}function Jm(t){try{let e=es.getStore()?.get(LS.getStore()?.get(yn(t))??yn(t));return e?e.map(r=>({...r})):(uo(t,["rev-parse","--is-inside-work-tree"]),DS(t))}catch{return[]}}function DS(t){let e=pM(uo(t,["worktree","list","--porcelain","-z"]));return uM(e),e.map(r=>({...r}))}function pM(t){let e=t.split("\0"),r=[],n=null;for(let i of e)i.startsWith("worktree ")?(n&&r.push(n),n={root:ei.resolve(i.slice(9)),branch:null,detached:!1}):n&&i.startsWith("branch refs/heads/")?n.branch=i.slice(18):n&&i==="detached"&&(n.detached=!0);return n&&r.push(n),r}function ti(t){return Jm(t).map(e=>e.root)}function OS(t,e){let r=e.find(o=>ts(ei.resolve(o.root),ei.resolve(t)));if(!r)return null;let n=ei.resolve(e[0].root),i=ei.resolve(r.root);return{isGitWorktree:!0,isSecondaryWorktree:!ts(n,i),currentWorktreeRoot:i,primaryWorktreeRoot:n,currentBranch:r.branch}}function BS(t){try{return uo(t,["symbolic-ref","--quiet","--short","HEAD"])||null}catch{return null}}function ri(t,e){try{let r=uo(t,["rev-parse","--verify",`${e}^{commit}`]).toLowerCase();return/^(?:[a-f0-9]{40}|[a-f0-9]{64})$/u.test(r)?r:null}catch{return null}}qe();ro();Q();ge();Ct();var hM=ye("readCometCurrentSelection",t=>Xn(t));async function gM(t,e){$a(e);let r=await Un(e,t);if(!r.stateExists)throw new Error(`Cannot select current change '${e}': active change state not found`);let n=await Ga(r.directory,{migrate:!1});if(!n.classic)throw new Error(`Cannot select current change '${e}': Classic state is incomplete`);if(n.classic.archived)throw new Error(`Cannot select current change '${e}': change is archived`);return r.directory}async function rs(t){let e;try{e=await hM(t)}catch(o){return{status:"stale",reason:o instanceof Error?o.message:String(o)}}if(e.status==="missing")return{status:"missing"};if(e.selection.workflow!=="classic")return{status:"stale",reason:`current change '${e.selection.change}' belongs to Native, not Classic`};let r=e.selection,n;try{n=await gM(t,r.change)}catch(o){try{let a=await vm(r.change,t);if(!a)throw o;let s=await Ga(a.directory,{migrate:!1}),c=await Gm(t,a.directory);if(!s.classic?.archived||["complete","local-verified"].includes(c.verification.status))throw o;n=a.directory}catch(a){return{status:"stale",reason:a instanceof Error?a.message:String(a)}}}let i=await Ua(n,{heal:!1,cwd:t});return i.status==="drift"?{status:"stale",reason:Ja(r.change,i.boundBranch,i.currentBranch)}:i.status==="unbound-detached"?{status:"stale",reason:Ya(r.change)}:i.status==="ok"?{status:"selected",selection:r}:r.branch!==null&&i.currentBranch!==r.branch?{status:"stale",reason:`current change '${r.change}' was selected on branch '${r.branch}', current branch is '${i.currentBranch??"detached HEAD"}'`}:{status:"selected",selection:r}}function Xm(t){return t==="zh-CN"?"zh-CN":"en"}function KS(t,e,r){return t==="zh-CN"?r:e}function HS(t,e){let n={open:{en:"Source code edits are paused while the request is still being clarified.",zh:"需求仍在澄清中,暂时不修改源代码。"},design:{en:"Source code edits are paused until the design is agreed and recorded.",zh:"方案确定并记录之前,暂不修改源代码。"},build:{en:"A required design or plan record is missing, so source edits stay paused.",zh:"缺少必需的设计或计划记录,源代码修改暂被搁置。"},verify:{en:"Implementation edits are paused during verification; only verification output is accepted.",zh:"验证期间暂停修改实现,仅接受验证产出。"},archive:{en:"Source code edits are paused while the change is being archived.",zh:"归档期间暂不修改源代码。"}}[t]??{en:"This write is paused by the current workflow stage.",zh:"当前工作流阶段暂不允许这次写入。"};return{summary:KS(e,"This write was blocked on purpose, not by an error.","这次写入是被有意拦下的,不是发生了错误。"),user_message:KS(e,n.en,n.zh)}}function WS(t){if(t.workflow!=="full")return{missingFields:[],invalidFields:[]};let e=[],r=[];return t.buildMode||e.push("build_mode"),t.tddMode||e.push("tdd_mode"),t.reviewMode||e.push("review_mode"),t.buildMode==="subagent-driven-development"&&t.subagentDispatch!=="confirmed"&&e.push("subagent_dispatch"),t.buildMode==="autonomous"&&t.reviewMode==="off"&&r.push({field:"review_mode",reason:"autonomous full build requires review_mode=standard or thorough"}),t.buildMode==="direct"&&t.directOverride!==!0&&r.push({field:"direct_override",reason:"full workflow direct execution requires direct_override=true"}),{missingFields:e,invalidFields:r}}var VS=Ce(Ne(),1);import ni from"node:path";async function Qm(t,e,r,n={}){if(r.workflow!=="full"||r.buildMode!=="autonomous")return[];let i=[];if(n.requirePlan!==!1){let o=WS(r);o.missingFields.includes("tdd_mode")&&i.push("tdd_mode must be selected for autonomous full build"),o.missingFields.includes("review_mode")&&i.push("review_mode must be selected for autonomous full build"),o.invalidFields.some(({field:a})=>a==="review_mode")&&i.push("review_mode must be standard or thorough for autonomous full build"),r.isolation||i.push("isolation must be selected for autonomous full build")}if(!r.designDoc||!await Pk(t,r.designDoc,"Classic autonomous design"))i.push("design_doc must reference a nonempty technical design for autonomous full build");else{let a=(await fn(t,r.designDoc,{label:"Classic autonomous design"})).replace(/^\uFEFF/u,"").match(/^---\r?\n([\s\S]*?)\r?\n---(?:\r?\n|$)/u),s=a?(0,VS.parseDocument)(a[1]):null;(!s||s.errors.length||s.get("comet_change")!==e||s.get("role")!=="technical-design"||s.get("canonical_spec")!=="openspec")&&i.push("design_doc must link the current change and declare role: technical-design and canonical_spec: openspec")}return n.requirePlan!==!1&&(await Zm(t,r.plan,{requireNonempty:!0})).status!=="ready"&&i.push("plan must reference a nonempty implementation plan in the configured plans directory"),i}async function Zm(t,e,r={}){if(!e||e==="null")return{status:"missing",recordedPath:null};let n=await un(t),i=ni.resolve(t,e),o=ni.relative(n.superpowersPlansDir,i);return ni.isAbsolute(e)||!o||o.startsWith(`..${ni.sep}`)||ni.isAbsolute(o)||o.includes(ni.sep)||ni.extname(o).toLowerCase()!==".md"?{status:"broken",recordedPath:e}:await Gn(t,e,{label:`Classic build plan ${e}`,expected:"file"})&&(!r.requireNonempty||(await fn(t,e,{label:`Classic build plan ${e}`})).trim().length>0)?{status:"ready",recordedPath:e}:{status:"broken",recordedPath:e}}var yM=new Set([".md",".markdown"]),vM=new Set([".md",".markdown",".rst",".txt"]),wM=new Set(["docs","doc","documentation",".github"]),bM=[/^LICENSE(?:[.-]|$)/u,/^NOTICE$/u,/^AUTHORS$/u];function qS(t){return t.replaceAll("\\","/").replace(/^\.\//u,"")}function kM(t,e){for(let r of e){let n=qS(r).replace(/\/+$/u,"");if(n&&(t===n||t.startsWith(`${n}/`)))return!0}return!1}function Vl(t,e=[]){let r=qS(t);if(!r||r.endsWith("/")||kM(r,e))return!1;let n=r.split("/"),i=n[n.length-1],o=i.lastIndexOf("."),a=o===-1?"":i.slice(o).toLowerCase();return n.length===1?yM.has(a)||bM.some(s=>s.test(i)):wM.has(n[0])&&vM.has(a)}Im();qe();import SM from"os";import ql from"path";function NM(t={}){let e=t.cwd??process.cwd(),r=t.homeDir??SM.homedir(),n=[{file:ql.resolve(e,".comet","config.yaml"),source:".comet/config.yaml",scope:"project"},{file:ql.resolve(r,".comet","config.yaml"),source:"~/.comet/config.yaml",scope:"global"}];return n.filter((i,o)=>n.findIndex(a=>a.file===i.file)===o)}async function zS(t,e={}){for(let r of NM(e)){let n=ql.dirname(ql.dirname(r.file)),i=r.scope==="global"?(await jm(n))?.classic:(await br(n,{allowPartialProject:!0}))?.value.classic;if(!i||typeof i!="object"||Array.isArray(i))continue;let o=i[t];if(o!=null)return{value:String(o),source:r.source}}return null}async function EM(t){let e=await zS("document_evidence",{cwd:t});if(!e)return"neutral";if(e.value==="neutral"||e.value==="strict")return e.value;throw new Error(`classic.document_evidence must be neutral or strict, got '${e.value}' (${e.source})`)}function xM(t,e){return[pe(t,e.openSpecRoot),pe(t,e.superpowersRoot)]}async function GS(t,e,r){return await EM(t)==="strict"?!1:Vl(r,xM(t,e))}function be(t,e){return{exitCode:t,stderr:e+`
|
||
`}}function _t(t){return be(0,`[COMET-HOOK] allowed: ${t}`)}function ns(t){return t.replaceAll("\\","/").replace(/\/+/gu,"/")}function je(t){let e=ns(t);return process.platform==="win32"?e.toLowerCase():e}function US(t,e){let r=ns(rt.relative(e,t));return r===""?"":r.startsWith("../")||r===".."||rt.isAbsolute(r)?null:r}async function PM(t){let e=rt.resolve(t),r=rt.parse(e).root,n=[],i=e;for(;i&&i!==r;)try{let o=await zl.realpath(i);return rt.join(o,...n.reverse())}catch(o){let a=o.code;if(a!=="ENOENT"&&a!=="ENOTDIR")throw o;n.push(rt.basename(i)),i=rt.dirname(i)}try{let o=await zl.realpath(r);return rt.join(o,...n.reverse())}catch{return null}}async function CM(t,e){let r=rt.isAbsolute(t)?t:rt.resolve(e,t),n=ns(r),i=US(r,e);if(i!==null)return i;try{let o=await PM(r),a=await zl.realpath(e);if(o){let s=US(o,a);if(s!==null)return s;n=ns(o)}}catch{if(!rt.isAbsolute(t))return ns(t).replace(/^\.\//u,"")}return n.replace(/^\.\//u,"")}async function eh(t){try{let e=await Ga(t,{migrate:!1}),r=Array.from(new Set(e.unknownKeys)).sort();if(r.length>0)throw new Error(`Invalid Classic state: unknown field(s): ${r.join(", ")}`);if(!e.classic)throw new Error("Classic state projection is unavailable");return{changeDir:t,phase:e.classic.phase,classic:e.classic,archived:e.classic.archived}}catch(e){let r=await NS(t);return r.phase?{changeDir:t,phase:r.phase,classic:null,archived:r.archived,invalidState:e instanceof Error&&e.message.includes("unknown field")}:null}}async function RM(t){let e=(await un(t)).changesDir,r=[];if(!(await pn(t,e,{label:"Classic changes directory",expected:"directory"})).exists)return r;for(let i of(await zl.readdir(e,{withFileTypes:!0})).sort((o,a)=>o.name.localeCompare(a.name))){if(i.name==="archive"||xl(i.name))continue;let o=await Un(i.name,t);if(!o.exists||!o.stateExists)continue;let a=await eh(o.directory);!a||a.archived||r.push(a)}return r}var Gl=ye("classicActiveChanges",t=>RM(t)),is=ye("classicActiveChange",async(t,e)=>{let r=await Un(e,t);if(!r.exists||!r.stateExists)return null;let n=await eh(r.directory);return!n||n.archived?null:n}),QS=ye("classicPlanReadiness",Zm);async function ZS(t){return(await Gl(t)).map(e=>({workflow:"classic",name:Cr(e),phase:e.phase}))}async function eN(t,e){let r=await is(t,e);return r?{workflow:"classic",name:e,phase:r.phase}:null}function tN(t,e){return`${pe(t,e.superpowersRoot)}/`}function rN(t,e){return je(t).startsWith(je(e))}function nN(t,e){return[{prefix:`${pe(t,e.superpowersSpecsDir)}/`,field:"designDoc",wireField:"design_doc",phase:"design"},{prefix:`${pe(t,e.superpowersPlansDir)}/`,field:"plan",wireField:"plan",phase:"build"},{prefix:`${pe(t,e.superpowersReportsDir)}/`,field:"verificationReport",wireField:"verification_report",phase:"verify"}]}function iN(t,e){let r=je(t),n=e.find(o=>r.startsWith(je(o.prefix)));if(!n)return null;let i=r.slice(je(n.prefix).length);return!i||i.includes("/")||!i.endsWith(".md")?null:n}function oN(t,e){return t.classic?.[e.field]??null}function AM(t,e){return t.classic!==null&&t.phase===e.phase&&!oN(t,e)}async function JS(t,e,r){return AM(e,r)?!0:r.field!=="plan"||e.phase!=="build"?!1:(await QS(t,e.classic?.plan??null,{requireNonempty:e.classic?.buildMode==="autonomous"})).status==="broken"}function aN(t){return t.phase==="design"||t.phase==="build"||t.phase==="verify"}function Cr(t){return t.changeDir?rt.basename(t.changeDir):null}var _M=new Set(["design","plan","verify","verification","verification-report","report"]);function YS(t){return t.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")}function jM(t,e){return[e.classic?.designDoc,e.classic?.plan,e.classic?.verificationReport].some(n=>n&&je(n)===je(t))}function IM(t,e){let n=(t.split("/").at(-1)??t).replace(/\.[^.]+$/u,"");if(n===e)return!0;let i=[..._M].map(YS).join("|");return new RegExp(`(^|[-_.])${YS(e)}[-_.](${i})$`,"u").test(n)}async function TM(t,e,r){let n=r?[await is(e,r)].filter(s=>s!==null):await Gl(e),i=n.find(s=>jM(t,s));if(i)return{governing:i,match:"recorded"};let a=n.filter(aN).filter(s=>{let c=Cr(s);return c!==null&&IM(t,c)}).sort((s,c)=>(Cr(c)?.length??0)-(Cr(s)?.length??0))[0];return a?{governing:a,match:"named"}:null}async function XS(t,e,r){if(r)return await is(t,r)??{blockedResult:po(e,`selected change '${r}' is no longer active`)};let n=await Gl(t);if(n.length===0)return null;let i=await rs(t);if(i.status==="stale")return{blockedResult:po(e,i.reason)};if(i.status==="selected"){let o=n.find(a=>Cr(a)===i.selection.change);return o||{blockedResult:po(e,`selected change '${i.selection.change}' is no longer active`)}}if(n.length===1){let o=n[0];if(o.changeDir!==null){let a=await Ua(o.changeDir,{heal:!1,cwd:t}),s=Cr(o)??"unknown";if(a.status==="drift")return{blockedResult:po(e,Ja(s,a.boundBranch,a.currentBranch))};if(a.status==="unbound-detached")return{blockedResult:po(e,Ya(s))}}return o}return{blockedResult:VM(e,n.map(o=>Cr(o)).filter(Boolean))}}function $M(t){let r=/^\d{4}-\d{2}-\d{2}-(.+)$/u.exec(t)?.[1]??t;return xl(r)?null:r}function sN(t,e,r){let n=`${pe(e,r.changesDir)}/`;if(!je(t).startsWith(je(n)))return null;let i=t.slice(n.length).split("/").filter(Boolean),[o,a]=i;return o?je(o)===je("archive")?{kind:"archive",archiveName:a??null,changeName:a?$M(a):null}:{kind:"active",changeName:o}:null}function cN(t,e,r){return e?.kind==="archive"?zM(t,e.archiveName,e.changeName,r):e?.kind==="active"&&r&&je(e.changeName)!==je(r)?qM(t,e.changeName,r):null}async function OM(t,e,r,n){let i=sN(t,e,r),o=cN(t,i,n);if(o)return{blockedResult:o};if(i?.kind==="active"){let a=i.changeName,s=await Un(a,e);if(s.stateExists){let c=await eh(s.directory);return c||{changeDir:s.directory,phase:"open",classic:null,archived:!1}}return{changeDir:s.directory,phase:"open",classic:null,archived:!1}}if(rN(t,tN(e,r))){let a=await TM(t,e,n);if(a?.match==="recorded")return{...a.governing,superpowersArtifact:"matched"};let s=iN(t,nN(e,r));if(a)return s?{...a.governing,superpowersArtifact:await JS(e,a.governing,s)?"matched":"unmatched",superpowersSlot:s}:{...a.governing,superpowersArtifact:"matched"};if(s){let l=await XS(e,t,n);return!l||"blockedResult"in l?l:{...l,superpowersArtifact:await JS(e,l,s)?"matched":"unmatched",superpowersSlot:s}}let c=n?await is(e,n):(await Gl(e))[0]??null;return c?{...c,superpowersArtifact:"unmatched"}:null}return XS(e,t,n)}function MM(t){return!t.includes("/")&&t.endsWith(".md")}function LM(t){return t.startsWith(".comet/")||t.includes("/.comet/")}function DM(t){return t===".superpowers"||t.startsWith(".superpowers/")}function BM(t,e,r){let n=je(t);if(!n.startsWith(je(r)))return null;let i=n.endsWith("/.comet.yaml")||n.endsWith("/.openspec.yaml"),o=n.endsWith("/proposal.md")||n.endsWith("/design.md")||n.endsWith("/tasks.md"),a=n.includes("/.comet/"),s=n.includes("/specs/");return e==="open"&&(o||i||a||s)?`${t} (phase: open, openspec artifacts)`:e==="design"&&(o||i||a||s)?`${t} (phase: design, handoff/spec)`:e==="build"&&(n.endsWith("/tasks.md")||i||s)?`${t} (phase: build, spec/tasks)`:e==="verify"&&i?`${t} (phase: verify, state)`:e==="archive"&&i?`${t} (phase: archive, state)`:null}function FM(t,e,r,n){let i=e==="open"?[" BLOCKED: source writes are not allowed during open"," This phase does not allow source writes"," ALLOWED: create proposal/design/tasks artifacts and run guard",` NEXT: finish clarification and artifacts, then run comet guard ${r} open --apply`]:e==="design"?[" BLOCKED: source writes are not allowed during design"," This phase does not allow source writes"," ALLOWED: run brainstorming, create the Design Doc, and run guard",` NEXT: finish the Design Doc, then run comet guard ${r} design --apply to enter build`]:e==="verify"?[" BLOCKED: implementation writes are not allowed during verify"," This phase allows verification reports and state updates only",` NEXT: run comet state transition ${r} verify-fail, then retry the implementation edit in Build`]:[" BLOCKED: source writes are not allowed during archive"," This phase does not allow source writes",` NEXT: run comet archive ${r} to complete Archive; use the reported recovery action if Archive is blocked`];return lN(t,e,e,n,i)}function lN(t,e,r,n,i){let o=HS(r,n);return be(2,["","╔══════════════════════════════════════════╗","║ COMET PHASE GUARD — WRITE BLOCKED ║","╚══════════════════════════════════════════╝","",` Current phase: ${e}`,` Target file: ${t}`,"",` ${o.summary}`,` RELAY TO USER: ${o.user_message}`,"",...i,""].join(`
|
||
`))}function KM(t,e,r){return lN(t,"build (workflow: full), but design_doc is empty","build",r,[" BLOCKED: full workflow source writes require a recorded Design Doc"," This phase does not allow source writes until design_doc is recorded",` NEXT: create the Design Doc, run comet state complete-design ${e} --design-doc <repo-relative-ref>, then retry the original write`])}function HM(t,e,r,n,i){let o=Cr(e)??"<change-name>",a=r.status==="missing",s=a?"classic-build-plan-missing":"classic-build-plan-broken",c=a?"plan is not recorded":"the recorded plan path does not resolve to a file",l=a?[]:[`RECORDED_PLAN: ${r.recordedPath}`],d=e.changeDir?pe(n,e.changeDir):"<classic-change-dir>",u=pe(n,i.superpowersPlansDir),p=e.classic?.buildMode==="autonomous",f=a?`comet state set ${o} plan <repository-relative-plan-path>`:`comet state set ${o} plan <new-repository-relative-plan-path>`,m=a?[p?"2. Plan the implementation autonomously from the confirmed design and task IDs.":"2. Load the Superpowers writing-plans Skill.",`3. Read the Design Doc path from "comet state get ${o} design_doc" and read ${d}/tasks.md.`,`4. Create the implementation plan under ${u}/.`,"5. Record the plan path:",` ${f}`]:[p?`2. Restore the plan file at ${r.recordedPath}, or create a replacement autonomously under ${u}/.`:`2. Restore the plan file at ${r.recordedPath}, or load the Superpowers writing-plans Skill and create a replacement under ${u}/.`,"3. When creating a replacement, record its path:",` ${f}`];return be(2,["","╔══════════════════════════════════════════╗","║ COMET PHASE GUARD — WRITE BLOCKED ║","╚══════════════════════════════════════════╝","",`ERROR_CODE: ${s}`,`CHANGE: ${o}`,"WORKFLOW: full","PHASE: build",`TARGET: ${t}`,`STATE: ${c}`,...l,"",p?"BLOCKED: project source writes require a ready implementation plan.":"BLOCKED: project source writes require a ready Superpowers implementation plan.","","ALLOWED_RECOVERY_WRITES:",`- ${u}/<plan-file>.md`,"- Comet state updates performed by the comet CLI",`- ${d} artifacts allowed by the build phase`,"","RECOVERY:",`1. Invoke /comet-build for ${o} and resume Step 1.`,...m,`${a?"6":"4"}. Verify recovery:`,` comet state check ${o} build --recover`,"","SUCCESS: plan is reported as DONE and recovery advances beyond plan creation.",`RETRY: retry the original Write/Edit for ${t} only after SUCCESS.`,"PROHIBITED: do not treat tasks.md as the implementation plan or write project source before SUCCESS.",p?"Autonomous planning does not require an external Skill; all normal acceptance checks still apply.":"If writing-plans is unavailable, stop and report the missing Skill instead of bypassing this check.",""].join(`
|
||
`))}function WM(t,e){let r=e.superpowersSlot,n=r?oN(e,r):null,i=r?e.phase!==r.phase?[` BLOCKED: ${r.wireField} cannot be first-written in phase ${e.phase}`,` Expected phase: ${r.phase}`," NEXT: resume the matching Comet phase or use an already recorded artifact path"]:n?[` BLOCKED: ${r.wireField} is already recorded for this change`,` Recorded path: ${n}`," NEXT: write the recorded artifact or explicitly correct the state path"]:[" BLOCKED: standard Superpowers artifact state is incomplete"," NEXT: validate the active change state, then retry the matching phase"]:[" BLOCKED: unmatched Superpowers artifact"," This docs/superpowers/ path does not match any active change artifact"," NEXT: use a recorded artifact path or a standard phase artifact directory"];return be(2,["","╔══════════════════════════════════════════╗","║ COMET PHASE GUARD — WRITE BLOCKED ║","╚══════════════════════════════════════════╝","",` Current phase: ${e.phase}`,` Target file: ${t}`,"",...i,""].join(`
|
||
`))}function VM(t,e){return be(2,["","╔══════════════════════════════════════════╗","║ COMET PHASE GUARD — WRITE BLOCKED ║","╚══════════════════════════════════════════╝",""," BLOCKED: multiple active changes require a current change",` Target file: ${t}`,` Active changes: ${e.join(", ")}`,"",` NEXT: choose the intended change, run one of: ${e.map(r=>`comet state select ${r}`).join(" | ")}, then retry the source write`,""].join(`
|
||
`))}function po(t,e){return be(2,["","╔══════════════════════════════════════════╗","║ COMET PHASE GUARD — WRITE BLOCKED ║","╚══════════════════════════════════════════╝",""," BLOCKED: current change selection is stale or invalid",` Target file: ${t}`,` Reason: ${e}`,""," NEXT: run comet state current --json, follow its exact selection recovery action, then retry the source write",""].join(`
|
||
`))}function qM(t,e,r){return be(2,["","╔══════════════════════════════════════════╗","║ COMET PHASE GUARD — WRITE BLOCKED ║","╚══════════════════════════════════════════╝","",` BLOCKED: target belongs to Classic change '${e}', but the current selection is '${r}'`,` Target file: ${t}`,"",` NEXT: write the matching artifact for '${r}', or run comet state select ${e} before modifying this target`,""].join(`
|
||
`))}function zM(t,e,r,n){let i=r?`archived Classic change '${r}'`:e?`Classic archive entry '${e}'`:"the Classic archive",o=n?`, but the current selection is '${n}'`:"";return be(2,["","╔══════════════════════════════════════════╗","║ COMET PHASE GUARD — WRITE BLOCKED ║","╚══════════════════════════════════════════╝","",` BLOCKED: target belongs to ${i}${o}; archived artifacts are immutable`,` Target file: ${t}`,""," NEXT: modify the active change artifact instead; if follow-up work is required, create or select an active change and retry there",""].join(`
|
||
`))}async function GM(t,e,r,n=Pl){try{if((await n(t,[e])).projectTargets.length===0)return _t(`${e} (outside guarded project)`)}catch(m){return be(2,[`[COMET-HOOK] blocked: scope could not be determined safely for ${e}.`,`REASON: ${m instanceof Error?m.message:String(m)}`,"NEXT: verify that the project root is accessible, then retry the write."].join(`
|
||
`))}let i=await CM(e,t),o;try{o=await Nl(t)}catch(m){return be(2,`[COMET-HOOK] blocked: ${m instanceof Error?m.message:String(m)}`)}let a=sN(i,t,o),s=cN(i,a,r);if(s)return s;if(LM(i))return _t(`${i} (whitelist: comet config)`);if(DM(i))return _t(`${i} (whitelist: superpowers workspace)`);if(await GS(t,o,i))return _t(`${i} (whitelist: neutral document)`);if(i==="CLAUDE.md"||i==="CHANGELOG.md"||i==="README.md"||MM(i))return _t(`${i} (whitelist: root markdown)`);let c=await mn(t,e,[rt.join(t,".comet"),o.openSpecRoot,o.superpowersRoot]);if(c)return _t(c);let l;try{l=await OM(i,t,o,r)}catch(m){return be(2,`[COMET-HOOK] blocked: ${m instanceof Error?m.message:String(m)}`)}if(!l)return _t("no active comet change");if("blockedResult"in l)return l.blockedResult;if(l.archived)return _t(`${i} (own change archived)`);let d=l.phase,u=Cr(l)??r;if(!u)return po(i,"active Classic change name cannot be resolved");if(l.classic?.buildMode==="autonomous"&&l.changeDir)try{let m=await Ua(l.changeDir,{heal:!1,cwd:t});if(m.status==="drift")return be(2,Ja(u,m.boundBranch,m.currentBranch));if(m.status==="unbound-detached")return be(2,Ya(u))}catch(m){return be(2,m instanceof Error?m.message:String(m))}let p=iN(i,nN(t,o));if(d==="build"&&l.classic?.buildMode==="autonomous"&&p?.field==="plan"){let m=await Qm(t,u,l.classic,{requirePlan:!1});if(m.length)return be(2,m.join(`
|
||
`))}let f=BM(i,d,`${pe(t,o.openSpecRoot)}/`);if(f)return _t(f);if(rN(i,tN(t,o))){if(l.superpowersArtifact==="matched"&&aN(l))return _t(`${i} (phase: ${d}, superpowers)`);if(l.superpowersArtifact==="unmatched")return WM(i,l)}if(l.invalidState)return be(2,`[COMET-HOOK] blocked: active Classic state is invalid; run comet classic validate ${u}, repair only the reported fields, then run comet state next ${u} --json before retrying ${i}`);if(d==="build"&&l.classic?.workflow==="full"&&!l.classic.designDoc)return KM(i,u,Xm(l.classic?.language));if(d==="build"&&l.classic?.workflow==="full"){let m=await QS(t,l.classic.plan,{requireNonempty:l.classic.buildMode==="autonomous"});if(m.status!=="ready")return HM(i,l,m,t,o)}if(d==="build"){if(l.classic?.buildMode==="autonomous"){let m=await Qm(t,u,l.classic);if(m.length)return be(2,m.join(`
|
||
`))}return _t(`${i} (phase: ${d})`)}return FM(i,d,u,Xm(l.classic?.language))}async function dN(t,e,r,n={}){if(r.intent!=="non-write")try{await Nl(t)}catch(a){return{allowed:!1,reason:a instanceof Error?a.message:String(a),workflow:"classic",change:e}}let i;try{i=await is(t,e)}catch(a){return{allowed:!1,reason:a instanceof Error?a.message:String(a),workflow:"classic",change:e}}if(!i)return{allowed:!1,reason:`Selected Classic change ${e} is missing or archived; resume /comet-classic before retrying`,workflow:"classic",change:e};if(r.intent==="non-write")return{allowed:!0,reason:"Hook event is not a write"};if(r.intent==="unknown"||r.targets.length===0)return{allowed:!0,reason:"Hook write target was not attributed to the guarded project",workflow:"classic",change:e,phase:i.phase};let o=!1;for(let a of r.targets){let s=await GM(t,a,e,n.scopeTargets);if(s.exitCode!==0)return{allowed:!1,reason:s.stderr?.trim()||"Classic phase guard blocked the write",workflow:"classic",change:e,phase:i.phase};s.stderr?.includes("configured Hook allow path")&&(o=!0)}return{allowed:!0,reason:o?"Classic write allowed by configured Hook allow path":`Classic write allowed in ${i.phase}`,workflow:"classic",change:e,phase:i.phase}}yr();import{promises as vK}from"fs";import H from"path";var Vh=Ce(Ne(),1);import{promises as t1}from"fs";import Eo from"path";wn();ke();mo();Tt();it();se();Pd();Fh();it();se();za();ke();vn();var p3={runStateBytes:Number.MAX_SAFE_INTEGER,trajectoryBytes:Number.MAX_SAFE_INTEGER,trajectoryEvents:4096,trajectoryEventBytes:Number.MAX_SAFE_INTEGER,checkpointBytes:Number.MAX_SAFE_INTEGER,pendingActionBytes:Number.MAX_SAFE_INTEGER,contextBytes:Number.MAX_SAFE_INTEGER,artifactsBytes:Number.MAX_SAFE_INTEGER};import{createHash as zB}from"node:crypto";import{promises as Id}from"node:fs";import Nn from"node:path";ke();wn();it();se();var fs=/^[a-f0-9]{64}$/u,_E=/^(?:[a-f0-9]{40}|[a-f0-9]{64})$/u,GB=16*1024,Hh=process.platform;function TE(t,e){let r=Nn.relative(t,e);return Nn.isAbsolute(r)||r===".."||r.startsWith(`..${Nn.sep}`)?null:r.replaceAll("\\","/")||"."}function $E(t){return Array.from(t).some(e=>{let r=e.codePointAt(0)??0;return r<=31||r===127})}function OE(t,e){if(t.length===0||$E(t)||t.includes("\\")||Nn.posix.isAbsolute(t)||/^(?:[A-Za-z]:|~)/u.test(t)||t.split("/").includes(".."))throw new Error(`${e} must be a portable project-relative path`);let r=Nn.posix.normalize(t);if(r!==t||r===".."||r.startsWith("../"))throw new Error(`${e} must be a normalized project-relative path`);return r}function Wh(t,e){return zB("sha256").update(`${t}
|
||
${e}`).digest("hex")}async function jE(t,e){let r=await Id.realpath(e),n=await Id.lstat(r);if(!n.isDirectory()||n.isSymbolicLink())throw new Error("Native workspace identity requires a real directory");let i=Hh==="win32"?Nn.normalize(r).toLowerCase():r;return Wh(t,`${i}
|
||
${n.dev}
|
||
${n.ino}
|
||
${n.birthtimeMs}`)}async function IE(t,e){let r=await Id.realpath(e),n=await Id.lstat(r);if(!n.isDirectory()||n.isSymbolicLink())throw new Error("Native workspace identity requires a real directory");let i=Hh==="win32"?Nn.normalize(r).toLowerCase():r;return Wh(t,i)}function UB(t){if(typeof t!="string")throw new Error("Native workspace capturedAt is invalid");let e=new Date(t);if(!Number.isFinite(e.getTime())||e.toISOString()!==t)throw new Error("Native workspace capturedAt is invalid");return t}function Kh(t,e){if(t===null)return null;if(typeof t!="string"||t.length===0||t.trim()!==t||$E(t))throw new Error(`${e} must be a non-empty branch name or null`);return t}function ME(t){if(!new Set(["current","branch","worktree"]).has(t.isolation))throw new Error("Native workspace isolation must be current, branch, or worktree");if(Kh(t.changeBranch,"Native workspace change branch"),Kh(t.targetBranch,"Native workspace target branch"),(t.isolation==="branch"||t.isolation==="worktree")&&(t.changeBranch===null||t.targetBranch===null))throw new Error("Native isolated workspace requires change and target branches")}function JB(t){if(!t||typeof t!="object"||Array.isArray(t))throw new Error("Native workspace Git provenance must be an object");let e=t,r=new Set(["provider","baseCommit","targetBranch","targetCommit"]),n=Object.keys(e).filter(i=>!r.has(i));if(n.length>0)throw new Error(`Native workspace Git provenance has unknown field(s): ${n.join(", ")}`);if(e.provider!=="git"||typeof e.baseCommit!="string"||!_E.test(e.baseCommit)||typeof e.targetCommit!="string"||!_E.test(e.targetCommit))throw new Error("Native workspace Git provenance is invalid");Kh(e.targetBranch,"Native workspace Git target branch")}function Td(t){if(!t||typeof t!="object"||Array.isArray(t))throw new Error("Native workspace identity must be an object");let e=t,r=new Set(["schema","capturedAt","capturedRevision","nativeRootRef","projectRootId","nativeRootId","projectRootPathId","nativeRootPathId","sessionHash","git","isolation","changeBranch","targetBranch","finish"]),n=Object.keys(e).filter(a=>!r.has(a));if(n.length>0)throw new Error(`Native workspace identity has unknown field(s): ${n.join(", ")}`);if(e.schema!=="comet.native.workspace.v2"&&e.schema!=="comet.native.workspace.v3")throw new Error("Unsupported Native workspace identity");if(!Number.isSafeInteger(e.capturedRevision)||e.capturedRevision<1||typeof e.nativeRootRef!="string"||!fs.test(String(e.projectRootId))||!fs.test(String(e.nativeRootId)))throw new Error("Native workspace identity is invalid");UB(e.capturedAt),OE(e.nativeRootRef,"Native workspace root ref");let i=e.projectRootPathId!==void 0,o=e.nativeRootPathId!==void 0;if(i!==o)throw new Error("Native workspace path identities must be provided together");if(i&&!fs.test(String(e.projectRootPathId))||o&&!fs.test(String(e.nativeRootPathId)))throw new Error("Native workspace path identity is invalid");if(e.sessionHash!==void 0&&!fs.test(String(e.sessionHash)))throw new Error("Native workspace session hash is invalid");if(e.git!==void 0&&JB(e.git),e.schema==="comet.native.workspace.v2"){if(e.isolation!==void 0||e.changeBranch!==void 0||e.targetBranch!==void 0||e.finish!==void 0)throw new Error("Native workspace v2 identity cannot contain a workspace binding");return}if(typeof e.isolation!="string"||e.changeBranch===void 0||e.targetBranch===void 0||e.finish===void 0)throw new Error("Native workspace v3 identity requires a workspace binding");if(ME(e),e.finish!==null&&!new Set(["merge","push","pull-request","keep"]).has(e.finish))throw new Error("Native workspace finish must be merge, push, pull-request, keep, or null")}function YB(t,e){return Nn.join(rn(t,e),"workspace.json")}function XB(t,e){let r=YB(t,e),n=Wn(t,r),i=TE(n,r);if(!i||i===".")throw new Error("Native workspace file escaped its root");return{root:n,ref:OE(i,"Native workspace file ref")}}async function QB(t,e){try{let r=XB(t,e),n=await ne({root:r.root,ref:r.ref,maxBytes:GB});return JSON.parse(n.text)}catch(r){if(r.code==="ENOENT")return null;throw r}}async function ZB(t){if(!Number.isSafeInteger(t.revision)||t.revision<1)throw new Error("Native workspace revision must be a positive integer");let e=TE(t.paths.projectRoot,t.paths.nativeRoot);if(!e)throw new Error("Native root is outside the project root");let r=Pr(t.paths.projectRoot),n=r.isGitWorktree?ri(t.paths.projectRoot,"HEAD"):null,i=t.binding?.targetBranch??r.currentBranch,o=i==null?null:ri(t.paths.projectRoot,i),a=n!==null&&i!==null&&i!==void 0&&o!==null?{provider:"git",baseCommit:n,targetBranch:i,targetCommit:o}:void 0,[s,c,l,d]=await Promise.all([jE("comet.native.workspace-project-root.v2",t.paths.projectRoot),jE("comet.native.workspace-native-root.v2",t.paths.nativeRoot),IE("comet.native.workspace-project-root-path.v2",t.paths.projectRoot),IE("comet.native.workspace-native-root-path.v2",t.paths.nativeRoot)]),u=(t.now??new Date).toISOString();if(t.finish&&!t.binding)throw new Error("Native workspace finish requires a workspace binding");t.binding&&ME(t.binding);let p={capturedAt:u,capturedRevision:t.revision,nativeRootRef:e,projectRootId:s,nativeRootId:c,projectRootPathId:l,nativeRootPathId:d,...a?{git:a}:{},...t.sessionId?{sessionHash:Wh("comet.native.workspace-session.v2",`${s}
|
||
${c}
|
||
${t.sessionId}`)}:{}},f=t.binding?{schema:"comet.native.workspace.v3",...p,...t.binding,finish:t.finish??null}:{schema:"comet.native.workspace.v2",...p};return Td(f),f}async function LE(t,e){let r=await QB(t,e);return r===null||r&&typeof r=="object"&&!Array.isArray(r)&&r.schema==="comet.native.workspace.v1"?null:(Td(r),r)}async function DE(t){Td(t.identity);let e=await ZB({paths:t.paths,name:"workspace-advisory",revision:t.identity.capturedRevision}),r=[],n=[];return e.nativeRootRef!==t.identity.nativeRootRef&&r.push("native-root-ref"),t.identity.projectRootPathId&&t.identity.nativeRootPathId?(e.projectRootPathId!==t.identity.projectRootPathId&&r.push("project-root-path"),e.nativeRootPathId!==t.identity.nativeRootPathId&&r.push("native-root-path")):(e.projectRootId!==t.identity.projectRootId&&r.push("project-root-legacy-identity"),e.nativeRootId!==t.identity.nativeRootId&&r.push("native-root-legacy-identity")),Hh==="win32"&&r.length>0&&r.every(o=>o==="project-root-legacy-identity"||o==="native-root-legacy-identity")?n.push("workspace-inspection-unavailable"):r.length>0&&n.push("workspace-root-changed"),{state:n.length===0?"aligned":n.includes("workspace-root-changed")?"drifted":"unknown",findingCodes:n,driftComponents:r}}async function BE(t){if(Td(t.identity),t.identity.schema==="comet.native.workspace.v2")return{state:"legacy",code:"workspace-binding-legacy",message:"Legacy Native workspace metadata has no isolation binding"};if((await DE(t)).state==="drifted")return{state:"drifted",code:"workspace-binding-root-changed",message:"Native change is being accessed from a different working directory"};let r=Pr(t.paths.projectRoot);return t.identity.changeBranch===null?r.isGitWorktree?{state:"drifted",code:"workspace-branch-changed",message:"Native change was created outside Git but is now being accessed inside Git"}:{state:"aligned",code:null,message:null}:r.isGitWorktree?r.currentBranch!==t.identity.changeBranch?{state:"drifted",code:"workspace-branch-changed",message:`Native change is bound to branch ${t.identity.changeBranch}, but the current branch is ${r.currentBranch??"detached HEAD"}`}:t.identity.isolation==="worktree"&&!r.isSecondaryWorktree?{state:"drifted",code:"workspace-kind-changed",message:"Native change is bound to a linked Git worktree"}:{state:"aligned",code:null,message:null}:{state:"drifted",code:"workspace-vcs-unavailable",message:"Native change requires its bound Git working directory"}}async function FE(t,e){let r=await LE(t,e);if(r===null)return null;let n=await BE({paths:t,identity:r});if(n.state==="drifted")throw new Error(`${n.code}: ${n.message}`);return r}dd();md();md();var e8=ed("en");function ms(t,e){vo(e);let r=Eo.join(t.changesDir,e);if(!Ze(t.changesDir,r))throw new Error("Native change path escaped");return r}async function r1(t,e){let r=rn(t,e),n=Eo.join(r,"schema-migration.json");await te(Ze(t.runtimeDir,n)?t.runtimeDir:t.nativeRoot,n);try{return await t1.lstat(n),!0}catch(i){if(i.code==="ENOENT")return!1;throw i}}async function n1(t,e=Eo.dirname(t)){let r=Eo.relative(e,t).split(Eo.sep).join("/"),n=await ne({root:e,ref:r,maxBytes:null,includeHash:!1}),i=(0,Vh.parseDocument)(n.text,{uniqueKeys:!0});if(i.errors.length>0)throw new Error(`Invalid Native change file ${t}: ${i.errors[0].message}`);return i.toJS()}async function i1(t,e){let r=Eo.join(ms(t,e),kn);await te(t.nativeRoot,r);let n=vh(await n1(r,t.nativeRoot));if(n.state&&n.state.name!==e)throw new Error(`Native change directory/name mismatch: ${e}`);return await r1(t,e)?{status:"migration-required",schema:n.schema,minimumRuntimeVersion:n.minimumRuntimeVersion,state:n.state,message:`Native schema migration is incomplete for ${e}; run doctor --repair`}:(n.status==="current"&&n.state&&await o1(t,n.state),n)}async function o1(t,e){if(await AE(t,e.name)!==null&&e.verification_protocol!=="legacy-v1")throw new Error(`Native verification protocol is unsupported: ${e.verification_protocol}`)}async function hs(t,e){let r=await i1(t,e);if(r.status==="migration-required")throw new yo(e,r.schema);if(r.status==="runtime-incompatible"||!r.state)throw new Ir(r.schema,r.minimumRuntimeVersion);return await FE(t,e),r.state}Tt();se();Oa();Wa();Tt();it();import{promises as WE}from"node:fs";import Od from"node:path";lt();ke();yd();import{promises as HE}from"node:fs";import a1 from"node:os";import vs from"node:path";function gs(t,e){if(!t||typeof t!="object"||Array.isArray(t))throw new Error(`${e} must be an object`);return t}function ys(t,e,r){let n=Object.keys(t).filter(i=>!e.has(i));if(n.length>0)throw new Error(`${r} has unknown field(s): ${n.join(", ")}`)}function Oe(t,e,r=!1){if(typeof t!="string"||!r&&t.length===0)throw new Error(`${e} must be ${r?"a string":"a non-empty string"}`);return t}function xo(t,e){return t===null?null:Oe(t,e)}function Po(t,e,r=0){if(!Number.isSafeInteger(t)||t<r)throw new Error(`${e} must be a safe integer greater than or equal to ${r}`);return t}function s1(t,e){if(t===null)return null;if(!Number.isSafeInteger(t))throw new Error(`${e} must be null or a safe integer`);return t}function c1(t,e){if(typeof t!="boolean")throw new Error(`${e} must be a boolean`);return t}function Co(t,e,r){if(typeof t!="string"||!e.includes(t))throw new Error(`${r} must be one of: ${e.join(", ")}`);return t}function qh(t,e){if(t===null)return null;let r=Oe(t,e);if(Number.isNaN(Date.parse(r)))throw new Error(`${e} must be an ISO timestamp`);return r}function l1(t,e){let r=Oe(t,e);if(Number.isNaN(Date.parse(r)))throw new Error(`${e} must be an ISO timestamp`);return r}function zh(t,e){let r=Oe(t,e);if(!vs.isAbsolute(r))throw new Error(`${e} must be absolute`);return vs.resolve(r)}function d1(t,e){let r=`Native local checks[${e}]`,n=gs(t,r);if(ys(n,new Set(["id","name","operationId","status","repeatable","timeoutMs","executionCount","argv","cwd","exitCode","startedAt","completedAt","log","activeProcess","evidence","evidenceDigest"]),r),!Array.isArray(n.argv)||n.argv.length===0)throw new Error(`${r}.argv must be a non-empty array`);let i=n.argv.map((d,u)=>Oe(d,`${r}.argv[${u}]`,!0)),o=Co(n.status,["planned","running","passed","failed","interrupted"],`${r}.status`),a=qh(n.startedAt,`${r}.startedAt`),s=qh(n.completedAt,`${r}.completedAt`);if(o==="planned"&&(a!==null||s!==null))throw new Error(`${r} planned check cannot contain execution timestamps`);if(o==="running"&&(a===null||s!==null))throw new Error(`${r} running check requires only startedAt`);if((o==="passed"||o==="failed")&&(a===null||s===null))throw new Error(`${r} completed check requires startedAt and completedAt`);let c=Po(n.timeoutMs,`${r}.timeoutMs`);if(c<1)throw new Error(`${r}.timeoutMs must be positive`);let l;if(Object.hasOwn(n,"activeProcess"))if(n.activeProcess===null)l=null;else{let d=gs(n.activeProcess,`${r}.activeProcess`),u=Co(d.status,["starting","running"],`${r}.activeProcess.status`);if(ys(d,new Set(["status","pid","identity"]),`${r}.activeProcess`),u==="starting"){if(Object.hasOwn(d,"pid")||Object.hasOwn(d,"identity"))throw new Error(`${r}.activeProcess starting state cannot contain process identity`);l={status:"starting"}}else l={status:"running",pid:Po(d.pid,`${r}.activeProcess.pid`,1),...Object.hasOwn(d,"identity")?{identity:Oe(d.identity,`${r}.activeProcess.identity`)}:{}}}return{id:Oe(n.id,`${r}.id`),name:Oe(n.name,`${r}.name`),operationId:Oe(n.operationId,`${r}.operationId`),status:o,repeatable:c1(n.repeatable,`${r}.repeatable`),timeoutMs:c,executionCount:Po(n.executionCount,`${r}.executionCount`),argv:i,cwd:zh(n.cwd,`${r}.cwd`),exitCode:s1(n.exitCode,`${r}.exitCode`),startedAt:a,completedAt:s,log:Oe(n.log,`${r}.log`),...Object.hasOwn(n,"activeProcess")?{activeProcess:l}:{},...Object.hasOwn(n,"evidence")?{evidence:Co(n.evidence,["runtime"],`${r}.evidence`)}:{},...Object.hasOwn(n,"evidenceDigest")?{evidenceDigest:Oe(n.evidenceDigest,`${r}.evidenceDigest`)}:{}}}function Gh(t){let e="Native local execution state",r=gs(t,e);if(ys(r,new Set(["schema","change","basedOnStateVersion","candidateId","inputFingerprint","inputFingerprintGate","candidateInputFingerprintGate","workspace","execution","checks"]),e),r.schema!==us)throw new Error(`Native local execution schema must be ${us}`);let n=gs(r.workspace,"Native local workspace");ys(n,new Set(["projectRoot","worktreeRoot","branch","machineId"]),"Native local workspace");let i=null;if(r.execution!==null){let a=gs(r.execution,"Native local execution");ys(a,new Set(["operationId","stage","actor","executionId","status","startedAt","requestCheckRounds","verifierStartedAt","ownerPid","ownerIdentity"]),"Native local execution");let s=qh(a.startedAt,"Native local execution.startedAt");if(s===null)throw new Error("Native local execution.startedAt is required");i={operationId:Oe(a.operationId,"Native local execution.operationId"),stage:Co(a.stage,["building","checking","verifying","archiving"],"Native local execution.stage"),actor:a.actor===null?null:Co(a.actor,["builder","runtime","verifier"],"Native local execution.actor"),executionId:xo(a.executionId,"Native local execution.executionId"),status:Co(a.status,["running","completed","interrupted"],"Native local execution.status"),startedAt:s,requestCheckRounds:Po(a.requestCheckRounds,"Native local execution.requestCheckRounds"),...Object.hasOwn(a,"verifierStartedAt")?{verifierStartedAt:l1(a.verifierStartedAt,"Native local execution.verifierStartedAt")}:{},...Object.hasOwn(a,"ownerPid")?{ownerPid:Po(a.ownerPid,"Native local execution.ownerPid",1)}:{},...Object.hasOwn(a,"ownerIdentity")?{ownerIdentity:Oe(a.ownerIdentity,"Native local execution.ownerIdentity")}:{}}}if(!Array.isArray(r.checks))throw new Error("Native local checks must be an array");let o=r.checks.map(d1);if(new Set(o.map(a=>a.id)).size!==o.length)throw new Error("Native local check IDs must be unique");if(i&&o.some(a=>a.operationId!==i.operationId))throw new Error("Native local checks must belong to the current operation");return{schema:us,change:Oe(r.change,"Native local change"),basedOnStateVersion:Po(r.basedOnStateVersion,"Native local basedOnStateVersion",1),...Object.hasOwn(r,"candidateId")?{candidateId:xo(r.candidateId,"Native local candidateId")}:{},...Object.hasOwn(r,"inputFingerprint")?{inputFingerprint:xo(r.inputFingerprint,"Native local inputFingerprint")}:{},...Object.hasOwn(r,"inputFingerprintGate")?{inputFingerprintGate:xo(r.inputFingerprintGate,"Native local inputFingerprintGate")}:{},...Object.hasOwn(r,"candidateInputFingerprintGate")?{candidateInputFingerprintGate:xo(r.candidateInputFingerprintGate,"Native local candidateInputFingerprintGate")}:{},workspace:{projectRoot:zh(n.projectRoot,"Native local workspace.projectRoot"),worktreeRoot:zh(n.worktreeRoot,"Native local workspace.worktreeRoot"),branch:xo(n.branch,"Native local workspace.branch"),...Object.hasOwn(n,"machineId")?{machineId:Oe(n.machineId,"Native local workspace.machineId")}:{}},execution:i,checks:o}}function Or(t){return Gh({schema:us,change:t.portableState.name,basedOnStateVersion:t.portableState.state_version,candidateId:t.portableState.builder_handoff?.candidate_id??null,inputFingerprint:null,inputFingerprintGate:null,candidateInputFingerprintGate:null,workspace:{projectRoot:vs.resolve(t.projectRoot),worktreeRoot:vs.resolve(t.worktreeRoot??t.projectRoot),branch:t.branch??null,machineId:a1.hostname()},execution:null,checks:[]})}async function $d(t){let e;try{e=await HE.readFile(t,"utf8")}catch(n){if(n.code==="ENOENT")return null;throw n}let r;try{r=JSON.parse(e)}catch(n){throw new Error(`Native local execution state is invalid JSON: ${n.message}`,{cause:n})}return Gh(r)}async function En(t,e,r={}){let n=Gh(e);await HE.mkdir(vs.dirname(t),{recursive:!0}),await Jt(t,n,r)}Sn();se();var di=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/u,VE="comet-state.yaml",qE="state.json";function Me(t,e){if(!di.test(e))throw new Error(`Invalid Native change name: ${e}`);let r=Od.join(t.changesDir,e);if(!Ze(t.changesDir,r))throw new Error("Native change path escaped");return r}function ws(t,e){return Od.join(Me(t,e),VE)}function er(t,e){return Od.join(tn(t,e),qE)}async function Ro(t,e){try{let r=await WE.readFile(ws(t,e),"utf8");return/^schema:\s*comet\.native\.v4\s*$/mu.test(r)}catch(r){if(r.code==="ENOENT")return!1;throw r}}function Mr(t){return BS(t)}async function Je(t,e){return ps(ws(t,e))}async function xn(t){let e=await oE({file:ws(t.paths,t.previous.name),expectedStateVersion:t.previous.state_version,next:t.next,containedRoot:t.paths.nativeRoot});if(e.verification===null&&e.verification_report===null){let r=Od.join(Me(t.paths,e.name),"verification.md");await te(t.paths.nativeRoot,r),await WE.rm(r,{force:!0})}return e}import{promises as ru}from"node:fs";import vi from"node:path";function Xh(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var fi=Xh();function ZE(t){fi=t}var ui={exec:()=>null};function Ao(t){let e=[];return r=>{let n=Math.max(0,Math.min(3,r-1)),i=e[n];return i||(i=t(n),e[n]=i),i}}function M(t,e=""){let r=typeof t=="string"?t:t.source,n={replace:(i,o)=>{let a=typeof o=="string"?o:o.source;return a=a.replace(xe.caret,"$1"),r=r.replace(i,a),n},getRegex:()=>new RegExp(r,e)};return n}var u1=((t="")=>{try{return!!new RegExp("(?<=1)(?<!1)"+t)}catch{return!1}})(),xe={codeRemoveIndent:/^(?: {1,4}| {0,3}\t)/gm,outputLinkReplace:/\\([\[\]])/g,indentCodeCompensation:/^(\s+)(?:```)/,beginningSpace:/^\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\n/g,tabCharGlobal:/\t/g,multipleSpaceGlobal:/\s+/g,blankLine:/^[ \t]*$/,doubleBlankLine:/\n[ \t]*\n[ \t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\n {0,3}((?:=+|-+) *)(?=\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \t]?/gm,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\[[ xX]\] +\S/,listReplaceTask:/^\[[ xX]\] +/,listTaskCheckbox:/\[[ xX]\]/,anyLine:/\n.*\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\||\| *$/g,tableRowBlankLine:/\n[ \t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^<a /i,endATag:/^<\/a>/i,startPreScriptTag:/^<(pre|code|kbd|script)(\s|>)/i,endPreScriptTag:/^<\/(pre|code|kbd|script)(\s|>)/i,startAngleBracket:/^</,endAngleBracket:/>$/,pedanticHrefTitle:/^([^'"]*[^\s])\s+(['"])(.*)\2/,unicodeAlphaNumeric:/[\p{L}\p{N}]/u,escapeTest:/[&<>"']/,escapeReplace:/[&<>"']/g,escapeTestNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,escapeReplaceNoEncode:/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/g,caret:/(^|[^\[])\^/g,percentDecode:/%25/g,findPipe:/\|/g,splitPipe:/ \|/,slashPipe:/\\\|/g,carriageReturn:/\r\n|\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\S*/,endingNewline:/\n$/,listItemRegex:t=>new RegExp(`^( {0,3}${t})((?:[ ][^\\n]*)?(?:\\n|$))`),nextBulletRegex:Ao(t=>new RegExp(`^ {0,${t}}(?:[*+-]|\\d{1,9}[.)])((?:[ ][^\\n]*)?(?:\\n|$))`)),hrRegex:Ao(t=>new RegExp(`^ {0,${t}}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)`)),fencesBeginRegex:Ao(t=>new RegExp(`^ {0,${t}}(?:\`\`\`|~~~)`)),headingBeginRegex:Ao(t=>new RegExp(`^ {0,${t}}#`)),htmlBeginRegex:Ao(t=>new RegExp(`^ {0,${t}}<(?:[a-z].*>|!--)`,"i")),blockquoteBeginRegex:Ao(t=>new RegExp(`^ {0,${t}}>`))},p1=/^(?:[ \t]*(?:\n|$))+/,f1=/^((?: {4}| {0,3}\t)[^\n]+(?:\n(?:[ \t]*(?:\n|$))*)?)+/,m1=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,Ss=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,h1=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,Qh=/ {0,3}(?:[*+-]|\d{1,9}[.)])/,ex=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\n(?!\s*?\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\n {0,3}(=+|-+) *(?:\n+|$)/,tx=M(ex).replace(/bull/g,Qh).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}(?:\s|$)/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/\|table/g,"").getRegex(),g1=M(ex).replace(/bull/g,Qh).replace(/blockCode/g,/(?: {4}| {0,3}\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}(?:\s|$)/).replace(/html/g,/ {0,3}<[^\n>]+>\n/).replace(/table/g,/ {0,3}\|?(?:[:\- ]*\|)+[\:\- ]*\n/).getRegex(),Zh=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table|[ \t]+\n)[^\n]+)*)/,y1=/^[^\n]+/,eg=/(?!\s*\])(?:\\[\s\S]|[^\[\]\\])+/,v1=M(/^ {0,3}\[(label)\]: *(?:\n[ \t]*)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n[ \t]*)?| *\n[ \t]*)(title))? *(?:\n+|$)/).replace("label",eg).replace("title",/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),w1=M(/^(bull)([ \t][^\n]*?)?(?:\n|$)/).replace(/bull/g,Qh).getRegex(),Fd="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",tg=/<!--(?:-?>|[\s\S]*?(?:-->|$))/,b1=M("^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:</\\1>[^\\n]*\\n*|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>[^\\n]*\\n*|$)|<![A-Z][\\s\\S]*?(?:>[^\\n]*\\n*|$)|<!\\[CDATA\\[[\\s\\S]*?(?:\\]\\]>[^\\n]*\\n*|$)|</?(tag)(?: +|\\n|/?>)[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$)|</(?!script|pre|style|textarea)[a-z][\\w-]*\\s*>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n[ ]*)+\\n|$))","i").replace("comment",tg).replace("tag",Fd).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),rx=t=>M(Zh).replace("hr",Ss).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*(?:\\n|$))|~~~)[^\\n]*(?:\\n|$)").replace("list",t).replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",Fd).getRegex(),k1=rx(/ {0,3}(?:[*+-]|1[.)])[ \t]+[^ \t\n]/),S1=rx(/ {0,3}(?:[*+-]|\d{1,9}[.)])(?:[ \t]|\n|$)/),N1=M(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace("paragraph",S1).getRegex(),rg={blockquote:N1,code:f1,def:v1,fences:m1,heading:h1,hr:Ss,html:b1,lheading:tx,list:w1,newline:p1,paragraph:k1,table:ui,text:y1},zE=M("^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)").replace("hr",Ss).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("blockquote"," {0,3}>").replace("code","(?: {4}| {0,3} )[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*(?:\\n|$))|~~~)[^\\n]*(?:\\n|$)").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",Fd).getRegex(),E1={...rg,lheading:g1,table:zE,paragraph:M(Zh).replace("hr",Ss).replace("heading"," {0,3}#{1,6}(?:\\s|$)").replace("|lheading","").replace("table",zE).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*(?:\\n|$))|~~~)[^\\n]*(?:\\n|$)").replace("list"," {0,3}(?:[*+-]|1[.)])[ \\t]+[^ \\t\\n]").replace("html","</?(?:tag)(?: +|\\n|/?>)|<(?:script|pre|style|textarea|!--)").replace("tag",Fd).getRegex()},x1={...rg,html:M(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)|<tag(?:"[^"]*"|'[^']*'|\\s[^'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace("comment",tg).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:ui,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:M(Zh).replace("hr",Ss).replace("heading",` *#{1,6} *[^
|
||
]`).replace("lheading",tx).replace("|table","").replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").replace("|tag","").getRegex()},P1=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,C1=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,nx=/^( {2,}|\\)\n(?!\s*$)/,R1=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*_]|\b_|$)|[^ ](?= {2,}\n)))/,Lr=/[\p{P}\p{S}]/u,_o=/[\s\p{P}\p{S}]/u,Ns=/[^\s\p{P}\p{S}]/u,A1=M(/^((?![*_])punctSpace)/,"u").replace(/punctSpace/g,_o).getRegex(),_1=/[\p{Pi}\p{Ps}"']/u,ix=/(?!~)[\p{P}\p{S}]/u,j1=/(?!~)[\s\p{P}\p{S}]/u,I1=/(?:[^\s\p{P}\p{S}]|~)/u,T1=M(/link|precode-code|html/,"g").replace("link",/\[(?:[^\[\]`]|(?<a>`+)[^`]+\k<a>(?!`))*?\]\((?:\\[\s\S]|[^\\\(\)]|\((?:\\[\s\S]|[^\\\(\)])*\))*\)/).replace("precode-",u1?"(?<!`)()":"(^^|[^`])").replace("code",/(?<b>`+)[^`]+\k<b>(?!`)/).replace("html",/<(?! )[^<>]*?>/).getRegex(),ox=/^(?:\*+(?:((?!\*)punct)|([^\s*]))?)|^_+(?:((?!_)punct)|([^\s_]))?/,$1=M(ox,"u").replace(/punct/g,Lr).getRegex(),O1=M(ox,"u").replace(/punct/g,ix).getRegex(),M1=/^(?:\*+(?:((?!\*)(?!openQuote)punct)|([^\s*]))?)|^_+(?:((?!_)(?!openQuote)punct)|([^\s_]))?/,L1=M(M1,"u").replace(/openQuote/g,_1).replace(/punct/g,Lr).getRegex(),ax="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)punctSpace(\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|notPunctSpace(\\*+)(?=notPunctSpace)",D1=M(ax,"gu").replace(/notPunctSpace/g,Ns).replace(/punctSpace/g,_o).replace(/punct/g,Lr).getRegex(),B1=M(ax,"gu").replace(/notPunctSpace/g,I1).replace(/punctSpace/g,j1).replace(/punct/g,ix).getRegex(),F1="^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)punct(\\*+)(?=[\\s]|$)|notPunctSpace(\\*+)(?!\\*)(?=punctSpace|$)|(?!\\*)[\\s](\\*+)(?=notPunctSpace)|[\\s](\\*+)(?!\\*)(?=punct)|(?!\\*)punct(\\*+)(?!\\*)(?=punct)|(?:(?!\\*)punct|notPunctSpace)(\\*+)(?!\\*)(?=notPunctSpace)",K1=M(F1,"gu").replace(/notPunctSpace/g,Ns).replace(/punctSpace/g,_o).replace(/punct/g,Lr).getRegex(),H1=M("^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)","gu").replace(/notPunctSpace/g,Ns).replace(/punctSpace/g,_o).replace(/punct/g,Lr).getRegex(),W1="^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)[\\s](_+)(?=notPunctSpace)|[\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)|(?:(?!_)punct|notPunctSpace)(_+)(?!_)(?=notPunctSpace)",V1=M(W1,"gu").replace(/notPunctSpace/g,Ns).replace(/punctSpace/g,_o).replace(/punct/g,Lr).getRegex(),q1=M(/^~~?(?:((?!~)punct)|[^\s~])/,"u").replace(/punct/g,Lr).getRegex(),z1="^[^~]+(?=[^~])|(?!~)punct(~~?)(?=[\\s]|$)|notPunctSpace(~~?)(?!~)(?=punctSpace|$)|(?!~)punctSpace(~~?)(?=notPunctSpace)|[\\s](~~?)(?!~)(?=punct)|(?!~)punct(~~?)(?!~)(?=punct)|notPunctSpace(~~?)(?=notPunctSpace)",G1=M(z1,"gu").replace(/notPunctSpace/g,Ns).replace(/punctSpace/g,_o).replace(/punct/g,Lr).getRegex(),U1=M(/\\(punct)/,"gu").replace(/punct/g,Lr).getRegex(),J1=M(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace("scheme",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace("email",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),Y1=M(tg).replace("(?:-->|$)","-->").getRegex(),X1=M("^comment|^</[a-zA-Z][\\w:-]*\\s*>|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^<![a-zA-Z]+\\s[\\s\\S]*?>|^<!\\[CDATA\\[[\\s\\S]*?\\]\\]>").replace("comment",Y1).replace("attribute",/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),Ld=/(?:\[(?:\\[\s\S]|[^\[\]\\])*\]|\\[\s\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\])|[^\[\]\\`])*?/,Q1=M(/^!?\[(label)\]\(\s*(href)(?:(?:[ \t]+(?:\n[ \t]*)?|\n[ \t]*)(title))?\s*\)/).replace("label",Ld).replace("href",/<(?:\\.|[^\n<>\\])+>|[^ \t\n\x00-\x1f]+|(?=\))/).replace("title",/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),sx=M(/^!?\[(label)\]\[(ref)\]/).replace("label",Ld).replace("ref",eg).getRegex(),cx=M(/^!?\[(ref)\](?:\[\])?/).replace("ref",eg).getRegex(),Z1=M("reflink|nolink(?!\\()","g").replace("reflink",sx).replace("nolink",cx).getRegex(),GE=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,ng={_backpedal:ui,anyPunctuation:U1,autolink:J1,blockSkip:T1,br:nx,code:C1,del:ui,delLDelim:ui,delRDelim:ui,emStrongLDelim:$1,emStrongRDelimAst:D1,emStrongRDelimUnd:H1,escape:P1,link:Q1,nolink:cx,punctuation:A1,reflink:sx,reflinkSearch:Z1,tag:X1,text:R1,url:ui},eF={...ng,emStrongLDelim:L1,emStrongRDelimAst:K1,emStrongRDelimUnd:V1,link:M(/^!?\[(label)\]\((.*?)\)/).replace("label",Ld).getRegex(),reflink:M(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",Ld).getRegex()},Uh={...ng,emStrongRDelimAst:B1,emStrongLDelim:O1,delLDelim:q1,delRDelim:G1,url:M(/^((?:protocol):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/).replace("protocol",GE).replace("email",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])((?:\\[\s\S]|[^\\])*?(?:\\[\s\S]|[^\s~\\]))\1(?=[^~]|$)/,text:M(/^(`+|~+|[^`~])(?:(?=[`~])|(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\<!\[`*~_]|\b_|protocol:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)))/).replace("protocol",GE).getRegex()},tF={...Uh,br:M(nx).replace("{2,}","*").getRegex(),text:M(Uh.text).replace("\\b_","\\b_| {2,}\\n").replace(/\{2,\}/g,"*").getRegex()},Md={normal:rg,gfm:E1,pedantic:x1},bs={normal:ng,gfm:Uh,breaks:tF,pedantic:eF},rF={"&":"&","<":"<",">":">",'"':""","'":"'"},UE=t=>rF[t];function tr(t,e){if(e){if(xe.escapeTest.test(t))return t.replace(xe.escapeReplace,UE)}else if(xe.escapeTestNoEncode.test(t))return t.replace(xe.escapeReplaceNoEncode,UE);return t}function JE(t){try{t=encodeURI(t).replace(xe.percentDecode,"%")}catch{return null}return t}function YE(t,e){let r=t.replace(xe.findPipe,(o,a,s)=>{let c=!1,l=a;for(;--l>=0&&s[l]==="\\";)c=!c;return c?"|":" |"}),n=r.split(xe.splitPipe),i=0;if(n[0].trim()||n.shift(),n.length>0&&!n.at(-1)?.trim()&&n.pop(),e)if(n.length>e)n.splice(e);else for(;n.length<e;)n.push("");for(;i<n.length;i++)n[i]=n[i].trim().replace(xe.slashPipe,"|");return n}function Pn(t,e,r){let n=t.length;if(n===0)return"";let i=0;for(;i<n;){let o=t.charAt(n-i-1);if(o===e&&!r)i++;else if(o!==e&&r)i++;else break}return t.slice(0,n-i)}function XE(t){let e=t.split(`
|
||
`),r=e.length-1;for(;r>=0&&xe.blankLine.test(e[r]);)r--;return e.length-r<=2?t:e.slice(0,r+1).join(`
|
||
`)}function nF(t,e){if(t.indexOf(e[1])===-1)return-1;let r=0;for(let n=0;n<t.length;n++)if(t[n]==="\\")n++;else if(t[n]===e[0])r++;else if(t[n]===e[1]&&(r--,r<0))return n;return r>0?-2:-1}function iF(t,e=0){let r=e,n="";for(let i of t)if(i===" "){let o=4-r%4;n+=" ".repeat(o),r+=o}else n+=i,r++;return n}function QE(t,e,r,n,i){let o=e.href,a=e.title||null,s=t[1].replace(i.other.outputLinkReplace,"$1"),c=t[0].charAt(0)==="!";n.state.inLink=!0;let l=n.state.linkEmitted,d=n.state.inRawBlock;n.state.linkEmitted=!1;let u=n.inlineTokens(s),p=n.state.linkEmitted;if(n.state.linkEmitted=l,n.state.inLink=!1,!c){if(p){n.state.inRawBlock=d;return}n.state.linkEmitted=!0}return{type:c?"image":"link",raw:r,href:o,title:a,text:s,tokens:u}}function oF(t,e,r){let n=t.match(r.other.indentCodeCompensation);if(n===null)return e;let i=n[1];return e.split(`
|
||
`).map(o=>{let a=o.match(r.other.beginningSpace);if(a===null)return o;let[s]=a;return s.length>=i.length?o.slice(i.length):o}).join(`
|
||
`)}var Dd=class{options;rules;lexer;constructor(t){this.options=t||fi}space(t){let e=this.rules.block.newline.exec(t);if(e&&e[0].length>0)return{type:"space",raw:e[0]}}code(t){let e=this.rules.block.code.exec(t);if(e){let r=this.options.pedantic?e[0]:XE(e[0]),n=r.replace(this.rules.other.codeRemoveIndent,"");return{type:"code",raw:r,codeBlockStyle:"indented",text:n}}}fences(t){let e=this.rules.block.fences.exec(t);if(e){let r=e[0],n=oF(r,e[3]||"",this.rules);return{type:"code",raw:r,lang:e[2]?e[2].trim().replace(this.rules.inline.anyPunctuation,"$1"):e[2],text:n}}}heading(t){let e=this.rules.block.heading.exec(t);if(e){let r=e[2].trim();if(this.rules.other.endingHash.test(r)){let n=Pn(r,"#");(this.options.pedantic||!n||this.rules.other.endingSpaceChar.test(n))&&(r=n.trim())}return{type:"heading",raw:Pn(e[0],`
|
||
`),depth:e[1].length,text:r,tokens:this.lexer.inline(r)}}}hr(t){let e=this.rules.block.hr.exec(t);if(e)return{type:"hr",raw:Pn(e[0],`
|
||
`)}}blockquote(t){let e=this.rules.block.blockquote.exec(t);if(e){let r=Pn(e[0],`
|
||
`).split(`
|
||
`),n="",i="",o=[];for(;r.length>0;){let a=!1,s=[],c;for(c=0;c<r.length;c++)if(this.rules.other.blockquoteStart.test(r[c]))s.push(r[c]),a=!0;else if(!a)s.push(r[c]);else break;r=r.slice(c);let l=s.join(`
|
||
`),d=l.replace(this.rules.other.blockquoteSetextReplace,`
|
||
$1`).replace(this.rules.other.blockquoteSetextReplace2,"");n=n?`${n}
|
||
${l}`:l,i=i?`${i}
|
||
${d}`:d;let u=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTokens(d,o,!0),this.lexer.state.top=u,r.length===0)break;let p=o.at(-1);if(p?.type==="code")break;if(p?.type==="blockquote"){let f=p,m=r.join(`
|
||
`),g=f.raw+`
|
||
`+m.replace(this.rules.other.blockquoteSetextReplace2,""),h=this.blockquote(g);o[o.length-1]=h,n=`${n}
|
||
${m}`,i=i.substring(0,i.length-f.text.length)+h.text;break}else if(p?.type==="list"){let f=p,m=f.raw+`
|
||
`+r.join(`
|
||
`),g=this.list(m);o[o.length-1]=g,n=n.substring(0,n.length-p.raw.length)+g.raw,i=i.substring(0,i.length-f.raw.length)+g.raw,r=m.substring(o.at(-1).raw.length).split(`
|
||
`);continue}}return{type:"blockquote",raw:n,tokens:o,text:i}}}list(t){let e=this.rules.block.list.exec(t);if(e){let r=e[1].trim(),n=r.length>1,i={type:"list",raw:"",ordered:n,start:n?+r.slice(0,-1):"",loose:!1,items:[]};r=n?`\\d{1,9}\\${r.slice(-1)}`:`\\${r}`,this.options.pedantic&&(r=n?r:"[*+-]");let o=this.rules.other.listItemRegex(r),a=!1;for(;t;){let c=!1,l="",d="";if(!(e=o.exec(t))||this.rules.block.hr.test(t))break;l=e[0],t=t.substring(l.length);let u=iF(e[2].split(`
|
||
`,1)[0],e[1].length),p=t.split(`
|
||
`,1)[0],f=!u.trim(),m=0;if(this.options.pedantic?(m=2,d=u.trimStart()):f?m=e[1].length+1:(m=u.search(this.rules.other.nonSpaceChar),m=m>4?1:m,d=u.slice(m),m+=e[1].length),f&&this.rules.other.blankLine.test(p)&&(l+=p+`
|
||
`,t=t.substring(p.length+1),c=!0),!c){let g=this.rules.other.nextBulletRegex(m),h=this.rules.other.hrRegex(m),w=this.rules.other.fencesBeginRegex(m),y=this.rules.other.headingBeginRegex(m),v=this.rules.other.htmlBeginRegex(m),b=this.rules.other.blockquoteBeginRegex(m);for(;t;){let k=t.split(`
|
||
`,1)[0],S;if(p=k,this.options.pedantic?(p=p.replace(this.rules.other.listReplaceNesting," "),S=p):S=p.replace(this.rules.other.tabCharGlobal," "),w.test(p)||y.test(p)||v.test(p)||b.test(p)||g.test(p)||h.test(p))break;if(S.search(this.rules.other.nonSpaceChar)>=m||!p.trim())d+=`
|
||
`+S.slice(m);else{if(f||u.replace(this.rules.other.tabCharGlobal," ").search(this.rules.other.nonSpaceChar)>=4||w.test(u)||y.test(u)||h.test(u))break;d+=`
|
||
`+p}f=!p.trim(),l+=k+`
|
||
`,t=t.substring(k.length+1),u=S.slice(m)}}i.loose||(a?i.loose=!0:this.rules.other.doubleBlankLine.test(l)&&(a=!0)),i.items.push({type:"list_item",raw:l,task:!!this.options.gfm&&this.rules.other.listIsTask.test(d),loose:!1,text:d,tokens:[]}),i.raw+=l}let s=i.items.at(-1);if(s)s.raw=s.raw.trimEnd(),s.text=s.text.trimEnd();else return;i.raw=i.raw.trimEnd();for(let c of i.items)if(this.lexer.state.top=!1,c.tokens=this.lexer.blockTokens(c.text,[]),!i.loose){let l=c.tokens.filter(u=>u.type==="space"),d=l.length>0&&l.some(u=>this.rules.other.anyLine.test(u.raw));i.loose=d}for(let c of i.items){let l=c.tokens[0];if(c.task&&(l?.type==="text"||l?.type==="paragraph")){c.text=c.text.replace(this.rules.other.listReplaceTask,""),l.raw=l.raw.replace(this.rules.other.listReplaceTask,""),l.text=l.text.replace(this.rules.other.listReplaceTask,"");for(let u=this.lexer.inlineQueue.length-1;u>=0;u--)if(this.rules.other.listIsTask.test(this.lexer.inlineQueue[u].src)){this.lexer.inlineQueue[u].src=this.lexer.inlineQueue[u].src.replace(this.rules.other.listReplaceTask,"");break}let d=this.rules.other.listTaskCheckbox.exec(c.raw);if(d){let u={type:"checkbox",raw:d[0]+" ",checked:d[0]!=="[ ]"};c.checked=u.checked,i.loose?c.tokens[0]&&["paragraph","text"].includes(c.tokens[0].type)&&"tokens"in c.tokens[0]&&c.tokens[0].tokens?(c.tokens[0].raw=u.raw+c.tokens[0].raw,c.tokens[0].text=u.raw+c.tokens[0].text,c.tokens[0].tokens.unshift(u)):c.tokens.unshift({type:"paragraph",raw:u.raw,text:u.raw,tokens:[u]}):c.tokens.unshift(u)}}else c.task&&(c.task=!1)}if(i.loose)for(let c of i.items){c.loose=!0;for(let l of c.tokens)l.type==="text"&&(l.type="paragraph")}return i}}html(t){let e=this.rules.block.html.exec(t);if(e){let r=XE(e[0]);return{type:"html",block:!0,raw:r,pre:e[1]==="pre"||e[1]==="script"||e[1]==="style",text:r}}}def(t){let e=this.rules.block.def.exec(t);if(e){let r=e[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal," "),n=e[2]?e[2].replace(this.rules.other.hrefBrackets,"$1").replace(this.rules.inline.anyPunctuation,"$1"):"",i=e[3]?e[3].substring(1,e[3].length-1).replace(this.rules.inline.anyPunctuation,"$1"):e[3];return{type:"def",tag:r,raw:Pn(e[0],`
|
||
`),href:n,title:i}}}table(t){let e=this.rules.block.table.exec(t);if(!e||!this.rules.other.tableDelimiter.test(e[2]))return;let r=YE(e[1]),n=e[2].replace(this.rules.other.tableAlignChars,"").split("|"),i=e[3]?.trim()?e[3].replace(this.rules.other.tableRowBlankLine,"").split(`
|
||
`):[],o={type:"table",raw:Pn(e[0],`
|
||
`),header:[],align:[],rows:[]};if(r.length===n.length){for(let a of n)this.rules.other.tableAlignRight.test(a)?o.align.push("right"):this.rules.other.tableAlignCenter.test(a)?o.align.push("center"):this.rules.other.tableAlignLeft.test(a)?o.align.push("left"):o.align.push(null);for(let a=0;a<r.length;a++)o.header.push({text:r[a],tokens:this.lexer.inline(r[a]),header:!0,align:o.align[a]});for(let a of i)o.rows.push(YE(a,o.header.length).map((s,c)=>({text:s,tokens:this.lexer.inline(s),header:!1,align:o.align[c]})));return o}}lheading(t){let e=this.rules.block.lheading.exec(t);if(e){let r=e[1].trim();return{type:"heading",raw:Pn(e[0],`
|
||
`),depth:e[2].charAt(0)==="="?1:2,text:r,tokens:this.lexer.inline(r)}}}paragraph(t){let e=this.rules.block.paragraph.exec(t);if(e){let r=e[1].charAt(e[1].length-1)===`
|
||
`?e[1].slice(0,-1):e[1];return{type:"paragraph",raw:e[0],text:r,tokens:this.lexer.inline(r)}}}text(t){let e=this.rules.block.text.exec(t);if(e)return{type:"text",raw:e[0],text:e[0],tokens:this.lexer.inline(e[0])}}escape(t){let e=this.rules.inline.escape.exec(t);if(e)return{type:"escape",raw:e[0],text:e[1]}}tag(t){let e=this.rules.inline.tag.exec(t);if(e)return!this.lexer.state.inLink&&this.rules.other.startATag.test(e[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(e[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(e[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(e[0])&&(this.lexer.state.inRawBlock=!1),{type:"html",raw:e[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:e[0]}}link(t){let e=this.rules.inline.link.exec(t);if(e){let r=e[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(r)){if(!this.rules.other.endAngleBracket.test(r))return;let o=Pn(r.slice(0,-1),"\\");if((r.length-o.length)%2===0)return}else{let o=nF(e[2],"()");if(o===-2)return;if(o>-1){let a=(e[0].indexOf("!")===0?5:4)+e[1].length+o;e[2]=e[2].substring(0,o),e[0]=e[0].substring(0,a).trim(),e[3]=""}}let n=e[2],i="";if(this.options.pedantic){let o=this.rules.other.pedanticHrefTitle.exec(n);o&&(n=o[1],i=o[3])}else i=e[3]?e[3].slice(1,-1):"";return n=n.trim(),this.rules.other.startAngleBracket.test(n)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(r)?n=n.slice(1):n=n.slice(1,-1)),QE(e,{href:n&&n.replace(this.rules.inline.anyPunctuation,"$1"),title:i&&i.replace(this.rules.inline.anyPunctuation,"$1")},e[0],this.lexer,this.rules)}}reflink(t,e){let r;if((r=this.rules.inline.reflink.exec(t))||(r=this.rules.inline.nolink.exec(t))){let n=(r[2]||r[1]).replace(this.rules.other.multipleSpaceGlobal," "),i=e[n.toLowerCase()];if(!i){let o=r[0].charAt(0);return{type:"text",raw:o,text:o}}return QE(r,i,r[0],this.lexer,this.rules)}}emStrong(t,e,r=""){let n=this.rules.inline.emStrongLDelim.exec(t);if(!(!n||!n[1]&&!n[2]&&!n[3]&&!n[4]||n[4]&&r.match(this.rules.other.unicodeAlphaNumeric))&&(!(n[1]||n[3])||!r||this.rules.inline.punctuation.exec(r))){let i=[...n[0]].length-1,o,a,s=i,c=0,l=n[0][0],d=r===l,u=l==="*"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(u.lastIndex=0,e=e.slice(-1*t.length+i);(n=u.exec(e))!==null;){if(o=n[1]||n[2]||n[3]||n[4]||n[5]||n[6],!o)continue;if(a=[...o].length,n[3]||n[4]){s+=a;continue}else if(n[5]||n[6]){if(i%3&&!((i+a)%3)){c+=a;continue}if(d)break}if(s-=a,s>0)continue;a=Math.min(a,a+s+c);let p=[...n[0]][0].length,f=t.slice(0,i+n.index+p+a);if(Math.min(i,a)%2){let g=f.slice(1,-1);return{type:"em",raw:f,text:g,tokens:this.lexer.inlineTokens(g)}}let m=f.slice(2,-2);return{type:"strong",raw:f,text:m,tokens:this.lexer.inlineTokens(m)}}}}codespan(t){let e=this.rules.inline.code.exec(t);if(e){let r=e[2].replace(this.rules.other.newLineCharGlobal," "),n=this.rules.other.nonSpaceChar.test(r),i=this.rules.other.startingSpaceChar.test(r)&&this.rules.other.endingSpaceChar.test(r);return n&&i&&(r=r.substring(1,r.length-1)),{type:"codespan",raw:e[0],text:r}}}br(t){let e=this.rules.inline.br.exec(t);if(e)return{type:"br",raw:e[0]}}del(t,e,r=""){let n=this.rules.inline.delLDelim.exec(t);if(n&&(!n[1]||!r||this.rules.inline.punctuation.exec(r))){let i=[...n[0]].length-1,o,a,s=i,c=this.rules.inline.delRDelim;for(c.lastIndex=0,e=e.slice(-1*t.length+i);(n=c.exec(e))!==null;){if(o=n[1]||n[2]||n[3]||n[4]||n[5]||n[6],!o||(a=[...o].length,a!==i))continue;if(n[3]||n[4]){s+=a;continue}if(s-=a,s>0)continue;a=Math.min(a,a+s);let l=[...n[0]][0].length,d=t.slice(0,i+n.index+l+a),u=d.slice(i,-i);return{type:"del",raw:d,text:u,tokens:this.lexer.inlineTokens(u)}}}}autolink(t){let e=this.rules.inline.autolink.exec(t);if(e){let r,n;return e[2]==="@"?(r=e[1],n="mailto:"+r):(r=e[1],n=r),{type:"link",raw:e[0],text:r,href:n,tokens:[{type:"text",raw:r,text:r}]}}}url(t){let e;if(e=this.rules.inline.url.exec(t)){let r,n;if(e[2]==="@")r=e[0],n="mailto:"+r;else{let i;do i=e[0],e[0]=this.rules.inline._backpedal.exec(e[0])?.[0]??"";while(i!==e[0]);r=e[0],e[1]==="www."?n="http://"+e[0]:n=e[0]}return{type:"link",raw:e[0],text:r,href:n,tokens:[{type:"text",raw:r,text:r}]}}}inlineText(t){let e=this.rules.inline.text.exec(t);if(e){let r=this.lexer.state.inRawBlock;return{type:"text",raw:e[0],text:e[0],escaped:r}}}},ot=class Jh{tokens;options;state;inlineQueue;tokenizer;constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||fi,this.options.tokenizer=this.options.tokenizer||new Dd,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,linkEmitted:!1,top:!0};let r={other:xe,block:Md.normal,inline:bs.normal};this.options.pedantic?(r.block=Md.pedantic,r.inline=bs.pedantic):this.options.gfm&&(r.block=Md.gfm,this.options.breaks?r.inline=bs.breaks:r.inline=bs.gfm),this.tokenizer.rules=r}static get rules(){return{block:Md,inline:bs}}static lex(e,r){return new Jh(r).lex(e)}static lexInline(e,r){return new Jh(r).inlineTokens(e)}lex(e){e=e.replace(xe.carriageReturn,`
|
||
`),this.blockTokens(e,this.tokens);for(let r=0;r<this.inlineQueue.length;r++){let n=this.inlineQueue[r];this.inlineTokens(n.src,n.tokens)}return this.inlineQueue=[],this.tokens}blockTokens(e,r=[],n=!1){this.tokenizer.lexer=this,this.options.pedantic&&(e=e.replace(xe.tabCharGlobal," ").replace(xe.spaceLine,""));let i=1/0;for(;e;){if(e.length<i)i=e.length;else{this.infiniteLoopError(e.charCodeAt(0));break}let o;if(this.options.extensions?.block?.some(s=>(o=s.call({lexer:this},e,r))?(e=e.substring(o.raw.length),r.push(o),!0):!1))continue;if(o=this.tokenizer.space(e)){e=e.substring(o.raw.length);let s=r.at(-1);o.raw.length===1&&s!==void 0?s.raw+=`
|
||
`:r.push(o);continue}if(o=this.tokenizer.code(e)){e=e.substring(o.raw.length);let s=r.at(-1);s?.type==="paragraph"||s?.type==="text"?(s.raw+=(s.raw.endsWith(`
|
||
`)?"":`
|
||
`)+o.raw,s.text+=`
|
||
`+o.text,this.inlineQueue.at(-1).src=s.text):r.push(o);continue}if(o=this.tokenizer.fences(e)){e=e.substring(o.raw.length),r.push(o);continue}if(o=this.tokenizer.heading(e)){e=e.substring(o.raw.length),r.push(o);continue}if(o=this.tokenizer.hr(e)){e=e.substring(o.raw.length),r.push(o);continue}if(o=this.tokenizer.blockquote(e)){e=e.substring(o.raw.length),r.push(o);continue}if(o=this.tokenizer.list(e)){e=e.substring(o.raw.length),r.push(o);continue}if(o=this.tokenizer.html(e)){e=e.substring(o.raw.length),r.push(o);continue}if(o=this.tokenizer.def(e)){e=e.substring(o.raw.length);let s=r.at(-1);s?.type==="paragraph"||s?.type==="text"?(s.raw+=(s.raw.endsWith(`
|
||
`)?"":`
|
||
`)+o.raw,s.text+=`
|
||
`+o.raw,this.inlineQueue.at(-1).src=s.text):this.tokens.links[o.tag]||(this.tokens.links[o.tag]={href:o.href,title:o.title},r.push(o));continue}if(o=this.tokenizer.table(e)){e=e.substring(o.raw.length),r.push(o);continue}if(o=this.tokenizer.lheading(e)){e=e.substring(o.raw.length),r.push(o);continue}let a=e;if(this.options.extensions?.startBlock){let s=1/0,c=e.slice(1),l;this.options.extensions.startBlock.forEach(d=>{l=d.call({lexer:this},c),typeof l=="number"&&l>=0&&(s=Math.min(s,l))}),s<1/0&&s>=0&&(a=e.substring(0,s+1))}if(this.state.top&&(o=this.tokenizer.paragraph(a))){let s=r.at(-1);n&&s?.type==="paragraph"?(s.raw+=(s.raw.endsWith(`
|
||
`)?"":`
|
||
`)+o.raw,s.text+=`
|
||
`+o.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):r.push(o),n=a.length!==e.length,e=e.substring(o.raw.length);continue}if(o=this.tokenizer.text(e)){e=e.substring(o.raw.length);let s=r.at(-1);s?.type==="text"?(s.raw+=(s.raw.endsWith(`
|
||
`)?"":`
|
||
`)+o.raw,s.text+=`
|
||
`+o.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=s.text):r.push(o);continue}if(e){this.infiniteLoopError(e.charCodeAt(0));break}}return this.state.top=!0,r}inline(e,r=[]){return this.inlineQueue.push({src:e,tokens:r}),r}linkInText(e){if(!e.includes("["))return!1;let r=this.tokenizer.rules.inline.link;for(let n of e.matchAll(this.tokenizer.rules.inline.blockSkip))if(r.test(n[0])&&e.charAt(n.index-1)!=="!")return!0;for(let n of e.matchAll(this.tokenizer.rules.inline.reflinkSearch)){let i=n[0],o=i.lastIndexOf("[");if(!(i.charAt(0)==="!"||!Object.hasOwn(this.tokens.links,i.slice(o+1,-1)))&&!(o>1&&this.linkInText(i.slice(1,o-1))))return!0}return!1}inlineTokens(e,r=[]){this.tokenizer.lexer=this;let n=e;if(this.tokens.links&&e.includes("[")){let s=this.tokenizer.rules.inline.reflinkSearch,c=l=>{let d=l.lastIndexOf("[");if(!Object.hasOwn(this.tokens.links,l.slice(d+1,-1)))return l;if(d>1&&l.charAt(0)!=="!"){let u=l.slice(1,d-1);if(this.linkInText(u))return"["+u.replace(s,c)+"]["+"a".repeat(l.length-d-2)+"]"}return"["+"a".repeat(l.length-2)+"]"};n=n.replace(s,c)}n=n.replace(this.tokenizer.rules.inline.anyPunctuation,s=>"+".repeat(s.length)),n=n.replace(this.tokenizer.rules.inline.blockSkip,(s,c,l)=>{let d=l?l.length:0;return s.slice(0,d)+"["+"a".repeat(s.length-d-2)+"]"}),n=this.options.hooks?.emStrongMask?.call({lexer:this},n)??n;let i=!1,o="",a=1/0;for(;e;){if(e.length<a)a=e.length;else{this.infiniteLoopError(e.charCodeAt(0));break}i||(o=""),i=!1;let s;if(this.options.extensions?.inline?.some(l=>(s=l.call({lexer:this},e,r))?(e=e.substring(s.raw.length),r.push(s),!0):!1))continue;if(s=this.tokenizer.escape(e)){e=e.substring(s.raw.length),r.push(s);continue}if(s=this.tokenizer.tag(e)){e=e.substring(s.raw.length),r.push(s);continue}if(s=this.tokenizer.link(e)){e=e.substring(s.raw.length),r.push(s);continue}if(s=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(s.raw.length);let l=r.at(-1);s.type==="text"&&l?.type==="text"?(l.raw+=s.raw,l.text+=s.text):r.push(s);continue}if(s=this.tokenizer.emStrong(e,n,o)){e=e.substring(s.raw.length),r.push(s);continue}if(s=this.tokenizer.codespan(e)){e=e.substring(s.raw.length),r.push(s);continue}if(s=this.tokenizer.br(e)){e=e.substring(s.raw.length),r.push(s);continue}if(s=this.tokenizer.del(e,n,o)){e=e.substring(s.raw.length),r.push(s);continue}if(s=this.tokenizer.autolink(e)){e=e.substring(s.raw.length),r.push(s);continue}if(!this.state.inLink&&(s=this.tokenizer.url(e))){e=e.substring(s.raw.length),r.push(s);continue}let c=e;if(this.options.extensions?.startInline){let l=1/0,d=e.slice(1),u;this.options.extensions.startInline.forEach(p=>{u=p.call({lexer:this},d),typeof u=="number"&&u>=0&&(l=Math.min(l,u))}),l<1/0&&l>=0&&(c=e.substring(0,l+1))}if(s=this.tokenizer.inlineText(c)){e=e.substring(s.raw.length),s.raw.slice(-1)!=="_"&&(o=s.raw.slice(-1)),i=!0;let l=r.at(-1);l?.type==="text"?(l.raw+=s.raw,l.text+=s.text):r.push(s);continue}if(e){this.infiniteLoopError(e.charCodeAt(0));break}}return r}infiniteLoopError(e){let r="Infinite loop on byte: "+e;if(this.options.silent)console.error(r);else throw new Error(r)}},Bd=class{options;parser;constructor(t){this.options=t||fi}space(t){return""}code({text:t,lang:e,escaped:r}){let n=(e||"").match(xe.notSpaceStart)?.[0],i=t.replace(xe.endingNewline,"")+`
|
||
`;return n?'<pre><code class="language-'+tr(n)+'">'+(r?i:tr(i,!0))+`</code></pre>
|
||
`:"<pre><code>"+(r?i:tr(i,!0))+`</code></pre>
|
||
`}blockquote({tokens:t}){return`<blockquote>
|
||
${this.parser.parse(t)}</blockquote>
|
||
`}html({text:t}){return t}def(t){return""}heading({tokens:t,depth:e}){return`<h${e}>${this.parser.parseInline(t)}</h${e}>
|
||
`}hr(t){return`<hr>
|
||
`}list(t){let e=t.ordered,r=t.start,n="";for(let a=0;a<t.items.length;a++){let s=t.items[a];n+=this.listitem(s)}let i=e?"ol":"ul",o=e&&r!==1?' start="'+r+'"':"";return"<"+i+o+`>
|
||
`+n+"</"+i+`>
|
||
`}listitem(t){return`<li>${this.parser.parse(t.tokens)}</li>
|
||
`}checkbox({checked:t}){return"<input "+(t?'checked="" ':"")+'disabled="" type="checkbox"> '}paragraph({tokens:t}){return`<p>${this.parser.parseInline(t)}</p>
|
||
`}table(t){let e="",r="";for(let i=0;i<t.header.length;i++)r+=this.tablecell(t.header[i]);e+=this.tablerow({text:r});let n="";for(let i=0;i<t.rows.length;i++){let o=t.rows[i];r="";for(let a=0;a<o.length;a++)r+=this.tablecell(o[a]);n+=this.tablerow({text:r})}return n&&(n=`<tbody>${n}</tbody>`),`<table>
|
||
<thead>
|
||
`+e+`</thead>
|
||
`+n+`</table>
|
||
`}tablerow({text:t}){return`<tr>
|
||
${t}</tr>
|
||
`}tablecell(t){let e=this.parser.parseInline(t.tokens),r=t.header?"th":"td";return(t.align?`<${r} align="${t.align}">`:`<${r}>`)+e+`</${r}>
|
||
`}strong({tokens:t}){return`<strong>${this.parser.parseInline(t)}</strong>`}em({tokens:t}){return`<em>${this.parser.parseInline(t)}</em>`}codespan({text:t}){return`<code>${tr(t,!0)}</code>`}br(t){return"<br>"}del({tokens:t}){return`<del>${this.parser.parseInline(t)}</del>`}link({href:t,title:e,tokens:r}){let n=this.parser.parseInline(r),i=JE(t);if(i===null)return n;t=i;let o='<a href="'+t+'"';return e&&(o+=' title="'+tr(e)+'"'),o+=">"+n+"</a>",o}image({href:t,title:e,text:r,tokens:n}){n&&(r=this.parser.parseInline(n,this.parser.textRenderer));let i=JE(t);if(i===null)return tr(r);t=i;let o=`<img src="${t}" alt="${tr(r)}"`;return e&&(o+=` title="${tr(e)}"`),o+=">",o}text(t){return"tokens"in t&&t.tokens?this.parser.parseInline(t.tokens):"escaped"in t&&t.escaped?t.text:tr(t.text)}},ig=class{strong({text:t}){return t}em({text:t}){return t}codespan({text:t}){return t}del({text:t}){return t}html({text:t}){return t}text({text:t}){return t}link({text:t}){return""+t}image({text:t}){return""+t}br(){return""}checkbox({raw:t}){return t}},Dt=class Yh{options;renderer;textRenderer;constructor(e){this.options=e||fi,this.options.renderer=this.options.renderer||new Bd,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new ig}static parse(e,r){return new Yh(r).parse(e)}static parseInline(e,r){return new Yh(r).parseInline(e)}parse(e){this.renderer.parser=this;let r="";for(let n=0;n<e.length;n++){let i=e[n];if(this.options.extensions?.renderers?.[i.type]){let a=i,s=this.options.extensions.renderers[a.type].call({parser:this},a);if(s!==!1||!["space","hr","heading","code","table","blockquote","list","checkbox","html","def","paragraph","text"].includes(a.type)){r+=s||"";continue}}let o=i;switch(o.type){case"space":{r+=this.renderer.space(o);break}case"hr":{r+=this.renderer.hr(o);break}case"heading":{r+=this.renderer.heading(o);break}case"code":{r+=this.renderer.code(o);break}case"table":{r+=this.renderer.table(o);break}case"blockquote":{r+=this.renderer.blockquote(o);break}case"list":{r+=this.renderer.list(o);break}case"checkbox":{r+=this.renderer.checkbox(o);break}case"html":{r+=this.renderer.html(o);break}case"def":{r+=this.renderer.def(o);break}case"paragraph":{r+=this.renderer.paragraph(o);break}case"text":{r+=this.renderer.text(o);break}default:{let a='Token with "'+o.type+'" type was not found.';if(this.options.silent)return console.error(a),"";throw new Error(a)}}}return r}parseInline(e,r=this.renderer){this.renderer.parser=this;let n="";for(let i=0;i<e.length;i++){let o=e[i];if(this.options.extensions?.renderers?.[o.type]){let s=this.options.extensions.renderers[o.type].call({parser:this},o);if(s!==!1||!["escape","html","link","image","checkbox","strong","em","codespan","br","del","text"].includes(o.type)){n+=s||"";continue}}let a=o;switch(a.type){case"escape":{n+=r.text(a);break}case"html":{n+=r.html(a);break}case"link":{n+=r.link(a);break}case"image":{n+=r.image(a);break}case"checkbox":{n+=r.checkbox(a);break}case"strong":{n+=r.strong(a);break}case"em":{n+=r.em(a);break}case"codespan":{n+=r.codespan(a);break}case"br":{n+=r.br(a);break}case"del":{n+=r.del(a);break}case"text":{n+=r.text(a);break}default:{let s='Token with "'+a.type+'" type was not found.';if(this.options.silent)return console.error(s),"";throw new Error(s)}}}return n}},ks=class{options;block;constructor(t){this.options=t||fi}static passThroughHooks=new Set(["preprocess","postprocess","processAllTokens","emStrongMask"]);static passThroughHooksRespectAsync=new Set(["preprocess","postprocess","processAllTokens"]);preprocess(t){return t}postprocess(t){return t}processAllTokens(t){return t}emStrongMask(t){return t}provideLexer(t=this.block){return t?ot.lex:ot.lexInline}provideParser(t=this.block){return t?Dt.parse:Dt.parseInline}},aF=class{defaults=Xh();options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=Dt;Renderer=Bd;TextRenderer=ig;Lexer=ot;Tokenizer=Dd;Hooks=ks;constructor(...t){this.use(...t)}walkTokens(t,e){let r=[];for(let n of t)switch(r=r.concat(e.call(this,n)),n.type){case"table":{let i=n;for(let o of i.header)r=r.concat(this.walkTokens(o.tokens,e));for(let o of i.rows)for(let a of o)r=r.concat(this.walkTokens(a.tokens,e));break}case"list":{let i=n;r=r.concat(this.walkTokens(i.items,e));break}default:{let i=n;this.defaults.extensions?.childTokens?.[i.type]?this.defaults.extensions.childTokens[i.type].forEach(o=>{let a=i[o].flat(1/0);r=r.concat(this.walkTokens(a,e))}):i.tokens&&(r=r.concat(this.walkTokens(i.tokens,e)))}}return r}use(...t){let e=this.defaults.extensions||{renderers:{},childTokens:{}};return t.forEach(r=>{let n={...r};if(n.async=this.defaults.async||n.async||!1,r.extensions&&(r.extensions.forEach(i=>{if(!i.name)throw new Error("extension name required");if("renderer"in i){let o=e.renderers[i.name];o?e.renderers[i.name]=function(...a){let s=i.renderer.apply(this,a);return s===!1&&(s=o.apply(this,a)),s}:e.renderers[i.name]=i.renderer}if("tokenizer"in i){if(!i.level||i.level!=="block"&&i.level!=="inline")throw new Error("extension level must be 'block' or 'inline'");let o=e[i.level];o?o.unshift(i.tokenizer):e[i.level]=[i.tokenizer],i.start&&(i.level==="block"?e.startBlock?e.startBlock.push(i.start):e.startBlock=[i.start]:i.level==="inline"&&(e.startInline?e.startInline.push(i.start):e.startInline=[i.start]))}"childTokens"in i&&i.childTokens&&(e.childTokens[i.name]=i.childTokens)}),n.extensions=e),r.renderer){let i=this.defaults.renderer||new Bd(this.defaults);for(let o in r.renderer){if(!(o in i))throw new Error(`renderer '${o}' does not exist`);if(["options","parser"].includes(o))continue;let a=o,s=r.renderer[a],c=i[a];i[a]=(...l)=>{let d=s.apply(i,l);return d===!1&&(d=c.apply(i,l)),d||""}}n.renderer=i}if(r.tokenizer){let i=this.defaults.tokenizer||new Dd(this.defaults);for(let o in r.tokenizer){if(!(o in i))throw new Error(`tokenizer '${o}' does not exist`);if(["options","rules","lexer"].includes(o))continue;let a=o,s=r.tokenizer[a],c=i[a];i[a]=(...l)=>{let d=s.apply(i,l);return d===!1&&(d=c.apply(i,l)),d}}n.tokenizer=i}if(r.hooks){let i=this.defaults.hooks||new ks;for(let o in r.hooks){if(!(o in i))throw new Error(`hook '${o}' does not exist`);if(["options","block"].includes(o))continue;let a=o,s=r.hooks[a],c=i[a];ks.passThroughHooks.has(o)?i[a]=l=>{if(this.defaults.async&&ks.passThroughHooksRespectAsync.has(o))return(async()=>{let u=await s.call(i,l);return c.call(i,u)})();let d=s.call(i,l);return c.call(i,d)}:i[a]=(...l)=>{if(this.defaults.async)return(async()=>{let u=await s.apply(i,l);return u===!1&&(u=await c.apply(i,l)),u})();let d=s.apply(i,l);return d===!1&&(d=c.apply(i,l)),d}}n.hooks=i}if(r.walkTokens){let i=this.defaults.walkTokens,o=r.walkTokens;n.walkTokens=function(a){let s=[];return s.push(o.call(this,a)),i&&(s=s.concat(i.call(this,a))),s}}this.defaults={...this.defaults,...n}}),this}setOptions(t){return this.defaults={...this.defaults,...t},this}lexer(t,e){return ot.lex(t,e??this.defaults)}parser(t,e){return Dt.parse(t,e??this.defaults)}parseMarkdown(t){return(e,r)=>{let n={...r},i={...this.defaults,...n},o=this.onError(!!i.silent,!!i.async);if(this.defaults.async===!0&&n.async===!1)return o(new Error("marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise."));if(typeof e>"u"||e===null)return o(new Error("marked(): input parameter is undefined or null"));if(typeof e!="string")return o(new Error("marked(): input parameter is of type "+Object.prototype.toString.call(e)+", string expected"));if(i.hooks&&(i.hooks.options=i,i.hooks.block=t),i.async)return(async()=>{let a=i.hooks?await i.hooks.preprocess(e):e,s=await(i.hooks?await i.hooks.provideLexer(t):t?ot.lex:ot.lexInline)(a,i),c=i.hooks?await i.hooks.processAllTokens(s):s;i.walkTokens&&await Promise.all(this.walkTokens(c,i.walkTokens));let l=await(i.hooks?await i.hooks.provideParser(t):t?Dt.parse:Dt.parseInline)(c,i);return i.hooks?await i.hooks.postprocess(l):l})().catch(o);try{i.hooks&&(e=i.hooks.preprocess(e));let a=(i.hooks?i.hooks.provideLexer(t):t?ot.lex:ot.lexInline)(e,i);i.hooks&&(a=i.hooks.processAllTokens(a)),i.walkTokens&&this.walkTokens(a,i.walkTokens);let s=(i.hooks?i.hooks.provideParser(t):t?Dt.parse:Dt.parseInline)(a,i);return i.hooks&&(s=i.hooks.postprocess(s)),s}catch(a){return o(a)}}}onError(t,e){return r=>{if(r.message+=`
|
||
Please report this to https://github.com/markedjs/marked.`,t){let n="<p>An error occurred:</p><pre>"+tr(r.message+"",!0)+"</pre>";return e?Promise.resolve(n):n}if(e)return Promise.reject(r);throw r}}},pi=new aF;function G(t,e){return pi.parse(t,e)}G.options=G.setOptions=function(t){return pi.setOptions(t),G.defaults=pi.defaults,ZE(G.defaults),G};G.getDefaults=Xh;G.defaults=fi;function sF(...t){return pi.use(...t),G.defaults=pi.defaults,ZE(G.defaults),G}G.use=sF;G.walkTokens=function(t,e){return pi.walkTokens(t,e)};G.parseInline=pi.parseInline;G.Parser=Dt;G.parser=Dt.parse;G.Renderer=Bd;G.TextRenderer=ig;G.Lexer=ot;G.lexer=ot.lex;G.Tokenizer=Dd;G.Hooks=ks;G.parse=G;var y8=G.options,v8=G.setOptions,w8=G.walkTokens,b8=G.parseInline;var k8=Dt.parse,S8=ot.lex;ke();mo();wn();Lh();se();var og=["outcome","scope","nonGoals","acceptanceExamples"],lx=[...og,"constraints","decisions","openQuestions","verificationExpectations"];var cF=new Set(["nonGoals","decisions","openQuestions"]);var lF={maxFileBytes:rh};function dF(t){let e=new Map,r=null,n=[],i=()=>{r!==null&&e.set(r,n.join(`
|
||
`).trim())};for(let o of t.split(/\r?\n/u)){let a=/^# ([^#].*)$/u.exec(o);a?(i(),r=a[1].trim(),n=[]):r!==null&&n.push(o)}return i(),e}function ag(t){return{valid:t.length===0,findings:t}}function sg(t){let e=[],r=0;for(;r<t.length;){let n=t.indexOf("<!--",r);if(n<0){e.push(t.slice(r));break}e.push(t.slice(r,n));let i=t.indexOf("-->",n+4);if(i<0){e.push(t.slice(n));break}r=i+3}return e.join("")}function uF(t){return sg(t).trim()}function Kd(t){let e=uF(t).split(/\r?\n/u),r=[],n=!1;for(let i of e){if(/^\s*(?:```|~~~)/u.test(i)){n=!n;continue}!n&&/^\s*#{1,6}\s*$/u.test(i)||!n&&/^\s*#{1,6}\s+/u.test(i)||!n&&/^\s*(?:[-*+]\s*|\d+[.)]\s*)$/u.test(i)||r.push(i)}return r.join(`
|
||
`).trim()}function pF(t){let e=Kd(t).replace(/^\s*(?:[-*+]\s+|\d+[.)]\s+)/gmu,"").replace(/[*_`>#\x5b\x5d()]/gu," ").replace(/\s+/gu," ").trim().toLocaleLowerCase("en-US");return/^(?:none|n\/a|not applicable|no(?:ne)?(?:\s+at\s+this\s+time)?|no\s+(?:additional\s+)?(?:non-goals?|decisions?|open\s+questions?|questions?)|无|无相关事项|没有(?:额外)?(?:非目标|决定|待解决问题)|不适用|暂无)[.!。;;::,,、 -]*$/iu.test(e)}function dx(t){let e=Kd(t).replace(/^\s*(?:[-*+]\s+|\d+[.)]\s+)/gmu,"").replace(/\s+/gu," ").trim();if(e.length===0)return!1;let r=e.replace(/[*_`]/gu,"").replace(/^\s*>+\s?/gmu,"").replace(/\s+/gu," ").trim();if(/^(?:<[^>\r\n]+>|\{\{[^}\r\n]+\}\})[.!。;;::,,、 -]*$/iu.test(r))return!0;let n=e.replace(/[*_`>#\x5b\x5d()]/gu," ").replace(/\s+/gu," ").trim();return/^(?:(?:todo|tbd|fixme)(?:\s*[::-]\s*.+)?|fill(?:\s+this\s+in)?(?:\s*[::-]\s*.+)?|placeholder(?:\s*[::-]\s*.+)?|待填写\S*|待补充\S*|<[^>]+>|\{\{[^}]+\}\})[.!。;;::,,、 -]*$/iu.test(n)}function ux(t,e){let r=[];return Kd(t).length===0?r.push({code:"spec-document-empty",message:`Native target Spec is empty: ${e}. Add the complete target requirements or use an explicit no-product-behavior exemption in brief.md.`,path:e}):dx(t)&&r.push({code:"spec-document-placeholder",message:`Native target Spec contains only template placeholder content: ${e}. Replace it with complete target requirements.`,path:e}),ag(r)}function cg(t){let e=new Set(["blocker","blocking","coverage","decision","open_question","question","requirement","requirements","source","source_coverage","state","status","决策","来源","覆盖","问题","状态","需求","阻塞"]),r=null;for(let n of t.split(/\r?\n/u)){let i=n.match(/^\s*(`{3,}|~{3,})/u);if(i){let s=i[1]?.[0];r===null?r=s:r===s&&(r=null);continue}if(r!==null)continue;let o=n.trim();if(/^(?:[-*+]\s+|\d+[.)]\s+)(?:\[[ xX]\]\s+)?\[blocking\](?=$|[\s::—-])/iu.test(o)||o.includes("|")&&o.split("|").some(s=>/^\s*\[blocking\](?=$|[\s::—-])/iu.test(s)))return!0;let a=o.match(/^([\p{L}\p{N}_./-]+)\s*[::]\s*\[blocking\](?=$|[\s::—-])/iu);if(a){let s=a[1]?.toLocaleLowerCase("en-US")??"";if(e.has(s)||/[./_-]/u.test(s))return!0}}return!1}async function px(t,e,r={}){let n=[],i;try{i=(await ne({root:t,ref:e,maxBytes:lF.maxFileBytes})).text}catch(s){return ag([{code:"brief-missing",message:s.message,path:e}])}let o=new Map;for(let[s,c]of dF(i))o.set(Zl(s)??s,c);for(let s of r.compact?og:lx)o.has(s)||n.push({code:"brief-section-missing",message:`Missing brief section: ${s}`,path:e});let a=r.strict?lx.filter(s=>!r.compact||o.has(s)):og;for(let s of a){let c=o.get(s)??"";Kd(c).length===0?n.push({code:"brief-section-empty",message:`Brief section is empty: ${s}`,path:e}):dx(c)?n.push({code:"brief-section-placeholder",message:`Brief section contains only template placeholder content: ${s}`,path:e}):r.strict&&!cF.has(s)&&pF(c)&&n.push({code:"brief-section-empty",message:`Brief section must describe the confirmed work instead of declaring no items: ${s}`,path:e})}return cg(i)&&n.push({code:"brief-blocking-question",message:"Brief has a blocking open question",path:e}),ag(n)}wn();nt();var WF=Ce(Ne(),1);lt();wn();nt();Tt();se();Sn();Vd();Vd();jo();Cn();import zd from"node:path";function Gd(...t){if(t.length===0)return zd.resolve();if(zd.win32.isAbsolute(t[0])){let e=zd.win32.resolve(...t);return process.platform==="win32"?e:e.replace(/\\/gu,"/")}return zd.resolve(...t)}lt();Ka();ke();nt();Jd();it();se();Sx();jo();Cn();mg();lt();Tt();mg();sh();se();lt();Tt();it();jo();Cn();function hg(t){return ie("comet.native.parent-contract.v1",{acceptance:t.acceptance.map(({id:e,source:r,text:n})=>({id:e,source:r,text:n})),children:t.children})}Ch();Sn();ci();Es();qd();function Cx(t){return t.state_version+1}function qF(t){return t.map(e=>({...e,result:"pending",reason:null}))}function zF(t){return{goal_cycle:t.state.loop.goal_cycle,iteration:t.state.loop.iteration,attempt:t.state.loop.attempt,outcome:t.outcome,unresolved_ids:t.unresolvedIds??[],summary:Tr(t.summary),completed_at:t.completedAt}}function Yd(t){let e=Ot(t.state);if(e.phase!=="verify"&&e.phase!=="archive")throw new Error("Only Verify or Archive can return a candidate to Build");let r=t.failureBudget,n=r?e.loop.failed_iteration_count+1:e.loop.failed_iteration_count,i=r!==void 0&&n>=r.maxVerifyFailures,o=(t.now??new Date).toISOString(),a=ko(e,zF({state:e,outcome:"recovery",summary:t.reason,completedAt:o})),s=new Set(e.loop.previous_unresolved_ids),c=s.size===0?qF(e.acceptance):e.acceptance.map(l=>s.has(l.id)?{...l,result:"pending",reason:null}:l);return i?Ot({...a,phase:"verify",status:"await-user",state_version:Cx(e),verification_result:"fail",builder_handoff:e.builder_handoff,blockers:[{owner:"user",reason:Tr(`Native Runtime checks failed at Builder handoff and reached the configured failed iteration limit: ${t.reason}`),acceptance_ids:[...s],resolution_action:"await-user"}],loop:{...e.loop,stage:"await-user",failed_iteration_count:n,execution_failure_count:0,stop_reason:"budget",next_action:"resolve-loop-stop"}}):Ot({...a,phase:"build",status:"active",state_version:Cx(e),verification_result:"pending",verification_report:null,verification:null,builder_handoff:e.builder_handoff,blockers:[],acceptance:c,loop:{...e.loop,stage:"repairing",iteration:e.loop.iteration+1,attempt:0,execution_failure_count:0,failed_iteration_count:n,stop_reason:void 0,next_action:"submit-builder-candidate"}})}it();bh();ld();Sn();ci();ke();mo();Es();se();mo();Tx();Tt();var bg=Ce(Ne(),1);Q();var yg={strong:8,phrase:8,weak:12},$x=new Set("a an and are as at be by for from in is it of on or that the this to with you your".split(" ")),Zd=new Set(["请","帮我","一下","这个","进行","实现","需要","如何"]);function eu(t,e=2e3){return[...t].map(r=>{let n=r.codePointAt(0)??0;return n<32||n===127?" ":r}).join("").replace(/\s+/gu," ").trim().slice(0,e)}function ZF(t){if(!t)return;let e=eu(t,512).replaceAll("\\","/");if(!(!e||e.startsWith("/")||/^[A-Za-z]:\//u.test(e)||e.split("/").includes("..")))return e}function vg(t){return t.replace(/(^|[\s([{"'])(?:[A-Za-z]:[\\/]|\\\\)[^\s)\]}>,;"']+/gu,"$1").replace(/(^|[\s([{"',;:])\/(?!\/)[^\s)\]}>,;"']+/gu,"$1").replace(/\s+/gu," ").trim()}function at(t,e){let r=e.trim();r.length<2||t.includes(r)||t.push(r)}function Xd(t,e,r){let n=[],i=[],o=new Intl.Segmenter("zh",{granularity:"word"});for(let a of r.matchAll(/[\u3400-\u9fff]{2,}/gu)){let s=a[0];if(Zd.has(s))continue;at(t,s);let c="";for(let{segment:l,isWordLike:d}of o.segment(s))d&&!Zd.has(l)&&at(e,l),d&&l.length===1&&!"的和与给为在对及".includes(l)?(c&&at(i,c+l),c=l):c="";for(let l=Math.min(4,s.length);l>=2;l-=1)for(let d=0;d+l<=s.length;d+=l){let u=s.slice(d,d+l);!Zd.has(u)&&u!==s&&at(n,u)}}for(let a of i)at(e,a);for(let a of n)at(e,a)}function Qd(t,e,r){for(let n of r.matchAll(/[A-Za-z][A-Za-z0-9_./:-]*/gu)){let i=n[0].replace(/^[./:]+|[./:]+$/gu,"");if(!i)continue;let o=i.toLowerCase();if(!$x.has(o)&&(at(eK(i)?t:e,i),i.includes("/")))for(let a of i.split(/[/:.]/u))at(e,a)}for(let n of r.matchAll(/\b\d+(?:\.\d+)?\b/gu))at(t,n[0])}function eK(t){return t.includes("/")||t.includes("\\")||t.includes("_")||/[a-z][A-Z]/u.test(t)||/[A-Z]{2,}/u.test(t)||/[A-Za-z][A-Za-z0-9]*\d[A-Za-z0-9]*/u.test(t)||/\d{2,}/u.test(t)||/(?:^|[^A-Za-z0-9])[A-Za-z0-9]+\.[A-Za-z0-9]+(?:$|[^A-Za-z0-9])/u.test(t)}function tK(t){return t.length>256||!/\s/u.test(t)?void 0:t.split(/\s+/u).filter(r=>{let n=r.toLowerCase();return r.length>=2&&!$x.has(n)&&!Zd.has(r)}).length>=2?t:void 0}function tu(t){let e=eu(t.task);if(!e)throw new Error("Project knowledge task must not be empty");let r=ZF(t.path),n=t.phase?eu(t.phase,128):void 0,i=t.operation?eu(t.operation,128):void 0,o=[],a=[],s=[],c=[],l=[];Qd(o,c,e),Xd(a,l,e);for(let h=0;h<Math.max(c.length,l.length);h++)c[h]&&at(s,c[h]),l[h]&&at(s,l[h]);r&&(at(o,r),Qd(o,s,r),Xd(a,s,r)),n&&(Qd(o,s,n),Xd(a,s,n)),i&&(Qd(o,s,i),Xd(a,s,i));let d=tK(e);d&&at(a,d);let u=o.slice(0,yg.strong),p=a.slice(0,yg.phrase),f=s.filter(h=>!u.includes(h)&&!p.includes(h)).slice(0,yg.weak),m=[...u,...p,...f],g=[vg(e),...r?[`Target path: ${r}`]:[],...n?[`Phase: ${vg(n)}`]:[],...i?[`Operation: ${vg(i)}`]:[]].join(`
|
||
`);return{task:e,...r?{path:r}:{},...n?{phase:n}:{},...i?{operation:i}:{},terms:m,strongTerms:u,phraseTerms:p,weakTerms:f,remoteQuery:g}}function $o(t,e){return t.toLocaleLowerCase().includes(e.toLocaleLowerCase())}function Ox(t,e){return t.strongTerms.some(r=>$o(e,r))}var Mx=5,rK=600,FZ=256*1024,nK=/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/u,iK=/^[A-Za-z0-9][A-Za-z0-9._-]*$/u;var oK=/^[a-f0-9]{64}$/iu;function Lx(t,e){if(!t||typeof t!="object"||Array.isArray(t))throw new Error(`${e} must be an object`);return t}function Rn(t,e,r=4096){if(typeof t!="string"||t.trim().length===0||t.length>r)throw new Error(`${e} must be a non-empty string within the association limit`);return t}function wg(t,e){let r=Rn(t,e).replaceAll("\\","/");if(r.startsWith("/")||/^[A-Za-z]:/u.test(r)||r.split("/").some(n=>n===""||n==="."||n===".."))throw new Error(`${e} must be a project-relative path`);return r}function aK(t,e){let r=Rn(t,e,64).toLowerCase();if(!oK.test(r))throw new Error(`${e} must be a SHA-256 hash`);return r}function sK(t,e){let r=`Capability association evidence[${e}]`,n=Lx(t,r),i=Object.keys(n).filter(o=>!new Set(["source","kind","title","snippet"]).has(o));if(i.length>0)throw new Error(`${r} has unknown field(s): ${i.join(", ")}`);return{source:wg(n.source,`${r}.source`),kind:Rn(n.kind,`${r}.kind`,128),...n.title===void 0?{}:{title:Rn(n.title,`${r}.title`)},...n.snippet===void 0?{}:{snippet:Rn(n.snippet,`${r}.snippet`,rK)}}}function Dx(t){let e=typeof t=="string"?(()=>{if(t.length>65536)throw new Error("Capability association exceeds the size limit");let l=(0,bg.parseDocument)(t,{uniqueKeys:!0});if(l.errors.length>0)throw new Error(l.errors[0].message);return l.toJS({mapAsMap:!1})})():t,r=Lx(e,"Capability association"),n=Object.keys(r).filter(l=>!new Set(["schema","status","workflow","capability","current_spec","current_hash","confidence","query","reason","historical_sources","evidence"]).has(l));if(n.length>0)throw new Error(`Capability association has unknown field(s): ${n.join(", ")}`);if(r.schema!=="comet.capability-association.v1")throw new Error("Unsupported capability association schema");let i=r.workflow;if(i!=="native"&&i!=="classic")throw new Error("Capability association workflow is invalid");let o=cK(Rn(r.capability,"Capability association capability"),i);if(!Array.isArray(r.historical_sources))throw new Error("Capability association historical_sources must be an array");let a=r.historical_sources.map((l,d)=>wg(l,`Capability association historical_sources[${d}]`));if(!Array.isArray(r.evidence)||r.evidence.length>Mx)throw new Error(`Capability association evidence must contain at most ${Mx} entries`);let s=r.status;if(s!=="suggested"&&s!=="explicit")throw new Error("Capability association status is invalid");let c=r.confidence;if(c!=="high"&&c!=="medium"&&c!=="low")throw new Error("Capability association confidence is invalid");return{schema:"comet.capability-association.v1",status:s,workflow:i,capability:o,current_spec:wg(r.current_spec,"Capability association current_spec"),current_hash:aK(r.current_hash,"Capability association current_hash"),confidence:c,...r.query===void 0?{}:{query:Rn(r.query,"Capability association query")},reason:Rn(r.reason,"Capability association reason",2048),historical_sources:a,evidence:r.evidence.map(sK)}}function cK(t,e){let r=t.replaceAll("\\","/").replace(/^\/+|\/+$/gu,""),n=r.split("/"),i=e==="native"?nK:iK;if(!r||n.some(o=>!i.test(o)))throw new Error(`Invalid ${e} capability: ${t}`);return n.join("/")}Sn();ci();Cn();var pK=ed("en",{compact:!0}),Bx="capability-association.yaml";function nu(t,e=!1){if(e){let n=i=>{if(Array.isArray(i))return i.filter(o=>o?.type!=="space").map(n);if(i&&typeof i=="object"){let o=i;return Object.fromEntries(Object.entries(o).filter(([a])=>a!=="raw"&&!(a==="text"&&Array.isArray(o.tokens))).map(([a,s])=>[a,a==="text"&&o.type==="text"&&typeof s=="string"?s.replace(/[\t ]*\n[\t ]*/gu," "):n(s)]))}return i};return JSON.stringify(n(ot.lex(t.replace(/\r\n?/gu,`
|
||
`))))}let r=t.replace(/\r\n?/gu,`
|
||
`).split(`
|
||
`);for(;r.length>0&&r.at(-1)?.trim().length===0;)r.pop();return`${r.map(n=>n.replace(/[\t ]+$/gu,"")).join(`
|
||
`)}
|
||
`}function fK(t){let e=t.replace(/^\s*(?:[-*+]\s+|\d+[.)]\s+)/u,"").replace(/\s+/gu," ").trim();if(e.length===0||/^(?:<[^>\r\n]+>|\{\{[^}\r\n]+\}\})[.!:: -]*$/iu.test(e))return!0;let r=e.replace(/[*_`>#\x5b\x5d()]/gu," ").replace(/\s+/gu," ").trim();return/^(?:todo|tbd|fixme)(?:\s*[::-]|\s*$)/iu.test(r)||/^(?:fill(?:\s+this\s+in)?|placeholder)\b/iu.test(r)||/^(?:待填写|待补充)/u.test(r)?!0:/^(?:(?:todo|tbd|fixme)\b|fill(?:\s+this\s+in)?\b|placeholder\b|documentation[- ]only\b|no\s+product\s+behavior\s+change\b|待填写|待补充|仅文档|不改变产品行为|不涉及产品行为)[.!。;;::,,、 -]*$/iu.test(r)}function mK(t){let e=[],r=!1;for(let n of sg(t).split(/\r?\n/u)){if(/^\s*(?:```|~~~)/u.test(n)){r=!r;continue}!r&&!/^\s*#{1,6}\s+/u.test(n)&&e.push(n)}return e.some(n=>{let i=/(?:no\s+product\s+behavior\s+change|documentation[- ]only|不改变产品行为|不涉及产品行为|仅文档)\s*[::]\s*(.*)$/iu.exec(n);return i!==null&&!fK(i[1]??"")})}async function Kx(t){let e=Me(t.paths,t.state.name),r=[...(await px(e,t.state.brief,{strict:!0,compact:t.state.document_constraints_version===2})).findings],n="";try{n=(await ne({root:e,ref:t.state.brief,maxBytes:null,includeHash:!1})).text}catch{}let i=t.specChanges??t.state.spec_changes,o=i.filter(({operation:l})=>l!=="remove"),a=t.state.spec_changes.filter(({operation:l})=>l!=="remove"),s=new Set(o.map(({capability:l})=>l));if(t.specChanges!==void 0)for(let l of a)s.has(l.capability)||r.push({code:"spec-document-missing",message:`Previously declared target Spec is missing: specs/${l.capability}/spec.md. Restore the complete file or record the intended capability deletion as a formal remove entry.`,path:`specs/${l.capability}/spec.md`});let c=i.length>0&&i.every(({operation:l})=>l==="remove");o.length===0&&a.length===0&&!c&&!mK(n)&&r.push({code:"spec-exemption-missing",message:"This change declares no target Spec. Add a complete target Spec, or record a concrete reason such as “No product behavior change: documentation-only wording.” in brief.md.",path:t.state.brief});for(let l of o){let d=`specs/${l.capability}/spec.md`;if(l.source!==d){r.push({code:"spec-source-path-invalid",message:`Target Spec must be staged at ${d}.`,path:l.source??d});continue}try{let u=(await ne({root:e,ref:d,maxBytes:null,includeHash:!1})).text;r.push(...ux(u,d).findings)}catch(u){r.push({code:"spec-document-missing",message:`Target Spec cannot be read: ${u.message}. Restore the complete file at ${d}.`,path:d})}}return{valid:r.length===0,findings:r}}function xs(t){let e=t.expected;if(e){if(t.state.state_version!==e.stateVersion)throw new Error(`Native continuation is stale: the change moved on since the referenced response (current phase ${t.state.phase}, next action ${t.state.loop.next_action}, state version ${t.state.state_version}). Run comet native status ${t.state.name} --json and execute its commandAlternatives with --expected-state-version ${t.state.state_version} --expected-action ${t.state.loop.next_action}.`);if(e.action!==t.action)throw new Error(`Native continuation expected ${e.action} cannot be used for ${t.action}`)}}async function Hx(t){let e=Me(t.paths,t.state.name),r=vi.join(e,"specs"),n=new Map(t.state.spec_changes.filter(({operation:a})=>a==="remove").map(a=>[a.capability,a])),i;try{i=await ru.readdir(r,{withFileTypes:!0})}catch(a){if(a.code==="ENOENT")i=[];else throw a}let o=[];for(let a of i.sort((s,c)=>s.name.localeCompare(c.name,"en"))){if(a.isSymbolicLink())throw new Error(`Native spec capability is unsafe: ${a.name}`);if(!a.isDirectory())continue;if(!di.test(a.name))throw new Error(`Invalid Native capability: ${a.name}`);if(n.has(a.name))throw new Error(`Capability ${a.name} cannot be proposed and removed together`);let s=`specs/${a.name}/spec.md`,c=vi.join(e,...s.split("/")),l=await ru.lstat(c);if(!l.isFile()||l.isSymbolicLink())throw new Error(`Native proposed spec must be a regular file: ${s}`);let d=vi.join(t.paths.specsDir,a.name,"spec.md"),u="create",p=null;try{let h=await ru.lstat(d);if(!h.isFile()||h.isSymbolicLink())throw new Error(`Canonical Native spec is unsafe: ${a.name}`);u="modify",p=Ar((await ne({root:t.paths.specsDir,ref:`${a.name}/spec.md`,maxBytes:null,includeHash:!1})).text)}catch(h){if(h.code!=="ENOENT")throw h}let f=`specs/${a.name}/${ho}`,m=vi.join(e,...f.split("/")),g={};try{let h=await ru.lstat(m);if(!h.isFile()||h.isSymbolicLink())throw new Error(`Native delta manifest must be a regular file: ${f}`);let w=await ne({root:e,ref:f,maxBytes:null,includeHash:!1}),y=as(w.text);if(y.capability!==a.name)throw new Error(`Native delta capability ${y.capability} does not match directory ${a.name}`);let v=p??Ar(""),b=t.state.spec_changes.find(k=>k.capability===a.name);if(b?.delta_source!==void 0){if(b.base_hash!==y.base_hash)throw new Error(`Native delta base changed for ${a.name}; explicit conversion is required`)}else if(y.base_hash!==v)throw new Error(`Native delta base_hash does not match the current total Spec for ${a.name}`);g={delta_source:f,base_hash:y.base_hash}}catch(h){if(h.code!=="ENOENT")throw h}o.push({capability:a.name,operation:u,source:s,...g})}return o.push(...n.values()),o.sort((a,s)=>a.capability.localeCompare(s.capability,"en"))}async function Wx(t){let e=Me(t.paths,t.state.name),r=await ne({root:e,ref:"brief.md",maxBytes:null,includeHash:!1});if(cg(r.text))throw new Error("Brief has a blocking open question");let n=[],i=[];for(let a of t.specChanges){if(a.source===null){i.push({...a,contentHash:null});continue}let s=await ne({root:e,ref:a.source,maxBytes:null,includeHash:!1}),c=s.text,l=null;if(a.delta_source){let d=await ne({root:e,ref:a.delta_source,maxBytes:null,includeHash:!1}),u=as(d.text);c=$N(s.text,u);let p="";try{p=(await ne({root:t.paths.specsDir,ref:`${a.capability}/spec.md`,maxBytes:null,includeHash:!1})).text}catch(f){if(f.code!=="ENOENT")throw f}if(Ar(p)===u.base_hash){let f=MN({baselineMarkdown:p,delta:u,allowAlreadyApplied:!0});if(Ar(s.text)!==f.result_hash)throw new Error(`Native full target Spec does not match delta result for ${a.capability}; update the complete target before confirming Shape`)}l=ie("comet.native.shape-artifact-content.v1",nu(d.text))}n.push({capability:a.capability,source:s.ref,markdown:c}),i.push({...a,contentHash:ie("comet.native.shape-artifact-content.v1",nu(s.text,t.state.document_constraints_version===2)),...l===null?{}:{deltaContentHash:l}})}let o=null;try{let a=await ne({root:e,ref:Bx,maxBytes:65536,includeHash:!1}),s=Dx(a.text);if(s.workflow!=="native")throw new Error("Native capability association must use the native workflow");if(!t.specChanges.some(({capability:d})=>d===s.capability))throw new Error(`Native capability association ${s.capability} is not declared by this change`);let l=vi.relative(t.paths.projectRoot,vi.join(t.paths.specsDir,s.capability,"spec.md")).replaceAll(vi.sep,"/");if(s.current_spec!==l)throw new Error(`Native capability association points to ${s.current_spec}, expected ${l}`);o=ie("comet.native.shape-artifact-content.v1",nu(a.text))}catch(a){if(a.code!=="ENOENT")throw a}return{acceptance:tE({briefMarkdown:r.text,specs:n,resolveBriefReferences:t.state.document_constraints_version===2}),formalHash:ie("comet.native.shape-formal-artifacts.v1",{brief:{source:r.ref,contentHash:ie("comet.native.shape-artifact-content.v1",nu(r.text,t.state.document_constraints_version===2))},specs:i,association:{source:Bx,contentHash:o}})}}function Vx(t){return ie("comet.native.shape-confirmation.v1",{formalHash:t.formalHash,childrenHash:t.childrenHash,coordinationMode:t.coordinationMode??null})}async function Sg(t){if(t.state.document_constraints_version!==void 0){let l=await Kx(t);if(!l.valid){let d=l.findings[0];return{drifted:!0,reason:d?`Native formal documents are invalid (${d.code}${d.path?`: ${d.path}`:""})`:"Native formal documents are invalid"}}}let e=await Hx(t),r=t.ignoreSpecOperationFor??(t.state.children_contract_hash?new Set(t.state.spec_changes.map(({capability:l})=>l)):void 0);if(!(e.length===t.state.spec_changes.length&&e.every((l,d)=>{let u=t.state.spec_changes[d];return u!==void 0&&l.capability===u.capability&&l.source===u.source&&l.delta_source===u.delta_source&&l.base_hash===u.base_hash&&(l.operation===u.operation||r?.has(l.capability)===!0)})))return{drifted:!0,reason:"Native target specification declarations changed"};let i;try{i=await Wx({...t,specChanges:e})}catch{return{drifted:!0,reason:"Native Shape artifacts changed or became invalid"}}let{acceptance:o}=i,a=t.state.acceptance.map(({source:l,text:d})=>({source:l,text:d}));if(!rE(a,o))return{drifted:!0,reason:"Native confirmed acceptance criteria changed"};let s;try{s=await yi({changeDir:Me(t.paths,t.state.name),acceptanceIds:o.map(({id:l})=>l),validation:gi({...t.state,acceptance:o})})}catch{return{drifted:!0,reason:"Native child declarations changed"}}return t.state.phase==="shape"&&t.state.status==="await-user"&&t.state.loop.next_action==="confirm-shape"&&t.state.shape_confirmation_hash===void 0?{drifted:!0,reason:"Native Shape confirmation fingerprint is missing"}:t.state.shape_confirmation_hash!==void 0&&Vx({formalHash:i.formalHash,childrenHash:s?.hash??null,coordinationMode:t.state.coordination_mode})!==t.state.shape_confirmation_hash?{drifted:!0,reason:"Native Shape artifacts changed"}:(s?hg({acceptance:o,children:s.contract}):null)===(t.state.children_contract_hash??null)?{drifted:!1,reason:null}:{drifted:!0,reason:"Native child declarations changed"}}async function iu(t){return Ue(t.paths,`return portable change ${t.name} to Shape`,async()=>{let e=await Je(t.paths,t.name);if(xs({state:e,expected:t.expectedContinuation,action:"revise-requirements"}),t.allowedPhases&&!t.allowedPhases.includes(e.phase))throw new Error("--revise-requirements is only valid from Verify or Archive");return e.phase==="shape"?e:Ng({paths:t.paths,state:e,reason:t.reason,...t.keepFailureBudget?{keepFailureBudget:!0}:{}})})}async function Ng(t){let{state:e}=t;if(e.archived)throw new Error(`Native change ${e.name} is already archived`);let n={...ko(e,{goal_cycle:e.loop.goal_cycle,iteration:e.loop.iteration,attempt:e.loop.attempt,outcome:"recovery",unresolved_ids:[],summary:Tr(t.reason),completed_at:new Date().toISOString()}),phase:"shape",status:"active",state_version:e.state_version+1,acceptance:[],builder_handoff:null,blockers:[],verification:null,verification_result:"pending",verification_report:null,loop:{stage:"shape",goal_cycle:e.loop.goal_cycle+1,iteration:0,attempt:0,retry_epoch:0,failed_iteration_count:t.keepFailureBudget?e.loop.failed_iteration_count:0,no_progress_count:0,execution_failure_count:0,previous_unresolved_ids:[],next_action:"prepare-shape-confirmation"}};delete n.shape_confirmation_hash,delete n.children_contract_hash;let i=await xn({paths:t.paths,previous:e,next:n});return await En(er(t.paths,e.name),Or({portableState:i,projectRoot:t.paths.projectRoot,branch:Mr(t.paths.projectRoot)}),{containedRoot:t.paths.runtimeDir}),i}Tt();it();jo();Cn();Sn();ci();import{createHash as see,randomUUID as gK}from"node:crypto";lt();Ka();nt();lt();Q();ke();var Y7=8*1024*1024;Jd();it();ci();se();var kee=1024*1024*1024;function zx(t){if(t.local===null||t.local.change!==t.state.name)return Or({portableState:t.state,projectRoot:t.projectRoot,branch:Mr(t.projectRoot)});let e=t.local.execution?.operationId??gK();return{...t.local,basedOnStateVersion:t.state.state_version,execution:{operationId:e,stage:"checking",actor:"runtime",executionId:null,status:"completed",startedAt:t.local.execution?.startedAt??new Date().toISOString(),requestCheckRounds:0},checks:t.local.checks.map(r=>r.status==="running"||r.status==="planned"?{...r,operationId:e,status:"interrupted"}:{...r,operationId:e})}}async function Gx(t){try{let e=await $d(er(t.paths,t.state.name));return e===null||e.change!==t.state.name||e.basedOnStateVersion!==t.state.state_version?null:e}catch{return null}}it();qd();Es();async function Eg(t){return Ue(t.paths,`return portable change ${t.name} to Build`,async()=>{let e=await Je(t.paths,t.name);if(xs({state:e,expected:t.expectedContinuation,action:"revise-implementation"}),e.phase==="build")return e;let r=t.preserveLocalChecks!==!1,n=r?await Gx({paths:t.paths,state:e}):null,i=Yd({state:e,reason:t.reason,...t.failureBudget?{failureBudget:t.failureBudget}:{}}),o=await xn({paths:t.paths,previous:e,next:i});return await En(er(t.paths,e.name),r?zx({local:n,state:o,projectRoot:t.paths.projectRoot}):Or({portableState:o,projectRoot:t.paths.projectRoot,branch:Mr(t.paths.projectRoot)}),{containedRoot:t.paths.runtimeDir}),o})}Cn();it();Cn();it();Th();var sre=16*1024;async function yK(t){let e=await Xn(t.projectRoot);return e.status==="missing"||e.selection.workflow!=="native"?null:(vo(e.selection.change),e.selection)}async function Ux(t){let e=await yK(t);return e?(await Ro(t,e.change)?await Je(t,e.change):await hs(t,e.change),e.change):null}ld();var cu=ye("nativeHookProjectConfig",Yt);async function xg(t){em();try{return await t()}finally{em()}}var wK=new Set(["brief.md","children.yaml","comet-state.yaml","verification.md","capability-association.yaml"]),Jx=new Set(["comet-state.yaml","verification.md","capability-association.yaml"]);function Rg(t){let e=t.split("/");return e.length===3&&e[0]==="specs"&&e[1]!==void 0&&di.test(e[1])&&(e[2]==="spec.md"||e[2]===ho)}function au(t,e){if(!Pe(t,e))return null;let r=H.relative(t,e).replaceAll("\\","/"),[n,...i]=r.split("/");if(!n||!di.test(n))return null;if(i.length===0)return{name:n,relative:""};let o=i.join("/");return wK.has(o)?{name:n,relative:o}:Rg(o)?{name:n,relative:o}:null}function bK(t,e){return Pe(t.runtimeDir,e)||H.relative(t.projectRoot,e).replaceAll("\\","/")===".comet/current-change.json"}function kK(t,e,r){let n=H.join(t.projectRoot,".comet","comet");if(Pe(t.nativeRoot,e)||H.resolve(n)===H.resolve(t.nativeRoot))return null;let i=au(H.join(n,"changes"),e);return i&&r.has(i.name)?i:null}function Yx(t){return t==="brief.md"?"data.artifacts.briefPath":t==="children.yaml"?"data.artifacts.childrenPath":t.startsWith("specs/")?"data.artifacts.specsDir":"data.artifacts.changeDir"}function Xx(t,e,r){return`Published Native specs are updated through Archive. Read ${H.join(t,"specs",H.relative(e,r))}, merge the original edit there, and retry the write against that exact target; do not overwrite existing content.`}function Pg(t,e,r,n={}){if(!Pe(t,r))return null;if(bK(e,r)){let s=H.relative(e.projectRoot,r).replaceAll("\\","/"),c=s.match(/^\.comet\/runtime\/native\/changes\/([^/]+)(?:\/|$)/u)?.[1];return{allowed:!1,reason:`Native Runtime-owned path ${s}. Run ${c?`comet native status ${c} --json`:"comet native status --json"} in ${e.projectRoot}, follow its continuation, and retry; do not edit Runtime files directly.`,workflow:"native",...c?{change:c}:{}}}let i=kK(e,r,n.registeredChanges??new Set);if(i){let s=H.join(e.changesDir,i.name,i.relative);return{allowed:!1,reason:`Native formal artifact target ${H.relative(t,r).replaceAll("\\","/")} is outside the configured artifact root. Use ${s} in ${e.projectRoot}; read existing content and merge the original edit instead of overwriting it.`,workflow:"native",change:i.name}}let o=au(e.changesDir,r);if(!o)return null;if(Jx.has(o.relative))return{allowed:!1,reason:`Native Runtime-owned artifact ${H.relative(t,r).replaceAll("\\","/")}. Run comet native status ${o.name} --json in ${e.projectRoot} and follow its continuation; do not infer a mutation or edit the file directly.`,workflow:"native",change:o.name};if(n.allowCanonicalFormal===!1)return null;let a=H.join(e.changesDir,o.name,o.relative);return{allowed:!1,reason:`Native formal artifact target ${H.relative(t,r).replaceAll("\\","/")} is not registered. Run comet native new ${o.name} in ${e.projectRoot}. Use the response ${Yx(o.relative)} to locate ${a}; read initialized or existing content and merge the original edit instead of overwriting it.`,workflow:"native",change:o.name}}function su(t){return t.length===0?null:t.length===1?t[0]:{...t[0],reason:t.map(e=>e.reason).join(`
|
||
`)}}function SK(t,e,r,n,i,o){let a=H.relative(t,i).replaceAll("\\","/"),s=H.join(e.changesDir,n.name,n.relative);return{allowed:!1,reason:o?`Native formal artifact target ${a} belongs to registered change ${n.name}, not selected change ${r}. Run comet native select ${n.name} in ${e.projectRoot}, then read ${s} and merge the original edit.`:`Native formal artifact target ${a} belongs to unregistered change ${n.name}, not selected change ${r}. Run comet native new ${n.name} --isolation worktree in ${e.projectRoot}. Use the response ${Yx(n.relative)} to locate ${s}; read initialized or existing content and merge the original edit.`,workflow:"native",change:r}}function Cg(t){let e=`Native change ${t.name} is in ${t.phase}; implementation writes are only allowed in Build.`;return t.phase==="shape"?`${e} Reread the latest continuation, complete requirement clarification, and execute the Shape confirmation command after user confirmation.`:t.phase==="verify"?`${e} Select and execute the matching commandAlternative from the latest continuation, preserving --expected-state-version and --expected-action.`:t.phase==="archive"?`${e} Continue finalizing the accepted result; do not run Verify-only revision commands from Archive.`:`${e} Create or select a separate Native change if this write belongs to different work.`}async function NK(t){let{projectRoot:e,paths:r,state:n,request:i}=t,o=Me(r,n.name),a=[],s=[],c=[],l=[],d=[],u=await Qx(e),p=!1,f=!1,m=!1;for(let g of i.targets){let h=H.resolve(e,g);if(!Pe(e,h)){m=!0;continue}let w=H.relative(e,h).replaceAll("\\","/");if(w===".comet/config.yaml"){f=!0;continue}if(!Pe(r.nativeRoot,h)){if(await mn(e,h,[H.join(e,".comet"),r.nativeRoot])){p=!0;continue}if(!u&&Zx(r,w)){l.push(w);continue}c.push(w);continue}if(!Pe(o,h)){d.push({allowed:!1,reason:Pe(r.specsDir,h)?Xx(o,r.specsDir,h):"Portable Native control state is Runtime-owned",workflow:"native",phase:n.phase,change:n.name});continue}let y=H.relative(o,h).replaceAll("\\","/");if(y==="brief.md"||y==="children.yaml"||y.startsWith("specs/")&&EK(y)){a.push(y);continue}if(y.startsWith("specs/")){s.push(y);continue}d.push({allowed:!1,reason:`${y||"change directory"} is Runtime-owned and cannot be edited by the Agent`,workflow:"native",phase:n.phase,change:n.name})}if(s.length>0&&d.push({allowed:!1,reason:s.map(eP).join(`
|
||
`),workflow:"native",phase:n.phase,change:n.name}),d.length>0)return su(d);if(a.length>0&&(c.length>0||l.length>0))return{allowed:!1,reason:"Formal Native requirements must be edited in separate actions from implementation or documentation files",workflow:"native",phase:n.phase,change:n.name};if(a.length>0)return n.document_constraints_version===2&&a.every(g=>g==="brief.md"||/^specs\/[^/]+\/spec\.md$/u.test(g))?{allowed:!0,reason:"Native formal Markdown edit; Runtime rechecks the actual content before an implementation write or workflow transition",workflow:"native",phase:n.phase,change:n.name}:n.phase!=="shape"?{allowed:!0,reason:`Native requirements changed; returned to Shape goal cycle ${(await xg(()=>iu({paths:r,name:n.name,reason:`Formal requirement write requested for ${a.join(", ")}`}))).loop.goal_cycle}`,workflow:"native",phase:"shape",change:n.name}:{allowed:!0,reason:"Native control artifact write",workflow:"native",phase:n.phase,change:n.name};if(c.length>0){if(n.document_constraints_version===2&&n.phase!=="shape"){let g=await Sg({paths:r,state:n});if(g.drifted){let h=await xg(()=>iu({paths:r,name:n.name,reason:g.reason??"Native confirmed requirements changed",keepFailureBudget:!0}));return{allowed:!1,reason:Cg(h),workflow:"native",phase:h.phase,change:h.name}}}return n.children_contract_hash?{allowed:!1,reason:"Native parent Build advances child changes instead of editing implementation",workflow:"native",phase:n.phase,change:n.name}:n.phase==="build"?{allowed:!0,reason:"Native change is in Build",workflow:"native",phase:n.phase,change:n.name}:n.phase==="verify"||n.phase==="archive"?{allowed:!0,reason:`Native candidate was invalidated and returned to Build iteration ${(await xg(()=>Eg({paths:r,name:n.name,reason:`Observed implementation write before ${c.join(", ")}`}))).loop.iteration}`,workflow:"native",phase:"build",change:n.name}:{allowed:!1,reason:Cg(n),workflow:"native",phase:n.phase,change:n.name}}return l.length>0?{allowed:!0,reason:"Native neutral document write: documentation edits stay outside the implementation scope and do not return the change to Build",workflow:"native",phase:n.phase,change:n.name}:p?{allowed:!0,reason:"Native configured Hook allow path",workflow:"native",phase:n.phase,change:n.name}:{allowed:!0,reason:f?"Native control artifact write":m?"Write target is outside the guarded project":"No guarded write target was provided",workflow:"native",phase:n.phase,change:n.name}}function Pe(t,e){let r=H.relative(t,e);return r===""||!r.startsWith("..")&&!H.isAbsolute(r)}async function Qx(t){return(await cu(t))?.native?.document_writes==="revert"}function Zx(t,e){return Vl(e,[H.relative(t.projectRoot,t.nativeRoot).replaceAll("\\","/"),".comet"])}function eP(t){let e=t.split("/"),r=e[0]==="specs"&&e[1]&&di.test(e[1])?e[1]:null;return`Native formal Spec artifacts must use ${r?`specs/${r}/spec.md (or specs/${r}/${ho} for delta metadata)`:`specs/<capability>/spec.md (or specs/<capability>/${ho} for delta metadata)`}; received ${t}`}function EK(t){return Rg(t)}function xK(t,e,r){return r.targets.length>0&&r.targets.every(n=>{let i=H.resolve(t,n);return Pe(t,i)?H.relative(t,i).replaceAll("\\","/")===".comet/config.yaml"||Pe(e,i):!0})}async function PK(t){let e=await cu(t);if(!e||!(e.workflows??[e.default_workflow]).includes("native"))return null;let r=await Hn(t,e.native.artifact_root),n;try{n=await vK.readdir(r.changesDir,{withFileTypes:!0})}catch(o){if(o.code==="ENOENT")return{paths:r,changes:[]};throw o}let i=[];for(let o of n.sort((a,s)=>a.name.localeCompare(s.name)))if(!(!o.isDirectory()||o.isSymbolicLink()))if(await Ro(r,o.name)){let a=await Je(r,o.name);a.archived||i.push({kind:"portable",state:a})}else{let a=await hs(r,o.name);a.archived||i.push({kind:"legacy",state:a})}return{paths:r,changes:i}}async function CK(t,e){let r=await cu(t);if(!r||!(r.workflows??[r.default_workflow]).includes("native"))return null;let n=await Hn(t,r.native.artifact_root);try{if(await Ro(n,e)){let o=await Je(n,e);return{paths:n,changes:o.archived?[]:[{kind:"portable",state:o}]}}let i=await hs(n,e);return{paths:n,changes:i.archived?[]:[{kind:"legacy",state:i}]}}catch(i){if(i.code==="ENOENT")return{paths:n,changes:[]};throw i}}var Ag=ye("nativeActiveContext",t=>PK(t)),tP=ye("selectedNativeContext",CK);async function rP(t){return((await Ag(t))?.changes??[]).map(r=>({workflow:"native",name:r.state.name,phase:r.state.phase}))}async function _g(t,e){let n=(await tP(t,e))?.changes[0]?.state;return n?{workflow:"native",name:n.name,phase:n.phase}:null}async function nP(t,e,r={}){if(e.intent!=="write"||e.targets.length===0)return null;let n=await cu(t);if(!n||!(n.workflows??[n.default_workflow]).includes("native"))return null;let i=await Ag(t);if(!i)return null;let o=i.paths,a=new Set(i.changes.map(({state:c})=>c.name)),s=[];for(let c of e.targets){let l=Pg(t,o,H.resolve(t,c),{allowCanonicalFormal:r.allowCanonicalFormal??!1,registeredChanges:a});l&&s.push(l)}return su(s)}async function iP(t,e,r){e={...e,targets:qn(e.targets)};let n=r?await tP(t,r):await Ag(t);if(!n)return{allowed:!0,reason:"Native workflow is not enabled"};if(e.intent==="non-write")return{allowed:!0,reason:"Hook event is not a write"};if(n.changes.length===0){let g=[];for(let w of e.targets){let y=Pg(t,n.paths,H.resolve(t,w));y&&g.push(y)}let h=su(g);return h||{allowed:!0,reason:xK(t,n.paths.nativeRoot,e)?"Native control artifact write":"No Native changes exist"}}let i;if(r){if(i=n.changes.find(g=>g.state.name===r),!i)return{allowed:!1,reason:`Selected Native change ${r} is missing or archived; resume /comet-native before retrying`,workflow:"native",change:r}}else if(n.changes.length===1)i=n.changes[0];else{let g=await Ux(n.paths);if(i=n.changes.find(h=>h.state.name===g),!i)return{allowed:!1,reason:"Multiple Native changes are active; select the change to resume before writing code",workflow:"native"}}let o=i.state,a=new Set(n.changes.map(({state:g})=>g.name)),s=new Map,c=[];for(let g of e.targets){let h=H.resolve(t,g),w=Pg(t,n.paths,h,{allowCanonicalFormal:!1,registeredChanges:a});if(w){c.push(w);continue}let y=au(n.paths.changesDir,h);if(y&&y.name!==o.name){let k=a.has(y.name);if(!k&&r){let S=s.get(y.name);S||(S=_g(t,y.name).then(Boolean),s.set(y.name,S)),k=await S}c.push(SK(t,n.paths,o.name,y,h,k));continue}if(!Pe(t,h))continue;if(Pe(n.paths.specsDir,h)){let k=i.kind==="portable"?Me(n.paths,o.name):ms(n.paths,o.name);c.push({allowed:!1,reason:Xx(k,n.paths.specsDir,h),workflow:"native",phase:o.phase,change:o.name});continue}if(!Pe(n.paths.nativeRoot,h))continue;let v=i.kind==="portable"?Me(n.paths,o.name):ms(n.paths,o.name);if(Pe(v,h)){let k=H.relative(v,h).replaceAll("\\","/");if(k==="brief.md"||k==="children.yaml"||Rg(k))continue;c.push({allowed:!1,reason:k.startsWith("specs/")?eP(k):`${k||"change directory"} is Runtime-owned. Run comet native status ${o.name} --json in ${n.paths.projectRoot} and follow its continuation; do not edit it directly.`,workflow:"native",phase:o.phase,change:o.name});continue}let b=H.relative(t,h).replaceAll("\\","/");c.push({allowed:!1,reason:`Native-managed path ${b} is not an editable artifact for ${o.name}. Run comet native status ${o.name} --json in ${n.paths.projectRoot} and follow its continuation.`,workflow:"native",phase:o.phase,change:o.name})}let l=su(c);if(l)return l;if(i.kind==="legacy"&&o.phase==="build")return{allowed:!0,reason:"Native change is in Build",workflow:"native",phase:o.phase,change:o.name};if(e.intent==="unknown"||e.targets.length===0)return{allowed:!0,reason:"Hook write target was not attributed to the guarded project",workflow:"native",phase:o.phase,change:o.name};if(i.kind==="portable")return NK({projectRoot:t,paths:n.paths,state:i.state,request:e});let d=!1,u=!1,p=!1,f=!1,m=await Qx(t);for(let g of e.targets){let h=H.resolve(t,g);if(!Pe(t,h)){u=!0;continue}let w=H.relative(t,h).replaceAll("\\","/");if(w===".comet/config.yaml"){d=!0;continue}if(Pe(n.paths.nativeRoot,h)){let y=au(n.paths.changesDir,h);if(y?.name===o.name){if(Jx.has(y.relative))return{allowed:!1,reason:`Native control state is Runtime-owned; use the CLI for ${w}`,workflow:"native",phase:o.phase,change:o.name};d=!0;continue}return{allowed:!1,reason:`Native control state is Runtime-owned; use the CLI for ${w}`,workflow:"native",phase:o.phase,change:o.name}}if(await mn(t,h,[H.join(t,".comet"),n.paths.nativeRoot])){p=!0;continue}if(!m&&Zx(n.paths,w)){f=!0;continue}return{allowed:!1,reason:Cg(o),workflow:"native",phase:o.phase,change:o.name}}return{allowed:!0,reason:d?"Native control artifact write":u?"Write target is outside the guarded project":p?"Native configured Hook allow path":f?"Native neutral document write: documentation edits stay outside the implementation scope":"No guarded write target was provided",workflow:"native",phase:o.phase,change:o.name}}yr();Wa();yr();se();qe();var jg=ye("readWorkflowProjectConfig",t=>Re(t)),Are=ye("discoverNativeProject",t=>Pa(t));Oa();import c2 from"node:path";Q();import{createHash as eH}from"node:crypto";import wP from"node:path";import TK from"node:os";import Ps from"node:path";lt();import{createHash as RK}from"node:crypto";import{AsyncLocalStorage as AK}from"node:async_hooks";var _K=new AK;function oP(t,e){let r=Gd(t),n=e.runGit??At,i=_K.getStore(),o=i?.active?i.observations:void 0,a=o?.get(r)?.get(n);if(a)return a;let s=r;try{let l=n(r,["remote","get-url","origin"]).trim();if(l)s=l;else throw new Error("No origin")}catch{try{let l=n(r,["rev-parse","--git-common-dir"]).trim();l&&(s=Gd(r,l))}catch{}}let c={identity:sP(s),name:IK(s)};if(o){let l=o.get(r)??new Map;l.set(n,c),o.set(r,l)}return c}function jK(t,e={}){return oP(t,e).identity}function Ig(t){let e=sP(t),n=(e.split(/[/:]/u).filter(Boolean).at(-1)??"project").replace(/[^a-z0-9._-]+/gu,"-").replace(/^-+|-+$/gu,"")||"project",i=RK("sha256").update(e,"utf8").digest("hex").slice(0,8);return`${n.slice(0,40)}-${i}`}function oe(t,e={}){return Ig(jK(t,e))}function aP(t,e={}){return oP(t,e).name}function IK(t){return(t.trim().replace(/\\/gu,"/").replace(/\.git$/iu,"").replace(/\/+$/u,"").split(/[/:]/u).filter(Boolean).at(-1)??"project").replace(/[^a-zA-Z0-9._-]+/gu,"-").replace(/^-+|-+$/gu,"")||"project"}function sP(t){let e=t.trim().replace(/\\/gu,"/").replace(/\.git$/iu,"").replace(/\/+$/u,"").toLocaleLowerCase();return e||"project"}function Tg(t){let e=t??TK.homedir();return process.platform==="win32"?t===void 0&&process.env.LOCALAPPDATA?process.env.LOCALAPPDATA:Ps.join(e,"AppData","Local"):process.platform==="darwin"?Ps.join(e,"Library","Caches"):t===void 0&&process.env.XDG_CACHE_HOME?process.env.XDG_CACHE_HOME:Ps.join(e,".cache")}function rr(t,e=Tg()){let r=Ps.resolve(t),n=oe(r),i=Ig(`workspace:${r}`),o=process.platform==="linux"?"comet":"Comet";return{repositoryId:n,workspaceId:i,databasePath:Ps.join(e,o,"project-knowledge",n,"knowledge.sqlite")}}import{randomUUID as $K}from"node:crypto";import cP from"node:path";var OK=/^[a-z0-9][a-z0-9._-]{1,127}$/u,pP=2e3,MK=1024,LK=32,DK=32,BK=32,FK=16,KK=16,fP=32,HK=128,WK=32,VK=new Set(["topology","fact","dependency","decision","pattern","procedure","constraint","failure-resolution"]),qK=new Set(["trial","proven","enforced","superseded"]),zK=new Set(["automatic","user","repository"]),GK=new Set(["contains","depends-on","consumes","registers","propagates-to","generated-by","validated-by","supersedes"]);function Mo(t,e){if(!t||typeof t!="object"||Array.isArray(t))throw new Error(`${e} must be a mapping`);return t}function st(t,e,r=pP){if(typeof t!="string"||t.trim().length===0||t.length>r)throw new Error(`${e} must be a non-empty string of at most ${r} characters`);return t.trim()}function $g(t,e){let r=st(t,e,128);if(!OK.test(r))throw new Error(`${e} must use a stable record id`);return r}function Oo(t,e,r,n){if(t===void 0)return[];if(!Array.isArray(t)||t.length>r)throw new Error(`${e} must be a bounded list`);return t.map((i,o)=>n(i,o))}function mP(t,e,r,n){if(!Array.isArray(t)||t.length===0||t.length>r)throw new Error(`${e} must be a non-empty bounded list`);return t.map((i,o)=>n(i,o))}function Mg(t,e){let r=st(t,e,MK).replaceAll("\\","/");if(cP.posix.isAbsolute(r)||cP.win32.isAbsolute(r)||r.includes("\0")||r.split("/").some(n=>n===".."))throw new Error(`${e} must be a project-relative path`);return r}function UK(t,e,r=LK){return Oo(t,e,r,(n,i)=>Mg(n,`${e}[${i}]`))}function lP(t,e,r=DK){return Oo(t,e,r,(n,i)=>st(n,`${e}[${i}]`,512))}function Og(t,e,r=pP){if(t!==void 0)return st(t,e,r)}function dP(t,e){if(!Number.isSafeInteger(t)||Number(t)<1)throw new Error(`${e} must be a positive integer`);return Number(t)}function Cs(t,e){if(!Number.isSafeInteger(t)||Number(t)<0)throw new Error(`${e} must be a non-negative integer`);return Number(t)}function hP(t,e){let r=Mo(t,e),n=r.lineStart,i=r.lineEnd,o=n===void 0?void 0:dP(n,`${e}.lineStart`),a=i===void 0?void 0:dP(i,`${e}.lineEnd`);if(o!==void 0&&a!==void 0&&a<o)throw new Error(`${e}.lineEnd must be greater than or equal to lineStart`);let s=Og(r.anchor,`${e}.anchor`,256),c=Og(r.evidence,`${e}.evidence`,1024);return{source:Mg(r.source,`${e}.source`),...s===void 0?{}:{anchor:s},...o===void 0?{}:{lineStart:o},...a===void 0?{}:{lineEnd:a},...c===void 0?{}:{evidence:c}}}function JK(t,e){let r=Mo(t,`conclusions[${e}]`);return{text:st(r.text,`conclusions[${e}].text`),sources:mP(r.sources,`conclusions[${e}].sources`,fP,(n,i)=>hP(n,`conclusions[${e}].sources[${i}]`))}}function YK(t,e){let r=Mo(t,`relations[${e}]`),n=st(r.type,`relations[${e}].type`,64);if(!GK.has(n))throw new Error(`relations[${e}].type is unsupported`);return{type:n,targetId:$g(r.targetId,`relations[${e}].targetId`),sources:mP(r.sources,`relations[${e}].sources`,fP,(i,o)=>hP(i,`relations[${e}].sources[${o}]`))}}function XK(t,e){let r=Mo(t,`verification[${e}]`),n=Og(r.expected,`verification[${e}].expected`);return{command:st(r.command,`verification[${e}].command`),...n===void 0?{}:{expected:n}}}function QK(t,e){let r=Mo(t,`sourceVersions[${e}]`),n=r.digest;if(n!==void 0&&(typeof n!="string"||!/^[a-f0-9]{64}$/u.test(n)))throw new Error(`sourceVersions[${e}].digest must be a SHA-256 hash`);return{source:Mg(r.source,`sourceVersions[${e}].source`),size:Cs(r.size,`sourceVersions[${e}].size`),modifiedAt:Cs(r.modifiedAt,`sourceVersions[${e}].modifiedAt`),...n===void 0?{}:{digest:n}}}function ZK(t,e){return t.reduce((r,n)=>r+n.sources.length,0)+e.reduce((r,n)=>r+n.sources.length,0)}function uP(t){let e=st(t,"updatedAt",64);if(Number.isNaN(Date.parse(e)))throw new Error("updatedAt must be an ISO-8601 timestamp");return e}function gt(t){let e=Mo(t,"record"),r=st(e.type,"type",64);if(!VK.has(r))throw new Error("type is unsupported");let n=st(e.state,"state",32);if(!qK.has(n))throw new Error("state is unsupported");let i=st(e.authority,"authority",32);if(!zK.has(i))throw new Error("authority is unsupported");let o=Oo(e.conclusions,"conclusions",BK,JK),a=Oo(e.relations,"relations",FK,YK);if(ZK(o,a)>HK)throw new Error("conclusions/relations sources exceed the bounded total reference count");let s=Oo(e.sourceVersions,"sourceVersions",WK,QK);if(new Set(s.map(c=>c.source)).size!==s.length)throw new Error("sourceVersions must not contain duplicate sources");return{id:$g(e.id,"id"),projectId:$g(e.projectId,"projectId"),type:r,state:n,authority:i,title:st(e.title,"title"),summary:st(e.summary,"summary"),applicablePaths:UK(e.applicablePaths,"applicablePaths"),operations:lP(e.operations,"operations"),phases:lP(e.phases,"phases"),conclusions:o,relations:a,verification:Oo(e.verification,"verification",KK,XK),sourceVersions:s,applicationCount:Cs(e.applicationCount,"applicationCount"),successCount:Cs(e.successCount,"successCount"),failureCount:Cs(e.failureCount,"failureCount"),...e.lastAppliedAt===void 0?{}:{lastAppliedAt:uP(e.lastAppliedAt)},updatedAt:uP(e.updatedAt)}}function U(t){return gt(t)}function gP(t,e,r=new Date().toISOString(),n=`manual-${$K()}`){let i=t.sources??[];return gt({id:n,projectId:e,type:t.type,state:"proven",authority:"user",title:t.title,summary:t.summary,applicablePaths:t.applicablePaths??[],operations:t.operations??[],phases:t.phases??[],conclusions:i.length>0?[{text:t.summary,sources:i}]:[],relations:[],verification:t.verification??[],sourceVersions:[],applicationCount:0,successCount:0,failureCount:0,updatedAt:r})}function yP(t,e){let r=gt(t),n=gt(e);if(r.id!==n.id)throw new Error("cannot merge records with different ids");if(r.projectId!==n.projectId)throw new Error("cannot merge records with different project ids");if(r.type!==n.type)throw new Error("cannot merge records with different types");return r.state==="superseded"&&n.authority!=="user"?n:r.authority==="user"&&n.authority!=="user"?gt({...n,authority:"user",state:r.state,title:r.title,summary:r.summary,applicablePaths:r.applicablePaths,operations:r.operations,phases:r.phases??[],conclusions:r.conclusions,relations:r.relations,verification:r.verification,applicationCount:r.applicationCount,successCount:r.successCount,failureCount:r.failureCount,...r.lastAppliedAt===void 0?{}:{lastAppliedAt:r.lastAppliedAt}}):n}function vP(t){return t==="topology"||t==="fact"||t==="dependency"?"project-model":"project-policy"}var wi=class{constructor(e,r){this.projectRoot=e;let n=rr(e,r);this.projectId=n.repositoryId,this.store=new gn(wP.join(wP.dirname(n.databasePath),n.workspaceId,"host-review.json"))}projectRoot;store;projectId;async read(){return JSON.parse(await this.store.read()??"[]")}async pending(){return(await this.read()).filter(e=>e.actions===void 0)}async review(e){let r=eH("sha256").update(JSON.stringify(e)).digest("hex"),n=await this.store.withLock(async()=>{let i=(await this.read()).filter(s=>s.id===r||s.packet.eventName!==e.eventName||s.packet.workflow!==e.workflow||s.packet.changeId!==e.changeId||s.packet.occurredAt!==e.occurredAt),o=i.find(s=>s.id===r);if(o)return o.actions;if(i.filter(s=>s.actions===void 0).length>=64)throw new Error("Host review queue is full");let a=i.filter(s=>s.actions===void 0||i.indexOf(s)>=i.length-64);await this.store.write(JSON.stringify([...a,{id:r,packet:e}]))});if(n===void 0)throw new Error("Host Agent review pending: comet knowledge review --json");return n}async submit(e,r){if(!Array.isArray(r)||r.length>16)throw new Error("Expected at most 16 review actions");let n=r.map(i=>{if(i?.action==="supersede"&&typeof i.recordId=="string")return{action:"supersede",recordId:i.recordId};if(i?.action!=="create"&&i?.action!=="update")throw new Error("Invalid review action");return{action:i.action,record:gt({...i.record,projectId:this.projectId,state:"trial",authority:"automatic",applicationCount:0,successCount:0,failureCount:0})}});await this.store.withLock(async()=>{let i=await this.read(),o=i.find(a=>a.id===e);if(!o)throw new Error("Unknown review request");if(n.length>0){for(let a of o.packet.sources)if((await wr(this.projectRoot,a.source,{label:a.source})).digest!==a.digest)throw new Error("Review sources changed; refresh the pending review before submitting")}if(o.actions!==void 0&&JSON.stringify(o.actions)!==JSON.stringify(n))throw new Error("Review already submitted");o.actions=n,await this.store.write(JSON.stringify(i))})}};var Dr="comet.agent-experience.v1",tH=/^[A-Za-z0-9][A-Za-z0-9._:/-]{0,255}$/u,rH=new Set(["user.signal","episode.completed","verification.completed","review.resolved","failure.resolved","change.archived","repository.changed","context.applied","context.outcome"]),nH=new Set(["user","agent","tool","workflow","repository"]),iH=new Set(["trial","proven","enforced","superseded"]),oH=new Set(["core-profile","collaboration-policy","personal-episode","project-model","project-policy"]);function Rs(t){let e=Bt(t,"Agent Experience event");if(e.schema!==Dr)throw new Error(`Unsupported Agent Experience schema: ${String(e.schema)}`);let r=nr(e.eventId,"eventId"),n=nr(e.episodeId,"episodeId"),i=SP(e.occurredAt,"occurredAt");if(!rH.has(e.type))throw new Error(`Unsupported Agent Experience event type: ${String(e.type)}`);if(!nH.has(e.actor))throw new Error(`Unsupported Agent Experience actor: ${String(e.actor)}`);if(e.scope!=="user"&&e.scope!=="project")throw new Error("Agent Experience scope must be user or project");let o=fH(e.projectId,"projectId");if(e.scope==="project"&&o===void 0)throw new Error("Project Agent Experience requires projectId");let a=aH(e.source),s=sH(e.context),c=e.signal===void 0?void 0:cH(e.signal),l=Lg(e.evidence,"evidence").map(lH),d=e.outcome===void 0?void 0:bP(e.outcome);return{schema:Dr,eventId:r,episodeId:n,occurredAt:i,type:e.type,actor:e.actor,scope:e.scope,...o===void 0?{}:{projectId:o},source:a,context:s,...c===void 0?{}:{signal:c},evidence:l,...d===void 0?{}:{outcome:d},...e.causedByEventId===void 0?{}:{causedByEventId:nr(e.causedByEventId,"causedByEventId")},...e.supersedesEventId===void 0?{}:{supersedesEventId:nr(e.supersedesEventId,"supersedesEventId")}}}function Lo(t){let e=Bt(t,"Context Candidate"),r=e.state,n=e.memoryType;if(!iH.has(r))throw new Error("Context Candidate state is unsupported");if(!oH.has(n))throw new Error("Context Candidate memoryType is unsupported");let i=e.authority,o=e.scope;if(o!=="user"&&o!=="project")throw new Error("Context Candidate scope must be user or project");if(i!=="explicit"&&i!=="inferred"&&i!=="repository"&&i!=="user")throw new Error("Context Candidate authority is unsupported");return{id:nr(e.id,"candidate.id"),owner:V(e.owner,"candidate.owner",256),scope:o,memoryType:n,kind:V(e.kind,"candidate.kind",128),state:r,authority:i,title:V(e.title,"candidate.title",512),summary:V(e.summary,"candidate.summary",4e3),...e.content===void 0?{}:{content:V(e.content,"candidate.content",Number.MAX_SAFE_INTEGER)},selectors:kP(e.selectors),sources:Lg(e.sources,"candidate.sources").map((a,s)=>{let c=Bt(a,`candidate.sources[${s}]`),l=c.type;if(!["user","repository","workflow","review","verification","inference"].includes(String(l)))throw new Error(`candidate.sources[${s}].type is unsupported`);return{type:l,...c.source===void 0?{}:{source:V(c.source,"source",2048)},...c.anchor===void 0?{}:{anchor:V(c.anchor,"anchor",512)},...c.digest===void 0?{}:{digest:V(c.digest,"digest",256)}}}),verification:Lg(e.verification,"candidate.verification").map((a,s)=>{let c=Bt(a,`candidate.verification[${s}]`);return{command:V(c.command,"verification.command",4e3),...c.expected===void 0?{}:{expected:V(c.expected,"verification.expected",2e3)}}}),...typeof e.priority=="number"&&Number.isFinite(e.priority)?{priority:e.priority}:{},...e.matchReasons===void 0?{}:{matchReasons:bi(e.matchReasons,"candidate.matchReasons")},...e.digest===void 0?{}:{digest:V(e.digest,"digest",256)},...e.application===void 0?{}:{application:pH(e.application)}}}function aH(t){let e=Bt(t,"source");if(!["user","workflow","tool","repository","system"].includes(String(e.kind)))throw new Error("Agent Experience source kind is unsupported");return{kind:e.kind,name:V(e.name,"source.name",256),...e.workflow===void 0?{}:{workflow:V(e.workflow,"workflow",128)},...e.changeId===void 0?{}:{changeId:V(e.changeId,"changeId",256)},...e.command===void 0?{}:{command:V(e.command,"command",2e3)}}}function sH(t){let e=Bt(t??{},"context");return{...e.task===void 0?{}:{task:V(e.task,"context.task",8e3)},...e.workflow===void 0?{}:{workflow:V(e.workflow,"context.workflow",128)},...e.changeId===void 0?{}:{changeId:V(e.changeId,"context.changeId",256)},...e.phase===void 0?{}:{phase:V(e.phase,"context.phase",128)},...e.paths===void 0?{}:{paths:bi(e.paths,"context.paths")},...e.operation===void 0?{}:{operation:V(e.operation,"context.operation",256)}}}function cH(t){let e=Bt(t,"signal"),r=e.kind;if(!["preference","correction","acceptance","rejection","remember","forget"].includes(String(r)))throw new Error("Agent Experience signal kind is unsupported");if(typeof e.explicit!="boolean"||typeof e.longTerm!="boolean")throw new Error("Agent Experience signal explicit and longTerm must be booleans");return{kind:r,explicit:e.explicit,longTerm:e.longTerm,text:V(e.text,"signal.text",Number.MAX_SAFE_INTEGER),...e.category===void 0?{}:{category:V(e.category,"category",512)},...e.targetId===void 0?{}:{targetId:nr(e.targetId,"signal.targetId")},...e.selectors===void 0?{}:{selectors:kP(e.selectors)}}}function lH(t,e){let r=Bt(t,`evidence[${e}]`);if(!["user","source","verification","review","failure","outcome"].includes(String(r.kind)))throw new Error(`evidence[${e}].kind is unsupported`);return{id:nr(r.id,`evidence[${e}].id`),kind:r.kind,summary:V(r.summary,`evidence[${e}].summary`,Number.MAX_SAFE_INTEGER),...r.source===void 0?{}:{source:V(r.source,`evidence[${e}].source`,2048)},...r.anchor===void 0?{}:{anchor:V(r.anchor,`evidence[${e}].anchor`,512)},...r.digest===void 0?{}:{digest:V(r.digest,`evidence[${e}].digest`,256)},...r.command===void 0?{}:{command:V(r.command,`evidence[${e}].command`,4e3)},...typeof r.success=="boolean"?{success:r.success}:{}}}function bP(t){let e=Bt(t,"outcome");if(!["used-successfully","ignored","overridden","corrected","contributed-to-failure"].includes(String(e.status)))throw new Error("Agent Experience outcome status is unsupported");return{status:e.status,...e.previousStatus===void 0?{}:{previousStatus:dH(e.previousStatus,"outcome.previousStatus")},...e.revision===void 0?{}:{revision:uH(e.revision,"outcome.revision")},...e.summary===void 0?{}:{summary:V(e.summary,"summary",4e3)},...e.applicationId===void 0?{}:{applicationId:nr(e.applicationId,"applicationId")},...e.unitIds===void 0?{}:{unitIds:bi(e.unitIds,"unitIds")}}}function dH(t,e){if(!["used-successfully","ignored","overridden","corrected","contributed-to-failure"].includes(String(t)))throw new Error(`${e} is unsupported`);return t}function uH(t,e){if(!Number.isSafeInteger(t)||Number(t)<1)throw new Error(`${e} must be a positive integer`);return Number(t)}function kP(t){let e=Bt(t??{},"selectors");return{...e.projectId===void 0?{}:{projectId:nr(e.projectId,"selectors.projectId")},...e.paths===void 0?{}:{paths:bi(e.paths,"paths")},...e.operations===void 0?{}:{operations:bi(e.operations,"operations")},...e.phases===void 0?{}:{phases:bi(e.phases,"phases")},...e.tasks===void 0?{}:{tasks:bi(e.tasks,"tasks")}}}function pH(t){let e=Bt(t,"application"),r={applied:lu(e.applied,"application.applied"),successful:lu(e.successful,"application.successful"),ignored:lu(e.ignored,"application.ignored"),negative:lu(e.negative,"application.negative"),...e.lastAppliedAt===void 0?{}:{lastAppliedAt:SP(e.lastAppliedAt,"application.lastAppliedAt")}};return e.lastOutcome===void 0?r:{...r,lastOutcome:bP({status:e.lastOutcome}).status}}function Bt(t,e){if(!t||typeof t!="object"||Array.isArray(t))throw new Error(`${e} must be an object`);return t}function Lg(t,e){if(!Array.isArray(t))throw new Error(`${e} must be an array`);return t}function V(t,e,r){if(typeof t!="string"||t.trim().length===0||t.length>r)throw new Error(`${e} must be a non-empty string`);return t.trim()}function nr(t,e){let r=V(t,e,256);if(!tH.test(r))throw new Error(`${e} must be a stable identifier`);return r}function fH(t,e){return t===void 0?void 0:nr(t,e)}function SP(t,e){let r=V(t,e,64);if(Number.isNaN(Date.parse(r)))throw new Error(`${e} must be an ISO timestamp`);return r}function bi(t,e){if(!Array.isArray(t))throw new Error(`${e} must be an array`);return[...new Set(t.map((r,n)=>V(r,`${e}[${n}]`,4e3)))]}function lu(t,e){if(!Number.isSafeInteger(t)||Number(t)<0)throw new Error(`${e} must be a non-negative integer`);return Number(t)}import{randomUUID as mH}from"node:crypto";var uu=class{state;constructor(e={version:2,events:[],reflections:{}}){this.state=du(e)}async read(){return du(this.state)}async write(e){this.state=du(e)}},As=class{constructor(e){this.storage=e}storage;async read(){let e=await this.storage.read();if(e===null)return{version:2,events:[],reflections:{}};if(!e||typeof e!="object"||Array.isArray(e))throw new Error("Agent Experience Journal state must be an object");let r=e;if(r.version!==2||!Array.isArray(r.events)||!hH(r.reflections))throw new Error("Agent Experience Journal state is incompatible");return{version:2,events:r.events.map(Rs),reflections:gH(r.reflections)}}async write(e){await this.storage.write(du(e))}async withLock(e){return this.storage.withLock?this.storage.withLock(e):e()}},ki=class{constructor(e){this.store=e}store;queue=Promise.resolve();async capture(e){let r=Rs(e);return this.serialized(async()=>{let n=await this.store.read(),i=n.events.find(s=>s.eventId===r.eventId);if(i!==void 0){let s=Dg(n.events,i.episodeId);return{deduplicated:!0,pending:n.reflections[i.eventId]?.status!=="processed",event:i,episodeEventCount:s.events.length,episodeEvidenceCount:s.evidence.length}}let o=[...n.events,r];await this.store.write({version:2,events:o,reflections:{...n.reflections,[r.eventId]:{status:"pending",attempts:0,updatedAt:r.occurredAt}}});let a=Dg(o,r.episodeId);return{deduplicated:!1,pending:!0,event:r,episodeEventCount:a.events.length,episodeEvidenceCount:a.evidence.length}})}async pending(e=100){let r=await this.store.read();return r.events.filter(n=>r.reflections[n.eventId]?.status!=="processed").slice(0,Math.max(1,Math.min(1e3,e)))}async isPending(e){let r=await this.store.read();return r.events.some(n=>n.eventId===e)&&r.reflections[e]?.status!=="processed"}async claimEpisode(e,r={}){return this.serialized(async()=>{let n=await this.store.read(),i=r.now??new Date().toISOString(),o=Date.parse(i),a=n.events.filter(f=>f.episodeId===e);if(a.some(f=>{let m=n.reflections[f.eventId];return m?.status==="processing"&&Date.parse(m.leaseExpiresAt??"")>o}))return null;let c=a.filter(f=>{let m=n.reflections[f.eventId];return m?.status==="pending"||m?.status==="processing"&&Date.parse(m.leaseExpiresAt??"")<=o});if(c.length===0)return null;let l=`reflection:${mH()}`,d=Math.max(1e3,Math.min(30*6e4,r.leaseMs??5*6e4)),u=new Date(o+d).toISOString(),p={...n.reflections};for(let f of c){let m=p[f.eventId];p[f.eventId]={status:"processing",attempts:m?.attempts??0,updatedAt:i,claimId:l,leaseExpiresAt:u,completedOwners:[...m?.completedOwners??[]],...m?.lastError===void 0?{}:{lastError:m.lastError}}}return await this.store.write({...n,reflections:p}),{claimId:l,episodeId:e,eventIds:c.map(f=>f.eventId),events:c,completedOwners:Object.fromEntries(c.map(f=>[f.eventId,[...n.reflections[f.eventId]?.completedOwners??[]]]))}})}async renewClaim(e,r={}){await this.serialized(async()=>{let n=await this.store.read(),i=r.now??new Date().toISOString(),o=Date.parse(i),a=Math.max(1e3,Math.min(30*6e4,r.leaseMs??5*6e4)),s=new Date(o+a).toISOString(),c=new Set(e.eventIds),l={...n.reflections},d=0;for(let u of n.events){if(!c.has(u.eventId))continue;let p=l[u.eventId];p?.status!=="processing"||p.claimId!==e.claimId||(l[u.eventId]={...p,updatedAt:i,leaseExpiresAt:s},d+=1)}if(d!==e.eventIds.length)throw new Error(`Agent Reflection claim was lost: ${e.claimId}`);await this.store.write({...n,reflections:l})})}async markLearnerCompleted(e,r,n,i=new Date().toISOString()){let o=new Set(n);o.size!==0&&await this.serialized(async()=>{let a=await this.store.read(),s={...a.reflections},c=0;for(let l of a.events){if(!o.has(l.eventId))continue;let d=s[l.eventId];d?.status!=="processing"||d.claimId!==e.claimId||(s[l.eventId]={...d,updatedAt:i,completedOwners:[...new Set([...d.completedOwners??[],r])].sort()},c+=1)}if(c!==o.size)throw new Error(`Agent Reflection claim was lost: ${e.claimId}`);await this.store.write({...a,reflections:s})})}async completeClaim(e,r=new Date().toISOString()){await this.finishClaim(e,"processed",void 0,r)}async failClaim(e,r,n=new Date().toISOString()){await this.finishClaim(e,"pending",r,n)}async markProcessed(e,r=new Date().toISOString()){await this.markProcessedMany([e],r)}async markProcessedMany(e,r=new Date().toISOString()){let n=new Set(e);n.size!==0&&await this.serialized(async()=>{let i=await this.store.read(),o=i.events.filter(s=>n.has(s.eventId));if(o.length===0)return;let a={...i.reflections};for(let s of o){let c=a[s.eventId];a[s.eventId]={status:"processed",attempts:c?.attempts??0,updatedAt:r,completedOwners:[...c?.completedOwners??[]]}}await this.store.write({...i,reflections:a})})}async markFailed(e,r,n=new Date().toISOString()){await this.updateReflection(e,i=>({status:"pending",attempts:(i?.attempts??0)+1,updatedAt:n,lastError:r.slice(0,2e3)}))}async episode(e){let r=await this.store.read(),n=Dg(r.events,e);return n.events.length===0?null:n}async list(e={}){return(await this.store.read()).events.filter(n=>(e.projectId===void 0||n.projectId===e.projectId)&&(e.type===void 0||n.type===e.type))}async serialized(e){let r=()=>this.store.withLock?this.store.withLock(e):e(),n=this.queue.then(r,r);return this.queue=n.then(()=>{},()=>{}),n}async updateReflection(e,r){await this.serialized(async()=>{let n=await this.store.read();n.events.some(i=>i.eventId===e)&&await this.store.write({...n,reflections:{...n.reflections,[e]:r(n.reflections[e])}})})}async finishClaim(e,r,n,i){let o=new Set(e.eventIds);await this.serialized(async()=>{let a=await this.store.read(),s={...a.reflections};for(let c of a.events){if(!o.has(c.eventId))continue;let l=s[c.eventId];l?.status!=="processing"||l.claimId!==e.claimId||(s[c.eventId]={status:r,attempts:l.attempts+ +(r==="pending"),updatedAt:i,completedOwners:[...l.completedOwners??[]],...n===void 0?{}:{lastError:n.slice(0,2e3)}})}await this.store.write({...a,reflections:s})})}};function Dg(t,e){let r=t.filter(i=>i.episodeId===e),n=new Map;for(let i of r)for(let o of i.evidence){let a=o.digest??o.id;n.has(a)||n.set(a,o)}return{id:e,events:r,evidence:[...n.values()]}}function du(t){return JSON.parse(JSON.stringify(t))}function hH(t){return!t||typeof t!="object"||Array.isArray(t)?!1:Object.values(t).every(e=>{if(!e||typeof e!="object"||Array.isArray(e))return!1;let r=e;return(r.status==="pending"||r.status==="processing"||r.status==="processed")&&Number.isSafeInteger(r.attempts)&&Number(r.attempts)>=0&&typeof r.updatedAt=="string"&&(r.lastError===void 0||typeof r.lastError=="string")&&(r.claimId===void 0||typeof r.claimId=="string")&&(r.leaseExpiresAt===void 0||typeof r.leaseExpiresAt=="string")&&(r.completedOwners===void 0||Array.isArray(r.completedOwners)&&r.completedOwners.every(n=>typeof n=="string"))})}function gH(t){return JSON.parse(JSON.stringify(t))}import{createHash as NP}from"node:crypto";var pu=class{journal;learners;schedule;maxEvents;maxEvidence;onDiagnostic;episodeQueues=new Map;scheduledEventIds=new Set;constructor(e){this.journal=e.journal,this.learners=e.learners,this.schedule=e.schedule??(r=>{r()}),this.maxEvents=fu(e.maxEventsPerReflection,8),this.maxEvidence=fu(e.maxEvidencePerReflection,16),this.onDiagnostic=e.onDiagnostic}async capture(e){let r=await this.journal.capture(e);if(!r.pending)return{...r,reflectedSynchronously:!1,deltas:[]};let n=e.type==="user.signal"&&e.signal?.explicit===!0&&e.signal.longTerm,i=[],o=async()=>{try{i=await this.processAndRecord(r.event)}finally{this.scheduledEventIds.delete(r.event.eventId)}};if(this.scheduledEventIds.has(r.event.eventId))return{...r,reflectedSynchronously:!1,deltas:[]};if(this.scheduledEventIds.add(r.event.eventId),n)await o();else try{await this.schedule(async()=>{try{await o()}catch(a){this.onDiagnostic?.(`Agent Reflection failed: ${Do(a)}`)}})}catch(a){this.scheduledEventIds.delete(r.event.eventId),this.onDiagnostic?.(`Agent Reflection scheduling failed: ${Do(a)}`)}return{...r,reflectedSynchronously:n,deltas:i}}async replayPending(e=50){let r=await this.journal.pending(e);for(let n of r)if(!this.scheduledEventIds.has(n.eventId)){this.scheduledEventIds.add(n.eventId);try{await this.schedule(async()=>{try{await this.processAndRecord(n)}catch(i){this.onDiagnostic?.(`Agent Reflection replay failed: ${Do(i)}`)}finally{this.scheduledEventIds.delete(n.eventId)}})}catch(i){this.scheduledEventIds.delete(n.eventId),this.onDiagnostic?.(`Agent Reflection replay scheduling failed: ${Do(i)}`)}}}async feedback(e){let r=NP("sha256").update(JSON.stringify({applicationId:e.applicationId,status:e.status,summary:e.summary??""})).digest("hex").slice(0,24);return this.capture({schema:Dr,eventId:`context-outcome:${r}`,episodeId:e.episodeId,occurredAt:e.occurredAt??new Date().toISOString(),type:"context.outcome",actor:"agent",scope:e.projectId===void 0?"user":"project",...e.projectId===void 0?{}:{projectId:e.projectId},source:{kind:"system",name:"context-director"},context:{},evidence:[],outcome:{status:e.status,applicationId:e.applicationId,unitIds:e.unitIds,...e.summary===void 0?{}:{summary:e.summary}}})}async processEpisode(e){let{episodeId:r,events:n}=e,i=new Map;for(let s of n){let c=typeof this.learners=="function"?await this.learners(s):this.learners;for(let l of c){if(!l.supports(s)||(e.completedOwners[s.eventId]??[]).includes(l.owner))continue;let d=i.get(l.owner)??{learner:l,events:[]};d.events.some(u=>u.eventId===s.eventId)||d.events.push(s),i.set(l.owner,d)}}let o=[],a=[];for(let{learner:s,events:c}of i.values())try{let l=vH(r,c,this.maxEvents,this.maxEvidence),d=[],u=!1;for(let m of l){await this.journal.renewClaim(e);let g=yH(await s.reflect(m));u||=g.deferred;for(let h of g.deltas){if(h.owner!==s.owner)throw new Error(`${s.owner} returned a Learning Delta owned by ${h.owner}`);d.push(h)}}let p=[...new Set(c.map(m=>m.eventId))].sort(),f=bH(s.owner,r,p,d);if(f.length>0&&(await this.journal.renewClaim(e),await s.consolidate({episodeId:r,eventIds:p,deltas:f}),a.push(...f.map(m=>m.delta))),u)throw new Error(`${s.owner} semantic Reflection deferred`);await this.journal.markLearnerCompleted(e,s.owner,c.map(m=>m.eventId))}catch(l){let d=`${s.owner} reflection failed: ${Do(l)}`;o.push(d),this.onDiagnostic?.(d)}if(o.length>0)throw new Error(o.join("; "));return a}async processAndRecord(e){let n=(this.episodeQueues.get(e.episodeId)??Promise.resolve()).catch(()=>{}).then(async()=>{let i=[];for(;;){let o=await this.journal.claimEpisode(e.episodeId);if(o===null)return i;try{i.push(...await this.processEpisode(o)),await this.journal.completeClaim(o)}catch(a){throw await this.journal.failClaim(o,Do(a)),a}}});this.episodeQueues.set(e.episodeId,n);try{return await n}finally{this.episodeQueues.get(e.episodeId)===n&&this.episodeQueues.delete(e.episodeId)}}};function yH(t){return Array.isArray(t)?{deltas:t,deferred:!1}:t}function vH(t,e,r=8,n=16){let i=[],o=fu(r,8),a=fu(n,16);for(let s=0;s<e.length;s+=o){let c=e.slice(s,s+o),l=c.reduce((d,u)=>d+u.evidence.length,0);if(l===0){i.push({episodeId:t,events:c,evidenceOffset:0,evidenceCount:0});continue}for(let d=0;d<l;d+=a)i.push({episodeId:t,events:c,evidenceOffset:d,evidenceCount:Math.min(a,l-d)})}return i}function hu(t){if(t.evidenceCount===0)return t.events.map(i=>({...i,evidence:[]}));let e=t.evidenceOffset+t.evidenceCount,r=0,n=[];for(let i of t.events){if(i.evidence.length===0){t.evidenceOffset===0&&n.push({...i,evidence:[]});continue}let o=r,a=r+i.evidence.length;r=a;let s=Math.max(t.evidenceOffset,o),c=Math.min(e,a);s>=c||n.push({...i,evidence:i.evidence.slice(s-o,c-o)})}return n}function fu(t,e){return Number.isSafeInteger(t)&&Number(t)>0?Number(t):e}function Do(t){return t instanceof Error?t.message:String(t)}function wH(t,e,r,n){return`learning-delta:${NP("sha256").update(JSON.stringify({owner:t,episodeId:e,eventIds:[...r].sort(),delta:kH(n)})).digest("hex")}`}function bH(t,e,r,n){let i=new Map;for(let o of n){let a=wH(t,e,r,o);i.has(a)||i.set(a,o)}return[...i].sort(([o],[a])=>o.localeCompare(a)).map(([o,a])=>({delta:a,idempotencyKey:o}))}function kH(t){let e=r=>r===void 0?void 0:[...r].sort();return{action:t.action,owner:t.owner,targetId:t.targetId,memoryType:t.memoryType,kind:t.kind,title:t.title,statement:t.statement,applicability:{projectId:t.applicability.projectId,paths:e(t.applicability.paths),operations:e(t.applicability.operations),phases:e(t.applicability.phases),tasks:e(t.applicability.tasks)},evidence:t.evidence.map(r=>mu(r)).sort((r,n)=>JSON.stringify(r).localeCompare(JSON.stringify(n))),authority:t.authority,verification:t.verification===void 0?void 0:[...t.verification].sort((r,n)=>`${r.command}\0${r.expected??""}`.localeCompare(`${n.command}\0${n.expected??""}`)),feedback:t.feedback,payload:mu(t.payload),recommendedState:t.recommendedState}}function mu(t){return Array.isArray(t)?t.map(mu):!t||typeof t!="object"?t:Object.fromEntries(Object.entries(t).sort(([e],[r])=>e.localeCompare(r)).map(([e,r])=>[e,mu(r)]))}import{createHash as SH,randomUUID as jP}from"node:crypto";function gu(t,e){if(t=t.replaceAll("\\","/").replace(/^\.\//u,"").toLocaleLowerCase(),e=e.replaceAll("\\","/").replace(/^\.\//u,"").toLocaleLowerCase(),!/[?*]/u.test(t))return t===e||e.startsWith(t.endsWith("/")?t:`${t}/`);let r="^";for(let n=0;n<t.length;n+=1){let i=t[n],o=t[n+1];i==="*"&&o==="*"?t[n+2]==="/"?(r+="(?:.*/)?",n+=2):(r+=".*",n+=1):i==="*"?r+="[^/]*":i==="?"?r+="[^/]":r+=i.replace(/[\\^$.*+?()[\]{}|]/gu,"\\$&")}return new RegExp(`${r}$`,"u").test(e)}var _s=class{records=[];async list(e){return this.records.filter(r=>e===void 0||r.candidateId===e).map(yu)}async append(e){this.records.some(r=>r.applicationId===e.applicationId)||this.records.push({...e})}async setOutcome(e,r,n,i){let o=this.records.findIndex(c=>c.applicationId===e);if(o<0)return null;let a=this.records[o];if(!MP(a,n))return null;if(OP(a,r,i))return{changed:!1,record:yu(a)};let s={...a,outcome:r,outcomeRevision:(a.outcomeRevision??0)+1,outcomeEvents:[...a.outcomeEvents??[],TP(a,r,i)]};return this.records=this.records.map((c,l)=>l===o?s:c),{changed:!0,...a.outcome===void 0?{}:{previousOutcome:a.outcome},record:yu(s)}}async markAppliedEventDispatched(e,r=new Date().toISOString()){this.records=this.records.map(n=>n.applicationId===e&&n.appliedEventDispatchedAt===void 0?{...n,appliedEventDispatchedAt:r}:n)}async markOutcomeEventDispatched(e,r,n=new Date().toISOString()){this.records=this.records.map(i=>i.applicationId===e?{...i,outcomeEvents:(i.outcomeEvents??[]).map(o=>o.revision===r&&o.dispatchedAt===void 0?{...o,dispatchedAt:n}:o)}:i)}},vu=class{constructor(e){this.storage=e}storage;queue=Promise.resolve();async list(e){return(await this.read()).filter(n=>e===void 0||n.candidateId===e)}async append(e){await this.serialized(async()=>{let r=await this.read();r.some(n=>n.applicationId===e.applicationId)||await this.storage.write({version:5,records:[...r,e]})})}async setOutcome(e,r,n,i){return this.serialized(async()=>{let o=await this.read(),a=o.findIndex(l=>l.applicationId===e);if(a<0)return null;let s=o[a];if(!MP(s,n))return null;if(OP(s,r,i))return{changed:!1,record:yu(s)};let c={...s,outcome:r,outcomeRevision:(s.outcomeRevision??0)+1,outcomeEvents:[...s.outcomeEvents??[],TP(s,r,i)]};return await this.storage.write({version:5,records:o.map((l,d)=>d===a?c:l)}),{changed:!0,...s.outcome===void 0?{}:{previousOutcome:s.outcome},record:{...c}}})}async markAppliedEventDispatched(e,r=new Date().toISOString()){await this.serialized(async()=>{let n=await this.read(),i=n.find(o=>o.applicationId===e);i===void 0||i.appliedEventDispatchedAt!==void 0||await this.storage.write({version:5,records:n.map(o=>o.applicationId===e?{...o,appliedEventDispatchedAt:r}:o)})})}async markOutcomeEventDispatched(e,r,n=new Date().toISOString()){await this.serialized(async()=>{let i=await this.read(),o=i.find(a=>a.applicationId===e);o===void 0||!(o.outcomeEvents??[]).some(a=>a.revision===r&&a.dispatchedAt===void 0)||await this.storage.write({version:5,records:i.map(a=>a.applicationId===e?{...a,outcomeEvents:(a.outcomeEvents??[]).map(s=>s.revision===r&&s.dispatchedAt===void 0?{...s,dispatchedAt:n}:s)}:a)})})}async read(){let e=await this.storage.read();if(e===null)return[];if(!e||typeof e!="object"||Array.isArray(e))throw new Error("Context application state must be an object");let r=e;if(r.version!==5||!Array.isArray(r.records))throw new Error("Context application state is incompatible");if(!r.records.every(_H))throw new Error("Context application state contains an invalid record");return r.records.map(n=>({...n}))}async serialized(e){let r=()=>this.storage.withLock?this.storage.withLock(e):e(),n=this.queue.then(r,r);return this.queue=n.then(()=>{},()=>{}),n}},js=class{applications;now;defaultCharBudget;delivered=new Map;constructor(e={}){this.applications=e.applications??new _s,this.now=e.now??(()=>new Date),this.defaultCharBudget=RP(e.defaultCharBudget,6e3)}async select(e,r){let n=e.map(Lo),i=`context:${jP()}`,o=r.sessionId??i,a=this.delivered.get(o)??new Map;this.delivered.set(o,a);let s=await this.applications.list(),c=new Map(n.map(y=>[Br(y.owner,y.id),y]));if(r.sessionId!==void 0)for(let y of s){let v=c.get(Br(y.owner,y.candidateId));y.sessionId===r.sessionId&&v!==void 0&&_P(y,v,r)&&a.set(Br(y.owner,y.candidateId),y.candidateDigest)}let l=new Map;for(let y of s){let v=Br(y.owner,y.candidateId);l.set(v,[...l.get(v)??[],y])}let d=[];for(let y of n){if(y.state==="superseded"||!PP(y,r))continue;let v=y.digest??CP(y);if(a.get(Br(y.owner,y.id))===v)continue;let b=(l.get(Br(y.owner,y.id))??[]).filter(S=>_P(S,y,r)),k=xP(y,r,b);d.push({candidate:y,whyApplied:k,authority:xH(y),score:this.score(y,r,b)})}d.sort((y,v)=>v.authority-y.authority||v.score-y.score||y.candidate.title.localeCompare(v.candidate.title)||y.candidate.id.localeCompare(v.candidate.id));let u=[],p=[],f=[],m=[],g=RP(r.charBudget,this.defaultCharBudget),h=['comet task "<project-root>" --task "<original task>"',...r.path===void 0?[]:['--path "<original path>"'],...r.phase===void 0?[]:['--phase "<original phase>"'],...r.operation===void 0?[]:['--operation "<original operation>"'],"--expand-context <id>"].join(" "),w=this.now().toISOString();for(let y of d){let{candidate:v,whyApplied:b}=y,k=v.memoryType==="core-profile"||(v.memoryType==="collaboration-policy"||v.memoryType==="project-policy")&&(v.state==="proven"||v.state==="enforced")&&Kg(v,r),S=v.digest??CP(v),E=(N,P=320)=>{let _=CH({candidate:v,candidateDigest:S,episodeId:i,request:r,whyApplied:b,delivery:N,appliedAt:w}),j=[...u],x=[...p],C=[...f];return N==="full"?v.memoryType==="core-profile"?j.push(v):x.push(v):C.push(PH(v,b,P)),EP(j,x,C,h,[...m,_],g>=1500).length>g?!1:(u.splice(0,u.length,...j),p.splice(0,p.length,...x),f.splice(0,f.length,...C),m.push(_),!0)};k&&E("full")||[320,160,80,32,0].some(N=>E("manifest",N))}for(let y of m)await this.applications.append(y),a.set(Br(y.owner,y.candidateId),y.candidateDigest);return{episodeId:i,coreMemory:u,activePolicies:p,manifest:f,applications:m,text:EP(u,p,f,h,m,g>=1500),expandHint:h}}expand(e,r,n){let i=wu(r),o=e.map(Lo).filter(s=>s.id===(i?.candidateId??r)&&(i===null||s.owner===i.owner)),a=o.length===1?o[0]:void 0;return a===void 0||a.state==="superseded"||!PP(a,n)?null:{id:Fo(a.owner,a.id),title:a.title,content:a.content??a.summary,whyApplied:xP(a,n),sources:a.sources,verification:a.verification}}async recordOutcome(e,r,n,i){if(i!==void 0&&!$P(i))throw new Error("Context outcome evidence requires a decision and a verification result");if(r==="used-successfully"&&i?.verification.success===!1)throw new Error("Successful use cannot reference failed verification");return this.applications.setOutcome(e,r,n,i)}async applicationHistory(e){return this.applications.list(e)}score(e,r,n){let i=e.priority??0;i+=e.state==="enforced"?500:e.state==="proven"?300:100,i+=e.authority==="explicit"||e.authority==="user"?160:0,i+=NH(e,r)*25;for(let o of n)i+=o.outcome==="used-successfully"?20:0,i-=o.outcome==="ignored"?2:0,i-=o.outcome==="corrected"||o.outcome==="contributed-to-failure"?80:0;return i}};function EP(t,e,r,n,i=[],o=!0){if(t.length===0&&e.length===0&&r.length===0)return"";let a=new Map(i.map(l=>[Br(l.owner,l.candidateId),l.applicationId])),s=l=>{let d=a.get(Br(l.owner,l.id));return d===void 0?"":` application_id="${Le(d)}"`},c=[];return t.length>0&&c.push(`<core_memory>
|
||
${t.map(l=>`<item id="${Le(Fo(l.owner,l.id))}"${s(l)}>${Le(l.content??l.summary)}</item>`).join(`
|
||
`)}
|
||
</core_memory>`),e.length>0&&c.push(`<active_policies>
|
||
${e.map(l=>RH(l,s(l))).join(`
|
||
`)}
|
||
</active_policies>`),r.length>0&&c.push(`<context_manifest>
|
||
${r.map(l=>`<item id="${Le(l.expansionId)}"${AH(l,i)} type="${Le(l.memoryType)}" state="${Le(l.state)}" source="${Le(l.sourceType)}"><title>${Le(l.title)}</title>${l.summary?`<summary>${Le(l.summary)}</summary>`:""}<why_applied>${Le(l.whyApplied)}</why_applied></item>`).join(`
|
||
`)}
|
||
</context_manifest>`),c.push(`<expand_hint>${IP(n)}</expand_hint>`),o&&i.some(l=>l.scope==="project"&&(l.memoryType==="project-model"||l.memoryType==="project-policy"))&&c.push("<knowledge_usage>Project knowledge is reference. Expand relevant candidates and check current sources before using them. Delivery is not adoption. Report used-successfully only for knowledge actually used and verified, with --application, --decision, --verification and --verification-result passed. Task completion alone is not evidence of benefit.</knowledge_usage>"),`<agent_context>
|
||
${c.join(`
|
||
`)}
|
||
</agent_context>`}function xP(t,e,r=[]){let n=e.language==="en",i=n?"; ":";",o=[...t.matchReasons??[]];return Kg(t,e)||o.push(n?"Candidate only: confirm applicability against current sources before use":"候选参考:使用前须结合当前源码确认适用范围"),(t.authority==="explicit"||t.authority==="user")&&o.push(n?"Explicitly set by the user":"用户明确设置"),t.selectors.projectId&&t.selectors.projectId===e.projectId&&o.push(n?"Current project matches":"当前项目匹配"),e.path&&Fg(t,e.path)&&o.push(n?"Current path matches":"当前路径匹配"),e.operation&&Bo(t.selectors.operations,e.operation)&&o.push(n?"Current operation matches":"当前操作匹配"),e.phase&&Bo(t.selectors.phases,e.phase)&&o.push(n?"Current phase matches":"当前阶段匹配"),Hg(t.selectors.tasks,e.task)&&o.push(n?"Current task matches":"当前任务匹配"),([...r].reverse().find(s=>s.outcome!==void 0)?.outcome??t.application?.lastOutcome)==="used-successfully"&&o.push(n?"Recently applied successfully":"最近应用成功"),o.length===0&&o.push(n?t.state==="trial"?"Relevant trial experience":"Relevant proven experience":t.state==="trial"?"相关试用经验":"相关已验证经验"),[...new Set(o)].join(i)}function Fo(t,e){return`${t}::${e}`}function wu(t){let e=t.indexOf("::");return e<=0||e>=t.length-2?null:{owner:t.slice(0,e),candidateId:t.slice(e+2)}}function bu(t,e){return(t??[]).flatMap(r=>{let n=wu(r);return n?.owner===e?[n.candidateId]:[]})}function PP(t,e){let r=t.scope==="project"&&(t.memoryType==="project-model"||t.memoryType==="project-policy");return Kg(t,e,r)}function Fg(t,e){return t.scope==="project"&&(t.memoryType==="project-model"||t.memoryType==="project-policy")?(t.selectors.paths??[]).some(r=>gu(r,e)):EH(t.selectors.paths,e)}function Kg(t,e,r=!1){let n=t.selectors;return!(n.projectId!==void 0&&n.projectId!==e.projectId||(n.paths?.length??0)>0&&(e.path===void 0?!r:!Fg(t,e.path))||(n.operations?.length??0)>0&&(e.operation===void 0?!r:!Bo(n.operations,e.operation))||(n.phases?.length??0)>0&&(e.phase===void 0?!r:!Bo(n.phases,e.phase))||(n.tasks?.length??0)>0&&!Hg(n.tasks,e.task))}function NH(t,e){let r=t.selectors;return[r.projectId!==void 0&&r.projectId===e.projectId,e.path!==void 0&&Fg(t,e.path),e.operation!==void 0&&Bo(r.operations,e.operation),e.phase!==void 0&&Bo(r.phases,e.phase),Hg(r.tasks,e.task)].filter(Boolean).length}function Hg(t,e){if(!t||t.length===0)return!1;let r=e.toLocaleLowerCase();return t.some(n=>r.includes(n.toLocaleLowerCase()))}function Bo(t,e){if(!t||t.length===0)return!1;let r=e.toLocaleLowerCase();return t.some(n=>n.toLocaleLowerCase()===r)}function EH(t,e){if(!t||t.length===0)return!1;let r=e.replaceAll("\\","/").toLocaleLowerCase();return t.some(n=>{let o=`^${n.replaceAll("\\","/").toLocaleLowerCase().split("*").map(a=>a.replace(/[.+?^${}()|[\]\\]/gu,"\\$&")).join(".*")}$`;return new RegExp(o,"u").test(r)})}function xH(t){return t.state==="trial"?0:t.memoryType==="project-policy"?4:t.memoryType==="project-model"?3:t.memoryType==="core-profile"||t.memoryType==="collaboration-policy"?2:1}function Br(t,e){return`${t}:${e}`}function PH(t,e,r){return{id:t.id,expansionId:Fo(t.owner,t.id),owner:t.owner,memoryType:t.memoryType,state:t.state,title:Bg(t.title,r===0?24:120),summary:Bg(t.summary,r),sourceType:t.sources[0]?.type??"inference",whyApplied:Bg(e,r===0?24:160)}}function CH(t){let{candidate:e,request:r}=t;return{applicationId:`application:${jP()}`,candidateId:e.id,candidateDigest:t.candidateDigest,owner:e.owner,scope:e.scope,...e.scope==="project"?{projectId:e.selectors.projectId??r.projectId}:{},memoryType:e.memoryType,candidateState:e.state,candidateTitle:e.title,candidateSummary:e.summary,episodeId:t.episodeId,...r.sessionId===void 0?{}:{sessionId:r.sessionId},task:r.task,...r.path===void 0?{}:{path:r.path},...r.operation===void 0?{}:{operation:r.operation},...r.phase===void 0?{}:{phase:r.phase},whyApplied:t.whyApplied,delivery:t.delivery,appliedAt:t.appliedAt,outcomeRevision:0}}function RH(t,e){let r=t.verification.map(n=>`<verification command="${Le(n.command)}"${n.expected===void 0?"":` expected="${Le(n.expected)}"`} />`).join("");return`<policy id="${Le(Fo(t.owner,t.id))}"${e}><content>${Le(t.content??t.summary)}</content>${r}</policy>`}function AH(t,e){let r=e.find(n=>n.owner===t.owner&&n.candidateId===t.id);return r===void 0?"":` application_id="${Le(r.applicationId)}"`}function Bg(t,e){return e<=0?"":t.length<=e?t:`${t.slice(0,Math.max(0,e-1))}…`}function CP(t){return SH("sha256").update(JSON.stringify({state:t.state,title:t.title,summary:t.summary,content:t.content,scope:t.scope,memoryType:t.memoryType,kind:t.kind,authority:t.authority,selectors:t.selectors,sources:t.sources,verification:t.verification,priority:t.priority,matchReasons:t.matchReasons,application:t.application})).digest("hex")}function Le(t){return IP(t).replaceAll('"',""").replaceAll("'","'")}function IP(t){return t.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">")}function RP(t,e){return Number.isSafeInteger(t)&&Number(t)>0?Number(t):e}function _H(t){if(!t||typeof t!="object"||Array.isArray(t))return!1;let e=t,r=e.scope==="project"?typeof e.projectId=="string"&&e.projectId.length>0:e.projectId===void 0;return typeof e.applicationId=="string"&&typeof e.candidateId=="string"&&typeof e.candidateDigest=="string"&&typeof e.owner=="string"&&(e.scope==="user"||e.scope==="project")&&r&&typeof e.memoryType=="string"&&(e.candidateState===void 0||typeof e.candidateState=="string")&&(e.candidateTitle===void 0||typeof e.candidateTitle=="string")&&(e.candidateSummary===void 0||typeof e.candidateSummary=="string")&&typeof e.episodeId=="string"&&typeof e.task=="string"&&typeof e.whyApplied=="string"&&(e.delivery==="full"||e.delivery==="manifest")&&typeof e.appliedAt=="string"&&!Number.isNaN(Date.parse(e.appliedAt))&&(e.appliedEventDispatchedAt===void 0||typeof e.appliedEventDispatchedAt=="string"&&!Number.isNaN(Date.parse(e.appliedEventDispatchedAt)))&&(e.sessionId===void 0||typeof e.sessionId=="string")&&(e.path===void 0||typeof e.path=="string")&&(e.operation===void 0||typeof e.operation=="string")&&(e.phase===void 0||typeof e.phase=="string")&&(e.outcome===void 0||["used-successfully","ignored","overridden","corrected","contributed-to-failure"].includes(String(e.outcome)))&&(e.outcomeRevision===void 0||Number.isSafeInteger(e.outcomeRevision)&&Number(e.outcomeRevision)>=0)&&(e.outcomeEvents===void 0||Array.isArray(e.outcomeEvents)&&e.outcomeEvents.every(jH))}function yu(t){return{...t,...t.outcomeEvents===void 0?{}:{outcomeEvents:t.outcomeEvents.map(e=>({...e,...e.evidence===void 0?{}:{evidence:{...e.evidence,verification:{...e.evidence.verification}}}}))}}}function TP(t,e,r){return{revision:(t.outcomeRevision??0)+1,status:e,...t.outcome===void 0?{}:{previousStatus:t.outcome},occurredAt:new Date().toISOString(),...r===void 0?{}:{evidence:{...r,verification:{...r.verification}}}}}function jH(t){if(!t||typeof t!="object"||Array.isArray(t))return!1;let e=t;return Number.isSafeInteger(e.revision)&&Number(e.revision)>=1&&AP(e.status)&&(e.evidence===void 0||$P(e.evidence))&&(e.previousStatus===void 0||AP(e.previousStatus))&&typeof e.occurredAt=="string"&&!Number.isNaN(Date.parse(e.occurredAt))&&(e.dispatchedAt===void 0||typeof e.dispatchedAt=="string"&&!Number.isNaN(Date.parse(e.dispatchedAt)))}function $P(t){if(!t||typeof t!="object"||Array.isArray(t))return!1;let e=t,r=e.verification;return typeof e.decision=="string"&&e.decision.trim().length>0&&e.decision.length<=4e3&&r!==null&&typeof r=="object"&&typeof r.command=="string"&&r.command.trim().length>0&&r.command.length<=2e3&&typeof r.success=="boolean"}function OP(t,e,r){if(t.outcome!==e)return!1;if(r===void 0)return!0;let n=t.outcomeEvents?.at(-1)?.evidence;return n?.decision===r.decision&&n.verification.command===r.verification.command&&n.verification.success===r.verification.success}function AP(t){return["used-successfully","ignored","overridden","corrected","contributed-to-failure"].includes(String(t))}function _P(t,e,r){return t.owner===e.owner&&t.candidateId===e.id&&t.scope===e.scope&&(e.scope==="user"||t.projectId===r.projectId)}function MP(t,e){return e===void 0||t.scope==="user"||t.projectId===e}function LP(t){return t.kind==="constraint"&&t.state==="enforced"&&t.verification.length>0?{kind:"verification",commands:[...t.verification]}:t.kind==="procedure"&&t.state==="proven"&&(t.steps?.length??0)>=3&&(t.applicationCount??0)>=2&&(t.successCount??0)>=2&&(t.failureCount??0)===0?{kind:"skill-candidate",reason:"stable-multi-step-procedure"}:{kind:"context"}}function ku(t){return typeof t=="string"?{scope:t}:t}function IH(t,e,r){return`${t}:${e}:${r??""}`}function Is(t){return t===void 0?t:JSON.parse(JSON.stringify(t))}var Wg=class{values=new Map;async open(e,r,n){let i=IH(e,r,n);return{read:async()=>this.values.has(i)?Is(this.values.get(i)):null,write:async o=>{this.values.set(i,Is(o))}}}};var Su=class{file;constructor(e){this.file=e}async read(){let e=await this.file.read();if(e===null||e.trim().length===0)return{plugins:[]};let r;try{r=JSON.parse(e)}catch(n){throw new Error(`Plugin state is invalid JSON: ${n.message}`,{cause:n})}return $H(r)}async write(e){await this.file.write(`${JSON.stringify(DP(e),null,2)}
|
||
`)}async update(e){await this.file.withLock(async()=>{let r=await this.read(),n=e(r);n!==r&&await this.write(n)})}},Nu=class{cometVersion;store;storage;config;descriptors;now;replayPendingLearningOnContext;learningByScope;learningCoordinators;active=new Map;diagnosticEntries=[];constructor(e){let r=new Map;for(let l of e.descriptors){if(r.has(l.id))throw new Error(`Duplicate plugin descriptor: ${l.id}`);r.set(l.id,l)}this.cometVersion=e.cometVersion,this.store=e.store,this.storage=e.storage??new Wg,this.config=Object.fromEntries(Object.entries(e.config??{}).map(([l,d])=>[l,Is(d)])),this.descriptors=r,this.now=e.now??(()=>new Date),this.replayPendingLearningOnContext=e.replayPendingLearningOnContext??!0;let n=e.journal??new ki(new uu),i=e.journals?.user??n,o=e.journals?.project??n,a=l=>new pu({journal:l,learners:d=>this.learningAdapters(d),schedule:e.scheduleLearning??(d=>{d()}),onDiagnostic:d=>{let u=d.split(" reflection",1)[0]||"comet.agent-learning";this.recordExecutionFailure(u,"event",new Error(d))}}),s=a(i),c=i===o?s:a(o);this.learningByScope={user:s,project:c},this.learningCoordinators=s===c?[s]:[s,c]}async reconcileFirstParty(){await this.store.update(e=>{let r=new Map(e.plugins.map(i=>[i.id,i])),n=!1;for(let i of this.descriptors.values()){if(i.kind!=="first-party")continue;let o=r.get(i.id);if(o===void 0){r.set(i.id,this.record(i.id,i.version,"enabled")),n=!0;continue}o.version!==i.version&&(r.set(i.id,{...o,version:i.version,updatedAt:this.timestamp()}),n=!0),o.status==="uninstalled"&&!o.explicitRemoval&&(r.set(i.id,{...o,status:"enabled",updatedAt:this.timestamp()}),n=!0)}return n?{plugins:[...r.values()]}:e})}async list(e){let r=await this.ensureState();return[...new Set([...this.descriptors.keys(),...r.plugins.map(i=>i.id)])].map(i=>this.view(i,r.plugins.find(o=>o.id===i),e)).filter(i=>i!==null).sort((i,o)=>i.id.localeCompare(o.id))}async get(e){let r=await this.ensureState();return this.view(e,r.plugins.find(n=>n.id===e))}async install(e,r="user"){let n=this.requireDescriptor(e);this.assertUserInitiatedThirdParty(n,r),this.assertCompatible(n),await this.setRecord(n,"enabled",!1)}async enable(e,r){let n=this.requireDescriptor(e);if(this.assertCompatible(n),r?.scope==="project"&&r.projectId!==void 0){await this.setProjectPause(n,r.projectId,!1);return}await this.setRecord(n,"enabled",!1,!0)}async disable(e,r){let n=this.requireDescriptor(e);if(r?.scope==="project"&&r.projectId!==void 0){await this.setProjectPause(n,r.projectId,!0),await this.disposeActive(e,r.projectId);return}await this.setRecord(n,"disabled",!1,!0),await this.disposeActive(e)}async uninstall(e){let r=this.requireDescriptor(e);await this.setRecord(r,"uninstalled",!0),await this.disposeActive(e)}async update(e,r="user"){let n=this.requireDescriptor(e);this.assertUserInitiatedThirdParty(n,r),this.assertCompatible(n),await this.store.update(i=>{let o=i.plugins.find(a=>a.id===e);if(o===void 0||o.status==="uninstalled")throw new ir(`Plugin is not installed: ${e}`,"missing");return{plugins:i.plugins.map(a=>a.id===e?{...a,version:n.version,updatedAt:this.timestamp()}:a)}}),await this.disposeActive(e)}getConfig(e){return this.requireDescriptor(e),Ts(this.config[e]??{})}async configure(e,r){this.requireDescriptor(e),this.config[e]=Is(r),await this.disposeActive(e)}async invoke(e,r,n,i="user",o={}){let a=this.requireDescriptor(e),s=ku(i);await this.loadScope(s);let c=this.active.get(this.activeKey(e,s));if(c===void 0||c.module.invoke===void 0)throw this.diagnosticEntries.push({pluginId:a.id,code:"missing",phase:"invoke",message:`Plugin capability is unavailable: ${e}/${r}`}),new ir(`Plugin capability is unavailable: ${e}/${r}`,"missing");try{return await c.module.invoke(r,Is(n))}catch(l){if(this.recordExecutionFailure(a.id,"invoke",l),o.throwOnError===!0)throw l;return null}}async dispatch(e){let r;try{r=Rs(e)}catch(n){let i=TH(e),o=n instanceof Error?n.message:String(n);throw this.diagnosticEntries.push({pluginId:"comet.agent-learning",code:"execution-failed",phase:"event",source:i,message:`Invalid Agent Experience Event from ${i}: ${o}`}),n}await this.replayPendingLearning(),await this.learningByScope[r.scope].capture(r)}async replayLearning(){await this.replayPendingLearning()}async learningAdapters(e){let r={scope:e.scope,projectId:e.projectId};return await this.loadScope(r),[...this.active.values()].filter(n=>n.scope===e.scope&&n.projectId===e.projectId&&(n.module.reflect!==void 0||n.module.onEvent!==void 0)&&(n.module.events===void 0||n.module.events.includes(e.type))).map(n=>({owner:n.descriptor.id,supports:()=>!0,reflect:async i=>{if(n.module.reflect!==void 0)return n.module.reflect(i);if(i.evidenceOffset===0)for(let o of i.events)await n.module.onEvent?.(OH(o));return[]},consolidate:async i=>{if(n.module.consolidate===void 0)throw new Error(`Plugin ${n.descriptor.id} cannot consolidate Learning Deltas`);await n.module.consolidate(i)}}))}async collectContext(e,r){this.replayPendingLearningOnContext&&await this.replayPendingLearning();let n=ku(r);await this.loadScope(n);let i=[];for(let o of this.active.values())if(!(o.scope!==n.scope||o.projectId!==n.projectId||o.module.provideContext===void 0))try{let a=await o.module.provideContext({...e});if(a===null)continue;for(let s of Array.isArray(a)?a:[a])i.push(Lo({...s,owner:o.descriptor.id}))}catch(a){this.recordExecutionFailure(o.descriptor.id,"context",a)}return i}async replayPendingLearning(){for(let e of this.learningCoordinators)await e.replayPending()}async resolveContext(e,r,n,i){let o=ku(n);await this.loadScope(o);let a=[];for(let s of this.active.values())if(!(s.scope!==o.scope||s.projectId!==o.projectId||i!==void 0&&s.descriptor.id!==i||s.module.resolveContext===void 0))try{let c=await s.module.resolveContext(e,{...r});if(c===null)continue;a.push(Lo({...c,owner:s.descriptor.id}))}catch(c){this.recordExecutionFailure(s.descriptor.id,"context",c)}return a}async dashboardPages(e){let r=ku(e);await this.loadScope(r);let n=[];for(let i of this.active.values())if(!(i.scope!==r.scope||i.projectId!==r.projectId))try{let o=i.module.dashboard;if(o===void 0)continue;n.push({pluginId:i.descriptor.id,...o})}catch(o){this.recordExecutionFailure(i.descriptor.id,"dashboard",o)}return n}diagnostics(){return this.diagnosticEntries.map(e=>({...e}))}async loadScope(e){let r=await this.ensureState();for(let n of r.plugins){if(n.status!=="enabled")continue;let i=this.descriptors.get(n.id);if(i===void 0){this.diagnosticEntries.push({pluginId:n.id,code:"missing",phase:"load",message:`Plugin ${n.id} is no longer available`});continue}if(!i.scopes.includes(e.scope)||e.projectId!==void 0&&n.disabledProjects.includes(e.projectId))continue;let o=this.activeKey(n.id,e);if(!this.active.has(o)){if(!this.isCompatible(i)){this.diagnosticEntries.push({pluginId:i.id,code:"incompatible",phase:"load",message:`Plugin ${i.id} is incompatible with Comet ${this.cometVersion}`});continue}try{let a=await i.create({pluginId:i.id,cometVersion:this.cometVersion,scope:e.scope,projectId:e.projectId,config:Ts(this.config[i.id]??{}),storage:await this.storage.open(i.id,e.scope,e.projectId),reportDiagnostic:s=>this.diagnosticEntries.push({pluginId:i.id,...s})});this.active.set(o,{descriptor:i,module:a,scope:e.scope,projectId:e.projectId})}catch(a){this.recordExecutionFailure(i.id,"load",a)}}}}async setRecord(e,r,n,i=!1){await this.store.update(o=>{let a=o.plugins.find(l=>l.id===e.id);if(i&&(a===void 0||a.status==="uninstalled"))throw new ir(`Plugin is not installed: ${e.id}`,"missing");let s=this.record(e.id,e.version,r,n,a?.disabledProjects);return{plugins:a!==void 0?o.plugins.map(l=>l.id===e.id?s:l):[...o.plugins,s]}})}async setProjectPause(e,r,n){await this.store.update(i=>{let o=i.plugins.find(l=>l.id===e.id);if(o===void 0||o.status==="uninstalled")throw new ir(`Plugin is not installed: ${e.id}`,"missing");let a=o,s=new Set(a.disabledProjects);n?s.add(r):s.delete(r);let c={...a,version:e.version,disabledProjects:[...s].sort(),updatedAt:this.timestamp()};return{plugins:o?i.plugins.map(l=>l.id===e.id?c:l):[...i.plugins,c]}})}record(e,r,n,i=!1,o=[]){return{id:e,version:r,status:n,explicitRemoval:i,disabledProjects:[...o],updatedAt:this.timestamp()}}view(e,r,n){let i=this.descriptors.get(e);return i===void 0&&r===void 0||n!==void 0&&i!==void 0&&!i.scopes.includes(n)?null:{...r??this.record(e,i?.version??"unknown","uninstalled",!1),kind:i?.kind??null,scopes:i?.scopes??[]}}requireDescriptor(e){let r=this.descriptors.get(e);if(r===void 0)throw new ir(`Unknown plugin: ${e}`,"missing");return r}async requireInstalled(e){let n=(await this.ensureState()).plugins.find(i=>i.id===e.id);if(n===void 0||n.status==="uninstalled")throw new ir(`Plugin is not installed: ${e.id}`,"missing");return n}assertCompatible(e){if(!this.isCompatible(e))throw this.diagnosticEntries.push({pluginId:e.id,code:"incompatible",phase:"load",message:`Plugin ${e.id} is incompatible with Comet ${this.cometVersion}`}),new ir(`Plugin is incompatible: ${e.id}`,"incompatible")}assertUserInitiatedThirdParty(e,r){if(e.kind==="third-party"&&r!=="user")throw new ir(`Installing or updating third-party plugin ${e.id} requires a user action`,"user-action-required")}isCompatible(e){try{return e.compatible(this.cometVersion)}catch{return!1}}activeKey(e,r){return`${e}:${r.scope}:${r.projectId??""}`}async disposeActive(e,r){let n=[...this.active.entries()].filter(([i,o])=>i.startsWith(`${e}:`)&&(r===void 0||o.projectId===r));for(let[i,o]of n){this.active.delete(i);try{await o.module.dispose?.()}catch(a){this.recordExecutionFailure(e,"load",a)}}}recordExecutionFailure(e,r,n){let i=n instanceof Error?n.message:String(n);this.diagnosticEntries.push({pluginId:e,code:"execution-failed",phase:r,message:i})}async ensureState(){return DP(await this.store.read())}timestamp(){return this.now().toISOString()}},ir=class extends Error{constructor(r,n){super(r);this.code=n;this.name="PluginRuntimeError"}code};function TH(t){if(t===null||typeof t!="object"||Array.isArray(t))return"unknown";let e=t.source;if(e===null||typeof e!="object"||Array.isArray(e))return"unknown";let r=e.name;return typeof r=="string"&&r.trim()?r.trim().slice(0,128):"unknown"}function DP(t){return{plugins:t.plugins.map(e=>({...e,disabledProjects:[...e.disabledProjects??[]]}))}}function $H(t){if(t===null||typeof t!="object"||Array.isArray(t))throw new Error("Plugin state must be an object");let e=t.plugins;if(!Array.isArray(e))throw new Error("Plugin state plugins must be an array");return{plugins:e.map((r,n)=>{if(r===null||typeof r!="object"||Array.isArray(r))throw new Error(`Plugin state entry ${n} must be an object`);let i=r;if(typeof i.id!="string"||typeof i.version!="string"||i.status!=="enabled"&&i.status!=="disabled"&&i.status!=="uninstalled"||typeof i.explicitRemoval!="boolean"||typeof i.updatedAt!="string")throw new Error(`Plugin state entry ${n} is invalid`);return{id:i.id,version:i.version,status:i.status,explicitRemoval:i.explicitRemoval,disabledProjects:Array.isArray(i.disabledProjects)?i.disabledProjects.filter(o=>typeof o=="string"):[],updatedAt:i.updatedAt}})}}function OH(t){return Ts(t)}function Ts(t){if(Array.isArray(t))return Object.freeze(t.map(e=>Ts(e)));if(t!==null&&typeof t=="object"){let e={};for(let[r,n]of Object.entries(t))e[r]=Ts(n);return Object.freeze(e)}return t}import e2 from"node:os";import pr from"node:path";import{createHash as lA}from"node:crypto";import{createHash as pC,randomUUID as rW}from"node:crypto";function Si(t){return t==="user-fact"||t==="user-preference"||t==="collaboration-habit"||t==="project-convention"}import{createHash as MH,randomUUID as LH}from"node:crypto";import{execFile as DH}from"node:child_process";import{constants as Vg,promises as yt}from"node:fs";import{promisify as BH}from"node:util";import De from"node:path";var FH=BH(DH),KH=3e4,HH=20;function zg(t,e){if(t==="global")return"profile.md";if(e===void 0||!/^[A-Za-z0-9][A-Za-z0-9._-]*$/u.test(e))throw new Error("Project memory requires a safe project key");return`projects/${e}.md`}function WH(t){let e=t.trim().replace(/[^A-Za-z0-9._-]+/gu,"-");if(!/^[A-Za-z0-9][A-Za-z0-9._-]*$/u.test(e))throw new Error("Project memory name is invalid");return`projects/${e}.md`}function or(t){return MH("sha256").update(t,"utf8").digest("hex")}function BP(){return{version:3,records:[],history:{},evidence:{},observations:[],conflicts:[],tombstones:[],settings:{learningEnabled:!0,retrievalEnabled:!0,pausedProjects:[],pausedLearningProjects:[],pausedRetrievalProjects:[]},files:{},projectFiles:{},appliedMutationIds:[],applicationOutcomes:{},feedbackState:{},pendingFileProjections:{},learning:{lastCheck:"not-run",observedCount:0,validObservationCount:0},learningByProject:{}}}var Eu=class{root;git;lockTimeoutMs;lockRetryMs;projectKey;projectName;constructor(e,r={}){this.root=De.resolve(e),this.git=r.git,this.lockTimeoutMs=r.lockTimeoutMs??KH,this.lockRetryMs=r.lockRetryMs??HH,this.projectKey=r.projectKey,this.projectName=r.projectName}projectFileBinding(){if(!(this.projectKey===void 0||this.projectName===void 0))return{projectKey:this.projectKey,projectName:this.projectName,path:WH(this.projectName)}}async readText(e){let r=this.resolve(e);try{return await yt.readFile(r,"utf8")}catch(n){if(n.code==="ENOENT")return null;throw n}}async writeText(e,r){let n=this.resolve(e),i=De.dirname(n);await yt.mkdir(i,{recursive:!0});let o=De.join(i,`.${De.basename(n)}.${LH()}.tmp`),a=await yt.open(o,Vg.O_CREAT|Vg.O_EXCL|Vg.O_WRONLY);try{await a.writeFile(r,"utf8"),await a.sync()}finally{await a.close()}await yt.rename(o,n)}async readState(){let e=await this.readText(".comet/runtime/memory-state.json");if(e===null||e.trim().length===0)return BP();let r;try{r=JSON.parse(e)}catch(n){throw new Error(`Memory runtime state is invalid JSON: ${n.message}`,{cause:n})}return qH(r)}async writeState(e){await this.writeText(".comet/runtime/memory-state.json",`${JSON.stringify(e,null,2)}
|
||
`)}async withLock(e){let r=De.join(this.root,".comet","runtime");await yt.mkdir(r,{recursive:!0});let n=De.join(r,".memory.lock");return Ha(n,e,{timeoutMs:this.lockTimeoutMs,retryMs:this.lockRetryMs})}async sync(){return this.git===void 0?{status:"local-only",retryable:!1,message:"No memory Git remote is configured"}:this.withLock(()=>this.git.sync())}async remote(){return this.git?.remote?this.git.remote():null}async configureRemote(e){if(!this.git?.configureRemote)throw new Error("Memory Git sync is unavailable");await this.withLock(()=>this.git.configureRemote(e))}resolve(e){let r=e.replaceAll("\\","/");if(r.length===0||De.posix.isAbsolute(r)||r.split("/").some(o=>o===".."||o.length===0))throw new Error(`Memory path must stay inside the repository: ${e}`);let n=De.resolve(this.root,...r.split("/")),i=De.relative(this.root,n);if(i===".."||i.startsWith(`..${De.sep}`)||De.isAbsolute(i))throw new Error(`Memory path must stay inside the repository: ${e}`);return n}},xu=class{root;remoteName;commitMessage;runCommand;constructor(e,r={}){this.root=De.resolve(e),this.remoteName=r.remoteName??"origin",this.commitMessage=r.commitMessage??"chore(memory): sync personal memory",this.runCommand=r.run??(async n=>{let i=await FH("git",[...n],{cwd:this.root,env:Wm(),windowsHide:!0,maxBuffer:1048576});return{stdout:i.stdout,stderr:i.stderr}})}async sync(){await yt.mkdir(this.root,{recursive:!0});try{await this.ensureDedicatedRepository()}catch(e){return qg(e,!1)}try{await this.runCommand(["remote","get-url",this.remoteName])}catch{return{status:"local-only",retryable:!1,message:"No memory Git remote is configured"}}try{if(await this.hasConflicts())return qg(new Error("Resolve the memory repository merge conflicts before retrying sync."),!0);let e=(await this.runCommand(["symbolic-ref","--short","HEAD"])).stdout.trim(),r=(await this.runCommand(["ls-remote","--symref",this.remoteName,"HEAD","refs/heads/*"])).stdout,n=[...r.matchAll(/^[0-9a-f]+\s+refs\/heads\/(.+)$/gmu)].map(d=>d[1]),i=/^ref: refs\/heads\/(.+)\s+HEAD$/mu.exec(r)?.[1],o;try{let d=(await this.runCommand(["rev-parse","--abbrev-ref","--symbolic-full-name","@{upstream}"])).stdout.trim();d.startsWith(`${this.remoteName}/`)&&(o=d.slice(this.remoteName.length+1))}catch{}let a=o??(i&&n.includes(i)?i:n.includes(e)?e:n.length===1?n[0]:n.length===0?e:void 0);if(!a)throw new Error("Memory remote has multiple branches and no default branch. Configure an upstream before syncing.");let s=`refs/remotes/${this.remoteName}/${a}`;n.includes(a)&&await this.runCommand(["fetch",this.remoteName,`refs/heads/${a}:${s}`]);let c=[];for(let d of["profile.md",".comet/runtime/memory-state.json"])try{await yt.access(De.join(this.root,d)),c.push(d)}catch{}try{await yt.access(De.join(this.root,"projects")),c.push("projects")}catch{}if(c.length===0&&n.length===0)return{status:"local-only",retryable:!1,message:"No memory files exist yet"};let l=!1;if(c.length>0&&(await this.runCommand(["add","--",...c]),l=(await this.runCommand(["status","--porcelain","--",...c])).stdout.trim().length>0,l&&await this.runCommand(["commit","--only","-m",this.commitMessage,"--",...c])),n.includes(a)){let d=!1;try{await this.runCommand(["rev-parse","--verify","HEAD"]),d=!0}catch{}if(!d)await this.runCommand(["merge","--ff-only",s]);else{let u=!1;try{await this.runCommand(["merge-base","HEAD",s]),u=!0}catch{}await this.runCommand(u?["rebase",s]:["merge","--allow-unrelated-histories","--no-edit",s])}}return await this.runCommand(["push","--set-upstream",this.remoteName,`HEAD:refs/heads/${a}`]),{status:"synced",retryable:!1,...l?{}:{message:"Memory repository is up to date"}}}catch(e){return qg(e,await this.hasConflicts())}}async hasConflicts(){try{return(await this.runCommand(["diff","--name-only","--diff-filter=U"])).stdout.trim().length>0}catch{return!1}}async remote(){if(await yt.mkdir(this.root,{recursive:!0}),!await this.isDedicatedRepository())return null;try{return(await this.runCommand(["remote","get-url",this.remoteName])).stdout.trim()||null}catch{return null}}async configureRemote(e){let r=e.trim();if(!r)throw new Error("Memory Git remote must not be empty");await yt.mkdir(this.root,{recursive:!0}),await this.ensureDedicatedRepository();try{await this.runCommand(["remote","get-url",this.remoteName]),await this.runCommand(["remote","set-url",this.remoteName,r])}catch{await this.runCommand(["remote","add",this.remoteName,r])}}async isDedicatedRepository(){try{let e=await this.runCommand(["rev-parse","--show-toplevel"]),[r,n]=await Promise.all([yt.realpath(e.stdout.trim()),yt.realpath(this.root)]);return De.relative(r,n)===""}catch{return!1}}async ensureDedicatedRepository(){if(!await this.isDedicatedRepository()&&(await this.runCommand(["init"]),!await this.isDedicatedRepository()))throw new Error("Personal memory must use its own Git repository root")}};function qg(t,e){return{status:e?"conflict":"failed",retryable:!0,message:VH(t)}}function VH(t){return t instanceof Error?t.message:String(t)}function qH(t){if(t===null||typeof t!="object"||Array.isArray(t))throw new Error("Memory runtime state must be an object");let e=t;if(e.version!==3)return BP();if(!Array.isArray(e.records))throw new Error("Memory runtime state version or records are invalid");return{version:3,records:e.records,history:e.history??{},evidence:e.evidence??{},observations:e.observations??[],conflicts:e.conflicts??[],tombstones:e.tombstones??[],settings:{learningEnabled:e.settings?.learningEnabled??!0,retrievalEnabled:e.settings?.retrievalEnabled??!0,pausedProjects:[...e.settings?.pausedProjects??[]],pausedLearningProjects:[...e.settings?.pausedLearningProjects??e.settings?.pausedProjects??[]],pausedRetrievalProjects:[...e.settings?.pausedRetrievalProjects??e.settings?.pausedProjects??[]]},files:e.files??{},projectFiles:e.projectFiles??{},appliedMutationIds:[...e.appliedMutationIds??[]],applicationOutcomes:{...e.applicationOutcomes??{}},feedbackState:{...e.feedbackState??{}},pendingFileProjections:{...e.pendingFileProjections??{}},learningByProject:{...e.learningByProject??{}},learning:{...e.learning??{},lastCheck:e.learning?.lastCheck??"not-run",observedCount:e.learning?.observedCount??0,validObservationCount:e.learning?.validObservationCount??0}}}var FP="comet.memory.review.v1",KP="comet.memory.actions.v1",UP={maxEvidenceAgeMs:4320*60*60*1e3},zH=[{pattern:/-----BEGIN [A-Z0-9 ]*PRIVATE KEY-----/iu,category:"private key material"},{pattern:/\b(?:api[_ -]?key|access[_ -]?token|password|passwd|secret|authorization)\s*[:=]\s*\S+/iu,category:"credential assignment"},{pattern:/\b(?:sk|rk)-[a-z0-9]{16,}\b/iu,category:"API key"},{pattern:/\b(?:ghp|gho|github_pat|xox[baprs]|AIza)[-_][a-z0-9_-]{8,}\b/iu,category:"access token"},{pattern:/\bBearer\s+[A-Za-z0-9._~+/=-]{12,}\b/iu,category:"Bearer token"},{pattern:/\beyJ[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\b/u,category:"JSON Web Token"},{pattern:/\b\d{3}-\d{2}-\d{4}\b/u,category:"US social security number"},{pattern:/\b(?<!\d{4}-)(?<!\d{4}-\d{2}-)\+?(?!\d{4}-\d{2}-\d{2}\b)\d[\d ()-]{7,}\d\b/u,category:"phone number"},{pattern:/\b[\w.+-]+@[\w.-]+\.[A-Za-z]{2,}\b/u,category:"email address"},{pattern:/\b(?:diff --git|git\s+(?:diff|log)|@@\s+-\d|\+\+\+\s+[ab]\/|---\s+[ab]\/)/imu,category:"diff or git output"},{pattern:/\b(?:stack trace|traceback|stderr|stdout|debug log|npm warn|npm ERR!|error log)\b/iu,category:"log output"},{pattern:/(?:ignore|disregard|override|forget|do not follow)\s+(?:all\s+)?(?:my\s+|the\s+)?(?:prior|previous|earlier|above|following|these)?\s*(?:instructions?|rules?|policies?|system|prompt)/iu,category:"prompt injection"},{pattern:/(?:modify|change|edit|rewrite|disable|reveal)\s+(?:the\s+)?(?:skill|agent instructions?|project rules?|project policy files?|system prompt|guard|policy)/iu,category:"prompt injection"},{pattern:/(?:忽略|无视|跳过|不遵循|不要遵循).*(?:之前|先前|上面|以上|前面)?.*(?:指令|规则|提示|政策|系统)/u,category:"prompt injection"},{pattern:/(?:修改|更改|编辑|重写|禁用|绕过|泄露|显示).*(?:技能|skill|agent|代理|项目规范文件|项目规则|系统提示|守卫|策略|规则)/iu,category:"prompt injection"},{pattern:/<\/?(?:script|iframe|object|embed|style|svg)\b|(?:onerror|onload|onclick)\s*=|data:text\/html/iu,category:"HTML injection"},{pattern:/javascript:/iu,category:"JavaScript URL"}];function Au(t,e={}){let r=Ni(t,"review packet");if(r.schema!==FP)throw new Error(`Unsupported memory review packet schema: ${String(r.schema)}`);let n=YP(r.language,"review packet language"),i=fe(r.projectIdentity,"projectIdentity"),o=$s(r.projectKey);if(o!==void 0&&i===void 0)throw new Error("Review packet project key requires a stable project identity");let a=Be(r.workflow,"workflow"),s=Be(r.changeId,"changeId"),c=GP(r.createdAt,"createdAt"),l=Be(r.checkpoint,"checkpoint"),d=fe(r.category,"category");d!==void 0&&r.explicitRequest===void 0&&vt(d,n,"category");let u=JH(r.budget,e),p=Os(r.userEvidence,"userEvidence",8,!0),f=GH(r.explicitRequest,n),g=Ru(r.evidence,"evidence").map((b,k)=>{let S=Ni(b,`evidence[${k}]`),E=Be(S.key,`evidence[${k}].key`),N=Pu(S.scope,`evidence[${k}].scope`),P=$s(S.projectKey),_=fe(S.projectIdentity,`evidence[${k}].projectIdentity`);if(P!==void 0&&_===void 0)throw new Error(`evidence[${k}] project key requires a stable project identity`);if(N==="project"&&P===void 0)throw new Error(`evidence[${k}] project evidence requires a project key`);if(N==="global"&&_===void 0)throw new Error(`evidence[${k}] global evidence requires a project identity`);let j=JP(S.candidateKey,`evidence[${k}].candidateKey`),x=Be(S.changeId,`evidence[${k}].changeId`);if(typeof S.success!="boolean")throw new Error(`evidence[${k}].success is invalid`);let C=GP(S.observedAt,`evidence[${k}].observedAt`),L=Date.parse(c)-Date.parse(C);if(L<0||L>UP.maxEvidenceAgeMs)throw new Error(`evidence[${k}] is outside the freshness window`);let I=fe(S.text,`evidence[${k}].text`);I!==void 0&&wt(I,`evidence[${k}].text`);let B=fe(S.category,`evidence[${k}].category`),re=Cu(S.memoryClass,`evidence[${k}].memoryClass`);B!==void 0&&r.explicitRequest===void 0&&vt(B,n,`evidence[${k}].category`);let J=YH(S,n,k);return{key:E,scope:N,..._===void 0?{}:{projectIdentity:_},...P===void 0?{}:{projectKey:P},...j===void 0?{}:{candidateKey:j},changeId:x,success:S.success,observedAt:C,...I===void 0?{}:{text:I},...B===void 0?{}:{category:B},...re===void 0?{}:{memoryClass:re},...J}});if(new Set(g.map(b=>b.key)).size!==g.length)throw new Error("Review packet evidence keys must be unique");let y=Ru(r.memories,"memories").map((b,k)=>{let S=Ni(b,`memories[${k}]`),E=Be(S.id,`memories[${k}].id`),N=Pu(S.scope,`memories[${k}].scope`),P=fe(S.projectIdentity,`memories[${k}].projectIdentity`),_=$s(S.projectKey);if(N==="project"&&_===void 0)throw new Error(`memories[${k}] project memory requires a project key`);if(N==="global"&&_!==void 0)throw new Error(`memories[${k}] global memory must not have a project key`);let j=Be(S.category,`memories[${k}].category`),x=Be(S.text,`memories[${k}].text`),C=fe(S.title,`memories[${k}].title`),L=fe(S.reason,`memories[${k}].reason`),I=Cu(S.memoryClass,`memories[${k}].memoryClass`);wt(j,`memories[${k}].category`),wt(x,`memories[${k}].text`),C!==void 0&&wt(C,`memories[${k}].title`),L!==void 0&&wt(L,`memories[${k}].reason`);let B=S.kind==="explicit"||S.kind==="inferred"?S.kind:Jg("kind"),re=S.memoryType==="core-profile"||S.memoryType==="collaboration-policy"||S.memoryType==="personal-episode"?S.memoryType:Jg("memoryType"),J=S.state==="trial"||S.state==="proven"||S.state==="superseded"?S.state:Jg("state");return{id:E,scope:N,...P===void 0?{}:{projectIdentity:P},..._===void 0?{}:{projectKey:_},category:j,text:x,...C===void 0?{}:{title:C},...L===void 0?{}:{reason:L},...I===void 0?{}:{memoryClass:I},kind:B,memoryType:re,state:J}});if(new Set(y.map(b=>b.id)).size!==y.length)throw new Error("Review packet memory IDs must be unique");return{schema:FP,language:n,...i===void 0?{}:{projectIdentity:i},...o===void 0?{}:{projectKey:o},workflow:a,changeId:s,createdAt:c,checkpoint:l,...d===void 0?{}:{category:d},userEvidence:p,...f===void 0?{}:{explicitRequest:f},evidence:g,memories:y,budget:u}}function GH(t,e){if(t===void 0)return;let r=Ni(t,"explicitRequest"),n=r.action;if(n!=="remember"&&n!=="correct"&&n!=="forget")throw new Error("explicitRequest.action is invalid");let i=fe(r.targetId,"explicitRequest.targetId"),o=r.permanent===void 0?void 0:typeof r.permanent=="boolean"?r.permanent:(()=>{throw new Error("explicitRequest.permanent is invalid")})(),a=r.scope===void 0?void 0:Pu(r.scope,"explicitRequest.scope"),s=$s(r.projectKey);if(a==="project"&&s===void 0)throw new Error("explicitRequest project action requires a project key");if(a==="global"&&s!==void 0)throw new Error("explicitRequest global action must not have a project key");let c=fe(r.category,"explicitRequest.category"),l=Cu(r.memoryClass,"explicitRequest.memoryClass"),d=fe(r.title,"explicitRequest.title"),u=fe(r.reason,"explicitRequest.reason"),p=fe(r.text,"explicitRequest.text");p!==void 0&&wt(p,"explicitRequest.text");let f=UH(r,e,!0);if(n==="remember"&&p===void 0)throw new Error("explicitRequest remember requires text");if(n!=="forget"&&o!==void 0)throw new Error(`explicitRequest ${n} must not set permanent`);if(n!=="remember"&&i===void 0)throw new Error(`explicitRequest ${n} requires targetId`);if(n==="correct"&&p===void 0&&c===void 0&&d===void 0&&u===void 0&&Object.keys(f).length===0)throw new Error("explicitRequest correct must change a memory field");if(n==="forget"&&(p!==void 0||c!==void 0||d!==void 0||u!==void 0||Object.keys(f).length>0))throw new Error("explicitRequest forget must not change memory fields");return{action:n,...i===void 0?{}:{targetId:i},...o===void 0?{}:{permanent:o},...a===void 0?{}:{scope:a},...s===void 0?{}:{projectKey:s},...c===void 0?{}:{category:c},...l===void 0?{}:{memoryClass:l},...d===void 0?{}:{title:d},...u===void 0?{}:{reason:u},...p===void 0?{}:{text:p},...f}}function UH(t,e,r=!1){let n={};for(let i of["tags","pathPatterns","taskTypes","operations","phases"]){if(t[i]===void 0)continue;let o=Os(t[i],`explicitRequest.${i}`,16,!1);o.forEach((a,s)=>{i==="tags"&&!r?vt(a,e,`explicitRequest.${i}[${s}]`):wt(a,`explicitRequest.${i}[${s}]`)}),n[i]=o}return n}function Ko(t,e,r={}){let n=Ni(e,"review actions");if(n.schema!==KP)throw new Error(`Unsupported memory review action schema: ${String(n.schema)}`);let i=Ru(n.actions,"review actions.actions"),o=new Set(t.evidence.map(l=>l.key)),a=new Set(t.memories.map(l=>l.id)),s=new Set,c=i.map((l,d)=>{let u=Ni(l,`actions[${d}]`),p=u.action;if(!tW(p))throw new Error(`Unknown memory review action: ${String(p)}`);let f=YP(u.language,`actions[${d}].language`);if(f!==t.language)throw new Error(`actions[${d}] language does not match packet`);let m=u.scope===void 0?void 0:Pu(u.scope,`actions[${d}].scope`),g=$s(u.projectKey);if(m==="project"&&g===void 0)throw new Error(`actions[${d}] project action requires a project key`);if(m==="global"&&g!==void 0)throw new Error(`actions[${d}] global action must not have a project key`);QH(t,m,g,d);let h=JP(u.candidateKey,`actions[${d}].candidateKey`),w=u.evidenceKeys===void 0?[]:Os(u.evidenceKeys,`actions[${d}].evidenceKeys`,t.evidence.length,!1);for(let P of w)if(!o.has(P))throw new Error(`actions[${d}] references unknown evidence`);let y=fe(u.reason,`actions[${d}].reason`);y!==void 0&&vt(y,f,`actions[${d}].reason`);let v=fe(u.title,`actions[${d}].title`);v!==void 0&&vt(v,f,`actions[${d}].title`);let b=Cu(u.memoryClass,`actions[${d}].memoryClass`);if(p==="skip"){if(y===void 0)throw new Error(`actions[${d}] skip requires a reason`);return m!==void 0&&s.add(m),{action:"skip",language:f,reason:y,evidenceKeys:w}}if(p==="forget"){let P=Be(u.targetId,`actions[${d}].targetId`),_=WP(t,a,P,d);return VP(_,m,g,d),zP(t,_,d),qP(_,d),s.add(m??_.scope),Gg(t,w,m??_.scope,g??_.projectKey,h,d,!1),{action:"forget",language:f,targetId:P,...typeof u.permanent=="boolean"?{permanent:u.permanent}:{},evidenceKeys:w,...y===void 0?{}:{reason:y},...v===void 0?{}:{title:v}}}if(p==="create"){if(m===void 0)throw new Error(`actions[${d}] create requires a scope`);s.add(m);let P=Be(u.category,`actions[${d}].category`),_=Be(u.text,`actions[${d}].text`);return t.explicitRequest===void 0&&(vt(P,f,`actions[${d}].category`),vt(_,f,`actions[${d}].text`)),Gg(t,w,m,g,h,d,!0),{action:"create",language:f,scope:m,...g===void 0?{}:{projectKey:g},...h===void 0?{}:{candidateKey:h},category:P,text:_,evidenceKeys:w,...y===void 0?{}:{reason:y},...v===void 0?{}:{title:v},...b===void 0?{}:{memoryClass:b},...HP(u,f,d,t.explicitRequest!==void 0)}}let k=Be(u.targetId,`actions[${d}].targetId`),S=WP(t,a,k,d);VP(S,m,g,d),zP(t,S,d),qP(S,d),s.add(m??S.scope);let E=fe(u.text,`actions[${d}].text`),N=fe(u.category,`actions[${d}].category`);if(E===void 0&&N===void 0&&!XH(u))throw new Error(`actions[${d}] update must change a memory field`);return t.explicitRequest===void 0&&E!==void 0&&vt(E,f,`actions[${d}].text`),t.explicitRequest===void 0&&N!==void 0&&vt(N,f,`actions[${d}].category`),Gg(t,w,m??S.scope,g??S.projectKey,h,d,!0),{action:"update",language:f,targetId:k,...m===void 0?{}:{scope:m},...g===void 0?{}:{projectKey:g},...h===void 0?{}:{candidateKey:h},...E===void 0?{}:{text:E},...N===void 0?{}:{category:N},evidenceKeys:w,...y===void 0?{}:{reason:y},...v===void 0?{}:{title:v},...b===void 0?{}:{memoryClass:b},...HP(u,f,d,t.explicitRequest!==void 0)}});if(s.size>1)throw new Error("Memory review action set must not mix global and project scopes");return{schema:KP,actions:c}}function ar(t){wt(t,"memory text")}function Ei(t,e,r="memory text"){vt(t,e,r)}function JH(t,e){let r=Ni(t,"budget"),n=Ug(r.maxActions,"budget.maxActions"),i=Ug(r.maxEvidence,"budget.maxEvidence"),o=Ug(r.maxBytes,"budget.maxBytes");return{maxActions:n,maxEvidence:i,maxBytes:o}}function HP(t,e,r,n=!1){let i={};for(let o of["tags","pathPatterns","taskTypes","operations","phases"]){if(t[o]===void 0)continue;let a=Os(t[o],o,16,!1);a.forEach((s,c)=>{o==="tags"&&!n?vt(s,e,`actions[${r}].tags[${c}]`):wt(s,o)}),i[o]=a}return i}function YH(t,e,r){let n={};for(let i of["tags","pathPatterns","taskTypes","operations","phases"]){if(t[i]===void 0)continue;let o=Os(t[i],`evidence[${r}].${i}`,16,!1);o.forEach((a,s)=>{i==="tags"?vt(a,e,`evidence[${r}].${i}[${s}]`):wt(a,`evidence[${r}].${i}[${s}]`)}),n[i]=o}return n}function XH(t){return["tags","pathPatterns","taskTypes","operations","phases"].some(e=>t[e]!==void 0)}function WP(t,e,r,n){if(!e.has(r))throw new Error(`actions[${n}] references an unknown target`);let i=t.memories.find(o=>o.id===r);if(i===void 0)throw new Error(`actions[${n}] references an unknown target`);return i}function VP(t,e,r,n){if(e!==void 0&&e!==t.scope)throw new Error(`actions[${n}] scope does not match target`);if(r!==void 0&&r!==t.projectKey)throw new Error(`actions[${n}] project key does not match target`);if(t.scope==="global"&&r!==void 0)throw new Error(`actions[${n}] global target must not have a project key`)}function qP(t,e){if(t.state==="superseded")throw new Error(`actions[${e}] target is superseded`)}function zP(t,e,r){if(e.scope==="project"&&t.projectKey!==void 0&&e.projectKey!==t.projectKey)throw new Error(`actions[${r}] target project does not match packet context`);if(e.scope==="project"&&t.projectKey===void 0&&t.projectIdentity!==void 0&&e.projectIdentity!==t.projectIdentity)throw new Error(`actions[${r}] target identity does not match packet context`)}function QH(t,e,r,n){if((e==="project"||r!==void 0)&&t.projectKey!==void 0&&r!==t.projectKey)throw new Error(`actions[${n}] project does not match packet context`)}function Gg(t,e,r,n,i,o,a){for(let s of e){let c=t.evidence.find(d=>d.key===s);if(c===void 0)throw new Error(`actions[${o}] references unknown evidence`);if(c.scope!==r)throw new Error(`actions[${o}] evidence scope does not match`);if(r==="project"&&c.projectKey!==n)throw new Error(`actions[${o}] evidence project does not match`);if(r==="project"&&t.projectIdentity!==void 0&&c.projectIdentity!==t.projectIdentity)throw new Error(`actions[${o}] evidence identity does not match packet context`);if(r==="global"&&c.projectIdentity===void 0)throw new Error(`actions[${o}] global evidence lacks project identity`);if(i!==void 0&&c.candidateKey!==i)throw new Error(`actions[${o}] evidence candidate does not match`);if(a&&!c.success)throw new Error(`actions[${o}] requires successful evidence`);let l=Date.parse(t.createdAt)-Date.parse(c.observedAt);if(l<0||l>UP.maxEvidenceAgeMs)throw new Error(`actions[${o}] evidence is outside the freshness window`)}}function vt(t,e,r){wt(t,r);let n=new RegExp("\\p{Script=Han}","u").test(t),i=/[A-Za-z]/u.test(t),o=n&&i&&eW(t),a=/[`/\\]|\b(?:git|npm|pnpm|yarn|node|comet)\b|\.(?:ts|js|json|md|yaml)\b/iu.test(t)||/\b[A-Z][A-Z0-9_-]{1,}\b/u.test(t);if(e==="zh-CN"&&i&&!a&&!o)throw new Error(`${r} does not match zh-CN review language`);if(e==="en"&&n&&!a)throw new Error(`${r} does not match en review language`)}var ZH=new Set(["Ant","API","CSS","Classic","Comet","Dashboard","Design","GitHub","HTML","JavaScript","Native","React","Tailwind","TypeScript","UI","URL","Vue","hooks","component","components","frontend","backend"]);function eW(t){let e=t.match(/[A-Za-z][A-Za-z0-9+.#-]*/gu)??[];return e.length>0&&e.every(r=>ZH.has(r)||/^[A-Z]{2,}[0-9A-Z+.#-]*$/u.test(r))}function wt(t,e){if(t.trim().length===0)throw new Error(`${e} must not be empty`);let r=zH.find(({pattern:n})=>n.test(t));if(r)throw new Error(`${e} contains unsafe or non-memory content (matched: ${r.category})`)}function Os(t,e,r,n){let i=Ru(t,e).map((o,a)=>Be(o,`${e}[${a}]`));return n&&i.forEach(o=>wt(o,e)),i}function fe(t,e){if(t!==void 0)return Be(t,e)}function JP(t,e){let r=fe(t,e);if(r!==void 0&&!/^[A-Za-z0-9][A-Za-z0-9._:/-]{0,127}$/u.test(r))throw new Error(`${e} is invalid`);return r}function $s(t){let e=fe(t,"projectKey");if(e!==void 0&&!/^[A-Za-z0-9][A-Za-z0-9._-]*$/u.test(e))throw new Error("projectKey is invalid");return e}function Be(t,e){if(typeof t!="string"||t.trim().length===0)throw new Error(`${e} is required`);return t.trim()}function GP(t,e){let r=Be(t,e);if(!Number.isFinite(Date.parse(r)))throw new Error(`${e} is invalid`);return r}function Ug(t,e){if(!Number.isSafeInteger(t)||t<=0)throw new Error(`${e} is invalid`);return t}function YP(t,e){if(t!=="zh-CN"&&t!=="en")throw new Error(`${e} is invalid`);return t}function Pu(t,e){if(t!=="global"&&t!=="project")throw new Error(`${e} is invalid`);return t}function Cu(t,e){if(t!==void 0){if(!Si(t))throw new Error(`${e} is invalid`);return t}}function tW(t){return t==="create"||t==="update"||t==="forget"||t==="skip"}function Ru(t,e){if(!Array.isArray(t))throw new Error(`${e} must be an array`);return t}function Ni(t,e){if(t===null||typeof t!="object"||Array.isArray(t))throw new Error(`${e} must be an object`);return t}function Jg(t){throw new Error(`${t} is invalid`)}var nW=12,iW=8*1024,oW=2e3,fC=6e3,XP=100,QP=32*1024,aW=8,ju=128,ZP=240,An=class extends Error{constructor(r){super(r);this.reason=r;this.name="AutomaticLearningPausedError"}reason};function eC(t,e,r){if(!t.settings.learningEnabled)return r==="en"?"Personal memory learning is disabled.":"个人记忆学习已关闭。";if(e!==void 0&&t.settings.pausedLearningProjects.includes(e))return r==="en"?"Personal memory learning is paused for this project.":"当前项目已暂停个人记忆学习。"}var Iu=class{repository;now;maxEntries;maxBytes;profileMaxChars;taskMaxChars;language;constructor(e){this.repository=e.repository,this.now=e.now??(()=>new Date),this.maxEntries=e.maxEntries??nW,this.maxBytes=e.maxBytes??iW,this.profileMaxChars=e.profileMaxChars??oW,this.taskMaxChars=e.taskMaxChars??fC,this.language=e.language??"zh-CN"}async get(e){return this.repository.withLock(async()=>{let r=await this.loadAndReconcile();await this.persist(r);let n=r.records.find(i=>i.id===e);return n===void 0?null:Se(n)})}async remember(e){kC(e);let r=e.source??{kind:"user"};return this.repository.withLock(async()=>{let n=await this.loadAndReconcile(e.scope,e.projectKey),i={...e,memoryType:e.memoryType??Bs(e,"explicit")},o=Fr(i),a=T(e.text),s=n.records.find(l=>l.state!=="superseded"&&l.identity===o&&T(l.text)===a);if(s!==void 0){let l={...Xg(s,r,this.timestamp()),kind:"explicit",authority:"explicit",memoryType:i.memoryType,...i.memoryType==="personal-episode"?{episode:Mu(i.episode,i)}:{episode:void 0},state:"proven",source:r};return n.records=Ft(n.records,l),Qg(n,o),xi(n,o,e.text),await this.persist(n),Se(l)}let c=ry(i,"explicit",r,this.timestamp(),o);return Qg(n,o),xi(n,o,e.text),n.records=Ft(n.records,c),await this.writeRecordMarkdown(n,c),Se(c)})}async correct(e,r,n={}){return uC(r),this.repository.withLock(async()=>{let i=await this.loadAndReconcile();if(n.automaticLearning!==void 0){let c=eC(i,n.automaticLearning.projectKey,n.automaticLearning.language);if(c!==void 0)throw new An(c)}let o=i.records.find(c=>c.id===e),a=o!==void 0&&i.tombstones.some(c=>c.identity===o.identity&&c.reason==="user-remove");if(o===void 0||o.state==="superseded"&&!a)throw new Error(`Memory is not available: ${e}`);if(n.idempotencyKey!==void 0&&i.appliedMutationIds.includes(n.idempotencyKey))return Se(o);if(uC(r),xW(o,r))return n.idempotencyKey!==void 0&&(i.appliedMutationIds=Ho(i.appliedMutationIds,n.idempotencyKey),await this.persist(i)),Se(o);$u(i,o),Qg(i,o.identity);let s=this.updateRecordValue(o,{...o,...r,source:{kind:"user"}},"explicit");return i.records=Ft(i.records,s),xi(i,o.identity,o.text),n.idempotencyKey!==void 0&&(i.appliedMutationIds=Ho(i.appliedMutationIds,n.idempotencyKey)),await this.writeRecordMarkdown(i,s,o.text,o.category),Se(s)})}async remove(e,r={}){await this.repository.withLock(async()=>{let n=await this.loadAndReconcile();if(r.automaticLearning!==void 0){let a=eC(n,r.automaticLearning.projectKey,r.automaticLearning.language);if(a!==void 0)throw new An(a)}if(r.idempotencyKey!==void 0&&n.appliedMutationIds.includes(r.idempotencyKey))return;let i=n.records.find(a=>a.id===e);if(i===void 0)throw new Error(`Unknown memory: ${e}`);let o;if(i.state!=="superseded"){let a=this.resolveMemoryFilePath(n,i.scope,i.projectKey),s=await this.readStableFile(n,a,i.scope,i.projectKey),c=n.records.find(l=>l.id===e);if(c!==void 0&&c.state!=="superseded"&&($u(n,c),s!==null)){let l=sC(s,i.text,i.category);if(l!==s&&await this.readStableFile(n,a,c.scope,c.projectKey)!==s)throw new Error(`Memory file changed during update: ${a}`);o={file:a,projection:{content:l,baseHash:Wo(s),scope:c.scope,...c.projectKey===void 0?{}:{projectKey:c.projectKey},queuedAt:this.timestamp()}}}}if(r.permanent){let a=n.records.filter(s=>s.identity===i.identity&&bt(s.text)===bt(i.text)).map(s=>s.id);n.records=n.records.filter(s=>!a.includes(s.id));for(let s of a)delete n.history[s],delete n.evidence[s],delete n.feedbackState[s];for(let[s,c]of Object.entries(n.applicationOutcomes))a.includes(c.recordId)&&delete n.applicationOutcomes[s];n.observations=n.observations.filter(s=>s.identity!==i.identity||bt(s.text)!==bt(i.text)),n.conflicts=n.conflicts.flatMap(s=>{if(s.identity!==i.identity&&!s.recordIds?.some(l=>a.includes(l)))return[s];let c=n.records.filter(l=>s.recordIds===void 0?l.identity===s.identity:s.recordIds.includes(l.id));return new Set(c.map(l=>T(l.text))).size<2?[]:[{...s,recordIds:c.map(l=>l.id).sort(),texts:[...new Set(c.map(l=>l.text))].sort(),updatedAt:this.timestamp()}]})}else n.records=Ft(n.records,{...i,state:"superseded",updatedAt:this.timestamp()}),delete n.evidence[e];n.tombstones=ay(n.tombstones,{identity:i.identity,scope:i.scope,...i.projectKey===void 0?{}:{projectKey:i.projectKey},recordId:i.id,textHash:bt(i.text),reason:"user-remove",...r.permanent===!0?{permanent:!0}:{},removedAt:this.timestamp()}),r.idempotencyKey!==void 0&&(n.appliedMutationIds=Ho(n.appliedMutationIds,r.idempotencyKey)),o===void 0?await this.persist(n):await this.persistWithFileProjection(n,o.file,o.projection)})}async rollback(e){return this.repository.withLock(async()=>{let r=await this.loadAndReconcile(),n=r.records.find(s=>s.id===e),i=r.history[e]??[],o=i.at(-1);if(n===void 0||o===void 0)throw new Error(`No rollback available: ${e}`);r.history[e]=i.slice(0,-1);let a={...o,id:e,state:"proven",updatedAt:this.timestamp()};return r.records=Ft(r.records,a),xi(r,a.identity,a.text),await this.writeRecordMarkdown(r,a,n.state!=="superseded"?n.text:void 0,n.state!=="superseded"?n.category:void 0),Se(a)})}async recordApplicationOutcome(e,r,n={}){return this.repository.withLock(async()=>{let i=await this.loadAndReconcile(),o=i.records.find(v=>v.id===e);if(o===void 0)return null;if(n.idempotencyKey!==void 0&&i.appliedMutationIds.includes(n.idempotencyKey))return Se(o);let a=n.applicationId,s=a===void 0?void 0:i.applicationOutcomes[a];if(s!==void 0&&s.recordId!==e)throw new Error(`Context application ${a} belongs to another memory record`);let c=n.revision??(s?.revision??0)+1;if(s!==void 0&&c<=s.revision)return n.idempotencyKey!==void 0&&(i.appliedMutationIds=Ho(i.appliedMutationIds,n.idempotencyKey),await this.persist(i)),Se(o);let l=i.feedbackState[e];if(o.state==="superseded"&&l===void 0)return null;let d=r==="used-successfully",u=Yg(r),p=s?.status==="used-successfully",f=Yg(s?.status);a!==void 0&&(i.applicationOutcomes[a]={recordId:e,status:r,revision:c});let m=Object.entries(i.applicationOutcomes).some(([v,b])=>v!==a&&b.recordId===e&&Yg(b.status)),g=o.kind==="inferred"&&!u&&l!==void 0&&!m,h=this.timestamp(),w={...o,state:o.kind==="inferred"&&u?"superseded":g?d&&l.baseState==="trial"?"proven":l.baseState:o.state==="trial"&&d?"proven":o.state,applicationCount:o.applicationCount+ +(s===void 0),successCount:Math.max(0,o.successCount+Number(d)-Number(p)),failureCount:Math.max(0,o.failureCount+Number(u)-Number(f)),lastAppliedAt:h,updatedAt:h};i.records=Ft(i.records,w),n.idempotencyKey!==void 0&&(i.appliedMutationIds=Ho(i.appliedMutationIds,n.idempotencyKey));let y;if(o.kind==="inferred"&&u&&l===void 0){i.feedbackState[e]={baseState:o.state==="trial"?"trial":"proven"};let v=this.resolveMemoryFilePath(i,o.scope,o.projectKey),b=await this.readStableFile(i,v,o.scope,o.projectKey);if(b!==null){let k=sC(b,o.text,o.category);if(k!==b&&await this.readStableFile(i,v,o.scope,o.projectKey)!==b)throw new Error(`Memory file changed during update: ${v}`);y={file:v,projection:{content:k,baseHash:Wo(b),scope:o.scope,...o.projectKey===void 0?{}:{projectKey:o.projectKey},queuedAt:this.timestamp()}}}i.tombstones=ay(i.tombstones,{identity:o.identity,scope:o.scope,...o.projectKey===void 0?{}:{projectKey:o.projectKey},recordId:o.id,textHash:bt(o.text),reason:"negative-feedback",removedAt:this.timestamp()})}return g?(delete i.feedbackState[e],i.tombstones=i.tombstones.filter(v=>!(v.recordId===e&&v.reason==="negative-feedback")),await this.writeRecordMarkdown(i,w)):o.state==="trial"&&w.state==="proven"?await this.writeRecordMarkdown(i,w):y!==void 0?await this.persistWithFileProjection(i,y.file,y.projection):await this.persist(i),Se(w)})}async observe(e){if(PW(e),e.source?.kind!=="user"&&!CW(e)){let n={deduplicated:!1,ignored:!0,candidate:!1,promoted:!1,record:null,result:"ignored"};return await this.recordLearningStatus(n,!1,tC(e),e.reason),n}let r=await this.repository.withLock(async()=>{let n=await this.loadAndReconcile(e.scope,e.projectKey),i=!n.settings.learningEnabled||e.scope==="project"&&e.projectKey!==void 0&&n.settings.pausedLearningProjects.includes(e.projectKey);if(i)return{deduplicated:!1,ignored:!0,candidate:!1,promoted:!1,record:null,result:"ignored"};let o=e.projectIdentity??e.projectKey,a={...e,memoryType:e.memoryType??Bs(e,"inferred")},s=e.candidateKey??Fr(a),c=fW(a,o,s),l=n.observations.find(x=>x.key===c),d=l!==void 0&&Object.values(n.evidence).some(x=>x.includes(l.key));if(l!==void 0&&d&&(l.success||!e.success))return{deduplicated:!0,ignored:!1,candidate:!1,promoted:!1,record:null,result:"deduplicated"};let u=e.source??{kind:"workflow",workflow:e.workflow,changeId:e.changeId,projectKey:e.projectKey},p={key:c,changeId:e.changeId.trim(),scope:e.scope,projectKey:e.projectKey,...o===void 0?{}:{projectIdentity:o},candidateKey:s,identity:Fr(a),text:e.text,normalizedText:T(e.text),success:e.success,source:u,observedAt:e.observedAt??this.timestamp()};n.observations=l===void 0?[...n.observations,p]:n.observations.map(x=>x.key===c?p:x);let f=p.identity,m=p.normalizedText,g=bt(p.text),h=or(p.text),w=n.tombstones.find(x=>x.identity===f&&x.textHash===void 0||x.scope===p.scope&&x.projectKey===p.projectKey&&x.textHash!==void 0&&(x.textHash===g||x.textHash===h));if(w?.permanent===!0||w!==void 0&&p.observedAt<=w.removedAt)return w?.permanent===!0&&(n.observations=n.observations.filter(x=>x.key!==p.key)),await this.persist(n),{deduplicated:!1,ignored:!0,candidate:!1,promoted:!1,record:null,result:"ignored"};if(!e.success)return await this.persist(n),{deduplicated:!1,ignored:!1,candidate:!1,promoted:!1,record:null,result:!n.settings.learningEnabled||i?"ignored":"skipped"};let y=n.records.find(x=>(w===void 0||x.createdAt>w.removedAt)&&x.state==="trial"&&x.kind==="inferred"&&x.identity===f&&T(x.text)===m),v=y??ry(mW(a,u),"inferred",u,p.observedAt,f);n.records=y?n.records:[...n.records,v];let b=new Set(n.evidence[v.id]??[]);b.add(c),n.evidence[v.id]=[...b];let k=n.records.find(x=>x.state==="proven"&&x.identity===f),S=n.records.find(x=>x.state!=="superseded"&&x.kind==="explicit"&&oC(x)===oC(a));if(S!==void 0){if(T(S.text)!==m)return n.conflicts=Zg(n.conflicts,f,[S,v],this.timestamp()),await this.persist(n),{deduplicated:!1,ignored:!1,candidate:!0,promoted:!1,record:null,result:"candidate-created"};let x=Xg(S,u,this.timestamp());return n.records=Ft(n.records.filter(C=>C.id!==v.id),x),delete n.evidence[v.id],n.conflicts=n.conflicts.filter(C=>C.identity!==f),await this.persist(n),{deduplicated:!1,ignored:!1,candidate:!1,promoted:!1,record:Se(x),result:"skipped"}}let E=n.records.filter(x=>x.id!==v.id&&x.identity===f&&T(x.text)!==m&&(x.state!=="superseded"||(n.evidence[x.id]?.length??0)>0));if(E.length>0)return n.conflicts=Zg(n.conflicts,f,[...E,v],this.timestamp()),await this.persist(n),{deduplicated:!1,ignored:!1,candidate:!0,promoted:!1,record:null,result:"candidate-created"};if(k!==void 0&&T(k.text)===m){let x=Xg(k,u,this.timestamp());return n.records=Ft(n.records.filter(C=>C.id!==v.id),x),n.evidence[k.id]=[...new Set([...n.evidence[k.id]??[],...b])],v.id!==k.id&&delete n.evidence[v.id],await this.persist(n),{deduplicated:!1,ignored:!1,candidate:!1,promoted:!1,record:Se(x),result:"skipped"}}let N=EW(e.scope,n.observations.filter(x=>b.has(x.key))),P=(e.scope==="global",2);if(N<P)return await this.persist(n),{deduplicated:!1,ignored:!1,candidate:!0,promoted:!1,record:null,result:"candidate-created"};if(k!==void 0&&k.id!==v.id)return n.conflicts=Zg(n.conflicts,f,[k,v],this.timestamp()),await this.persist(n),{deduplicated:!1,ignored:!1,candidate:!0,promoted:!1,record:null,result:"candidate-created"};let _=n.observations.filter(x=>b.has(x.key)).map(x=>x.source),j={...v,state:"proven",source:_[0]??v.source,sources:Tu(v.sources,_),updatedAt:this.timestamp()};return n.records=Ft(n.records,j),xi(n,f,j.text),await this.writeRecordMarkdown(n,j),{deduplicated:!1,ignored:!1,candidate:!0,promoted:!0,record:Se(j),result:"candidate-promoted"}});return await this.recordLearningStatus(r,r.result==="candidate-created"||r.result==="candidate-promoted"||r.result==="deduplicated",tC(e),e.reason),r}async recordLearningStatus(e,r,n,i){await this.repository.withLock(async()=>{let o=await this.loadAndReconcile(),a=this.timestamp(),s=n?.projectKey??this.repository.projectFileBinding?.()?.projectKey,c=s===void 0?n:{...n??{},projectKey:s},l=o.learning,d=ty(o,s),u=nC(d,e,r,c,a,i);o.learning=nC(l,e,r,c,a,i),s!==void 0&&rC(o,s,u),await this.persist(o)})}async markLearningCheck(e,r,n,i){return this.repository.withLock(async()=>{let o=await this.loadAndReconcile(),a=n?.projectKey??this.repository.projectFileBinding?.()?.projectKey,s=a===void 0?n:{...n??{},projectKey:a},c=o.learning,l=ty(o,a),d=e!=="submitted"||n?.changeId===void 0?void 0:o.observations.some(f=>f.changeId===n.changeId&&(a===void 0||f.projectKey===a)&&(n.workflow===void 0||f.source.workflow===n.workflow)),u=this.timestamp(),p=iC(l,e,r,s,u,d,i);return o.learning=iC(c,e,r,s,u,d,i),a!==void 0&&rC(o,a,p),await this.persist(o),p})}async reviewAndApply(e,r){let n=await this.repository.withLock(async()=>{let c=await this.loadAndReconcile(e.projectKey===void 0?"global":"project",e.projectKey);return{learningEnabled:c.settings.learningEnabled,projectPaused:e.projectKey!==void 0&&c.settings.pausedLearningProjects.includes(e.projectKey)}});if((!n.learningEnabled||n.projectPaused)&&e.explicitRequest===void 0){let c=n.learningEnabled?e.language==="en"?"Personal memory learning is paused for this project.":"当前项目已暂停个人记忆学习。":e.language==="en"?"Personal memory learning is disabled.":"个人记忆学习已关闭。";return await this.markLearningCheck("submitted","ignored",{...e.projectKey===void 0?{}:{projectKey:e.projectKey},workflow:e.workflow,changeId:e.changeId},c),{action:"skip",persisted:!1,reason:c,observation:{deduplicated:!1,ignored:!0,candidate:!1,promoted:!1,record:null,result:"ignored"}}}let i=Au(e),o=Ko(i,r),a=[];for(let c of o.actions)a.push(await this.applyReviewAction(i,c));let s=a[0];return s===void 0?{action:"skip",persisted:!1}:a.length===1?s:{action:s.action,persisted:a.some(c=>c.persisted),...a.find(c=>c.reason!==void 0)?.reason===void 0?{}:{reason:a.find(c=>c.reason!==void 0)?.reason},...a.find(c=>c.notification!==void 0)?.notification===void 0?{}:{notification:a.find(c=>c.notification!==void 0)?.notification},results:a}}async query(e){if(e.view==="manage")return this.manage(e.query);if(e.view==="expand"){if(!e.query.id)throw new Error("Memory expand requires an id");let r=await this.get(e.query.id);return{kind:"expand",record:r!==null&&(r.scope==="global"||e.query.projectKey!==void 0&&r.projectKey===e.query.projectKey)?r:null}}if(e.view==="manifest"){let r=await this.retrieve({...e.query,view:"task"});return{kind:"manifest",truncated:r.truncated,items:r.records.map(n=>({id:n.id,memoryType:n.memoryType,state:n.state,authority:n.authority,title:n.title??n.category,summary:n.text,scope:n.scope,...n.projectKey===void 0?{}:{projectKey:n.projectKey},pathPatterns:[...n.pathPatterns],taskTypes:[...n.taskTypes],operations:[...n.operations],phases:[...n.phases],evidence:n.evidence.map(Ks)}))}}return this.retrieve({...e.query,view:e.view})}async apply(e){switch(e.operation){case"remember":return this.remember(e.input);case"correct":{let r=e.input;return this.correct(r.id,r.correction)}case"forget":{let r=e.input;return this.remove(r.id,{permanent:r.permanent})}case"rollback":return this.rollback(e.input.id);case"observe":return this.observe(e.input);case"review":{let r=e.input;return this.reviewAndApply(r.packet,r.actions)}case"feedback":{let r=e.input;return this.recordApplicationOutcome(r.id,r.outcome,{...r.previousOutcome===void 0?{}:{previousOutcome:r.previousOutcome},...r.applicationId===void 0?{}:{applicationId:r.applicationId},...r.revision===void 0?{}:{revision:r.revision},...r.idempotencyKey===void 0?{}:{idempotencyKey:r.idempotencyKey}})}case"experience-delta":return this.applyExperienceDelta(e.input.delta,e.input.idempotencyKey,e.input.automaticLearning)}}async applyExperienceDelta(e,r,n){if(e.owner!=="personal-memory"&&e.owner!=="comet.personal-memory")throw new Error("Learning Delta owner does not match Personal Memory");if(await this.mutationWasApplied(r))return{changed:!1};if(e.feedback!==void 0){if(!e.targetId)throw new Error("Learning Delta feedback target is required");let f=await this.recordApplicationOutcome(e.targetId,e.feedback.status,{previousOutcome:e.feedback.previousStatus,applicationId:e.feedback.applicationId,revision:e.feedback.revision,idempotencyKey:r});return{changed:f!==null,record:f}}if(e.action==="noop")return await this.markMutationApplied(r),{changed:!1};if(e.action==="forget"||e.action==="supersede"){if(!e.targetId)throw new Error("Learning Delta target is required");try{await this.remove(e.targetId,{permanent:e.action==="forget",idempotencyKey:r,...n===void 0?{}:{automaticLearning:n}})}catch(f){if(!(f instanceof An))throw f;return{changed:!1,ignored:!0,reason:f.reason}}return{changed:!0,record:null}}if(e.action==="update"){if(!e.targetId)throw new Error("Learning Delta target is required");let f;try{f=await this.correct(e.targetId,{...e.title===void 0?{}:{title:e.title},text:e.statement,category:e.kind,pathPatterns:e.applicability.paths,taskTypes:e.applicability.tasks,operations:e.applicability.operations,phases:e.applicability.phases},{idempotencyKey:r,...n===void 0?{}:{automaticLearning:n}})}catch(m){if(!(m instanceof An))throw m;return{changed:!1,ignored:!0,reason:m.reason}}return{changed:!0,record:f}}let i=e.applicability.projectId===void 0?"global":"project",o=e.payload?.kind==="memory-action"?e.payload:void 0,a=typeof o?.candidateKey=="string"?o.candidateKey:r,s=o?.language==="en"||o?.language==="zh-CN"?o.language:void 0,c=Si(o?.memoryClass)?o.memoryClass:void 0,l=bW(e.memoryType)?e.memoryType:void 0,d=typeof o?.reason=="string"?o.reason:void 0,u=kW(o?.episode),p=e.authority==="explicit"||e.authority==="user"?await this.remember({scope:i,...e.applicability.projectId===void 0?{}:{projectKey:e.applicability.projectId},category:e.kind,...e.title===void 0?{}:{title:e.title},text:e.statement,pathPatterns:e.applicability.paths,taskTypes:e.applicability.tasks,operations:e.applicability.operations,phases:e.applicability.phases,evidence:e.evidence,candidateKey:a,...s===void 0?{}:{language:s},...c===void 0?{}:{memoryClass:c},...l===void 0?{}:{memoryType:l},...u===void 0?{}:{episode:u},...d===void 0?{}:{reason:d},source:{kind:"user"}}):(await this.observe({scope:i,...e.applicability.projectId===void 0?{}:{projectKey:e.applicability.projectId},category:e.kind,...e.title===void 0?{}:{title:e.title},text:e.statement,pathPatterns:e.applicability.paths,taskTypes:e.applicability.tasks,operations:e.applicability.operations,phases:e.applicability.phases,evidence:e.evidence,candidateKey:a,...s===void 0?{}:{language:s},...c===void 0?{}:{memoryClass:c},...l===void 0?{}:{memoryType:l},...u===void 0?{}:{episode:u},...d===void 0?{}:{reason:d},workflow:"agent-learning",changeId:r,success:e.recommendedState!=="superseded",source:{kind:e.authority==="repository"?"repository":"workflow"}})).record;return await this.markMutationApplied(r),{changed:p!==null,record:p}}async mutationWasApplied(e){return this.repository.withLock(async()=>(await this.loadAndReconcile()).appliedMutationIds.includes(e))}async markMutationApplied(e){await this.repository.withLock(async()=>{let r=await this.loadAndReconcile();r.appliedMutationIds.includes(e)||(r.appliedMutationIds=Ho(r.appliedMutationIds,e),await this.persist(r))})}async applyReviewAction(e,r){if(r.action==="skip")return{action:"skip",persisted:!1,...r.reason===void 0?{}:{reason:r.reason}};if(r.action==="create"){if(e.explicitRequest?.action==="remember")return{action:"create",persisted:!0,observation:{deduplicated:!1,ignored:!1,candidate:!1,promoted:!0,record:await this.remember({scope:r.scope,...r.projectKey===void 0?{}:{projectKey:r.projectKey},category:r.category,text:r.text,memoryClass:r.memoryClass,title:r.title,reason:r.reason,tags:r.tags,pathPatterns:r.pathPatterns,taskTypes:r.taskTypes,operations:r.operations,phases:r.phases,language:r.language,source:{kind:"user"}})}};let n=await this.observe({scope:r.scope,...r.projectKey===void 0?{}:{projectKey:r.projectKey},category:r.category,text:r.text,memoryClass:r.memoryClass,title:r.title,reason:r.reason,tags:r.tags,pathPatterns:r.pathPatterns,taskTypes:r.taskTypes,operations:r.operations,phases:r.phases,language:r.language,projectIdentity:e.projectIdentity,candidateKey:r.candidateKey,observedAt:e.createdAt,workflow:e.workflow,changeId:e.changeId,success:!0,source:{kind:"review",label:e.checkpoint,workflow:e.workflow,changeId:e.changeId,projectKey:r.projectKey}});return{action:"create",persisted:!n.ignored&&(n.deduplicated||n.candidate||n.promoted),...n.promoted?{notification:r.language==="en"?"A reusable workflow preference is now available.":"已形成一条可复用的协作偏好。"}:{},observation:n}}if(r.action==="update"){try{await this.correct(r.targetId,{...r.text===void 0?{}:{text:r.text},...r.category===void 0?{}:{category:r.category},...r.tags===void 0?{}:{tags:r.tags},...r.pathPatterns===void 0?{}:{pathPatterns:r.pathPatterns},...r.taskTypes===void 0?{}:{taskTypes:r.taskTypes},...r.operations===void 0?{}:{operations:r.operations},...r.phases===void 0?{}:{phases:r.phases},...r.title===void 0?{}:{title:r.title},...r.reason===void 0?{}:{reason:r.reason},...r.memoryClass===void 0?{}:{memoryClass:r.memoryClass}},e.explicitRequest===void 0?{automaticLearning:{projectKey:e.projectKey,language:e.language}}:{})}catch(n){if(!(n instanceof An))throw n;return{action:"skip",persisted:!1,reason:n.reason,observation:{deduplicated:!1,ignored:!0,candidate:!1,promoted:!1,record:null,result:"ignored"}}}return{action:"update",persisted:!0,...r.reason===void 0?{}:{reason:r.reason},observation:void 0}}try{await this.remove(r.targetId,{permanent:r.permanent===!0,...e.explicitRequest===void 0?{automaticLearning:{projectKey:e.projectKey,language:e.language}}:{}})}catch(n){if(!(n instanceof An))throw n;return{action:"skip",persisted:!1,reason:n.reason,observation:{deduplicated:!1,ignored:!0,candidate:!1,promoted:!1,record:null,result:"ignored"}}}return{action:"forget",persisted:!0,...r.reason===void 0?{}:{reason:r.reason}}}async retrieve(e){return this.repository.withLock(async()=>{let r=await this.loadAndReconcile(e.scope==="global"?"global":e.scope==="project"?"project":void 0,e.projectKey);if(await this.persist(r),!r.settings.retrievalEnabled||NW(r.settings,e.projectKey))return{records:[],text:"",truncated:!1,disabled:!0};if(e.view==="combined"||e.view==="profile"||e.view==="task")return vW(r,e,e.profileMaxChars??this.profileMaxChars,e.taskMaxChars??e.maxChars??this.taskMaxChars);let n=Ds(e.maxEntries??this.maxEntries,this.maxEntries),i=Ds(e.maxBytes??this.maxBytes,this.maxBytes),o=r.records.filter(l=>l.state!=="superseded"&&(l.state!=="trial"||hC(r,l))).filter(l=>!Hs(r.conflicts,l)).filter(l=>_u(l,e)).filter(l=>oy(l,e)).map((l,d)=>({record:l,score:vC(l,e),index:d})).filter(({score:l})=>l>0||e.query===void 0).sort((l,d)=>d.score-l.score||d.record.updatedAt.localeCompare(l.record.updatedAt)||l.index-d.index||l.record.id.localeCompare(d.record.id)),a=[],s="",c=!1;for(let l of o){if(a.length>=n){c=!0;break}let d=[...a,l.record],u=Fs(d);if(Buffer.byteLength(u,"utf8")>i){c=!0;break}a.push(l.record),s=u}return{records:a.map(Se),text:s,truncated:c,disabled:!1}})}async manage(e={}){return this.repository.withLock(async()=>{let r=await this.loadAndReconcile(e.scope==="global"?"global":e.scope==="project"?"project":void 0,e.projectKey);await this.persist(r);let n=r.records.filter(p=>_u(p,e)).filter(p=>oy(p,e,!0)).sort((p,f)=>f.updatedAt.localeCompare(p.updatedAt)||p.id.localeCompare(f.id)),i=Ds(e.maxEntries??XP,XP),o=Ds(e.maxBytes??QP,QP),a=new Set(n.map(p=>p.id)),s=[],c=0,l=0,d=!1;for(let p of n){if(l>=i){d=!0;break}let f=uW(r,p),m=Buffer.byteLength(JSON.stringify(f),"utf8");if(c+m>o){d=!0;break}s.push(f),c+=m,l+=1}let u=[];for(let p of r.conflicts){let f=pW(p,a);if(f===null)continue;if(l>=i){d=!0;break}let m=Buffer.byteLength(JSON.stringify(f),"utf8");if(c+m>o){d=!0;break}u.push(f),c+=m,l+=1}return{records:s,conflicts:u,truncated:d}})}async status(){return{...await this.repository.withLock(async()=>{let r=await this.loadAndReconcile();await this.persist(r);let n=this.repository.projectFileBinding?.()?.projectKey,i=dW(r,n),o=n===void 0?r.records:r.records.filter(s=>_u(s,{projectKey:n})),a=n===void 0?r.tombstones:r.tombstones.filter(s=>s.scope==="global"||s.projectKey===n);return{learningEnabled:r.settings.learningEnabled,retrievalEnabled:r.settings.retrievalEnabled,pausedProjects:[...r.settings.pausedProjects],pausedLearningProjects:[...r.settings.pausedLearningProjects],pausedRetrievalProjects:[...r.settings.pausedRetrievalProjects],files:Object.keys(r.files).filter(s=>r.files[s]?.hash!=="").sort(),provider:{provider:"local",configured:!0},profile:{usedChars:wW(r),maxChars:this.profileMaxChars},learning:{...i.lastCheckedAt===void 0?{}:{lastCheckedAt:i.lastCheckedAt},...i.lastCheck===void 0?{}:{lastCheck:i.lastCheck},...i.lastResult===void 0?{}:{lastResult:i.lastResult},...i.lastReason===void 0?{}:{lastReason:i.lastReason},...i.lastProjectKey===void 0?{}:{lastProjectKey:i.lastProjectKey},...i.lastWorkflow===void 0?{}:{lastWorkflow:i.lastWorkflow},...i.lastChangeId===void 0?{}:{lastChangeId:i.lastChangeId},...i.submissionVerified===void 0?{}:{submissionVerified:i.submissionVerified},observedCount:i.observedCount,validObservationCount:i.validObservationCount},counts:{active:o.filter(s=>Ls(r,s)).length,trial:o.filter(s=>Ls(r,s)&&s.state==="trial").length,proven:o.filter(s=>Ls(r,s)&&s.state==="proven").length,history:o.filter(s=>!Ls(r,s)).length,tombstones:a.length}}}),remote:dC(await this.repository.remote?.()??null),sync:null}}async sync(){return this.repository.sync()}async testProvider(){return{ok:!0,message:"Local Provider is ready."}}async remote(){return dC(await this.repository.remote?.()??null)}async configureRemote(e){if(this.repository.configureRemote===void 0)throw new Error("Memory Git sync is unavailable");await this.repository.configureRemote(e)}async setLearningEnabled(e){await this.updateSettings(r=>({...r,learningEnabled:e}))}async setRetrievalEnabled(e){await this.updateSettings(r=>({...r,retrievalEnabled:e}))}async pauseProject(e,r){await this.pauseProjectLearning(e,r),await this.pauseProjectRetrieval(e,r)}async pauseProjectLearning(e,r){if(!/^[A-Za-z0-9][A-Za-z0-9._-]*$/u.test(e))throw new Error("Project key is invalid");await this.updateSettings(n=>{let i=new Set(n.pausedLearningProjects);return r?i.add(e):i.delete(e),{...n,pausedLearningProjects:[...i].sort(),pausedProjects:lC(i,new Set(n.pausedRetrievalProjects))}})}async pauseProjectRetrieval(e,r){if(!/^[A-Za-z0-9][A-Za-z0-9._-]*$/u.test(e))throw new Error("Project key is invalid");await this.updateSettings(n=>{let i=new Set(n.pausedRetrievalProjects);return r?i.add(e):i.delete(e),{...n,pausedRetrievalProjects:[...i].sort(),pausedProjects:lC(new Set(n.pausedLearningProjects),i)}})}async updateSettings(e){await this.repository.withLock(async()=>{let r=await this.loadAndReconcile();r.settings=e(r.settings),await this.persist(r)})}async loadAndReconcile(e,r){let n=await this.repository.readState(),i=sW(n);await this.flushPendingFileProjections(i),await this.prepareProjectFileBinding(i);let o=new Set;for(let c of Object.keys(i.projectFiles))o.add(c);let a=this.repository.projectFileBinding?.();a!==void 0&&o.add(a.projectKey);for(let c of i.records)c.scope==="project"&&c.projectKey!==void 0&&o.add(c.projectKey);for(let c of Object.keys(i.files)){let l=/^projects\/([A-Za-z0-9][A-Za-z0-9._-]*)\.md$/u.exec(c);l?.[1]!==void 0&&!Object.values(i.projectFiles).includes(c)&&o.add(l[1])}let s=e===void 0?[{scope:"global"},...[...o].map(c=>({scope:"project",projectKey:c})),...r!==void 0&&!o.has(r)?[{scope:"project",projectKey:r}]:[]]:[{scope:e,...e==="project"?{projectKey:r}:{}}];for(let c of s){if(c.scope==="project"&&c.projectKey===void 0)continue;let l=this.resolveMemoryFilePath(i,c.scope,c.projectKey),d=await this.repository.readText(l);if(aC(i,l,c.scope,c.projectKey,d,this.timestamp()),d!==null){let u=gW(d,i,c.scope,c.projectKey);u!==d&&await this.persistWithFileProjection(i,l,{content:u,baseHash:Wo(d),scope:c.scope,...c.projectKey===void 0?{}:{projectKey:c.projectKey},queuedAt:this.timestamp()})}}return i}async persist(e){await this.repository.writeState(e)}resolveMemoryFilePath(e,r,n){if(r==="global")return zg(r);if(n===void 0)throw new Error("Project memory requires a project key");let i=this.repository.projectFileBinding?.();return e.projectFiles[n]??(i?.projectKey===n?i.path:void 0)??zg(r,n)}async prepareProjectFileBinding(e){let r=this.repository.projectFileBinding?.();if(r===void 0)return;let i=Object.entries(e.projectFiles).some(([o,a])=>o!==r.projectKey&&a===r.path)?`projects/${r.projectName}-${r.projectKey.slice(-8)}.md`:r.path;e.projectFiles[r.projectKey]===void 0&&(e.projectFiles[r.projectKey]=i)}async writeRecordMarkdown(e,r,n,i){let o=this.resolveMemoryFilePath(e,r.scope,r.projectKey),a=await this.readStableFile(e,o,r.scope,r.projectKey),s=n?yW(a??"",n,r.text,r.category,i,r.scope,this.language):ny(a??"",r.category,r.text,r.scope,this.language);if(s!==a&&await this.readStableFile(e,o,r.scope,r.projectKey)!==a)throw new Error(`Memory file changed during update: ${o}`);await this.persistWithFileProjection(e,o,{content:s,baseHash:Wo(a),scope:r.scope,...r.projectKey===void 0?{}:{projectKey:r.projectKey},queuedAt:this.timestamp()})}async persistWithFileProjection(e,r,n){e.pendingFileProjections[r]=n,e.files[r]=hW(n.content,n.queuedAt),n.scope==="project"&&n.projectKey!==void 0&&(e.projectFiles[n.projectKey]=r),await this.persist(e);try{await this.flushPendingFileProjections(e)}catch{}}async flushPendingFileProjections(e){let r=Object.entries(e.pendingFileProjections);if(r.length!==0){for(let[n,i]of r){let o=await this.repository.readText(n),a=Wo(o),s=or(i.content);a!==s&&a===i.baseHash&&await this.repository.writeText(n,i.content)}for(let[n]of r)delete e.pendingFileProjections[n];await this.persist(e)}}async readStableFile(e,r,n,i){let o=await this.repository.readText(r),a=e.files[r]?.hash;if(a!==void 0&&Wo(o)!==a)throw aC(e,r,n,i,o,this.timestamp()),await this.persist(e),new Error(`Memory file changed during update: ${r}`);return o}updateRecordValue(e,r,n){let i=r.source??e.source,o={scope:r.scope,projectKey:r.projectKey,memoryClass:r.memoryClass??e.memoryClass,title:r.title??e.title,reason:r.reason??e.reason,category:r.category??e.category,text:r.text??e.text,memoryType:r.memoryType??e.memoryType,tags:r.tags??e.tags,pathPatterns:r.pathPatterns??e.pathPatterns,taskTypes:r.taskTypes??e.taskTypes,operations:r.operations??e.operations,phases:r.phases??e.phases,episode:r.episode??e.episode,candidateKey:r.candidateKey??e.candidateKey,language:r.language??e.language,source:i};return{...e,identity:Fr(o),memoryClass:o.memoryClass,...o.title===void 0?{}:{title:o.title},...o.reason===void 0?{}:{reason:o.reason},category:o.category,text:o.text,tags:Fe(o.tags),pathPatterns:Fe(o.pathPatterns),taskTypes:Fe(o.taskTypes),operations:Fe(o.operations),phases:Fe(o.phases),kind:n,authority:n,state:"proven",source:i,sources:Tu(e.sources,[i]),evidence:ly(e.evidence,cy(o.evidence,i,o.text,this.timestamp())),memoryType:o.memoryType??e.memoryType,...(o.memoryType??e.memoryType)==="personal-episode"?{episode:Mu(o.episode,o)}:{episode:void 0},updatedAt:this.timestamp()}}timestamp(){return this.now().toISOString()}};function sW(t){let e=r=>{let n=r.memoryType??Bs(r,r.kind),i={...r,phases:[...r.phases??[]],authority:r.authority??r.kind,evidence:(r.evidence??[]).map(Ks),memoryType:n,...n==="personal-episode"?{episode:Mu(r.episode,r)}:{}};if(r.scope==="global"&&r.projectKey!==void 0){let{projectKey:o,...a}=i;return{...a,identity:Fr(a)}}return{...i,identity:Fr(i)}};return{version:3,records:t.records.map(e),history:Object.fromEntries(Object.entries(t.history).map(([r,n])=>[r,n.map(e)])),observations:t.observations.map(r=>({...r,changeId:r.changeId??r.source.changeId??r.key,candidateKey:r.candidateKey??r.identity,...r.projectIdentity===void 0&&r.projectKey===void 0?{}:{projectIdentity:r.projectIdentity??r.projectKey}})),conflicts:[...t.conflicts],tombstones:RW(t),settings:{learningEnabled:t.settings.learningEnabled,retrievalEnabled:t.settings.retrievalEnabled,pausedProjects:[...t.settings.pausedProjects],pausedLearningProjects:[...t.settings.pausedLearningProjects??t.settings.pausedProjects??[]],pausedRetrievalProjects:[...t.settings.pausedRetrievalProjects??t.settings.pausedProjects??[]]},files:{...t.files},projectFiles:{...t.projectFiles??{}},evidence:t.evidence??{},appliedMutationIds:[...t.appliedMutationIds??[]],applicationOutcomes:{...t.applicationOutcomes??{}},feedbackState:{...t.feedbackState??{}},pendingFileProjections:{...t.pendingFileProjections??{}},learning:ey(t.learning),learningByProject:lW(t)}}function cW(t){return t.promoted?"candidate-promoted":t.candidate?"candidate-created":t.deduplicated?"deduplicated":t.ignored?"ignored":"skipped"}function tC(t){return{...t.projectKey===void 0?{}:{projectKey:t.projectKey},workflow:t.workflow,changeId:t.changeId}}function ey(t){let e=sy(t?.lastReason);return{...t??{},...e===void 0?{}:{lastReason:e},lastCheck:t?.lastCheck??"not-run",observedCount:t?.observedCount??0,validObservationCount:t?.validObservationCount??0}}function sy(t){let e=t?.trim();if(!(e===void 0||e.length===0))return e.length>ZP?`${e.slice(0,ZP-1)}…`:e}function lW(t){let e=Object.fromEntries(Object.entries(t.learningByProject??{}).map(([n,i])=>[n,ey(i)]));t.learning?.lastProjectKey!==void 0&&e[t.learning.lastProjectKey]===void 0&&(e[t.learning.lastProjectKey]=ey(t.learning));let r=Object.keys(e);return r.length>ju&&r.sort((n,i)=>{let o=e[n]?.lastCheckedAt??"",a=e[i]?.lastCheckedAt??"";return o.localeCompare(a)||n.localeCompare(i)}).slice(0,r.length-ju).forEach(n=>delete e[n]),e}function ty(t,e){return e===void 0?t.learning:t.learningByProject[e]??(t.learning?.lastProjectKey===e?t.learning:void 0)}function rC(t,e,r){t.learningByProject[e]=r;let n=Object.keys(t.learningByProject);n.length<=ju||n.sort((i,o)=>{let a=t.learningByProject[i]?.lastCheckedAt??"",s=t.learningByProject[o]?.lastCheckedAt??"";return a.localeCompare(s)||i.localeCompare(o)}).slice(0,n.length-ju).forEach(i=>delete t.learningByProject[i])}function dW(t,e){let r=ty(t,e),n=e===void 0?{observedCount:r?.observedCount??t.learning?.observedCount??0,validObservationCount:r?.validObservationCount??t.learning?.validObservationCount??0}:{observedCount:r?.observedCount??0,validObservationCount:r?.validObservationCount??0};return r===void 0?{...n,lastCheck:"not-run"}:{...n,...r}}function nC(t,e,r,n,i,o){let a=sy(o);return{lastCheckedAt:i,lastCheck:"submitted",lastResult:e.result??cW(e),...a===void 0?{}:{lastReason:a},...n?.projectKey===void 0?{}:{lastProjectKey:n.projectKey},...n?.workflow===void 0?{}:{lastWorkflow:n.workflow},...n?.changeId===void 0?{}:{lastChangeId:n.changeId},observedCount:(t?.observedCount??0)+1,validObservationCount:(t?.validObservationCount??0)+Number(r)}}function iC(t,e,r,n,i,o,a){let s=sy(a);return{...r===void 0?e==="submitted"&&t?.lastResult!==void 0?{lastResult:t.lastResult}:{}:{lastResult:r},...a===void 0?e==="submitted"&&t?.lastReason!==void 0?{lastReason:t.lastReason}:{}:s===void 0?{}:{lastReason:s},lastCheckedAt:i,lastCheck:e,...n?.projectKey===void 0?{}:{lastProjectKey:n.projectKey},...n?.workflow===void 0?{}:{lastWorkflow:n.workflow},...n?.changeId===void 0?{}:{lastChangeId:n.changeId},...o===void 0?{}:{submissionVerified:o},observedCount:t?.observedCount??0,validObservationCount:t?.validObservationCount??0}}function Yg(t){return t==="corrected"||t==="contributed-to-failure"}function Ho(t,e){return t.includes(e)?[...t]:[...t,e].slice(-1e4)}function Se(t){return{...t,tags:[...t.tags],pathPatterns:[...t.pathPatterns],taskTypes:[...t.taskTypes],operations:[...t.operations],phases:[...t.phases],evidence:t.evidence.map(Ks),...t.episode===void 0?{}:{episode:{...t.episode}},source:{...t.source},sources:t.sources.map(e=>({...e}))}}function uW(t,e){let r=t.evidence[e.id]??[],n=t.observations.filter(s=>r.includes(s.key)).map(s=>s.observedAt),i=t.tombstones.some(s=>wC(s,e)),o=Hs(t.conflicts,e),a=i?"tombstoned":o?"conflict":e.state;return{id:e.id,scope:e.scope,...e.projectKey===void 0?{}:{projectKey:e.projectKey},memoryClass:e.memoryClass??Pi(e),...e.title===void 0?{}:{title:e.title},...e.reason===void 0?{}:{reason:e.reason},category:e.category,text:e.text,tags:[...e.tags],pathPatterns:[...e.pathPatterns],taskTypes:[...e.taskTypes],operations:[...e.operations],phases:[...e.phases],...e.language===void 0?{}:{language:e.language},kind:e.kind,authority:e.authority,evidence:e.evidence.map(Ks),...e.episode===void 0?{}:{episode:{...e.episode}},memoryType:e.memoryType,applicationCount:e.applicationCount,successCount:e.successCount,failureCount:e.failureCount,...e.lastAppliedAt===void 0?{}:{lastAppliedAt:e.lastAppliedAt},status:a,evidenceCount:r.length,sourceKind:e.source.kind,lastConfirmedAt:[...n,e.updatedAt].sort().at(-1)??e.updatedAt,updatedAt:e.updatedAt,canRollback:(t.history[e.id]?.length??0)>0}}function Ls(t,e){return e.state==="superseded"||Hs(t.conflicts,e)?!1:!t.tombstones.some(r=>wC(r,e))}function pW(t,e){let r=[...t.recordIds??[]].sort();return r.length===0||!r.some(n=>e.has(n))?null:{texts:[...t.texts],updatedAt:t.updatedAt}}function ry(t,e,r,n,i){let o=t.memoryType??Bs(t,e);return{id:pC("sha256").update(`${i}
|
||
${T(t.text)}
|
||
${rW()}`).digest("hex").slice(0,24),identity:i,scope:t.scope,...t.projectKey===void 0?{}:{projectKey:t.projectKey},memoryClass:t.memoryClass??Pi(t),...t.title===void 0?{}:{title:t.title.trim()},...t.reason===void 0?{}:{reason:t.reason.trim()},category:t.category.trim(),text:t.text.trim(),tags:Fe(t.tags),pathPatterns:Fe(t.pathPatterns),taskTypes:Fe(t.taskTypes),operations:Fe(t.operations),phases:Fe(t.phases),...t.candidateKey===void 0?{}:{candidateKey:t.candidateKey},...t.language===void 0?{}:{language:t.language},kind:e,authority:e,evidence:cy(t.evidence,r,t.text,n),memoryType:o,...o==="personal-episode"?{episode:Mu(t.episode,t)}:{},state:e==="explicit"?"proven":"trial",applicationCount:0,successCount:0,failureCount:0,source:r,sources:[r],createdAt:n,updatedAt:n}}function Xg(t,e,r){return{...t,source:t.source,sources:Tu(t.sources,[e]),evidence:ly(t.evidence,cy(void 0,e,t.text,r)),updatedAt:r}}function Tu(t,e){let r=[...t];for(let n of e)r.some(i=>JSON.stringify(i)===JSON.stringify(n))||r.push(n);return r.slice(-aW)}function cy(t,e,r,n){let i=e.label??e.changeId??e.workflow??e.projectKey,o=pC("sha256").update(JSON.stringify({source:e,text:T(r)})).digest("hex"),a={id:`memory-evidence:${o.slice(0,20)}`,kind:e.kind==="user"?"user":e.kind==="repository"?"source":e.kind==="review"?"review":"outcome",summary:r.slice(0,500),...i===void 0?{}:{source:i},digest:o,success:!0};return ly(t??[],[a])}function ly(t,e){let r=new Map;for(let n of[...t,...e]){let i=Ks(n);r.set(i.digest??i.id,i)}return[...r.values()].slice(-32)}function Ks(t){return{...t}}function Ft(t,e){let r=!1,n=t.map(i=>i.id!==e.id?i:(r=!0,e));return r?n:[...n,e]}function $u(t,e){t.history[e.id]=[...t.history[e.id]??[],{...e}].slice(-10)}function Qg(t,e){let r=t.records.filter(n=>n.identity===e&&n.kind==="inferred"&&n.state==="trial");for(let n of r)t.records=t.records.filter(i=>i.id!==n.id),delete t.evidence[n.id];t.conflicts=t.conflicts.filter(n=>n.identity!==e)}function T(t){return t.normalize("NFC").replace(/\s+/gu," ").trim().toLocaleLowerCase()}function Fe(t){return[...new Set((t??[]).map(e=>e.trim()).filter(Boolean))].sort()}function Fr(t){let e=t.candidateKey===void 0?["category",T(t.category)]:["candidate",t.candidateKey];return JSON.stringify([t.scope,t.scope==="project"?t.projectKey??"":"",t.memoryType??"",t.memoryClass??Pi(t),e,Fe(t.tags),Fe(t.pathPatterns),Fe(t.taskTypes),Fe(t.operations),Fe(t.phases)])}function oC(t){return Fr({...t,candidateKey:void 0})}function fW(t,e,r){return JSON.stringify([e??"",t.changeId.trim(),r])}function mW(t,e){return{scope:t.scope,...t.scope==="project"&&t.projectKey!==void 0?{projectKey:t.projectKey}:{},...t.memoryType===void 0?{}:{memoryType:t.memoryType},memoryClass:t.memoryClass??Pi(t),...t.language===void 0?{}:{language:t.language},...t.title===void 0?{}:{title:t.title},...t.reason===void 0?{}:{reason:t.reason},category:t.category,text:t.text,tags:t.tags,pathPatterns:t.pathPatterns,taskTypes:t.taskTypes,operations:t.operations,phases:t.phases,evidence:t.evidence,episode:t.episode,candidateKey:t.candidateKey,source:e}}function hW(t,e){return{hash:or(t),observedAt:e}}function Wo(t){return t===null?"":or(t)}function mC(t){let e=t.replace(/\r\n?/gu,`
|
||
`).split(`
|
||
`),r="其他",n=[];return e.forEach((i,o)=>{let a=/^(?:#{2,6})\s+(.+?)\s*#*\s*$/u.exec(i);a&&(r=a[1].trim());let s=/^\s*[-*+]\s+(.+?)\s*$/u.exec(i);s&&s[1].trim().length>0&&n.push({category:r,text:s[1].trim(),line:o})}),n}function aC(t,e,r,n,i,o){let a=i===null?"":or(i);if(t.files[e]?.hash===a)return;let c=i===null?[]:mC(i),l=t.records.filter(u=>u.scope===r&&u.projectKey===n);for(let u of l){if(u.state==="superseded")continue;c.some(f=>T(f.text)===T(u.text))||($u(t,u),t.records=Ft(t.records,{...u,state:"superseded",updatedAt:o}),delete t.evidence[u.id],t.tombstones=ay(t.tombstones,{identity:u.identity,scope:u.scope,...u.projectKey===void 0?{}:{projectKey:u.projectKey},recordId:u.id,textHash:bt(u.text),reason:"markdown-delete",removedAt:o}))}let d=new Set;for(let u of c){let p=T(u.text);if(d.has(p)||(d.add(p),bC(t.tombstones,r,n,u.text)))continue;let f=l.find(w=>w.state!=="superseded"&&T(w.text)===p);if(f!==void 0){if(T(f.category)!==T(u.category)){$u(t,f);let w={scope:r,...n?{projectKey:n}:{},memoryType:f.memoryType,memoryClass:f.memoryClass,category:u.category,text:u.text,tags:f.tags,pathPatterns:f.pathPatterns,taskTypes:f.taskTypes,operations:f.operations,source:{kind:"user"}};t.records=Ft(t.records,{...f,identity:Fr(w),category:u.category,kind:"explicit",source:{kind:"user"},sources:Tu(f.sources,[{kind:"user"}]),updatedAt:o}),xi(t,f.identity,f.text)}continue}let m={scope:r,...n?{projectKey:n}:{},memoryType:Bs({scope:r,category:u.category},"explicit"),category:u.category,text:u.text},g=Fr(m);xi(t,g,m.text);let h=ry(m,"explicit",m.source??{kind:"user"},o,g);t.records.push(h)}t.files[e]={hash:a,observedAt:o}}function gW(t,e,r,n){let i=new Set(mC(t).filter(o=>bC(e.tombstones,r,n,o.text)&&!e.records.some(a=>Ls(e,a)&&a.scope===r&&a.projectKey===n&&T(a.category)===T(o.category)&&T(a.text)===T(o.text))).map(o=>o.line));return i.size===0?t:t.replace(/\r\n?/gu,`
|
||
`).split(`
|
||
`).filter((o,a)=>!i.has(a)).join(`
|
||
`)}function ny(t,e,r,n,i){let o=`## ${e.trim()}`;if(t.trim().length===0)return`${n==="global"?i==="en"?"# Personal Profile":"# 个人画像":i==="en"?"# Project Memory":"# 项目记忆"}
|
||
|
||
${o}
|
||
|
||
- ${r.trim()}
|
||
`;let a=t.replace(/\r\n?/gu,`
|
||
`).split(`
|
||
`),s=a.findIndex(l=>T(l.replace(/^#{2,6}\s+/u,""))===T(e)&&/^#{2,6}\s+/u.test(l));if(s===-1)return`${t.endsWith(`
|
||
`)?t:`${t}
|
||
`}
|
||
${o}
|
||
|
||
- ${r.trim()}
|
||
`;let c=a.length;for(let l=s+1;l<a.length;l+=1)if(/^#{1,6}\s+/u.test(a[l]??"")){c=l;break}return a.splice(c,0,`- ${r.trim()}`),`${a.join(`
|
||
`).replace(/\n*$/u,"")}
|
||
`}function yW(t,e,r,n,i,o,a){let s=t.replace(/\r\n?/gu,`
|
||
`).split(`
|
||
`),c=s.findIndex(l=>{let d=/^\s*([-*+])\s+(.+?)\s*$/u.exec(l);return d!==null&&T(d[2])===T(e)});if(c>=0){if(i!==void 0&&T(i)!==T(n))return s.splice(c,1),ny(`${s.join(`
|
||
`).replace(/\n*$/u,"")}
|
||
`,n,r,o,a);let l=/^\s*([-*+])\s+/u.exec(s[c]??"")?.[1]??"-";return s[c]=`${l} ${r.trim()}`,`${s.join(`
|
||
`).replace(/\n*$/u,"")}
|
||
`}return ny(t,n,r,o,a)}function sC(t,e,r){let n=t.replace(/\r\n?/gu,`
|
||
`).split(`
|
||
`),i="其他",o=n.findIndex(a=>{let s=/^(?:#{2,6})\s+(.+?)\s*#*\s*$/u.exec(a);if(s)return i=s[1].trim(),!1;let c=/^\s*[-*+]\s+(.+?)\s*$/u.exec(a);return c!==null&&T(c[1])===T(e)&&(r===void 0||T(i)===T(r))});return o<0?t:(n.splice(o,1),`${n.join(`
|
||
`).replace(/\n*$/u,"")}
|
||
`)}function vW(t,e,r,n){let i=t.records.filter(p=>p.state!=="superseded"&&(p.state!=="trial"||hC(t,p))).filter(p=>!Hs(t.conflicts,p)),o=i.filter(gC).sort((p,f)=>Ou(p)-Ou(f)||iy(p,f,e)),a=cC(o,r),s=new Set(a.records.map(p=>p.id)),c=e.view==="profile"?{records:[],truncated:!1}:cC(i.filter(p=>!s.has(p.id)).filter(p=>_u(p,e)).filter(p=>oy(p,e)).map(p=>({record:p,score:vC(p,e)})).filter(({score:p})=>p>0||e.query===void 0).sort((p,f)=>f.score-p.score||iy(p.record,f.record,e)).map(({record:p})=>p),n),l=Fs(a.records),d=Fs(c.records),u=[l?`## User Profile
|
||
${l}`:"",d?`## Relevant personal memory
|
||
${d}`:""].filter(Boolean);return{records:[...a.records,...c.records].map(Se),text:u.join(`
|
||
|
||
`),truncated:a.truncated||c.truncated,disabled:!1,profileRecords:a.records.map(Se),profileText:l,taskRecords:c.records.map(Se),taskText:d,profileTruncated:a.truncated,taskTruncated:c.truncated}}function hC(t,e){return(t.evidence[e.id]??[]).length>0}function wW(t){let e=t.records.filter(r=>r.state!=="superseded").filter(r=>!Hs(t.conflicts,r)).filter(gC).sort((r,n)=>Ou(r)-Ou(n)||iy(r,n,{view:"profile"}));return yC(Fs(e))}function gC(t){if(t.scope!=="global"||t.memoryType!=="core-profile"||t.pathPatterns.length>0||t.taskTypes.length>0||t.operations.length>0||t.phases.length>0)return!1;let e=t.memoryClass??Pi(t);return e==="user-fact"||e==="user-preference"||e==="collaboration-habit"}function Ou(t){switch(t.memoryClass??Pi(t)){case"user-fact":return 0;case"user-preference":return 1;case"collaboration-habit":return 2;default:return 3}}function Pi(t){return t.memoryClass!==void 0?t.memoryClass:t.scope==="project"?"project-convention":/(?:用户事实|身份|姓名|角色|时区|user\s*fact|identity|timezone)/iu.test(t.category)?"user-fact":/(?:协作|习惯|workflow|collaboration|habit)/iu.test(t.category)?"collaboration-habit":"user-preference"}function Bs(t,e){let r=t.memoryClass??Pi(t);return e==="inferred"?r==="collaboration-habit"||r==="project-convention"?"collaboration-policy":"personal-episode":r==="user-fact"||r==="user-preference"?"core-profile":"collaboration-policy"}function bW(t){return t==="core-profile"||t==="collaboration-policy"||t==="personal-episode"}function kW(t){if(t===null||typeof t!="object"||Array.isArray(t))return;let e=t;if(!(typeof e.situation!="string"||typeof e.actionSummary!="string"||typeof e.outcome!="string"||typeof e.lesson!="string"))return{situation:e.situation,actionSummary:e.actionSummary,outcome:e.outcome,lesson:e.lesson}}function cC(t,e){let r=[],n=!1;for(let i of t){let o=[...r,i];if(yC(Fs(o))>Ds(e,fC)){n=!0;continue}r.push(i)}return{records:r,truncated:n}}function iy(t,e,r){return e.updatedAt.localeCompare(t.updatedAt)||t.id.localeCompare(e.id)}function yC(t){return Array.from(t).length}function _u(t,e){return!(e.scope!==void 0&&t.scope!==e.scope||t.scope==="project"&&t.projectKey!==e.projectKey||t.scope==="global"&&e.scope==="project")}function oy(t,e,r=!1){if(e.task!==void 0&&t.taskTypes.length>0&&!kt(t.taskTypes,e.task)||e.path!==void 0&&t.pathPatterns.length>0&&!kt(t.pathPatterns,e.path)||e.operation!==void 0&&t.operations.length>0&&!kt(t.operations,e.operation)||t.phases.length>0&&(e.phase===void 0?!r:!kt(t.phases,e.phase))||e.category!==void 0&&!kt([t.category],e.category)||e.tags!==void 0&&!e.tags.every(n=>kt(t.tags,n)))return!1;if(e.query!==void 0){let n=e.query.split(/\s+/u).map(T).filter(Boolean);if(n.length>0){let i=T([t.category,t.text,...t.tags].join(" "));if(!n.every(o=>i.includes(o)))return!1}}return!0}function kt(t,e){let r=T(e);return t.some(n=>{let i=T(n);if(i===r||i.includes(r))return!0;if(!i.includes("*"))return!1;let o=`^${i.split("*").map(SW).join(".*")}$`;return new RegExp(o,"u").test(r)})}function SW(t){return t.replace(/[.*+?^${}()|[\]\\]/gu,"\\$&")}function vC(t,e){let r=t.kind==="explicit"?100:60;if(r+=t.state==="proven"?200:0,r+=Math.min(t.successCount,5)*20,r-=Math.min(t.failureCount,5)*40,t.scope==="project"&&(r+=50),e.task!==void 0&&kt(t.taskTypes,e.task)&&(r+=25),e.path!==void 0&&kt(t.pathPatterns,e.path)&&(r+=25),e.operation!==void 0&&kt(t.operations,e.operation)&&(r+=25),e.phase!==void 0&&kt(t.phases,e.phase)&&(r+=25),e.category!==void 0&&kt([t.category],e.category)&&(r+=20),e.tags!==void 0&&(r+=e.tags.filter(n=>kt(t.tags,n)).length*15),e.query!==void 0){let n=e.query.split(/\s+/u).map(T).filter(Boolean),i=T([t.category,t.text,...t.tags].join(" "));for(let o of n)i.includes(o)&&(r+=10)}return r}function Mu(t,e){let r=e.evidence??[],n=r.map(s=>s.summary.trim()).filter(Boolean).join(";"),i=r.some(s=>s.success===!0),o=r.some(s=>s.success===!1),a=e.language==="en";return{situation:t?.situation.trim()||e.title?.trim()||e.category.trim(),actionSummary:t?.actionSummary.trim()||n||e.text.trim(),outcome:t?.outcome.trim()||(o?a?"Unsuccessful":"未成功":i?a?"Successful":"成功":e.reason?.trim()||(a?"Observed":"已记录")),lesson:t?.lesson.trim()||e.text.trim()}}function Fs(t){let e=new Map;for(let r of t)e.set(r.category,[...e.get(r.category)??[],r]);return[...e.entries()].map(([r,n])=>`## ${r}
|
||
${n.map(i=>`- ${i.text}`).join(`
|
||
`)}`).join(`
|
||
|
||
`)}function NW(t,e){return e!==void 0&&t.pausedRetrievalProjects.includes(e)}function lC(t,e){return[...new Set([...t,...e])].sort()}function dC(t){if(t===null)return null;try{let e=new URL(t);return(e.username||e.password)&&(e.username=e.username?"***":"",e.password=e.password?"***":""),e.toString().replace(/\/$/u,"")}catch{return t.replace(/(\/\/)[^/@]+@/u,"$1***@")}}function Ds(t,e){return Number.isSafeInteger(t)&&t>0?t:e}function Zg(t,e,r,n){let i=[...new Set(r.filter(s=>s.identity===e).map(s=>s.text))].sort(),o=[...new Set(r.map(s=>s.id))].sort(),a={identity:e,texts:i,recordIds:o,updatedAt:n};return[...t.filter(s=>s.identity!==e),a]}function Hs(t,e){return e.kind!=="inferred"?!1:t.some(r=>r.identity===e.identity&&(r.recordIds===void 0||r.recordIds.includes(e.id)))}function EW(t,e){return t==="project"?new Set(e.map(r=>r.changeId)).size:new Set(e.map(r=>r.projectIdentity??r.projectKey).filter(r=>r!==void 0&&r.length>0)).size}function ay(t,e){return[...t.filter(r=>r.identity!==e.identity||r.textHash!==e.textHash),e]}function wC(t,e){return t.recordId===e.id||t.identity===e.identity&&(t.textHash===void 0||t.textHash===bt(e.text)||t.textHash===or(e.text))}function xi(t,e,r){t.tombstones=t.tombstones.filter(n=>n.identity!==e||n.textHash!==void 0&&n.textHash!==bt(r)&&n.textHash!==or(r))}function bC(t,e,r,n){let i=bt(n),o=or(n);return t.some(a=>a.scope===e&&a.projectKey===r&&a.textHash!==void 0&&(a.textHash===i||a.textHash===o))}function bt(t){return or(T(t).replace(/\s+/gu,""))}function kC(t,e){if(t.scope==="project"&&t.projectKey===void 0)throw new Error("Project memory requires a project key");if(t.scope==="project"&&!/^[A-Za-z0-9][A-Za-z0-9._-]*$/u.test(t.projectKey??""))throw new Error("Project key is invalid");if(t.category.trim().length===0||t.text.trim().length===0)throw new Error("Memory category and text are required");if(t.candidateKey!==void 0&&!/^[A-Za-z0-9][A-Za-z0-9._:/-]{0,127}$/u.test(t.candidateKey))throw new Error("Memory candidate key is invalid");ar(t.category),ar(t.text);for(let[r,n]of[["title",t.title],["reason",t.reason]])if(n!==void 0){if(n.trim().length===0)throw new Error(`Memory ${r} must not be empty`);ar(n),e!==void 0&&Ei(n,e,r)}NC(t),SC(t.episode,e)}function uC(t,e){for(let[r,n]of[["title",t.title],["reason",t.reason],["text",t.text],["category",t.category]])if(n!==void 0){if(T(n).length===0)throw new Error(`Memory correction ${r} must not be empty`);ar(n),e!==void 0&&r!=="text"&&Ei(n,e,`correction.${r}`)}NC(t),SC(t.episode,e)}function xW(t,e){return(e.title===void 0||e.title===t.title)&&(e.reason===void 0||e.reason===t.reason)&&(e.text===void 0||e.text===t.text)&&(e.category===void 0||e.category===t.category)&&(e.memoryType===void 0||e.memoryType===t.memoryType)&&(e.memoryClass===void 0||e.memoryClass===t.memoryClass)&&(e.tags===void 0||Ms(e.tags,t.tags))&&(e.pathPatterns===void 0||Ms(e.pathPatterns,t.pathPatterns))&&(e.taskTypes===void 0||Ms(e.taskTypes,t.taskTypes))&&(e.operations===void 0||Ms(e.operations,t.operations))&&(e.phases===void 0||Ms(e.phases,t.phases))}function SC(t,e){if(t!==void 0)for(let[r,n]of Object.entries(t)){if(n.trim().length===0)throw new Error(`Memory episode ${r} must not be empty`);ar(n),e!==void 0&&Ei(n,e,`episode.${r}`)}}function Ms(t,e){return t.length===e.length&&t.every((r,n)=>r===e[n])}function NC(t){for(let[e,r]of[["tags",t.tags],["pathPatterns",t.pathPatterns],["taskTypes",t.taskTypes],["operations",t.operations],["phases",t.phases]])if(r!==void 0){if(r.length>32)throw new Error(`Memory ${e} exceeds the collection limit`);r.forEach(n=>{ar(n)})}}function PW(t){if(kC(t,t.language),t.workflow.trim().length===0||t.changeId.trim().length===0)throw new Error("Observation workflow and change ID are required");if(t.candidateKey!==void 0&&!/^[A-Za-z0-9][A-Za-z0-9._:/-]{0,127}$/u.test(t.candidateKey))throw new Error("Observation candidate key is invalid");if(t.projectIdentity!==void 0&&t.projectIdentity.trim().length===0)throw new Error("Observation project identity is invalid")}function CW(t){if(t.language===void 0)return!1;try{[t.category,t.text,...t.tags??[],...t.pathPatterns??[],...t.taskTypes??[],...t.operations??[],...t.phases??[]].forEach(r=>ar(r)),Ei(t.category,t.language,"observation.category"),Ei(t.text,t.language,"observation.text"),(t.tags??[]).forEach((r,n)=>Ei(r,t.language,`observation.tags[${n}]`))}catch{return!1}let e=T([t.category,t.text,...t.tags??[]].join(" "));return!(Buffer.byteLength(e,"utf8")<8||/(?:diff --git|@@\s+-\d|\+\+\+\s+[ab]\/|---\s+[ab]\/|stack trace|traceback|stderr|stdout|debug log|npm warn)/iu.test(e)||/^(?:运行|执行|完成|通过|失败|已完成)?\s*(?:测试|test|命令|command|commit|提交|pull request|pr|issue)(?:\s|$)/iu.test(e)||/^(?:change|任务)\s*[:#-]?\s*\S+\s+(?:completed|完成|done)$/iu.test(e))}function RW(t){let e=[...t.records,...Object.values(t.history).flat()];return(t.tombstones??[]).map(r=>{if(r.textHash!==void 0)return{...r};let n=e.find(i=>i.id===r.recordId);return n===void 0?{...r}:{...r,textHash:bt(n.text)}})}import{randomUUID as DW}from"node:crypto";var AW=/(?:完成命令检查点|完成工作流检查点|本次请求|one-time request|test checkpoint|command checkpoint|(?:workflow|command|task|change)\s+(?:checkpoint\s+)?completed)/iu,_W=/^(?:请(?:帮我)?|帮我|修复|实现|处理|解决).{0,120}(?:页面|样式|问题|bug|错误|命令|测试|提交|检查|本次|此次|这个|当前|文件|任务)$/iu,jW=/^(?:(?:本次|已经|已)\s*)?(?:完成|实现|修复|处理|解决|更新|新增|添加|移除|删除|重构|验证|合并|提交|推送|构建|发布|优化|调整|改为|改成|completed|implemented|fixed|resolved|updated|added|removed|deleted|refactored|verified|merged|committed|pushed|built|released|optimized|changed)\s*.{2,200}$/iu,IW=/(?:偏好|习惯|约定|以后|后续|始终|总是|默认|每次|必须|不得|不要|避免|优先|只|统一|保持|提交前|写入前|发布前|运行前|(?:完成|修改|实现|验证)后(?:先|再|应|要|必须|运行|执行)|prefer|preference|always|never|by default|every time|must(?:\s+not)?|avoid|before|after|when|keep)/iu,TW=/(?:password|secret|token|api[_ -]?key|bearer|ignore previous|system prompt|private key|密码|密钥|令牌|忽略之前|系统提示)/iu;function Lu(t){let e=Au(t);if(e.explicitRequest!==void 0)return Ko(e,{schema:"comet.memory.actions.v1",actions:[$W(e,e.explicitRequest)]});if(e.category!==void 0&&OW(e.category)||e.userEvidence.some(n=>dy(n))||e.userEvidence.length===0&&e.evidence.some(n=>n.text!==void 0&&dy(n.text)))return Ko(e,{schema:"comet.memory.actions.v1",actions:[Ci(e,"这是一次性命令、测试或运行产物,不保存为长期记忆")]});let r=MW(e);return Ko(e,{schema:"comet.memory.actions.v1",actions:[r]})}function $W(t,e){let r=t.language,n={reason:e.reason??(r==="en"?"Requested directly by the user":"由用户明确要求,立即更新个人记忆"),title:e.title??(r==="en"?"Personal memory":"个人记忆")};if(e.action==="remember"){let a=e.text;if(a===void 0)return Ci(t,PC(r,"显式记忆缺少正文"));let s=EC(t,e.scope,e.projectKey),c=e.scope??s[0]?.scope??"project",l=c==="project"?e.projectKey??s[0]?.projectKey??t.projectKey:void 0;return{action:"create",language:r,scope:c,...l===void 0?{}:{projectKey:l},category:e.category??CC(r),text:a,...e.memoryClass===void 0?{}:{memoryClass:e.memoryClass},...n,evidenceKeys:s.map(d=>d.key),...xC(e)}}let i=t.memories.find(a=>a.id===e.targetId);if(i===void 0||e.targetId===void 0)return Ci(t,PC(r,"找不到需要处理的目标记忆"));let o=EC(t,i.scope,i.projectKey);return e.action==="forget"?{action:"forget",language:r,targetId:e.targetId,...e.permanent===void 0?{}:{permanent:e.permanent},reason:e.reason??(r==="en"?"Requested directly by the user":"由用户明确要求忘记"),title:n.title,evidenceKeys:o.map(a=>a.key)}:{action:"update",language:r,targetId:e.targetId,...e.scope===void 0?{}:{scope:e.scope},...e.projectKey===void 0?{}:{projectKey:e.projectKey},...n,...e.text===void 0?{}:{text:e.text},...e.category===void 0?{}:{category:e.category},...e.memoryClass===void 0?{}:{memoryClass:e.memoryClass},evidenceKeys:o.map(a=>a.key),...xC(e)}}function EC(t,e,r){return t.evidence.filter(n=>n.success&&(e===void 0||n.scope===e)&&(e!=="project"||n.projectKey===r))}function xC(t){return Object.fromEntries(["tags","pathPatterns","taskTypes","operations","phases"].filter(e=>t[e]!==void 0).map(e=>[e,t[e]]))}function CC(t){return t==="en"?"Reusable preference":"可复用偏好"}function PC(t,e){return t==="en"?"The explicit memory request is incomplete":e}function OW(t){let e=t.trim().toLocaleLowerCase();return["测试","命令","变更","差异","日志","输出","安全","用户请求","一次性请求","一次性选择","任务请求","工作流检查点","checkpoint","workflow checkpoint","test","command","change","pr","issue","log","diff","security"].some(r=>e===r||e.startsWith(`${r} `)||e.startsWith(`${r}:`))}function MW(t){let e=t.evidence.filter(c=>c.success),r=LW(t,e);if(r===void 0)return Ci(t,"没有发现可长期复用的用户偏好");if(TW.test(r))return Ci(t,"内容包含敏感信息或不可持久化的运行产物");let n=e.filter(c=>c.text===void 0||c.text===r),i=n.length>0?n:e,o=i[0];if(o===void 0)return Ci(t,"没有成功证据支持这条记忆");let a=o.scope,s=a==="project"?o.projectKey??t.projectKey:void 0;return a==="project"&&s===void 0?Ci(t,"项目记忆缺少稳定的项目范围"):{action:"create",language:t.language,scope:a,...s===void 0?{}:{projectKey:s},...o.candidateKey===void 0?{}:{candidateKey:o.candidateKey},...o.memoryClass===void 0?{}:{memoryClass:o.memoryClass},category:t.category??o.category??CC(t.language),text:r,title:t.language==="en"?"Reusable workflow preference":"可复用协作偏好",reason:t.language==="en"?"Validated by a successful change and safe to reuse in later tasks":"已通过成功变更验证,后续任务可以复用",evidenceKeys:i.map(c=>c.key),...o.tags===void 0?{}:{tags:o.tags},...o.pathPatterns===void 0?{}:{pathPatterns:o.pathPatterns},...o.taskTypes===void 0?{}:{taskTypes:o.taskTypes},...o.operations===void 0?{}:{operations:o.operations}}}function LW(t,e){let r=[...t.userEvidence,...e.map(n=>n.text).filter(n=>n!==void 0)];for(let n of r){let i=n.trim();if(!(i.length<4||dy(i))){try{ar(i)}catch{continue}return i}}}function dy(t){let e=t.trim();return AW.test(e)||_W.test(e)||jW.test(e)&&!IW.test(e)}function Ci(t,e){return{action:"skip",language:t.language,reason:e}}async function RC(t,e){return e===void 0?Lu(t):e(t)}var Ri="comet.personal-memory",BW={learning:!0,retrieval:!0};function jC(t){return{id:Ri,kind:"first-party",version:t.version??"1.0.0",scopes:["user","project"],compatible:t.cometVersionRange??(()=>!0),create:async e=>FW(e,t)}}async function FW(t,e){let r=e.createService(t),n=GW(r),i=e.projectPolicy??BW,o=[],a=new Set,s=new Set,c=async h=>{o.length>=8&&o.shift(),o.push(h);try{await e.onReviewNotice?.(h)}catch{}},l=async h=>{try{return{actions:await RC(h,e.runMemoryReview),deferred:!1}}catch{return h.explicitRequest!==void 0?{actions:Lu(h),deferred:!1}:{actions:{schema:"comet.memory.actions.v1",actions:[{action:"skip",language:h.language,reason:h.language==="en"?"Memory review was unavailable and has been deferred.":"记忆评审暂不可用,已延后处理。"}]},deferred:!0}}},d=async(h,w)=>{let y;try{y=await n.status()}catch{return}if(y.learningEnabled===!1)return w==="en"?"Personal memory learning is disabled.":"个人记忆学习已关闭。";if(h!==void 0&&y.pausedLearningProjects.includes(h))return w==="en"?"Personal memory learning is paused for this project.":"当前项目已暂停个人记忆学习。"},u=async h=>{let w=await d(h.projectKey,h.language);if(w!==void 0)return await r.markLearningCheck?.("submitted","ignored",{...h.projectKey===void 0?{}:{projectKey:h.projectKey},workflow:h.workflow,changeId:h.changeId},w),w},p=async h=>{if(h.explicitRequest!==void 0)return null;let w=await u({projectKey:h.projectKey,language:h.language,workflow:h.workflow,changeId:h.changeId});return w===void 0?null:{action:"skip",persisted:!1,reason:w,observation:{deduplicated:!1,ignored:!0,candidate:!1,promoted:!1,record:null,result:"ignored"}}},f=async h=>{let w=await p(h);if(w!==null)return w;let y=await l(h),{actions:v}=y,b=await n.apply({operation:"review",input:{packet:h,actions:v}}),k=py(b);if(h.explicitRequest===void 0&&k!==void 0&&!b.persisted&&await r.markLearningCheck?.("submitted",y.deferred?"deferred":k,{...h.projectKey===void 0?{}:{projectKey:h.projectKey},workflow:h.workflow,changeId:h.changeId},b.reason),h.explicitRequest!==void 0&&!b.persisted)throw new Error(b.reason??"Explicit personal memory request was not persisted.");let S=h.explicitRequest?.action;if(S!==void 0&&b.persisted&&await c(h.language==="en"?S==="remember"?"Personal memory saved.":S==="correct"?"Personal memory updated.":"Personal memory forgotten.":S==="remember"?"个人记忆已保存。":S==="correct"?"个人记忆已更新。":"个人记忆已忘记。"),S===void 0&&TC(b))try{let E=await n.query({view:"manage",query:h.projectKey===void 0?{scope:"global"}:{scope:"project",projectKey:h.projectKey}});for(let N of E.conflicts){let P=`${N.updatedAt}:${N.texts.join("\0")}`;a.has(P)||(a.add(P),await c(h.language==="en"?"Conflicting memory evidence needs your review.":"发现相互冲突的记忆证据,请在记忆管理中确认。"))}}catch{}return y.deferred?{...b,deferred:!0}:b},m=async h=>await n.query({view:zW(h.view),query:h}),g=async h=>{let w=await m(h),y=w.records.some(v=>!s.has(v.id));return w.records.forEach(v=>s.add(v.id)),y&&await c(e.language==="en"?"A saved preference was applied to this task.":"这次任务已应用一条已保存的协作偏好。"),w};return{events:["user.signal","episode.completed","review.resolved","verification.completed","failure.resolved","change.archived","context.outcome"],dashboard:{id:"personal-memory",label:e.language==="en"?"Personal Memory":"个人记忆",route:"/plugins/personal-memory",load:async({projectId:h,invoke:w})=>{let[y,v,b,k,S]=await Promise.all([w("status"),e.getProviderConfig?.(),m({view:"combined",projectKey:h}),w("manage",{projectKey:h}),e.listContextApplications?.()]),E=k,N={...E,records:E.records.map(j=>({...j,...KW(j.id,S??[],Ri)}))},P=HW(S??[],Ri),_=new Map(N.records.filter(j=>j.status==="trial"||j.status==="proven").map(j=>[j.id,j]));return{projectKey:h,policy:i,status:y,providerConfig:v,retrieval:b,management:N,manifestPreview:P.flatMap(j=>{let x=_.get(j.candidateId);return x===void 0?[]:[{id:x.id,memoryType:x.memoryType,state:x.status,title:x.title??x.category,summary:x.text,whyApplied:j.whyApplied,applicationCount:x.applicationCount,successCount:x.successCount,failureCount:x.failureCount,delivery:j.delivery,appliedAt:j.appliedAt,...j.outcome===void 0?{}:{outcome:j.outcome},lastApplication:j}]}),operations:["remember","manage","correct","remove","rollback","sync","remote","configure-remote","set-learning","set-retrieval","learning-check","pause-project-learning","pause-project-retrieval","get-provider-config","test-provider","configure-provider"],notifications:o.splice(0)}}},reflect:async h=>{if(!i.learning)return[];let w=[],y=!1;for(let v of hu(h)){if(v.type==="context.outcome"&&v.outcome!==void 0){for(let k of bu(v.outcome.unitIds,Ri))w.push({action:"update",owner:Ri,targetId:k,memoryType:"collaboration-policy",kind:"application-feedback",statement:v.outcome.summary??`Context outcome: ${v.outcome.status}`,applicability:$C(v),evidence:v.evidence,...v.outcome.applicationId===void 0||v.outcome.revision===void 0?{}:{feedback:{applicationId:v.outcome.applicationId,status:v.outcome.status,...v.outcome.previousStatus===void 0?{}:{previousStatus:v.outcome.previousStatus},revision:v.outcome.revision}},recommendedState:v.outcome.status==="corrected"||v.outcome.status==="contributed-to-failure"?"superseded":"proven"});continue}let b=JW(v,e.language);b!==null&&await(async()=>{if(await u({projectKey:b.projectKey,language:b.language??e.language??"zh-CN",workflow:b.workflow,changeId:b.changeId})!==void 0)return;let E=await fy(n,b,v.type,e.language),N=await l(E);y||=N.deferred;let P=N.deferred?"deferred":N.actions.actions.every(_=>_.action==="skip")?"skipped":void 0;if(P!==void 0){let _=N.actions.actions.find(j=>j.reason!==void 0)?.reason;await r.markLearningCheck?.("submitted",P,{...v.scope==="project"&&v.projectId===void 0?{}:{projectKey:v.projectId},workflow:b.workflow,changeId:b.changeId},_)}w.push(...UW(E,N.actions,v))})()}return{deltas:w,deferred:y}},consolidate:async({deltas:h})=>{for(let{delta:w,idempotencyKey:y}of h){let v=w.authority==="explicit"||w.authority==="user"?void 0:{...w.applicability.projectId===void 0?{}:{projectKey:w.applicability.projectId},language:w.payload?.kind==="memory-action"&&(w.payload.language==="en"||w.payload.language==="zh-CN")?w.payload.language:e.language??"zh-CN"};await n.apply({operation:"experience-delta",input:{delta:w,idempotencyKey:y,...v===void 0?{}:{automaticLearning:v}}})}},provideContext:async h=>{if(!i.retrieval)return null;let w=await g({view:"combined",projectKey:h.projectId??t.projectId,task:h.task,path:h.path,operation:h.operation,phase:h.phase});return w.disabled||w.records.length===0?null:w.records.map(y=>_C(y,h))},resolveContext:async(h,w)=>{let y=await n.query({view:"expand",query:{id:h,projectKey:w.projectId??t.projectId}}),v="kind"in y&&y.kind==="expand"?y.record:null;return v===null||v.state==="superseded"?null:_C(v,w)},invoke:async(h,w)=>WW(n,r,h,w,e.language,i,f,g,e.getProviderConfig,e.configureProvider,t.projectId??e.projectId)}}function KW(t,e,r){let n=e.filter(i=>i.owner===r&&i.candidateId===t).sort((i,o)=>o.appliedAt.localeCompare(i.appliedAt));return n[0]===void 0?{}:{contextApplicationCount:n.length,lastApplication:n[0],applicationHistory:n}}function HW(t,e){let r=t.filter(i=>i.owner===e).sort((i,o)=>o.appliedAt.localeCompare(i.appliedAt)),n=r[0]?.episodeId;return n===void 0?[]:r.filter(i=>i.episodeId===n).sort((i,o)=>i.applicationId.localeCompare(o.applicationId))}async function WW(t,e,r,n,i,o,a,s,c,l,d){switch(r){case"remember":{let u=Ws(n,"remember");u.projectKey!==void 0&&cr(u,d,"remember");let p=u.scope==="project"?cr(u,d,"remember"):void 0,f=VW(u,p);return uy(e,{action:"remember",input:f},i,a,t)}case"correct":{let u=sr(n,"correct"),p=cr(u,d,"correct");return uy(e,{action:"correct",id:Vs(u.id,"correct.id"),correction:u.correction,...p===void 0?{}:{projectKey:p}},i,a,t)}case"remove":{let u=sr(n,"remove"),p=cr(u,d,"remove");return uy(e,{action:"forget",id:Vs(u.id,"remove.id"),permanent:u.permanent===!0,...p===void 0?{}:{projectKey:p}},i,a,t)}case"rollback":{let u=sr(n,"rollback"),p=Vs(u.id,"rollback.id"),f=cr(u,d,"rollback");return IC(await e.get(p),f,p),t.apply({operation:"rollback",input:{id:p}})}case"observe":{if(!o.learning){let f=i==="en"?"Personal memory learning is disabled for this project.":"当前项目已停用个人记忆学习。";return await e.markLearningCheck?.("submitted","ignored",d===void 0?void 0:{projectKey:d},f),{action:"skip",persisted:!1,reason:f,observation:{deduplicated:!1,ignored:!0,candidate:!1,promoted:!1,record:null,result:"ignored"}}}let u=qW(Ws(n,"observe"),d),p=await fy(t,u,"memory.observe",i);return a(p)}case"learning-check":{if(e.markLearningCheck===void 0)throw new Error("Learning check tracking is unavailable");let u=sr(n,"learning-check"),p=u.check;if(p!=="submitted"&&p!=="no-observation"&&p!=="not-run")throw new Error("learning-check.check is invalid");let f=u.result;if(f!==void 0&&f!=="candidate-created"&&f!=="candidate-promoted"&&f!=="deduplicated"&&f!=="ignored"&&f!=="skipped"&&f!=="deferred")throw new Error("learning-check.result is invalid");let m=u.context;if(m!==void 0&&(m===null||typeof m!="object"||Array.isArray(m)))throw new Error("learning-check.context is invalid");let g=u.reason;if(g!==void 0&&(typeof g!="string"||g.trim().length===0))throw new Error("learning-check.reason is invalid");return e.markLearningCheck?.(p,f,m,g)}case"retrieve":return s(AC(Ws(n,"retrieve"),d,"retrieve"));case"manage":return t.query({view:"manage",query:AC(Ws(n,"manage"),d,"manage")});case"status":return t.status();case"test-provider":if(e.testProvider===void 0)throw new Error("Provider test is unavailable");return e.testProvider();case"get-provider-config":if(c===void 0)throw new Error("Provider settings are unavailable");return c();case"configure-provider":if(l===void 0)throw new Error("Provider settings are unavailable");return l(Ws(n,"configure-provider"));case"sync":return e.sync();case"remote":return e.remote?.()??null;case"configure-remote":{if(e.configureRemote===void 0)throw new Error("Memory Git sync is unavailable");return e.configureRemote(Vs(sr(n,"configure-remote").url,"url"))}case"set-learning":if(e.setLearningEnabled===void 0)throw new Error("Learning settings are unavailable");return e.setLearningEnabled(Du(sr(n,"set-learning").enabled));case"set-retrieval":if(e.setRetrievalEnabled===void 0)throw new Error("Retrieval settings are unavailable");return e.setRetrievalEnabled(Du(sr(n,"set-retrieval").enabled));case"pause-project-learning":if(e.pauseProjectLearning===void 0)throw new Error("Project learning settings are unavailable");{let u=sr(n,"pause-project-learning"),p=cr(u,d,"pause-project-learning");if(p===void 0)throw new Error("pause-project-learning.projectKey is required");return e.pauseProjectLearning(p,Du(u.paused))}case"pause-project-retrieval":if(e.pauseProjectRetrieval===void 0)throw new Error("Project retrieval settings are unavailable");{let u=sr(n,"pause-project-retrieval"),p=cr(u,d,"pause-project-retrieval");if(p===void 0)throw new Error("pause-project-retrieval.projectKey is required");return e.pauseProjectRetrieval(p,Du(u.paused))}default:throw new Error(`Unknown personal memory capability: ${r}`)}}async function uy(t,e,r,n,i){let o=e.action==="remember"?null:await t.get(e.id);if(e.action!=="remember"&&IC(o,e.projectKey,e.id),e.action==="forget"&&o!==null&&o.state==="superseded"){await t.remove(e.id,{permanent:e.permanent});return}let a=e.action==="remember"?{action:"remember",scope:e.input.scope,...e.input.projectKey===void 0?{}:{projectKey:e.input.projectKey},...e.input.category===void 0?{}:{category:e.input.category},...e.input.memoryClass===void 0?{}:{memoryClass:e.input.memoryClass},...e.input.title===void 0?{}:{title:e.input.title},...e.input.reason===void 0?{}:{reason:e.input.reason},text:e.input.text,...e.input.tags===void 0?{}:{tags:e.input.tags},...e.input.pathPatterns===void 0?{}:{pathPatterns:e.input.pathPatterns},...e.input.taskTypes===void 0?{}:{taskTypes:e.input.taskTypes},...e.input.operations===void 0?{}:{operations:e.input.operations},...e.input.phases===void 0?{}:{phases:e.input.phases}}:e.action==="correct"?{action:"correct",targetId:e.id,...e.correction.text===void 0?{}:{text:e.correction.text},...e.correction.category===void 0?{}:{category:e.correction.category},...e.correction.memoryClass===void 0?{}:{memoryClass:e.correction.memoryClass},...e.correction.title===void 0?{}:{title:e.correction.title},...e.correction.reason===void 0?{}:{reason:e.correction.reason},...e.correction.tags===void 0?{}:{tags:e.correction.tags},...e.correction.pathPatterns===void 0?{}:{pathPatterns:e.correction.pathPatterns},...e.correction.taskTypes===void 0?{}:{taskTypes:e.correction.taskTypes},...e.correction.operations===void 0?{}:{operations:e.correction.operations},...e.correction.phases===void 0?{}:{phases:e.correction.phases}}:{action:"forget",targetId:e.id,permanent:e.permanent},s=o?.scope??(e.action==="remember"?e.input.scope:void 0)??"project",c=s==="project"?o?.projectKey??(e.action==="remember"?e.input.projectKey:void 0):void 0,l=(e.action==="remember"?e.input.category:o?.category)??(r==="en"?"Reusable preference":"可复用偏好"),d=(e.action==="remember"?e.input.text:e.action==="correct"?e.correction.text:o?.text)??(r==="en"?"Explicit personal memory request":"用户明确的个人记忆操作"),u={scope:s,...c===void 0?{}:{projectKey:c},projectIdentity:c??"comet-project",category:l,...e.action==="remember"&&e.input.memoryClass===void 0?{}:e.action==="remember"?{memoryClass:e.input.memoryClass}:{},text:d,language:e.action==="remember"?e.input.language??r:r,workflow:"cli",changeId:`cli:${e.action}:${DW()}`,candidateKey:`cli:${e.action}`,success:!0,userEvidence:[d],explicitRequest:a,source:{kind:"user"}},p=await fy(i,u,"memory.cli",r,o),f=await n(p);if(e.action==="remember")return f.observation?.record??null;if(e.action==="correct")return await t.get(e.id)}function cr(t,e,r){let n=t.projectKey===void 0?void 0:Vs(t.projectKey,`${r}.projectKey`);if(e!==void 0&&n!==void 0&&n!==e)throw new Error(`${r}.projectKey does not match the current project`);return e??n}function AC(t,e,r){let n=cr(t,e,r);if(t.scope==="global"){let{projectKey:i,...o}=t;return o}return n===void 0?t:{...t,projectKey:n}}function VW(t,e){if(t.scope==="project")return e===void 0?t:{...t,projectKey:e};let{projectKey:r,...n}=t;return n}function qW(t,e){if(t.projectKey!==void 0&&cr(t,e,"observe"),t.scope==="project"){let i=cr(t,e,"observe");return i===void 0?t:{...t,projectKey:i}}let{projectKey:r,...n}=t;return n}function IC(t,e,r){if(t?.scope==="project"&&(e===void 0||t.projectKey!==e))throw new Error(`Memory is not available in the current project: ${r}`)}function zW(t){return t==="profile"||t==="task"?t:"combined"}function GW(t){return t.query!==void 0&&t.apply!==void 0?t:{status:()=>t.status(),query:async e=>e.view==="manage"?t.manage(e.query):t.retrieve({...e.query,view:e.view}),apply:async e=>{switch(e.operation){case"remember":return t.remember(e.input);case"correct":{let r=e.input;return t.correct(r.id,r.correction)}case"forget":{let r=e.input;return t.remove(r.id,{permanent:r.permanent})}case"rollback":return t.rollback(e.input.id);case"observe":return t.observe(e.input);case"review":{let r=e.input;return t.reviewAndApply(r.packet,r.actions)}case"feedback":{let r=e.input;return t.recordApplicationOutcome(r.id,r.outcome,{...r.previousOutcome===void 0?{}:{previousOutcome:r.previousOutcome},...r.applicationId===void 0?{}:{applicationId:r.applicationId},...r.revision===void 0?{}:{revision:r.revision},...r.idempotencyKey===void 0?{}:{idempotencyKey:r.idempotencyKey}})}case"experience-delta":return t.apply?.(e)}}}}function TC(t){return t.observation?.candidate===!0?!0:t.results?.some(e=>TC(e))??!1}function py(t){if(t.observation?.result!==void 0)return t.observation.result;let e=t.results?.find(n=>py(n)!==void 0),r=e===void 0?void 0:py(e);return r!==void 0?r:t.action==="skip"?"skipped":void 0}function $C(t){return{...t.scope!=="project"||t.projectId===void 0?{}:{projectId:t.projectId},...t.context.paths===void 0?{}:{paths:t.context.paths},...t.context.operation===void 0?{}:{operations:[t.context.operation]},...t.context.phase===void 0?{}:{phases:[t.context.phase]},...t.context.task===void 0?{}:{tasks:[t.context.task]}}}function UW(t,e,r){return e.actions.map(n=>{let i=t.explicitRequest,o=("memoryClass"in n?n.memoryClass:void 0)??i?.memoryClass??t.evidence[0]?.memoryClass,s=!(i===void 0)&&(o==="user-fact"||o==="user-preference")?"core-profile":o==="collaboration-habit"||o==="project-convention"?"collaboration-policy":"personal-episode",c=n.action==="skip"?"noop":n.action==="forget"?"forget":n.action,l=("text"in n?n.text:void 0)??i?.text??r.signal?.text??t.evidence.find(u=>u.text)?.text??n.reason??t.category??"No reusable personal learning unit.",d=s==="personal-episode"?{situation:r.context.task??n.title??i?.title??t.category??(t.language==="en"?"Reusable experience":"可复用经验"),actionSummary:r.evidence.map(u=>u.summary).filter(Boolean).join("; ")||l,outcome:r.outcome?.status==="used-successfully"?t.language==="en"?"Successful":"成功":r.outcome?.summary??n.reason??(t.language==="en"?"Observed":"已记录"),lesson:r.signal?.text??l}:void 0;return{action:c,owner:Ri,...!("targetId"in n)||n.targetId===void 0?i?.targetId===void 0?{}:{targetId:i.targetId}:{targetId:n.targetId},memoryType:s,kind:o??i?.category??t.category??"personal-learning",...(n.title??i?.title)===void 0?{}:{title:n.title??i?.title},statement:l,applicability:{...$C(r),...n.projectKey===void 0?{}:{projectId:n.projectKey},...!("pathPatterns"in n)||n.pathPatterns===void 0?i?.pathPatterns===void 0?{}:{paths:i.pathPatterns}:{paths:n.pathPatterns},...!("operations"in n)||n.operations===void 0?i?.operations===void 0?{}:{operations:i.operations}:{operations:n.operations},...!("phases"in n)||n.phases===void 0?i?.phases===void 0?{}:{phases:i.phases}:{phases:n.phases},...!("taskTypes"in n)||n.taskTypes===void 0?i?.taskTypes===void 0?{}:{tasks:i.taskTypes}:{tasks:n.taskTypes}},evidence:r.evidence,authority:i===void 0?"inferred":"explicit",payload:{kind:"memory-action",...n.candidateKey===void 0?{}:{candidateKey:n.candidateKey},language:n.language,...n.reason===void 0?{}:{reason:n.reason},...o===void 0?{}:{memoryClass:o},...d===void 0?{}:{episode:d}},recommendedState:c==="forget"?"superseded":i===void 0?"trial":"proven"}})}function JW(t,e){let r=t.signal;if(t.type==="user.signal"&&r?.longTerm!==!0)return null;let n=t.evidence.filter(d=>d.kind==="user").map(d=>d.summary);if(r?.explicit!==!0&&r?.longTerm!==!0&&t.actor!=="user"&&n.length===0)return null;let i=YW(t.evidence),o=r?.text??i?.summary;if(o===void 0)return null;let a=t.scope==="project"?t.projectId:void 0,s=t.context.workflow??t.source.workflow??t.source.name,c=t.context.changeId??t.source.changeId??t.episodeId,l=r?.explicit?r.kind==="forget"?r.targetId?{action:"forget",targetId:r.targetId}:void 0:r.kind==="correction"?r.targetId?{action:"correct",targetId:r.targetId,text:r.text}:void 0:{action:"remember",scope:t.scope==="project"?"project":"global",...a===void 0?{}:{projectKey:a},category:r.category??(e==="en"?"Reusable preference":"可复用偏好"),text:r.text,pathPatterns:r.selectors?.paths,taskTypes:r.selectors?.tasks,operations:r.selectors?.operations,phases:r.selectors?.phases}:void 0;return{scope:t.scope==="project"?"project":"global",...a===void 0?{}:{projectKey:a},projectIdentity:t.projectId,category:r?.category??(e==="en"?"Reusable experience":"可复用经验"),text:o,title:r?.category,reason:t.type,pathPatterns:r?.selectors?.paths??t.context.paths,taskTypes:r?.selectors?.tasks,operations:r?.selectors?.operations??(t.context.operation===void 0?void 0:[t.context.operation]),phases:r?.selectors?.phases??(t.context.phase===void 0?void 0:[t.context.phase]),evidence:t.evidence,language:e,candidateKey:r?.targetId??`${t.type}:${t.source.name}`,workflow:s,changeId:c,success:t.outcome?.status!=="contributed-to-failure"&&i?.success!==!1,userEvidence:[...n,...t.actor==="user"||r?.explicit?[o]:[]].filter((d,u,p)=>p.indexOf(d)===u),...l===void 0?{}:{explicitRequest:l},source:{kind:t.actor==="user"?"user":t.type==="review.resolved"?"review":"workflow",label:t.type,workflow:s,changeId:c,...a===void 0?{}:{projectKey:a}}}}function YW(t){return t.find(e=>e.kind==="user")??t.find(e=>e.summary)}function _C(t,e){return{id:t.id,owner:Ri,scope:t.scope==="project"?"project":"user",memoryType:t.memoryType,kind:t.memoryClass??"personal-episode",state:t.state,authority:t.authority,title:t.title??t.category,summary:t.text,content:t.text,selectors:{...t.scope==="project"?{projectId:t.projectKey??e.projectId}:{},paths:t.pathPatterns,operations:t.operations,phases:t.phases,tasks:t.taskTypes},sources:t.sources.map(r=>({type:r.kind==="user"?"user":r.kind==="repository"?"repository":r.kind==="review"?"review":"workflow"})),verification:[],matchReasons:t.reason?[t.reason]:void 0}}async function fy(t,e,r,n,i){let o=e.projectIdentity??e.projectKey??"comet-project",a=e.observedAt??new Date().toISOString(),s=e.candidateKey,c=[e.workflow,e.changeId,s??"default"].join(":"),l=await t.query({view:"manage",query:e.scope==="project"&&e.projectKey!==void 0?{scope:"project",projectKey:e.projectKey}:{scope:"global"}});return{schema:"comet.memory.review.v1",language:e.language??n??"zh-CN",projectIdentity:o,...e.scope==="project"&&e.projectKey!==void 0?{projectKey:e.projectKey}:{},workflow:e.workflow,changeId:e.changeId,createdAt:a,checkpoint:r,category:e.category,userEvidence:e.userEvidence??[],...e.explicitRequest===void 0?{}:{explicitRequest:e.explicitRequest},evidence:[{key:c,scope:e.scope,projectIdentity:o,...e.scope==="project"&&e.projectKey!==void 0?{projectKey:e.projectKey}:{},...s===void 0?{}:{candidateKey:s},changeId:e.changeId,success:e.success,observedAt:a,text:e.text,category:e.category,memoryClass:e.memoryClass,tags:e.tags,pathPatterns:e.pathPatterns,taskTypes:e.taskTypes,operations:e.operations}],memories:(e.explicitRequest===void 0?l.records:i==null?[]:[i]).map(d=>({id:d.id,scope:d.scope,...d.scope==="project"&&d.projectKey!==void 0?{projectKey:d.projectKey}:{},...d.title===void 0?{}:{title:d.title},...d.reason===void 0?{}:{reason:d.reason},...d.memoryClass===void 0?{}:{memoryClass:d.memoryClass},category:d.category,text:d.text,kind:d.kind,memoryType:d.memoryType,state:"status"in d?XW(d.status):d.state})),budget:{maxActions:4,maxEvidence:8,maxBytes:4096}}}function XW(t){return t==="conflict"||t==="tombstoned"?"superseded":t}function sr(t,e){if(t===null||typeof t!="object"||Array.isArray(t))throw new Error(`${e} input must be an object`);return t}function Ws(t,e){return sr(t,e)}function Vs(t,e){if(typeof t!="string"||t.trim().length===0)throw new Error(`${e} must be a non-empty string`);return t}function Du(t){if(typeof t!="boolean")throw new Error("enabled must be a boolean");return t}var hy=Ce(Ne(),1);Ct();import{readFile as MC}from"node:fs/promises";import LC from"node:path";var DC=".comet/config.yaml",BC="personal_memory",FC=2e3,KC=6e3;async function gy(t){let e="";try{e=await MC(LC.join(t,...DC.split("/")),"utf8")}catch(i){if(!WC(i))throw i}if(e.trim().length===0)return my();let r=(0,hy.parseDocument)(e,{uniqueKeys:!0});if(r.errors.length>0)throw new Error(`Invalid global Comet config: ${r.errors[0].message}`);let n=r.toJS();if(n==null)return my();if(typeof n!="object"||Array.isArray(n))throw new Error("Invalid global Comet config: root must be a mapping");return QW(n[BC])}async function HC(t,e){let r=LC.join(t,...DC.split("/")),n="";try{n=await MC(r,"utf8")}catch(a){if(!WC(a))throw a}let i=(0,hy.parseDocument)(n,{uniqueKeys:!0});if(i.errors.length>0)throw new Error(`Invalid global Comet config: ${i.errors[0].message}`);let o=i.toJS();if(o!=null&&(typeof o!="object"||Array.isArray(o)))throw new Error("Invalid global Comet config: root must be a mapping");if(e.provider==="remote"&&(!e.remote||e.remote.endpoint.trim().length===0))throw new Error("Invalid personal_memory config: remote provider needs remote.endpoint");i.set(BC,ZW(e)),await we(r,i.toString(),{containedRoot:t})}function my(){return{provider:"local",profileCharLimit:FC,taskContextCharLimit:KC}}function QW(t){if(t==null)return my();if(typeof t!="object"||Array.isArray(t))throw new Error("Invalid personal_memory config: expected a mapping");let e=t,r=e.provider==="remote"?"remote":"local",n=e.remote,i;if(n!==void 0){if(typeof n!="object"||n===null||Array.isArray(n))throw new Error("Invalid personal_memory.remote config: expected a mapping");let o=n;if(typeof o.endpoint!="string"||o.endpoint.trim().length===0)throw new Error("Invalid personal_memory.remote.endpoint: expected a non-empty string");i={endpoint:o.endpoint.trim(),...typeof o.token_env=="string"?{tokenEnv:o.token_env}:{},...typeof o.profile=="string"?{profile:o.profile}:{},...typeof o.timeout_ms=="number"?{timeoutMs:o.timeout_ms}:{}}}if(r==="remote"&&i===void 0)throw new Error("Invalid personal_memory config: remote provider needs remote.endpoint");return{provider:r,profileCharLimit:OC(e.profile_char_limit,FC),taskContextCharLimit:OC(e.task_context_char_limit,KC),...i===void 0?{}:{remote:i}}}function ZW(t){return{provider:t.provider,profile_char_limit:t.profileCharLimit,task_context_char_limit:t.taskContextCharLimit,...t.remote===void 0?{}:{remote:{endpoint:t.remote.endpoint,...t.remote.tokenEnv===void 0?{}:{token_env:t.remote.tokenEnv},...t.remote.profile===void 0?{}:{profile:t.remote.profile},...t.remote.timeoutMs===void 0?{}:{timeout_ms:t.remote.timeoutMs}}}}}function OC(t,e){return typeof t=="number"&&Number.isFinite(t)&&t>0?t:e}function WC(t){let e=t?.code;return e==="ENOENT"||e==="ENOTDIR"}var Kr=class extends Error{code;constructor(e,r,n){super(r,n),this.name="BoundedHttpRequestError",this.code=e}};async function eV(t,e){if(!t.body){let s=new Uint8Array(await t.arrayBuffer());if(s.byteLength>e)throw new Kr("response-too-large","HTTP response exceeds byte limit");return s}let r=t.body.getReader(),n=[],i=0;try{for(;;){let s=await r.read();if(s.done)break;if(i+=s.value.byteLength,i>e)throw await r.cancel(),new Kr("response-too-large","HTTP response exceeds byte limit");n.push(s.value)}}finally{r.releaseLock()}let o=new Uint8Array(i),a=0;for(let s of n)o.set(s,a),a+=s.byteLength;return o}async function Bu(t){let e=new AbortController,r=setTimeout(()=>e.abort(),t.timeoutMs);try{let n=await(t.fetch??globalThis.fetch)(t.url,{...t.init,signal:e.signal}),i=n.ok?await eV(n,t.maxResponseBytes):new Uint8Array;return{response:n,bytes:i}}catch(n){throw n instanceof Kr?n:e.signal.aborted?new Kr("timeout","HTTP request timed out",{cause:n}):new Kr("request-failed","HTTP request failed",{cause:n})}finally{clearTimeout(r)}}var tV=1024*1024,rV=512*1024,VC=240,Ku=class{endpoint;tokenEnv;profile;timeoutMs;projectKey;fetchImpl;constructor(e){if(this.endpoint=e.endpoint.trim(),!this.endpoint)throw new Error("Remote Provider endpoint must not be empty");this.tokenEnv=e.tokenEnv,this.profile=e.profile?.trim()||"default",this.timeoutMs=e.timeoutMs??5e3,this.projectKey=e.projectKey,this.fetchImpl=e.fetchImpl??fetch}async status(){let e={learningEnabled:void 0,retrievalEnabled:void 0,pausedProjects:[],pausedLearningProjects:[],pausedRetrievalProjects:[],files:[],remote:null,sync:null,provider:{provider:"remote",configured:!0,endpoint:zC(this.endpoint),profile:this.profile,tokenConfigured:this.tokenEnv===void 0||!!process.env[this.tokenEnv],timeoutMs:this.timeoutMs}};try{let r=await this.request("status",{projectKey:this.projectKey});return{...e,...iV(r)}}catch(r){let n=`Remote learning status unavailable: ${YC(r)}`;return{...e,availability:"unavailable",availabilityReason:n,learningAvailability:"unavailable",learningAvailabilityReason:n,sync:{status:"failed",retryable:!0,message:n}}}}async query(e){if(e.view==="manage")return this.manage(e.query);if(e.view==="expand"){if(!e.query.id)throw new Error("Memory expand requires an id");return{kind:"expand",record:await this.get(e.query.id)}}if(e.view==="manifest"){let r=await this.request("query",{view:"manifest",query:{...e.query,projectKey:e.query.projectKey??this.projectKey}});return aV(r,e.query.projectKey??this.projectKey)}return this.retrieve({...e.query,view:e.view})}async apply(e){let r=await this.request("apply",e);return nV(r,e.operation,this.projectKey)}async get(e){let r=await this.request("get",{id:e});if(!F(r)||r.record!==null&&r.record!==void 0&&!F(r.record))throw new Error("Remote Provider returned an invalid memory record");return r.record===null||r.record===void 0?null:Hr(r.record,this.projectKey,!1)}async remember(e){let r=await this.request("apply",{operation:"remember",input:e});return Fu(r,this.projectKey)}async correct(e,r){let n=await this.request("apply",{operation:"correct",input:{id:e,correction:r}});return Fu(n,this.projectKey)}async remove(e,r={}){let n=await this.request("apply",{operation:"forget",input:{id:e,...r}});Ai(n)}async rollback(e){let r=await this.request("apply",{operation:"rollback",input:{id:e}});return Fu(r,this.projectKey)}async recordApplicationOutcome(e,r,n={}){let i=await this.request("apply",{operation:"feedback",input:{id:e,outcome:r,...n}});if(!F(i)||i.record!==null&&!F(i.record))throw new Error("Remote Provider returned an invalid memory feedback result");return i.record===null?null:Hr(i.record,this.projectKey,!1)}async observe(e){let r=await this.request("apply",{operation:"observe",input:e});return vy(r,this.projectKey)}async markLearningCheck(e,r,n,i){let o=await this.request("apply",{operation:"learning-check",input:{check:e,...r===void 0?{}:{result:r},...n===void 0?{}:{context:n},...i===void 0?{}:{reason:i}},...this.projectKey===void 0?{}:{projectKey:this.projectKey}});if(Ai(o),F(o)&&F(o.learning))return GC(o)}async reviewAndApply(e,r){let n=await this.request("apply",{operation:"review",input:{packet:e,actions:r}});return wy(n,this.projectKey)}async retrieve(e){let r=await this.request("query",{view:e.view==="profile"||e.view==="task"?e.view:"combined",query:{...e,projectKey:e.projectKey??this.projectKey}});return sV(r,e.projectKey??this.projectKey)}async manage(e={}){let r=await this.request("query",{view:"manage",query:{...e,projectKey:e.projectKey??this.projectKey}});return cV(r,e.projectKey??this.projectKey)}async sync(){return{status:"synced",retryable:!1,message:"Remote Provider is active; Git sync is not used."}}async testProvider(){let e=await this.request("test",{});if(!F(e)||typeof e.ok!="boolean"||e.message!==void 0&&typeof e.message!="string")throw new Error("Remote Provider returned an invalid provider test result");return e}async remote(){return zC(this.endpoint)}async configureRemote(){throw new Error("Remote Provider does not use a Git remote")}async setLearningEnabled(e){Ai(await this.request("apply",{operation:"settings",input:{learningEnabled:e}}))}async setRetrievalEnabled(e){Ai(await this.request("apply",{operation:"settings",input:{retrievalEnabled:e}}))}async pauseProjectLearning(e,r){Ai(await this.request("apply",{operation:"settings",input:{projectKey:e,pausedLearning:r}}))}async pauseProjectRetrieval(e,r){Ai(await this.request("apply",{operation:"settings",input:{projectKey:e,pausedRetrieval:r}}))}async request(e,r){let n=this.tokenEnv===void 0?void 0:process.env[this.tokenEnv],i={"content-type":"application/json"};n&&(i.authorization=`Bearer ${n}`);let o=JSON.stringify({schema:"comet.personal-memory.provider.v1",operation:e,profile:this.profile,...this.projectKey===void 0?{}:{projectKey:this.projectKey},payload:r});if(new TextEncoder().encode(o).byteLength>rV)throw new Error("Remote Personal Memory request exceeds byte limit");let{response:a,bytes:s}=await Bu({url:this.endpoint,timeoutMs:this.timeoutMs,maxResponseBytes:tV,fetch:this.fetchImpl,init:{method:"POST",headers:i,body:o}});if(!a.ok)throw new Error(`Remote Provider request failed (${a.status})`);let c;try{c=JSON.parse(new TextDecoder().decode(s))}catch(l){throw new Error("Remote Provider returned invalid JSON",{cause:l})}if(!F(c))throw new Error("Remote Provider returned an invalid response");return F(c.result)?c.result:c}};function nV(t,e,r){switch(e){case"remember":case"correct":case"rollback":return Fu(t,r);case"observe":return vy(t,r);case"review":return wy(t,r);case"forget":return Ai(t);case"feedback":if(!F(t)||t.record!==null&&!F(t.record))throw new Error("Remote Provider returned an invalid memory feedback result");return t.record===null?null:Hr(t.record,r,!1);case"experience-delta":if(!F(t)||typeof t.changed!="boolean")throw new Error("Remote Provider returned an invalid Learning Delta result");return{changed:t.changed,...t.record===void 0||t.record===null?{record:null}:{record:Hr(t.record,r,!1)}}}}function GC(t){if(!F(t)||!F(t.learning))throw new Error("Remote Provider returned no learning status");let e=t.learning,r=e.lastCheck,n=e.lastResult;if(r!==void 0&&r!=="submitted"&&r!=="no-observation"&&r!=="not-run"||n!==void 0&&!UC(n)||e.lastReason!==void 0&&typeof e.lastReason!="string"||typeof e.observedCount!="number"||typeof e.validObservationCount!="number")throw new Error("Remote Provider returned an invalid learning status");return{...typeof e.lastCheckedAt=="string"?{lastCheckedAt:e.lastCheckedAt}:{},...r===void 0?{}:{lastCheck:r},...n===void 0?{}:{lastResult:n},...e.lastReason===void 0?{}:{lastReason:oV(e.lastReason)},...typeof e.lastProjectKey=="string"?{lastProjectKey:e.lastProjectKey}:{},...typeof e.lastWorkflow=="string"?{lastWorkflow:e.lastWorkflow}:{},...typeof e.lastChangeId=="string"?{lastChangeId:e.lastChangeId}:{},...typeof e.submissionVerified=="boolean"?{submissionVerified:e.submissionVerified}:{},observedCount:e.observedCount,validObservationCount:e.validObservationCount}}function iV(t){if(!F(t))throw new Error("Remote Provider returned an invalid status");let e=F(t.settings)?t.settings:void 0,r=F(t.capabilities)?t.capabilities:void 0,n=[t,e,r].filter(p=>p!==void 0),i=p=>{let f=n.find(m=>m[p]!==void 0);if(f!==void 0){if(typeof f[p]!="boolean")throw new Error(`Remote Provider returned an invalid ${p} capability`);return f[p]}},o=p=>{let f=n.find(m=>m[p]!==void 0);if(f!==void 0){if(!qs(f[p]))throw new Error(`Remote Provider returned an invalid ${p} list`);return[...f[p]]}},a=i("learningEnabled"),s=i("retrievalEnabled"),c=o("pausedProjects"),l=o("pausedLearningProjects"),d=o("pausedRetrievalProjects"),u={availability:"available",learningEnabled:a,retrievalEnabled:s,pausedProjects:c??[],pausedLearningProjects:l??[],pausedRetrievalProjects:d??[]};try{return{...u,learningAvailability:"available",learning:GC(t)}}catch(p){return{...u,learningAvailability:"unavailable",learningAvailabilityReason:`Remote learning diagnostics unavailable: ${YC(p)}`}}}function oV(t){let e=t.trim();return e.length>VC?`${e.slice(0,VC-1)}…`:e}function aV(t,e){if(!F(t)||t.kind!=="manifest"||!Array.isArray(t.items))throw new Error("Remote Provider returned an invalid memory manifest");return{kind:"manifest",truncated:t.truncated===!0,items:t.items.map(r=>{if(!F(r)||typeof r.id!="string"||typeof r.memoryType!="string"||typeof r.state!="string"||r.authority!=="explicit"&&r.authority!=="inferred"||typeof r.title!="string"||typeof r.summary!="string"||r.scope!=="global"&&r.scope!=="project"||!qs(r.pathPatterns)||!qs(r.taskTypes)||!qs(r.operations)||!qs(r.phases)||!Array.isArray(r.evidence)||!r.evidence.every(by))throw new Error("Remote Provider returned an invalid memory manifest item");return{id:r.id,memoryType:r.memoryType,state:r.state,authority:r.authority,title:r.title,summary:r.summary,scope:r.scope,...r.scope==="project"?{projectKey:String(r.projectKey??e??"")}:{},pathPatterns:r.pathPatterns,taskTypes:r.taskTypes,operations:r.operations,phases:r.phases,evidence:r.evidence.map(dV)}})}}function qs(t){return Array.isArray(t)&&t.every(e=>typeof e=="string")}function Fu(t,e){if(!F(t)||!F(t.record))throw new Error("Remote Provider returned no memory record");return Hr(t.record,e,!1)}function vy(t,e){if(!F(t)||typeof t.deduplicated!="boolean"||typeof t.ignored!="boolean"||typeof t.candidate!="boolean"||typeof t.promoted!="boolean"||t.record!==null&&t.record!==void 0&&!F(t.record))throw new Error("Remote Provider returned an invalid observation result");return{deduplicated:t.deduplicated,ignored:t.ignored,candidate:t.candidate,promoted:t.promoted,record:t.record===null||t.record===void 0?null:Hr(t.record,e,!1),...UC(t.result)?{result:t.result}:{}}}function UC(t){return t==="candidate-created"||t==="candidate-promoted"||t==="deduplicated"||t==="ignored"||t==="skipped"||t==="deferred"}function wy(t,e){if(!F(t)||t.action!=="create"&&t.action!=="update"&&t.action!=="forget"&&t.action!=="skip"||typeof t.persisted!="boolean"||t.deferred!==void 0&&typeof t.deferred!="boolean"||t.reason!==void 0&&typeof t.reason!="string"||t.notification!==void 0&&typeof t.notification!="string"||t.observation!==void 0&&!F(t.observation)||t.results!==void 0&&(!Array.isArray(t.results)||!t.results.every(r=>F(r))))throw new Error("Remote Provider returned an invalid review result");return{action:t.action,persisted:t.persisted,...t.deferred===void 0?{}:{deferred:t.deferred},...t.reason===void 0?{}:{reason:t.reason},...t.notification===void 0?{}:{notification:t.notification},...t.observation===void 0?{}:{observation:vy(t.observation,e)},...t.results===void 0?{}:{results:t.results.map(r=>wy(r,e))}}}function Ai(t){if(!F(t))throw new Error("Remote Provider returned an invalid mutation result");return t}function sV(t,e){if(!F(t)||!Array.isArray(t.records))throw new Error("Remote Provider returned an invalid retrieval");let r=t.records.map(o=>Hr(o,e)),n=Array.isArray(t.profileRecords)?t.profileRecords.map(o=>Hr(o,e)):void 0,i=Array.isArray(t.taskRecords)?t.taskRecords.map(o=>Hr(o,e)):void 0;return{records:r,text:yy(r),truncated:t.truncated===!0,disabled:t.disabled===!0,...n===void 0?{}:{profileRecords:n},...n===void 0?{}:{profileText:yy(n)},...t.profileTruncated===!0?{profileTruncated:!0}:{},...i===void 0?{}:{taskRecords:i},...i===void 0?{}:{taskText:yy(i)},...t.taskTruncated===!0?{taskTruncated:!0}:{}}}function Hr(t,e,r=!0){if(!F(t))throw new Error("Remote Provider returned an invalid memory record");let n=t.scope;if(n!=="global"&&n!=="project"||typeof t.id!="string"||t.id.trim().length===0||typeof t.category!="string"||typeof t.text!="string"||n==="project"&&typeof t.projectKey!="string"||e!==void 0&&n==="project"&&t.projectKey!==e||!Array.isArray(t.tags)||!Array.isArray(t.pathPatterns)||!Array.isArray(t.taskTypes)||!Array.isArray(t.operations)||!Array.isArray(t.phases)||!Array.isArray(t.evidence)||!t.tags.every(i=>typeof i=="string")||!t.pathPatterns.every(i=>typeof i=="string")||!t.taskTypes.every(i=>typeof i=="string")||!t.operations.every(i=>typeof i=="string")||!t.phases.every(i=>typeof i=="string")||!t.evidence.every(by)||t.memoryClass!==void 0&&!Si(t.memoryClass)||t.language!==void 0&&t.language!=="zh-CN"&&t.language!=="en"||t.kind!=="explicit"&&t.kind!=="inferred"||t.authority!=="explicit"&&t.authority!=="inferred"||t.memoryType!=="core-profile"&&t.memoryType!=="collaboration-policy"&&t.memoryType!=="personal-episode"||(t.memoryType==="personal-episode"||t.episode!==void 0)&&!JC(t.episode)||t.state!=="trial"&&t.state!=="proven"&&t.state!=="superseded"||r&&t.state==="superseded"||typeof t.applicationCount!="number"||typeof t.successCount!="number"||typeof t.failureCount!="number"||!qC(t.source)||!Array.isArray(t.sources)||!t.sources.every(i=>qC(i))||typeof t.createdAt!="string"||typeof t.updatedAt!="string")throw new Error("Remote Provider returned an invalid memory record");return t}function qC(t){return F(t)&&(t.kind==="user"||t.kind==="workflow"||t.kind==="review"||t.kind==="repository")}function yy(t){let e=new Map;for(let r of t){let n=typeof r.category=="string"?r.category:"Personal memory";e.set(n,[...e.get(n)??[],r])}return[...e.entries()].map(([r,n])=>`## ${r}
|
||
${n.map(i=>`- ${i.text}`).join(`
|
||
`)}`).join(`
|
||
|
||
`)}function cV(t,e){if(!F(t)||!Array.isArray(t.records)||!Array.isArray(t.conflicts))throw new Error("Remote Provider returned an invalid management view");return{records:t.records.map(r=>lV(r,e)),conflicts:t.conflicts.map(r=>{if(!F(r)||!Array.isArray(r.texts)||!r.texts.every(n=>typeof n=="string")||typeof r.updatedAt!="string")throw new Error("Remote Provider returned an invalid management view");return r}),truncated:t.truncated===!0}}function lV(t,e){if(!F(t))throw new Error("Remote Provider returned an invalid management view");let r=t.scope;if(r!=="global"&&r!=="project"||typeof t.id!="string"||t.id.trim().length===0||typeof t.category!="string"||typeof t.text!="string"||r==="project"&&typeof t.projectKey!="string"||e!==void 0&&r==="project"&&t.projectKey!==e||!Array.isArray(t.tags)||!Array.isArray(t.pathPatterns)||!Array.isArray(t.taskTypes)||!Array.isArray(t.operations)||!Array.isArray(t.phases)||!Array.isArray(t.evidence)||!t.tags.every(n=>typeof n=="string")||!t.pathPatterns.every(n=>typeof n=="string")||!t.taskTypes.every(n=>typeof n=="string")||!t.operations.every(n=>typeof n=="string")||!t.phases.every(n=>typeof n=="string")||!t.evidence.every(by)||t.memoryClass!==void 0&&!Si(t.memoryClass)||t.language!==void 0&&t.language!=="zh-CN"&&t.language!=="en"||t.kind!=="explicit"&&t.kind!=="inferred"||t.authority!=="explicit"&&t.authority!=="inferred"||t.status!=="trial"&&t.status!=="proven"&&t.status!=="superseded"&&t.status!=="conflict"&&t.status!=="tombstoned"||t.memoryType!=="core-profile"&&t.memoryType!=="collaboration-policy"&&t.memoryType!=="personal-episode"||(t.memoryType==="personal-episode"||t.episode!==void 0)&&!JC(t.episode)||typeof t.applicationCount!="number"||typeof t.successCount!="number"||typeof t.failureCount!="number"||typeof t.evidenceCount!="number"||t.evidenceCount<0||t.sourceKind!=="user"&&t.sourceKind!=="workflow"&&t.sourceKind!=="review"&&t.sourceKind!=="repository"||typeof t.lastConfirmedAt!="string"||typeof t.updatedAt!="string"||typeof t.canRollback!="boolean")throw new Error("Remote Provider returned an invalid management view");return t}function F(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function JC(t){return F(t)&&typeof t.situation=="string"&&t.situation.trim().length>0&&typeof t.actionSummary=="string"&&t.actionSummary.trim().length>0&&typeof t.outcome=="string"&&t.outcome.trim().length>0&&typeof t.lesson=="string"&&t.lesson.trim().length>0}function by(t){return F(t)&&typeof t.id=="string"&&["user","source","verification","review","failure","outcome"].includes(String(t.kind))&&typeof t.summary=="string"&&(t.source===void 0||typeof t.source=="string")&&(t.anchor===void 0||typeof t.anchor=="string")&&(t.digest===void 0||typeof t.digest=="string")&&(t.command===void 0||typeof t.command=="string")&&(t.success===void 0||typeof t.success=="boolean")}function dV(t){return{id:t.id,kind:t.kind,summary:t.summary,...t.source===void 0?{}:{source:t.source},...t.anchor===void 0?{}:{anchor:t.anchor},...t.digest===void 0?{}:{digest:t.digest},...t.command===void 0?{}:{command:t.command},...t.success===void 0?{}:{success:t.success}}}function zC(t){try{let e=new URL(t);return(e.username||e.password)&&(e.username=e.username?"***":"",e.password=e.password?"***":""),e.toString().replace(/\/$/u,"")}catch{return t.replace(/(\/\/)[^/@]+@/u,"$1***@")}}function YC(t){return t instanceof Error?t.message:String(t)}import{existsSync as uV,readFileSync as pV}from"fs";import XC from"path";import{fileURLToPath as fV}from"url";function mV(){return"0.4.4"}var ky=null,hV="@rpamis/comet",lie=`https://registry.npmjs.org/${hV}/latest`;function QC(){return ky===null&&(ky=mV()),ky}qe();ro();ge();import{mkdir as gV,open as yV,readdir as vV,readFile as Ny,rename as wV,stat as bV,unlink as Sy,writeFile as kV}from"node:fs/promises";import _n from"node:path";var SV=["fact","decision","pattern","procedure","constraint","failure-resolution"],Ey="MEMORY.md",Wu="project-memory:",xy="project-memory-index",NV=/^[a-z0-9][a-z0-9-]{0,63}$/u,ZC=120,eR=200,mie=16*1024;var EV=8,xV=120,PV=3e3,CV=1e4,RV=4e3,AV=50;function _V(t){return typeof t=="string"&&SV.includes(t)}function Vo(t,e){let r=rr(t,e);return _n.join(_n.dirname(r.databasePath),"memory")}function Hu(t,e){return t.replace(/[\r\n\t]+/gu," ").trim().slice(0,e)}function Py(t){return NV.test(t)}function Cy(t){return`${t}.md`}function tR(t){let e=t.replace(/\r\n/gu,`
|
||
`).split(`
|
||
`);if(e[0]?.trim()!=="---")return null;let r=e.findIndex((f,m)=>m>0&&f.trim()==="---");if(r<=1)return null;let n=new Map;for(let f of e.slice(1,r)){let m=f.indexOf(":");m<=0||n.set(f.slice(0,m).trim(),f.slice(m+1).trim())}let i=n.get("name")??n.get("slug")??"",o=n.get("title")??"",a=n.get("description")??"",s=n.get("type")??"",c=n.get("created")??"",l=n.get("updated")??c;if(!Py(i)||!o||!a||!_V(s))return null;let d=[],u=n.get("paths");if(u)try{let f=JSON.parse(u);Array.isArray(f)&&(d=f.filter(m=>typeof m=="string").slice(0,EV))}catch{d=[]}let p=n.get("source");return{slug:i,title:o,description:a,type:s,created:c,updated:l,paths:d,...p===void 0?{}:{source:p},body:e.slice(r+1).join(`
|
||
`).trim()}}async function jV(t,e){let r=`${t}.${process.pid}.${Date.now()}.tmp`;await kV(r,e,"utf8"),await wV(r,t)}function IV(t){return new Promise(e=>setTimeout(e,t))}async function TV(t,e){await gV(t,{recursive:!0});let r=_n.join(t,".lock"),n=Date.now()+RV;for(;;)try{let i=await yV(r,"wx");await i.write(`${process.pid} ${new Date().toISOString()}`),await i.close();break}catch(i){if(i.code!=="EEXIST")throw i;try{let o=await bV(r);Date.now()-o.mtimeMs>CV&&await Sy(r).catch(()=>{})}catch{}if(Date.now()>n)throw new Error("项目记忆存储正被其他进程写入,请稍后重试",{cause:i});await IV(AV)}try{return await e()}finally{await Sy(r).catch(()=>{})}}async function rR(t){let e;try{e=await vV(t)}catch{return[]}let r=[];for(let n of e){if(!n.endsWith(".md")||n===Ey)continue;let i;try{i=await Ny(_n.join(t,n),"utf8")}catch{continue}let o=tR(i);o!==null&&`${o.slug}.md`===n&&r.push(o)}return r.sort((n,i)=>n.slug.localeCompare(i.slug)),r}function $V(t){let e=["# Project Memory Index","","<!-- Managed by comet knowledge remember. One line per durable project lesson; the full note lives in the linked file. Newest first. -->",""],r=[...t].sort((n,i)=>i.updated.localeCompare(n.updated)||n.slug.localeCompare(i.slug));for(let n of r){let i=Hu(n.title,ZC).replace(/[[\]]/gu,""),o=Hu(n.description,eR);e.push(`- [${i}](${Cy(n.slug)}) — ${o}`)}return`${e.join(`
|
||
`)}
|
||
`}var OV=/^-\s+\[([^\]]+)\]\(([a-z0-9][a-z0-9-]*)\.md\)\s+—\s+(.+)$/u;function MV(t){let e=[];for(let r of t.replace(/\r\n/gu,`
|
||
`).split(`
|
||
`)){let n=OV.exec(r.trim());n!==null&&e.push({slug:n[2],title:n[1].trim(),description:n[3].trim()})}return e}async function nR(t,e){let r=Vo(t,e),n;try{n=await Ny(_n.join(r,Ey),"utf8")}catch{return[]}return MV(n)}async function Ry(t,e,r){if(!Py(e))return null;let n=Vo(t,r),i;try{i=await Ny(_n.join(n,Cy(e)),"utf8")}catch{return null}let o=tR(i);return o===null||o.slug!==e?null:o}var LV=200;async function iR(t,e){let r=Vo(t,e);return[...await rR(r)].sort((i,o)=>o.updated.localeCompare(i.updated)).slice(0,LV).map(i=>({slug:i.slug,title:i.title,description:i.description,type:i.type,created:i.created,updated:i.updated,paths:i.paths,...i.source===void 0?{}:{source:i.source}}))}async function oR(t,e,r){if(!Py(e))return!1;let n=Vo(t,r);return TV(n,async()=>{let i=await rR(n);return i.find(a=>a.slug===e)===void 0?!1:(await Sy(_n.join(n,Cy(e))).catch(()=>{}),await jV(_n.join(n,Ey),$V(i.filter(a=>a.slug!==e).map(a=>({slug:a.slug,title:a.title,description:a.description,updated:a.updated})))),!0)})}function aR(t,e="zh-CN"){if(t.length===0)return null;let i=[e==="en"?"## Project memory index":"## 项目记忆索引",e==="en"?'Each line is a durable lesson learned in this project. Expand the full note with the same task arguments plus --expand-context "project-memory:<slug>".':'以下每行是本项目沉淀的一条可复用经验;需要完整内容时用同一任务参数追加 --expand-context "project-memory:<slug>" 展开。'];for(let a of t.slice(0,xV)){let s=`- ${Hu(a.title,ZC)} — ${Hu(a.description,eR)} (${a.slug})`;if(i.join(`
|
||
`).length+s.length>=PV)break;i.push(s)}let o=t.length-(i.length-2);return o>0&&i.push(e==="en"?`… ${o} more entries in MEMORY.md`:`……另有 ${o} 条,见 MEMORY.md`),i.join(`
|
||
`)}var uR=Ce(Ne(),1);ge();qe();Q();import{promises as _i}from"node:fs";import ee from"node:path";var DV=64*1024,sR=512,BV=2e3,cR=1024*1024,lR=new Set(["docs/superpowers/specs","docs/superpowers/plans","docs/superpowers/reports"]);function lr(t){return Date.now()<=t.deadline?!1:(t.timedOut=!0,t.complete=!1,!0)}function Kt(t,e,r){t?.({code:e,message:r})}function jn(t,e){return ee.relative(t,e).replaceAll(ee.sep,"/")}function Gs(t,e){let r=ee.relative(ee.resolve(t),ee.resolve(e));return r===""||!ee.isAbsolute(r)&&r!==".."&&!r.startsWith(`..${ee.sep}`)}async function pR(t,e,r,n){if(r&&lr(r)||!Gs(e,t))return!1;try{let i=await _i.lstat(t);if(!i.isDirectory()||i.isSymbolicLink())return!1;let[o,a]=await Promise.all([_i.realpath(t),_i.realpath(e)]);return Gs(a,o)}catch(i){return i.code!=="ENOENT"&&(r&&(r.complete=!1),Kt(n,"corpus-root",`未进入检索:无法读取目录 ${jn(e,t)}。`)),!1}}async function zs(t,e,r,n,i,o,a){if(!await pR(t,e,o,i))return[];let s=[],c=async l=>{if(o&&lr(o))return;let d;try{d=await _i.readdir(l,{withFileTypes:!0})}catch{o&&(o.complete=!1),Kt(i,"corpus-read",`未进入检索:无法读取目录 ${jn(e,l)}`);return}for(let u of d){if(o&&lr(o))return;if(u.name.startsWith(".")&&u.name!==".comet.yaml")continue;let p=ee.join(l,u.name);if(u.isSymbolicLink())continue;if(u.isDirectory()){await c(p);continue}if(!u.isFile()||!u.name.toLowerCase().endsWith(".md")||!Gs(e,p))continue;let f=jn(e,p);a&&!a(f)||s.push({absolutePath:p,source:f,kind:r,...n??dR(p)?{archivedAt:n??dR(p)}:{}})}};return await c(t),s}function FV(t){let e="^";for(let r=0;r<t.length;r+=1){let n=t[r];n==="*"?t[r+1]==="*"?t[r+2]==="/"?(e+="(?:[^/]+/)*",r+=2):(e+=".*",r+=1):e+="[^/]*":n==="?"?e+="[^/]":e+=n.replace(/[\\^$+?.()|[\]{}]/gu,"\\$&")}return new RegExp(`${e}$`,"iu")}function KV(t,e){let r=e.split("/"),n=r.findIndex(o=>/[*?]/u.test(o)),i=n===-1?r.slice(0,-1):r.slice(0,n);return ee.join(t,...i)}async function HV(t,e,r,n){let i=[],o=e.map(s=>FV(s)),a=new Map;for(let[s,c]of e.entries()){let l=KV(t,c),d=o[s],u=a.get(l);a.set(l,u?p=>u(p)||d.test(p):p=>d.test(p))}for(let[s,c]of a)if(i.push(...await zs(s,t,"custom",void 0,r,n,c)),n&&lr(n))break;return i}function WV(t,e){return ee.join(t,e==="docs"?"docs":"","openspec")}function dR(t){return/(?:^|[\\/])(\d{4}-\d{2}-\d{2})-/u.exec(t)?.[1]}function VV(t){return typeof t=="string"?[t]:Array.isArray(t)?t.filter(e=>typeof e=="string"):[]}function qV(t,e){let r=e.replaceAll("\\","/").replace(/^\.\//u,"");if(ee.posix.isAbsolute(r)||r.split("/").includes(".."))return null;let n=ee.resolve(t,...r.split("/"));if(!Gs(t,n))return null;let i=jn(t,n);return lR.has(i.slice(0,i.lastIndexOf("/")))||[...lR].some(o=>i===o||i.startsWith(`${o}/`))?i:null}async function zV(t,e,r,n){let i=await GV(e,t,n,r),o=new Set;for(let s of i){if(n&&lr(n))break;let c=ee.join(s,".comet.yaml");try{let l=jn(t,c),d=await O(t,l,DV,{label:`${jn(t,c)} state`}),u=(0,uR.parse)(d.bytes.toString("utf8"));for(let p of["design_doc","plan","verification_report"])for(let f of VV(u?.[p])){let m=qV(t,f);m&&o.add(m)}}catch(l){l.code!=="ENOENT"&&(n&&(n.complete=!1),Kt(r,"superpowers-state",`未进入检索:无法读取 Classic 归档状态 ${jn(t,c)},其引用文档当前不会参与召回。`))}}let a=[];for(let s of[...o].sort()){if(n&&lr(n))break;let c=ee.join(t,...s.split("/"));try{if(!await am(t,s,{label:s}))continue;a.push({absolutePath:c,source:s,kind:"superpowers"})}catch(l){l.code!=="ENOENT"&&(n&&(n.complete=!1),Kt(r,"superpowers-file",`未进入检索:无法读取归档引用的文档 ${s}。`))}}return a}async function GV(t,e,r,n){if(!await pR(t,e,r,n))return[];let i=[],o=async a=>{if(r&&lr(r))return;let s;try{s=await _i.readdir(a,{withFileTypes:!0})}catch{r&&(r.complete=!1);return}for(let c of s){if(r&&lr(r))return;if(c.isSymbolicLink()||!c.isDirectory())continue;let l=ee.join(a,c.name);if(!Gs(e,l))continue;let d=ee.join(l,".comet.yaml");try{let u=await _i.lstat(d);u.isFile()&&!u.isSymbolicLink()&&i.push(l)}catch(u){u.code!=="ENOENT"&&(r&&(r.complete=!1),Kt(n,"corpus-read",`未进入检索:无法读取 Classic 归档状态 ${jn(e,d)}。`))}await o(l)}};return await o(t),i.sort()}async function Vu(t){let e=ee.resolve(t.projectRoot),r={deadline:Date.now()+BV,timedOut:!1,complete:!0},n;try{n=await Re(e)}catch(p){return Kt(t.reportDiagnostic,"config",`Project knowledge configuration is invalid: ${p.message}`),{documents:[],complete:!1}}if(!n)return{documents:[],complete:!0};if(lr(r))return{documents:[],complete:!1};let i={maxFileMb:n.knowledge?.local?.max_file_mb??Qe.max_file_mb,maxTotalMb:n.knowledge?.local?.max_total_mb??Qe.max_total_mb},o=i.maxFileMb*cR,a=i.maxTotalMb*cR,s=new Set(n.workflows??[n.default_workflow]),c=[];if(n.native&&s.has("native")){let p=ee.join(e,n.native.artifact_root,"comet");c.push(...await zs(ee.join(p,"specs"),e,"native-spec",void 0,t.reportDiagnostic,r),...await zs(ee.join(p,"archive"),e,"native-archive",void 0,t.reportDiagnostic,r))}if(n.classic&&s.has("classic")){let p=WV(e,n.classic.artifact_layout??"legacy"),f=ee.join(p,"changes","archive");c.push(...await zs(ee.join(p,"specs"),e,"classic-spec",void 0,t.reportDiagnostic,r),...await zs(ee.join(f),e,"classic-archive",void 0,t.reportDiagnostic,r),...await zV(e,f,t.reportDiagnostic,r))}n.knowledge?.provider==="local"&&n.knowledge.local?.include.length&&c.push(...await HV(e,n.knowledge.local.include,t.reportDiagnostic,r));let l=new Map;for(let p of c){let f=l.get(p.source);(f===void 0||Us(p.kind)<Us(f.kind))&&l.set(p.source,p)}let d=[],u=0;for(let p of[...l.values()].sort((f,m)=>f.source.localeCompare(m.source))){if(lr(r))break;if(d.length>=sR){r.complete=!1,Kt(t.reportDiagnostic,"corpus-limit",`未进入检索:语料文件数量超过 ${sR} 个,其余文件当前不会参与召回。`);break}try{let f=(await _i.stat(p.absolutePath)).size;if(f>o){Kt(t.reportDiagnostic,"corpus-bytes",`未进入检索:${p.source} 为 ${f} 字节,超过单文件上限 ${i.maxFileMb} MB。可在 .comet/config.yaml 调整 knowledge.local.max_file_mb。`);continue}if(u+f>a){Kt(t.reportDiagnostic,"corpus-bytes",`未进入检索:加入 ${p.source} 后将超过语料总预算 ${i.maxTotalMb} MB。可在 .comet/config.yaml 调整 knowledge.local.max_total_mb。`);continue}u+=f,d.push(p)}catch{r.complete=!1,Kt(t.reportDiagnostic,"corpus-read",`未进入检索:无法读取 ${p.source},该文件当前不会参与召回。`)}}return r.timedOut&&Kt(t.reportDiagnostic,"corpus-timeout","未进入检索:语料发现超过时间预算,尚未发现的文件当前不会参与召回。"),{documents:d,complete:r.complete}}async function fR(t){return(await Vu(t)).documents}function Us(t){return t==="native-spec"||t==="classic-spec"?0:t==="native-archive"||t==="classic-archive"?1:t==="custom"?2:3}import{createHash as Iq}from"node:crypto";import{createRequire as Tq}from"node:module";import Ii from"node:path";La();fg();import{StringDecoder as UV}from"node:string_decoder";async function Ay(t){let e=Nm(t.command??"rg",t.args,{cwd:t.cwd}),r=[],n=[],i=0,o=0,a=0,s=0,c="",l=new UV("utf8"),d=!1,u=!1,p=!1,f=!1,m,g=async()=>{if(!f)try{await pg(e)}catch{e.kill("SIGKILL")}},h=v=>{if(a>=t.maxOutputBytes){d=!0;return}let b=t.maxOutputBytes-a,k=v.subarray(0,b);n.push(Buffer.from(k)),a+=k.byteLength,k.byteLength<v.byteLength&&(d=!0,g())},w=v=>{if(o>=t.maxOutputBytes||u){d||=o>=t.maxOutputBytes;return}let b=t.maxOutputBytes-o,k=v.subarray(0,b);o+=k.byteLength;let E=(c+l.write(k)).split(`
|
||
`);c=E.pop()??"";for(let N of E){if(s>=t.maxMatches){u=!0,g();break}let P=`${N}
|
||
`,_=Buffer.byteLength(P,"utf8");if(i+_>t.maxOutputBytes){d=!0,g();break}if(r.push(Buffer.from(P,"utf8")),i+=_,/"type"\s*:\s*"match"/u.test(N)&&(s+=1,s>=t.maxMatches)){u=!0,g();break}}k.byteLength<v.byteLength&&(d=!0,c="",g())};return e.stdout.on("data",v=>w(Buffer.from(v))),e.stderr.on("data",v=>h(Buffer.from(v))),await new Promise(v=>{m=setTimeout(()=>{p=!0,g()},t.timeoutMs),e.once("error",b=>{f=!0,m&&clearTimeout(m),v({stdout:Buffer.concat(r).toString("utf8"),stderr:Buffer.concat(n).toString("utf8"),exitCode:null,timedOut:p,truncated:d,matchLimitReached:u,error:b})}),e.once("close",b=>{if(f=!0,m&&clearTimeout(m),c+=l.end(),c&&!d&&!u&&i<t.maxOutputBytes){let k=Buffer.byteLength(c,"utf8");i+k<=t.maxOutputBytes?(r.push(Buffer.from(c,"utf8")),i+=k):d=!0}v({stdout:Buffer.concat(r).toString("utf8"),stderr:Buffer.concat(n).toString("utf8"),exitCode:b,timedOut:p,truncated:d,matchLimitReached:u})})})}Q();import{closeSync as uq,mkdirSync as pq,openSync as fq,readFileSync as mq,readSync as hq,statSync as Ty}from"node:fs";import{createHash as gq}from"node:crypto";import Qs from"node:path";import{promises as _y}from"node:fs";import{createHash as ZV}from"node:crypto";import Js from"node:path";Q();import{createRequire as JV}from"node:module";var YV=JV(import.meta.url),XV="SQLite is an experimental feature and might change at any time",qu;function QV(){if(qu)return qu;let t=process.emitWarning;process.emitWarning=((e,...r)=>{(e instanceof Error?e.message:e).startsWith(XV)||Reflect.apply(t,process,[e,...r])});try{return qu=YV("node:sqlite").DatabaseSync,qu}finally{process.emitWarning=t}}function zu(t,e){let r=QV();return e===void 0?new r(t):new r(t,e)}var Gu="comet.project-knowledge.index.v3",eq=256*1024,mR=16e3,tq=256,rq=2e3;function nq(t){return ZV("sha256").update(t).digest("hex")}function hR(t){return typeof t=="number"?t:typeof t=="bigint"?Number(t):0}function iq(t){let e=t;return e.code==="SQLITE_BUSY"||e.code==="SQLITE_LOCKED"?!0:e.code==="ERR_SQLITE_ERROR"&&typeof e.message=="string"&&/(?:database|table|schema) is locked/iu.test(e.message)}function jy(t){let e=t.prepare("SELECT key, value FROM pk_meta").all();return new Map(e.map(({key:r,value:n})=>[r,n]))}function Ht(t,e,r){t.prepare("INSERT INTO pk_meta(key, value) VALUES (?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value").run(e,r)}function oq(t){t.exec("BEGIN IMMEDIATE;");try{t.prepare("DELETE FROM pk_fts_terms WHERE rowid NOT IN (SELECT id FROM pk_sections)").run(),t.prepare("DELETE FROM pk_fts_trigram WHERE rowid NOT IN (SELECT id FROM pk_sections)").run(),t.prepare("INSERT INTO pk_fts_terms(rowid, workspace_id, source, title, heading_path, body, lexical_terms) SELECT section.id, section.workspace_id, section.source, section.title, section.heading_path, section.body, section.lexical_terms FROM pk_sections AS section WHERE NOT EXISTS (SELECT 1 FROM pk_fts_terms AS fts WHERE fts.rowid = section.id)").run(),t.prepare("INSERT INTO pk_fts_trigram(rowid, workspace_id, source, title, heading_path, body) SELECT section.id, section.workspace_id, section.source, section.title, section.heading_path, section.body FROM pk_sections AS section WHERE NOT EXISTS (SELECT 1 FROM pk_fts_trigram AS fts WHERE fts.rowid = section.id)").run(),t.exec("COMMIT;")}catch(e){throw t.exec("ROLLBACK;"),e}}function aq(t){return`"${t.replaceAll('"','""')}"`}function gR(t){let e=[...new Set(t.map(r=>r.trim()).filter(r=>r.length>=2))];return e.length>0?e.map(aq).join(" OR "):null}function sq(t){return t.replaceAll(`\r
|
||
`,`
|
||
`).replaceAll("\r",`
|
||
`).split(`
|
||
`)}function cq(t){return t.normalize("NFKC").toLocaleLowerCase().replace(/[^\p{Letter}\p{Number}._-]+/gu,"-").replace(/^-+|-+$/gu,"").slice(0,100)||"section"}function yR(t){let e=[],r=n=>{let i=n.trim().toLocaleLowerCase();i.length<2||e.includes(i)||e.length>=tq||e.push(i)};for(let n of t.matchAll(/[A-Za-z][A-Za-z0-9_./:-]*/gu)){r(n[0]);for(let i of n[0].split(/[./:-]/u))r(i)}for(let n of t.matchAll(/[\u3400-\u9fff]{2,}/gu)){let i=n[0];r(i);for(let o=Math.min(4,i.length);o>=2;o-=1)for(let a=0;a+o<=i.length;a+=1)r(i.slice(a,a+o))}return e.join(" ")}function lq(t,e){let r=sq(e),n=0;if(r[0]?.trim()==="---"){let s=r.slice(1).findIndex(c=>c.trim()==="---");s>=0&&(n=s+2)}let i=[],o=[];for(let s=n;s<r.length;s+=1){let c=/^\s{0,3}(#{1,6})\s+(.+?)\s*#*\s*$/u.exec(r[s]??"");if(!c)continue;let l=c[1].length,d=c[2].trim().slice(0,200);o.length=l-1,o[l-1]=d,i.push({line:s,level:l,title:d,path:o.filter(Boolean).join(" > ")})}if(i.length===0){let s=r.slice(n).join(`
|
||
`).trim().slice(0,mR);if(!s)return[];let c=Js.posix.basename(t,Js.posix.extname(t));return[{anchor:"document",title:c,headingPath:c,body:s,lexicalTerms:yR(`${t}
|
||
${c}
|
||
${s}`)}]}let a=new Map;return i.map((s,c)=>{let l=r.slice(s.line,i[c+1]?.line??r.length).join(`
|
||
`).trim().slice(0,mR),d=s.path.split(" > ").map(cq).join("/"),u=(a.get(d)??0)+1;return a.set(d,u),{anchor:u===1?d:`${d}-${u}`,title:s.title,headingPath:s.path,body:l,lexicalTerms:yR(`${t}
|
||
${s.path}
|
||
${l}`)}})}var Uu=class{databasePath;repositoryId;workspaceId;lastSyncReadBytes=0;projectRoot;reportDiagnostic;database=null;constructor(e){this.projectRoot=Js.resolve(e.projectRoot),this.reportDiagnostic=e.reportDiagnostic;let r=rr(this.projectRoot,e.storageRoot??e.cacheRoot);this.databasePath=r.databasePath,this.repositoryId=r.repositoryId,this.workspaceId=r.workspaceId}async open(){if(this.database)return;await _y.mkdir(Js.dirname(this.databasePath),{recursive:!0});let e=null;try{e=zu(this.databasePath),e.exec("PRAGMA journal_mode = WAL; PRAGMA busy_timeout = 250;"),e.exec("CREATE TABLE IF NOT EXISTS pk_meta (key TEXT PRIMARY KEY, value TEXT NOT NULL);");let r=jy(e);r.size>0&&r.get("schema")!==Gu&&(e.exec(["DROP TABLE IF EXISTS pk_fts_terms;","DROP TABLE IF EXISTS pk_fts_trigram;","DROP TABLE IF EXISTS pk_sections;","DROP TABLE IF EXISTS pk_sources;"].join(`
|
||
`)),e.prepare("DELETE FROM pk_meta WHERE key IN ('schema', 'workspaceId')").run()),e.exec(["CREATE TABLE IF NOT EXISTS pk_sources (workspace_id TEXT NOT NULL, source TEXT NOT NULL, kind TEXT NOT NULL, archived_at TEXT, size INTEGER NOT NULL, modified_at REAL NOT NULL, digest TEXT NOT NULL, indexed_at TEXT NOT NULL, PRIMARY KEY(workspace_id, source));","CREATE TABLE IF NOT EXISTS pk_sections (id INTEGER PRIMARY KEY, workspace_id TEXT NOT NULL, source TEXT NOT NULL, anchor TEXT NOT NULL, title TEXT NOT NULL, heading_path TEXT NOT NULL, body TEXT NOT NULL, lexical_terms TEXT NOT NULL, updated_at TEXT NOT NULL, UNIQUE(workspace_id, source, anchor));","CREATE INDEX IF NOT EXISTS pk_sections_workspace_source ON pk_sections(workspace_id, source);","CREATE VIRTUAL TABLE IF NOT EXISTS pk_fts_terms USING fts5(workspace_id UNINDEXED, source UNINDEXED, title, heading_path, body, lexical_terms, tokenize='unicode61');","CREATE VIRTUAL TABLE IF NOT EXISTS pk_fts_trigram USING fts5(workspace_id UNINDEXED, source UNINDEXED, title, heading_path, body, tokenize='trigram');"].join(`
|
||
`));let n=jy(e);if(n.get("repositoryId")&&n.get("repositoryId")!==this.repositoryId)throw new Error("Project knowledge index identity or structure is incompatible");Ht(e,"schema",Gu),Ht(e,"repositoryId",this.repositoryId),Ht(e,"tokenizer","unicode61+trigram"),oq(e),e.prepare("SELECT rowid FROM pk_fts_terms WHERE pk_fts_terms MATCH 'probe'").all(),this.database=e}catch(r){if(iq(r))throw e?.close(),this.reportDiagnostic?.({code:"index-unavailable",message:"Project knowledge section index is temporarily locked; authoritative records were retained."}),r;let n=!1;if(e)try{e.exec(["DROP TABLE IF EXISTS pk_fts_terms;","DROP TABLE IF EXISTS pk_fts_trigram;","DROP TABLE IF EXISTS pk_sections;","DROP TABLE IF EXISTS pk_sources;","CREATE TABLE pk_sources (workspace_id TEXT NOT NULL, source TEXT NOT NULL, kind TEXT NOT NULL, archived_at TEXT, size INTEGER NOT NULL, modified_at REAL NOT NULL, digest TEXT NOT NULL, indexed_at TEXT NOT NULL, PRIMARY KEY(workspace_id, source));","CREATE TABLE pk_sections (id INTEGER PRIMARY KEY, workspace_id TEXT NOT NULL, source TEXT NOT NULL, anchor TEXT NOT NULL, title TEXT NOT NULL, heading_path TEXT NOT NULL, body TEXT NOT NULL, lexical_terms TEXT NOT NULL, updated_at TEXT NOT NULL, UNIQUE(workspace_id, source, anchor));","CREATE INDEX pk_sections_workspace_source ON pk_sections(workspace_id, source);","CREATE VIRTUAL TABLE pk_fts_terms USING fts5(workspace_id UNINDEXED, source UNINDEXED, title, heading_path, body, lexical_terms, tokenize='unicode61');","CREATE VIRTUAL TABLE pk_fts_trigram USING fts5(workspace_id UNINDEXED, source UNINDEXED, title, heading_path, body, tokenize='trigram');"].join(`
|
||
`)),Ht(e,"schema",Gu),Ht(e,"repositoryId",this.repositoryId),Ht(e,"tokenizer","unicode61+trigram"),n=!0,this.reportDiagnostic?.({code:"index-recovered",message:"Project knowledge section and FTS projection was rebuilt in place."})}catch{}throw e?.close(),n||this.reportDiagnostic?.({code:"index-unavailable",message:"Project knowledge section index is unavailable; authoritative records were retained."}),r}}close(){this.database?.close(),this.database=null}async syncCorpus(e,r={}){return this.syncCorpusInternal(e,{complete:r.complete!==!1,deadline:Date.now()+rq})}async syncCorpusInternal(e,r){await this.open();let n=this.requireDatabase(),i=new Map(n.prepare("SELECT source, size, modified_at, digest FROM pk_sources WHERE workspace_id = ?").all(this.workspaceId).map(c=>[c.source,c])),o=new Set(e.map(c=>c.source)),a=[],s=[];this.lastSyncReadBytes=0;for(let c=0;c<e.length;c+=1){let l=e[c];if(r.deadline!==void 0&&Date.now()>r.deadline){this.reportDiagnostic?.({code:"index-budget",message:"未进入检索:索引刷新超过时间预算,尚未处理的语料当前不会参与召回。"}),a.push(...e.slice(c));break}let d;try{d=await _y.lstat(l.absolutePath)}catch{a.push(l),i.has(l.source)&&this.reportDiagnostic?.({code:"index-source",message:`未进入检索:${l.source} 在索引时发生变化或无法读取,已保留之前的可用索引。`});continue}let u=i.get(l.source);try{let p=await O(this.projectRoot,l.source,eq,{label:l.source});if(this.lastSyncReadBytes+=p.bytes.length,r.deadline!==void 0&&Date.now()>r.deadline){this.reportDiagnostic?.({code:"index-budget",message:"未进入检索:索引刷新超过时间预算,尚未处理的语料当前不会参与召回。"}),a.push(...e.slice(c));break}let f=await _y.lstat(l.absolutePath);if(f.size!==p.stat.size||f.mtimeMs!==p.stat.mtimeMs)throw new Error("source changed while it was being indexed");let m=nq(p.bytes);if(!r.force&&u&&u.size===d.size&&u.modified_at===d.mtimeMs&&u.digest===m)continue;let g=lq(l.source,p.bytes.toString("utf8"));if(r.deadline!==void 0&&Date.now()>r.deadline){this.reportDiagnostic?.({code:"index-budget",message:"未进入检索:索引刷新超过时间预算,尚未处理的语料当前不会参与召回。"}),a.push(...e.slice(c));break}try{this.applySourceDelta(n,l,Number(p.stat.size),Number(p.stat.mtimeMs),m,g,r.force===!0)}catch{a.push(l),this.reportDiagnostic?.({code:"index-write",message:`未进入检索:${l.source} 的索引写入失败,已保留之前的可用索引。`});continue}s.push(l)}catch{a.push(l),this.reportDiagnostic?.({code:"index-source",message:`未进入检索:${l.source} 在索引时发生变化或无法读取,已保留之前的可用索引。`})}}if(r.complete&&a.length===0)for(let c of i.keys())o.has(c)||this.removeSource(n,this.workspaceId,c);return{changedSources:a,refreshedSources:s,status:this.status()}}search(e){let r=performance.now(),n=this.requireDatabase(),i=[],o=gR([...e.strongTerms,...e.phraseTerms,...e.weakTerms]);o&&i.push({name:"fts-terms",rows:this.searchChannel(n,this.workspaceId,"terms",o,40)});let a=gR([...e.phraseTerms,...e.weakTerms].filter(d=>[...d].length>=3));a&&i.push({name:"fts-trigram",rows:this.searchChannel(n,this.workspaceId,"trigram",a,20)});let s=new Map;for(let d of i)d.rows.forEach((u,p)=>{let f=s.get(u.id),m=(f?.score??0)+1/(60+p+1),g=new Set(f?.channels??[]);g.add(d.name),s.set(u.id,{row:u,score:m,channels:g})});let c=[...s.values()].map(({row:d,score:u,channels:p})=>{let f=`${d.source}
|
||
${d.title}
|
||
${d.heading_path}
|
||
${d.body}`.toLocaleLowerCase(),m=e.strongTerms.some(v=>f.includes(v.toLocaleLowerCase())),g=e.phraseTerms.some(v=>f.includes(v.toLocaleLowerCase())),h=e.terms.filter(v=>f.includes(v.toLocaleLowerCase())).length,w=!!(e.path&&d.source.toLocaleLowerCase().includes(e.path.toLocaleLowerCase())),y=d.kind.endsWith("-spec")?0:d.kind.endsWith("-archive")?1:2;return{row:d,reliable:m||g||h>=2,score:u+(m?.05:0)+(g?.025:0)+(w?.03:0)-y*.05,names:p}}).filter(d=>d.reliable).sort((d,u)=>u.score-d.score||d.row.source.localeCompare(u.row.source)).slice(0,40),l=Math.round((performance.now()-r)*100)/100;return Ht(n,"lastQueryMs",String(l)),Ht(n,"lastCandidateCount",String(c.length)),Ht(n,"lastChannels",i.map(d=>d.name).join(",")),c.map(({row:d,score:u})=>({source:d.source,title:d.title,content:d.body.slice(0,1600),score:u,document:{absolutePath:Js.join(this.projectRoot,...d.source.split("/")),source:d.source,kind:d.kind,...d.archived_at?{archivedAt:d.archived_at}:{}}}))}status(){let e=this.requireDatabase(),r=jy(e),n=e.prepare("SELECT source, kind, archived_at, indexed_at FROM pk_sources WHERE workspace_id = ? ORDER BY source").all(this.workspaceId).map(a=>({source:a.source,kind:a.kind,...a.archived_at?{archivedAt:a.archived_at}:{},updatedAt:a.indexed_at})),i=hR(e.prepare("SELECT COUNT(*) AS count FROM pk_sources WHERE workspace_id = ?").get(this.workspaceId).count),o=hR(e.prepare("SELECT COUNT(*) AS count FROM pk_sections WHERE workspace_id = ?").get(this.workspaceId).count);return{schema:Gu,available:!0,databasePath:this.databasePath,repositoryId:this.repositoryId,workspaceId:this.workspaceId,sourceCount:i,sources:n,sectionCount:o,...r.get("updatedAt")?{updatedAt:r.get("updatedAt")}:{},...Number.isFinite(Number(r.get("lastQueryMs")))?{lastQueryMs:Number(r.get("lastQueryMs"))}:{},...Number.isSafeInteger(Number(r.get("lastCandidateCount")))?{lastCandidateCount:Number(r.get("lastCandidateCount"))}:{},channels:(r.get("lastChannels")??"").split(",").filter(Boolean)}}async rebuild(e){return(await this.syncCorpusInternal(e,{complete:!0,force:!0})).status}applySourceDelta(e,r,n,i,o,a,s=!1){let c=new Date().toISOString();e.exec("BEGIN IMMEDIATE;");try{e.prepare("INSERT INTO pk_sources(workspace_id, source, kind, archived_at, size, modified_at, digest, indexed_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT(workspace_id, source) DO UPDATE SET kind = excluded.kind, archived_at = excluded.archived_at, size = excluded.size, modified_at = excluded.modified_at, digest = excluded.digest, indexed_at = excluded.indexed_at").run(this.workspaceId,r.source,r.kind,r.archivedAt??null,n,i,o,c);let l=new Map(e.prepare("SELECT id, anchor, title, heading_path, body, lexical_terms FROM pk_sections WHERE workspace_id = ? AND source = ?").all(this.workspaceId,r.source).map(u=>[u.anchor,u])),d=new Set(a.map(u=>u.anchor));for(let u of l.values())d.has(u.anchor)||(e.prepare("DELETE FROM pk_fts_terms WHERE rowid = ?").run(u.id),e.prepare("DELETE FROM pk_fts_trigram WHERE rowid = ?").run(u.id),e.prepare("DELETE FROM pk_sections WHERE id = ?").run(u.id));for(let u of a){let p=l.get(u.anchor);if(p&&p.title===u.title&&p.heading_path===u.headingPath&&p.body===u.body&&p.lexical_terms===u.lexicalTerms&&!s)continue;let m;if(p)m=p.id,e.prepare("UPDATE pk_sections SET title = ?, heading_path = ?, body = ?, lexical_terms = ?, updated_at = ? WHERE id = ?").run(u.title,u.headingPath,u.body,u.lexicalTerms,c,m);else{let g=e.prepare("INSERT INTO pk_sections(workspace_id, source, anchor, title, heading_path, body, lexical_terms, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?)").run(this.workspaceId,r.source,u.anchor,u.title,u.headingPath,u.body,u.lexicalTerms,c);m=Number(g.lastInsertRowid)}e.prepare("DELETE FROM pk_fts_terms WHERE rowid = ?").run(m),e.prepare("DELETE FROM pk_fts_trigram WHERE rowid = ?").run(m),e.prepare("INSERT INTO pk_fts_terms(rowid, workspace_id, source, title, heading_path, body, lexical_terms) VALUES (?, ?, ?, ?, ?, ?, ?)").run(m,this.workspaceId,r.source,u.title,u.headingPath,u.body,u.lexicalTerms),e.prepare("INSERT INTO pk_fts_trigram(rowid, workspace_id, source, title, heading_path, body) VALUES (?, ?, ?, ?, ?, ?)").run(m,this.workspaceId,r.source,u.title,u.headingPath,u.body)}Ht(e,"updatedAt",c),e.exec("COMMIT;")}catch(l){throw e.exec("ROLLBACK;"),l}}removeSource(e,r,n){let i=e.prepare("SELECT id FROM pk_sections WHERE workspace_id = ? AND source = ?").all(r,n);e.exec("BEGIN IMMEDIATE;");try{for(let{id:o}of i)e.prepare("DELETE FROM pk_fts_terms WHERE rowid = ?").run(o),e.prepare("DELETE FROM pk_fts_trigram WHERE rowid = ?").run(o);e.prepare("DELETE FROM pk_sections WHERE workspace_id = ? AND source = ?").run(r,n),e.prepare("DELETE FROM pk_sources WHERE workspace_id = ? AND source = ?").run(r,n),Ht(e,"updatedAt",new Date().toISOString()),e.exec("COMMIT;")}catch(o){throw e.exec("ROLLBACK;"),o}}searchChannel(e,r,n,i,o){let a=n==="terms"?"pk_fts_terms":"pk_fts_trigram",s=n==="terms"?"0.0, 0.0, 1.0, 3.0, 2.0, 0.8, 1.5":"0.0, 0.0, 1.0, 2.5, 1.8, 0.7";return e.prepare(`SELECT s.id, s.source, p.kind, p.archived_at, s.title, s.heading_path, s.body, bm25(${a}, ${s}) AS rank FROM ${a} JOIN pk_sections s ON s.id = ${a}.rowid JOIN pk_sources p ON p.workspace_id = s.workspace_id AND p.source = s.source WHERE ${a} MATCH ? AND s.workspace_id = ? ORDER BY rank LIMIT ?`).all(i,r,o)}requireDatabase(){if(!this.database)throw new Error("Project knowledge index is not open");return this.database}};function Iy(t){return t.normalize("NFKC").toLocaleLowerCase().replace(/[^\p{L}\p{N}]+/gu,"-").replace(/^-+|-+$/gu,"")}function dq(t,e){let r=Iy(e);return r?t.split(/\r?\n/u).map(i=>/^#{1,6}\s+(.+?)(?:\s+#+)?$/u.exec(i)?.[1]).filter(i=>i!==void 0).some(i=>Iy(i)===r)?!0:[...t.matchAll(/\b(?:id|name)\s*=\s*["']([^"']+)["']/giu)].some(i=>Iy(i[1]??"")===r):!1}function Ju(t,e){if(e.anchor!==void 0&&!dq(t,e.anchor))return!1;if(e.lineStart!==void 0||e.lineEnd!==void 0){let r=t.split(/\r?\n/u).length;if((e.lineStart??1)>r||(e.lineEnd??e.lineStart??1)>r)return!1}return!0}Q();var yq=1024*1024,vR="4",wR="generated-record-maintenance-v2";function bR(t,e){if(t.sourceVersions.length!==e.sourceVersions.length)return!1;let r=new Map(e.sourceVersions.map(n=>[n.source,n]));return t.sourceVersions.every(n=>{let i=r.get(n.source);return!i||n.size!==i.size||n.modifiedAt!==i.modifiedAt?!1:n.digest===void 0||i.digest===void 0?n.digest===void 0&&i.digest===void 0:n.digest===i.digest})}function Xu(t){return[...t.conclusions.flatMap(e=>e.sources),...t.relations.flatMap(e=>e.sources)]}function dr(t){return t.trim().replace(/\s+/gu," ")}function _R(t){return t.id.startsWith("generated-module-")&&!t.id.startsWith("generated-module-overview")}function vq(t){let e=dr(t),r=e.search(/[::]/u);if(r<0)return e;let n=e.slice(0,r),i=e.slice(r+1).replace(/[。.]+$/u,""),o=/registration points|注册点/iu.test(n),a=i.split(o?/\s*;\s*|\s*;\s*/u:/\s*、\s*|\s*,\s*/u).map(s=>s.trim()).filter(Boolean).sort((s,c)=>s.localeCompare(c));return`${n}:${a.join("|")}`}function wq(t){return{source:ji(t.source),...t.anchor===void 0?{}:{anchor:dr(t.anchor)}}}function bq(t){let e=ji(t.source),r=e.split("/").filter(Boolean),n=new Set(["app","domains","platform","src","packages"]);return{source:r[0]==="test"&&r[1]&&n.has(r[1])?r.slice(0,3).join("/"):r[0]&&n.has(r[0])?r.slice(0,Math.min(2,r.length)).join("/"):e,...t.anchor===void 0?{}:{anchor:dr(t.anchor)}}}function Xs(t){let e=_R(t),r=e?bq:wq,n=t.conclusions.map(o=>({text:e?vq(o.text):dr(o.text),sources:[...new Map(o.sources.map(a=>{let s=r(a);return[JSON.stringify(s),s]})).values()].sort((a,s)=>JSON.stringify(a).localeCompare(JSON.stringify(s)))})).sort((o,a)=>JSON.stringify(o).localeCompare(JSON.stringify(a))),i={type:t.type,title:dr(t.title),summary:e?n.map(o=>o.text).join(" "):dr(t.summary),applicablePaths:[...t.applicablePaths].map(ji).sort(),operations:[...t.operations].map(dr).sort(),phases:[...t.phases??[]].map(dr).sort(),conclusions:n,relations:t.relations.filter(o=>o.type!=="supersedes").map(o=>({type:o.type,targetId:o.targetId,sources:[...new Map(o.sources.map(a=>{let s=r(a);return[JSON.stringify(s),s]})).values()].sort((a,s)=>JSON.stringify(a).localeCompare(JSON.stringify(s)))})).sort((o,a)=>JSON.stringify(o).localeCompare(JSON.stringify(a))),verification:t.verification.map(o=>({command:dr(o.command),...o.expected===void 0?{}:{expected:dr(o.expected)}})).sort((o,a)=>JSON.stringify(o).localeCompare(JSON.stringify(a)))};return gq("sha256").update(JSON.stringify(i)).digest("hex").slice(0,12)}function kq(t){return t.replace(/-v-[a-f0-9]{12}$/u,"")}function kR(t){return t.authority==="user"||t.applicationCount>0||t.successCount>0||t.failureCount>0||t.lastAppliedAt!==void 0}function SR(t,e){let r=Xs(e);return U({...e,id:`${t.slice(0,112)}-v-${r}`,state:"superseded",relations:e.relations.filter(n=>n.type!=="supersedes")})}function Sq(t,e){if(e.anchor===void 0&&e.lineStart===void 0&&e.lineEnd===void 0)return!0;let r=Ty(t),n=Math.min(Number(r.size),yq),i=Buffer.alloc(n),o=fq(t,"r");try{hq(o,i,0,n,0)}finally{uq(o)}let a=i.toString("utf8");return Ju(a,e)}async function Nq(t,e){let{digest:r}=await wr(t,e,{label:`Project Knowledge source ${e}`});return r}async function NR(t,e,r){let n=Xu(e),i=new Set(n.map(d=>d.source)),o=[...i,...e.sourceVersions.map(d=>d.source).filter(d=>!i.has(d))];if(o.length===0)return{current:!1,complete:!0,sourceVersions:e.sourceVersions};let a=new Map(e.sourceVersions.map(d=>[d.source,d])),s=[],c=!0,l=!0;for(let d of o)try{let u=Qs.join(t,...d.split("/")),p=Ty(u);if(!p.isFile()){l=!1;continue}let f={source:d,size:p.size,modifiedAt:Math.trunc(p.mtimeMs),digest:await Nq(t,d)};s.push(f),n.filter(g=>g.source===d).every(g=>Sq(u,g))||(c=!1);let m=a.get(d);!r&&(m===void 0||m.digest===void 0||m.digest!==f.digest)&&(c=!1)}catch{c=!1,l=!1}return{current:c,complete:l,sourceVersions:l?s:e.sourceVersions}}function ER(t){return Xu(t).length>0||t.sourceVersions.length>0}function Eq(t,e){return e.verification.every(r=>$y(t,r.command)!=="missing")}function xq(t,e){return e.verification.length>0&&e.verification.every(r=>$y(t,r.command)==="current")}function $y(t,e){let r=e.trim().replace(/\s+/gu," ");if(/^comet (?:native check|classic guard)(?:\s|$)/u.test(r))return"current";let n=/^(?:pnpm|npm|yarn|bun) run ([A-Za-z0-9:_-]+)(?:\s|$)/u.exec(r),i=/^(?:pnpm|yarn) ([A-Za-z0-9:_-]+)(?:\s|$)/u.exec(r),o=/^npm (test|start|stop|restart)(?:\s|$)/u.exec(r),a=n?.[1]??i?.[1]??o?.[1];if(a!==void 0)try{return typeof JSON.parse(mq(Qs.join(t,"package.json"),"utf8")).scripts?.[a]=="string"?"current":"missing"}catch{return"missing"}let s=r.split(" ")[0]?.replaceAll("\\","/")??"";return/^(?:\.\/)?(?:mvnw(?:\.cmd)?|gradlew(?:\.bat)?)$/iu.test(s)?Ys(t,s.replace(/^\.\//u,""))?"current":"missing":/^\.\/[A-Za-z0-9._/-]+$/u.test(s)?Ys(t,s.slice(2))?"current":"missing":/^(?:mvn|mvn\.cmd)$/iu.test(s)?Ys(t,"pom.xml")?"current":"unknown":/^(?:gradle|gradle\.bat)$/iu.test(s)?["build.gradle","build.gradle.kts","settings.gradle","settings.gradle.kts"].some(c=>Ys(t,c))?"current":"unknown":(s==="pytest"||/^(?:python|python3|py)$/iu.test(s)&&/^\S+ -m pytest(?:\s|$)/u.test(r))&&["pyproject.toml","pytest.ini","setup.cfg","tox.ini"].some(c=>Ys(t,c))?"current":"unknown"}function Ys(t,e){try{return Ty(Qs.join(t,...e.split("/"))).isFile()}catch{return!1}}function xR(t){return t==="corrected"||t==="contributed-to-failure"}function Pq(t){let e=Xu(t)[0];return e===void 0?`record:${t.id}`:jR(e)}function jR(t){return t.anchor!==void 0?`${t.source}#${t.anchor}`:t.lineStart!==void 0?`${t.source}#L${t.lineStart}${t.lineEnd?`-L${t.lineEnd}`:""}`:t.source}function Cq(t){return[t.title,t.summary,...t.applicablePaths,...t.operations,...t.phases??[],...t.conclusions.map(e=>e.text)].join(`
|
||
`).toLocaleLowerCase()}var PR={topology:0,fact:1,dependency:2,constraint:3,decision:4,pattern:5,procedure:6,"failure-resolution":7};function ji(t){return t.replaceAll("\\","/").replace(/^\.\//u,"").toLocaleLowerCase()}function Rq(t,e){if(!e.path)return!1;let r=ji(e.path);return t.applicablePaths.map(ji).some(n=>n===r||n.startsWith(`${r}/`)||r.startsWith(n.endsWith("/")?n:`${n}/`))}function Aq(t,e){if(!e.path)return!1;let r=ji(e.path);return t.applicablePaths.map(ji).some(n=>gu(n,r))}function IR(t,e){if(!e.operation)return!1;let r=e.operation.toLocaleLowerCase();return t.operations.some(n=>n.toLocaleLowerCase()===r)}function _q(t,e){if(t.applicablePaths.length>0&&e.path&&!Aq(t,e)||t.operations.length>0&&e.operation&&!IR(t,e))return!1;let r=t.phases??[];if(r.length>0&&e.phase){let n=e.phase.toLocaleLowerCase();if(!r.some(i=>i.toLocaleLowerCase()===n))return!1}return!0}function CR(t){return t.state==="enforced"?3:t.state==="proven"?2:1}function RR(t){return t.authority==="user"?3:t.authority==="repository"?2:1}function AR(t){return Math.min(t.successCount,10)*4-Math.min(t.failureCount,10)*8}function jq(t){return{provider:"local",healthy:t.available,writable:!0,diagnostics:t.diagnostic?[{code:"index-unavailable",message:t.diagnostic}]:[],updatedAt:t.updatedAt}}var Yu=class t{static sharedDatabases=new Map;databasePath;repositoryId;workspaceId;projectRoot;reportDiagnostic;database;indexStore;closed=!1;constructor(e){this.projectRoot=Qs.resolve(e.projectRoot),this.reportDiagnostic=e.reportDiagnostic;let r=rr(this.projectRoot,e.storageRoot??e.cacheRoot);this.databasePath=r.databasePath,this.repositoryId=r.repositoryId,this.workspaceId=r.workspaceId,pq(Qs.dirname(this.databasePath),{recursive:!0}),this.database=this.acquireDatabase(),this.initializeSchema(),this.maintainGeneratedRecords(),this.indexStore=new Uu({projectRoot:e.projectRoot,...e.storageRoot?{cacheRoot:e.storageRoot}:{},...e.cacheRoot?{cacheRoot:e.cacheRoot}:{},...e.reportDiagnostic?{reportDiagnostic:e.reportDiagnostic}:{}})}status(){let e=this.requireDatabase().prepare("SELECT COUNT(*) AS count, MAX(updated_at) AS updated_at FROM pk_records").get();return{provider:"local",healthy:!0,writable:!0,recordCount:typeof e.count=="bigint"?Number(e.count):e.count??0,...e.updated_at?{updatedAt:e.updated_at}:{},diagnostics:[]}}list(e={}){let r=[],n=[];e.projectId&&(r.push("project_id = ?"),n.push(e.projectId)),e.type&&(r.push("type = ?"),n.push(e.type)),e.state&&(r.push("state = ?"),n.push(e.state)),e.authority&&(r.push("authority = ?"),n.push(e.authority));let i=Math.max(1,Math.min(500,e.limit??500));return this.requireDatabase().prepare(`SELECT payload_json FROM pk_records${r.length?` WHERE ${r.join(" AND ")}`:""} ORDER BY updated_at DESC, id LIMIT ?`).all(...n,i).map(a=>U(JSON.parse(a.payload_json)))}projectCounts(e){let r=this.requireDatabase().prepare("SELECT state, COUNT(*) AS count FROM pk_records WHERE project_id = ? GROUP BY state").all(e),n={active:0,trial:0,proven:0,enforced:0,superseded:0,total:0};for(let i of r){let o=typeof i.count=="bigint"?Number(i.count):i.count;n[i.state]=o,n.total+=o,i.state!=="superseded"&&(n.active+=o)}return n}read(e){let r=this.requireDatabase().prepare("SELECT payload_json FROM pk_records WHERE id = ?").get(e);return r?U(JSON.parse(r.payload_json)):null}importNewerRecords(e){let r=this.requireDatabase().prepare("INSERT INTO pk_records(id, project_id, type, state, authority, payload_json, source_versions_json, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT(id) DO UPDATE SET project_id = excluded.project_id, type = excluded.type, state = excluded.state, authority = excluded.authority, payload_json = excluded.payload_json, source_versions_json = excluded.source_versions_json, updated_at = excluded.updated_at WHERE pk_records.updated_at < excluded.updated_at"),n=0;for(let i of e){let o=r.run(i.id,i.projectId,i.type,i.state,i.authority,JSON.stringify(i),JSON.stringify(i.sourceVersions),i.updatedAt);n+=Number(o.changes)}return n}importSnapshot(e,r){let n=e.records.map(o=>[o.id,o.projectId,o.type,o.state,o.authority,JSON.stringify(o),JSON.stringify(o.sourceVersions),o.updatedAt]),i=this.requireDatabase();i.exec("BEGIN IMMEDIATE;");try{if(r!==void 0&&i.prepare("SELECT value FROM pk_meta WHERE key = ?").get(r))return i.exec("COMMIT;"),!1;let o=i.prepare("INSERT INTO pk_records(id, project_id, type, state, authority, payload_json, source_versions_json, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT(id) DO UPDATE SET project_id = excluded.project_id, type = excluded.type, state = excluded.state, authority = excluded.authority, payload_json = excluded.payload_json, source_versions_json = excluded.source_versions_json, updated_at = excluded.updated_at WHERE pk_records.updated_at < excluded.updated_at");for(let l of n)o.run(...l);let a=i.prepare("INSERT OR IGNORE INTO pk_applied_mutations(mutation_key, applied_at) VALUES (?, ?)");for(let l of e.appliedMutations)a.run(l.mutationKey,l.appliedAt);let s=i.prepare("INSERT INTO pk_application_outcomes(record_id, application_id, status, revision) VALUES (?, ?, ?, ?) ON CONFLICT(record_id, application_id) DO UPDATE SET status = excluded.status, revision = excluded.revision WHERE pk_application_outcomes.revision < excluded.revision");for(let l of e.applicationOutcomes)s.run(l.recordId,l.applicationId,l.status,l.revision);let c=i.prepare("INSERT OR IGNORE INTO pk_feedback_state(record_id, base_state) VALUES (?, ?)");for(let l of e.feedbackStates)c.run(l.recordId,l.baseState);return r!==void 0&&i.prepare("INSERT INTO pk_meta(key, value) VALUES (?, ?)").run(r,"complete"),i.exec("COMMIT;"),!0}catch(o){throw i.exec("ROLLBACK;"),o}}searchRecords(e){let r=[...new Set([...e.terms,...e.strongTerms,...e.phraseTerms].map(l=>l.toLocaleLowerCase()).filter(Boolean))],n=e.path===void 0&&e.operation===void 0&&e.phase===void 0,i=this.list().filter(l=>l.state!=="superseded"&&_q(l,e)),o=i.map(l=>{let d=Cq(l),u=r.filter(p=>d.includes(p)).length;return{record:l,matches:u,pathAssociation:Rq(l,e),operationAssociation:IR(l,e)}}).filter(({matches:l,pathAssociation:d})=>r.length===0?d||e.path===void 0:l>0||d).sort((l,d)=>{if(n&&l.matches!==d.matches)return d.matches-l.matches;let u=CR(d.record)-CR(l.record);if(u!==0)return u;let p=RR(d.record)-RR(l.record);if(p!==0)return p;let f=AR(d.record)-AR(l.record);if(f!==0)return f;if(l.pathAssociation!==d.pathAssociation)return l.pathAssociation?-1:1;if(l.operationAssociation!==d.operationAssociation)return l.operationAssociation?-1:1;if(l.matches!==d.matches)return d.matches-l.matches;let m=PR[l.record.type]-PR[d.record.type];return m!==0?m:l.record.id.localeCompare(d.record.id)}),a=new Map(i.map(l=>[l.id,l])),s=o.map(({record:l,matches:d,pathAssociation:u})=>({record:l,matches:d,pathAssociation:u})),c=new Set(s.map(({record:l})=>l.id));for(let{record:l}of o)for(let d of l.relations){let u=a.get(d.targetId);!u||c.has(u.id)||(s.push({record:u,matches:0,pathAssociation:!1,relationSource:d.sources[0]}),c.add(u.id))}return s.slice(0,40).map(({record:l,matches:d,pathAssociation:u,relationSource:p})=>({source:p?jR(p):Pq(l),title:l.title,record:l,content:`${l.summary}
|
||
${l.conclusions.map(f=>f.text).join(`
|
||
`)}`.slice(0,1600),score:d+(u?100:0)}))}async apply(e){if(e.kind==="refresh"){let s=this.list({projectId:e.projectId}),c=!1;for(let d of s){if(d.state==="superseded"||e.id&&e.id!==d.id)continue;let u=await NR(this.projectRoot,d,d.authority==="user"&&d.sourceVersions.length===0),f=Eq(this.projectRoot,d)?d.authority==="user"&&!ER(d)?d.state==="enforced"?"enforced":"proven":u.current?d.state:"superseded":"superseded";if(f!==d.state||u.current&&JSON.stringify(u.sourceVersions)!==JSON.stringify(d.sourceVersions)){let m=d.sourceVersions.some(h=>h.digest===void 0),g=u.complete&&(u.current||m)?u.sourceVersions:d.sourceVersions;this.write({...d,state:f,sourceVersions:g,updatedAt:new Date().toISOString()}),c||=f!==d.state||JSON.stringify(g)!==JSON.stringify(d.sourceVersions)}}let l=this.list({projectId:e.projectId});return{kind:e.kind,changed:c,records:l,diagnostics:[]}}if(e.kind==="verify"){let s=new Set(e.commands.map(d=>d.trim())),c=this.list({projectId:e.projectId,type:"constraint"}),l=!1;for(let d of c)d.state==="superseded"||d.verification.length===0||!d.verification.every(u=>s.has(u.command.trim())&&$y(this.projectRoot,u.command)!=="missing")||d.state!=="enforced"&&(this.write({...d,state:"enforced",updatedAt:e.updatedAt}),l=!0);return{kind:e.kind,changed:l,records:this.list({projectId:e.projectId}),diagnostics:[]}}if(e.kind==="feedback")return this.applyFeedback(e);let r=this.read(e.kind==="upsert"?e.record.id:e.id);if(e.kind==="upsert"){let s=U(e.record),c=s.state==="enforced"&&!xq(this.projectRoot,s)?U({...s,state:"proven"}):s;if(r&&r.authority==="user"&&c.authority!=="user")return{kind:e.kind,changed:!1,record:r,diagnostics:[]};if(r?.state==="superseded"&&c.authority!=="user"&&bR(r,c))return{kind:e.kind,changed:!1,record:r,diagnostics:[]};if(r&&c.authority!=="user"){let d=Xs(r),u=Xs(c);if(r.state!=="superseded"&&d===u&&bR(r,c))return{kind:e.kind,changed:!1,record:r,diagnostics:[]};if(d===u){let h=U({...c,state:r.state==="enforced"?"enforced":c.state,applicationCount:r.applicationCount,successCount:r.successCount,failureCount:r.failureCount,...r.lastAppliedAt===void 0?{}:{lastAppliedAt:r.lastAppliedAt}});return this.write(h),{kind:e.kind,changed:JSON.stringify(r)!==JSON.stringify(h),record:h,diagnostics:[]}}let p=SR(c.id,r),f=this.read(p.id);(!f||!kR(f))&&this.write(p);let m=Xu(c)[0]??(c.sourceVersions[0]?{source:c.sourceVersions[0].source}:void 0),g=U({...c,relations:m===void 0?c.relations:[...c.relations.filter(h=>h.type!=="supersedes").slice(0,15),{type:"supersedes",targetId:p.id,sources:[m]}]});return this.write(g),{kind:e.kind,changed:!0,record:g,diagnostics:[]}}let l=r?yP(r,c):c;return this.write(l),{kind:e.kind,changed:!r||JSON.stringify(r)!==JSON.stringify(l),record:l,diagnostics:[]}}if(!r||r.projectId!==e.projectId)return{kind:e.kind,changed:!1,record:null,diagnostics:[{code:"record-not-found",message:`Project knowledge record not found: ${e.id}`}]};if(e.kind==="supersede"){let s=U({...r,state:"superseded",updatedAt:e.updatedAt});return this.write(s),{kind:e.kind,changed:!0,record:s,diagnostics:[]}}let n=U({...r,...e.title!==void 0?{title:e.title}:{},...e.summary!==void 0?{summary:e.summary}:{},...e.applicablePaths!==void 0?{applicablePaths:e.applicablePaths}:{},...e.operations!==void 0?{operations:e.operations}:{},...e.phases!==void 0?{phases:e.phases}:{},...e.conclusions!==void 0?{conclusions:e.conclusions}:{},...e.relations!==void 0?{relations:e.relations}:{},...e.verification!==void 0?{verification:e.verification}:{},authority:"user",state:"proven",updatedAt:e.updatedAt}),i=U({...n,state:"proven"}),o=await NR(this.projectRoot,i,!0),a=U({...i,state:i.authority==="user"&&!ER(i)||o.current?i.state:"trial",sourceVersions:o.current?o.sourceVersions:i.sourceVersions});return this.write(a),{kind:e.kind,changed:!0,record:a,diagnostics:[]}}async syncCorpus(e,r){return this.indexStore.syncCorpus(e,r)}async mutationApplied(e){return!!this.requireDatabase().prepare("SELECT mutation_key FROM pk_applied_mutations WHERE mutation_key = ?").get(e)}async markMutationApplied(e,r){let n=this.requireDatabase();n.exec("BEGIN IMMEDIATE;");try{n.prepare("INSERT OR IGNORE INTO pk_applied_mutations(mutation_key, applied_at) VALUES (?, ?)").run(e,r),n.exec("COMMIT;")}catch(i){throw n.exec("ROLLBACK;"),i}}async indexStatus(){return await this.indexStore.open(),this.indexStore.status()}searchSections(e){return this.indexStore.search(e)}async rebuildWorkspace(e){return jq(await this.indexStore.rebuild(e))}close(){this.closed||(this.closed=!0,this.indexStore.close(),t.releaseDatabase(this.databasePath),this.database=null)}write(e){let r=this.requireDatabase();r.exec("BEGIN IMMEDIATE;");try{this.writeRecord(r,e),r.exec("COMMIT;")}catch(n){throw r.exec("ROLLBACK;"),n}}applyFeedback(e){let r=this.requireDatabase();r.exec("BEGIN IMMEDIATE;");try{if(e.idempotencyKey!==void 0&&r.prepare("SELECT mutation_key FROM pk_applied_mutations WHERE mutation_key = ?").get(e.idempotencyKey)){let h=this.read(e.id);return r.exec("COMMIT;"),{kind:e.kind,changed:!1,record:h,diagnostics:[]}}let n=this.read(e.id);if(!n||n.projectId!==e.projectId)return r.exec("COMMIT;"),{kind:e.kind,changed:!1,record:null,diagnostics:[{code:"record-not-found",message:`Project knowledge record not found: ${e.id}`}]};let i=e.outcome==="used-successfully",o=xR(e.outcome),a=e.applicationId===void 0?void 0:r.prepare("SELECT status, revision FROM pk_application_outcomes WHERE record_id = ? AND application_id = ?").get(n.id,e.applicationId),s=e.revision??(a?.revision??0)+1;if(a!==void 0&&s<=a.revision)return e.idempotencyKey!==void 0&&r.prepare("INSERT OR IGNORE INTO pk_applied_mutations(mutation_key, applied_at) VALUES (?, ?)").run(e.idempotencyKey,e.updatedAt),r.exec("COMMIT;"),{kind:e.kind,changed:!1,record:n,diagnostics:[]};let c=a?.status??(e.applicationId===void 0?e.previousOutcome:void 0),l=c==="used-successfully",d=xR(c);e.applicationId!==void 0&&r.prepare(["INSERT INTO pk_application_outcomes(record_id, application_id, status, revision)","VALUES (?, ?, ?, ?)","ON CONFLICT(record_id, application_id) DO UPDATE SET status = excluded.status, revision = excluded.revision"].join(" ")).run(n.id,e.applicationId,e.outcome,s);let u=r.prepare("SELECT base_state FROM pk_feedback_state WHERE record_id = ?").get(n.id);n.authority==="automatic"&&o&&n.state!=="superseded"&&u===void 0&&r.prepare("INSERT INTO pk_feedback_state(record_id, base_state) VALUES (?, ?)").run(n.id,n.state);let p=r.prepare("SELECT COUNT(*) AS count FROM pk_application_outcomes WHERE record_id = ? AND status IN ('corrected', 'contributed-to-failure')").get(n.id).count,f=!o&&u!==void 0&&Number(p)===0,m=f?u.base_state:n.state,g=U({...n,state:n.authority==="automatic"&&o?"superseded":m==="trial"&&i?"proven":m,applicationCount:n.applicationCount+ +(e.applicationId===void 0?e.previousOutcome===void 0:a===void 0),successCount:Math.max(0,n.successCount+Number(i)-Number(l)),failureCount:Math.max(0,n.failureCount+Number(o)-Number(d)),lastAppliedAt:e.updatedAt,updatedAt:e.updatedAt});return this.writeRecord(r,g),f&&r.prepare("DELETE FROM pk_feedback_state WHERE record_id = ?").run(n.id),e.idempotencyKey!==void 0&&r.prepare("INSERT OR IGNORE INTO pk_applied_mutations(mutation_key, applied_at) VALUES (?, ?)").run(e.idempotencyKey,e.updatedAt),r.exec("COMMIT;"),{kind:e.kind,changed:!0,record:g,diagnostics:[]}}catch(n){throw r.exec("ROLLBACK;"),n}}writeRecord(e,r){e.prepare("INSERT INTO pk_records(id, project_id, type, state, authority, payload_json, source_versions_json, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT(id) DO UPDATE SET project_id = excluded.project_id, type = excluded.type, state = excluded.state, authority = excluded.authority, payload_json = excluded.payload_json, source_versions_json = excluded.source_versions_json, updated_at = excluded.updated_at").run(r.id,r.projectId,r.type,r.state,r.authority,JSON.stringify(r),JSON.stringify(r.sourceVersions),r.updatedAt)}initializeSchema(){let e=this.requireDatabase();if(e.exec("CREATE TABLE IF NOT EXISTS pk_meta (key TEXT PRIMARY KEY, value TEXT NOT NULL);"),e.prepare("SELECT value FROM pk_meta WHERE key = 'schema_version'").get()?.value===vR){this.createRecordSchema(e);return}e.exec("BEGIN IMMEDIATE;");try{this.createRecordSchema(e),e.prepare("INSERT INTO pk_meta(key, value) VALUES ('schema_version', ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value").run(vR),e.exec("COMMIT;")}catch(n){throw e.exec("ROLLBACK;"),this.reportDiagnostic?.({code:"record-migration-failed",message:"项目知识存储升级失败,已回滚并保留原有记录。"}),n}}maintainGeneratedRecords(){let e=this.requireDatabase();e.exec("BEGIN IMMEDIATE;");try{let r=e.prepare("SELECT value FROM pk_meta WHERE key = ?").get(wR)?.value==="complete",i=e.prepare("SELECT payload_json FROM pk_records").all().map(u=>U(JSON.parse(u.payload_json))),o=new Set;for(let u of e.prepare("SELECT record_id FROM pk_application_outcomes UNION SELECT record_id FROM pk_feedback_state").all())o.add(u.record_id);let a=u=>o.has(u.id)||kR(u),s=e.prepare("DELETE FROM pk_records WHERE id = ?"),c=i.filter(u=>(u.id.startsWith("generated-knowledge-corpus")||u.id.startsWith("generated-module-overview")||!r&&_R(u))&&!a(u));for(let u of c)s.run(u.id);let l=i.filter(u=>!c.some(p=>p.id===u.id)&&(u.id.startsWith("generated-project-map")||u.id.startsWith("generated-build-test")||u.id.startsWith("generated-module-")&&!u.id.startsWith("generated-module-overview"))),d=new Map;for(let u of l){let p=kq(u.id),f=d.get(p)??[];f.push(u),d.set(p,f)}for(let[u,p]of d){let f=p.filter(a),m=p.filter(v=>!a(v)),g=new Map;for(let v of m){let b=Xs(v),k=g.get(b)??[];k.push(v),g.set(b,k)}if(f.length>0){for(let v of g.values()){v.sort((b,k)=>k.updatedAt.localeCompare(b.updatedAt));for(let b of v.slice(1))s.run(b.id)}continue}if(m.length===0)continue;let h=m.filter(v=>v.state!=="superseded").sort((v,b)=>b.updatedAt.localeCompare(v.updatedAt))[0],w=[],y=h?Xs(h):void 0;h&&w.push(U({...h,id:u,relations:h.relations.filter(v=>v.type!=="supersedes")}));for(let[v,b]of g)v!==y&&(b.sort((k,S)=>S.updatedAt.localeCompare(k.updatedAt)),w.push(SR(u,b[0])));if(!(w.length===m.length&&w.every(v=>m.some(b=>JSON.stringify(b)===JSON.stringify(v))))){for(let v of m)s.run(v.id);for(let v of w)this.writeRecord(e,v)}}e.prepare("INSERT INTO pk_meta(key, value) VALUES (?, ?) ON CONFLICT(key) DO UPDATE SET value = excluded.value").run(wR,"complete"),e.exec("COMMIT;")}catch{e.exec("ROLLBACK;"),this.reportDiagnostic?.({code:"record-maintenance-failed",message:"项目知识历史整理失败,已回滚并保留原有记录。"})}}createRecordSchema(e){e.exec(["CREATE TABLE IF NOT EXISTS pk_records (id TEXT PRIMARY KEY, project_id TEXT NOT NULL, type TEXT NOT NULL, state TEXT NOT NULL, authority TEXT NOT NULL, payload_json TEXT NOT NULL, source_versions_json TEXT NOT NULL, updated_at TEXT NOT NULL);","CREATE INDEX IF NOT EXISTS pk_records_project ON pk_records(project_id);","CREATE INDEX IF NOT EXISTS pk_records_state ON pk_records(state, authority);","CREATE TABLE IF NOT EXISTS pk_applied_mutations (mutation_key TEXT PRIMARY KEY, applied_at TEXT NOT NULL);","CREATE TABLE IF NOT EXISTS pk_application_outcomes (record_id TEXT NOT NULL, application_id TEXT NOT NULL, status TEXT NOT NULL, revision INTEGER NOT NULL, PRIMARY KEY(record_id, application_id));","CREATE TABLE IF NOT EXISTS pk_feedback_state (record_id TEXT PRIMARY KEY, base_state TEXT NOT NULL);"].join(`
|
||
`))}acquireDatabase(){let e=t.sharedDatabases.get(this.databasePath);if(e){if(e.refs+=1,!e.database)throw new Error("Project knowledge local store database is closed");return e.database}let r=zu(this.databasePath);return r.exec("PRAGMA journal_mode = WAL; PRAGMA busy_timeout = 250;"),t.sharedDatabases.set(this.databasePath,{database:r,refs:1}),r}static releaseDatabase(e){let r=t.sharedDatabases.get(e);if(!r||(r.refs-=1,r.refs>0))return;t.sharedDatabases.delete(e);let n=r.database;r.database=null,n?.close()}requireDatabase(){if(!this.database)throw new Error("Project knowledge local store is closed");return this.database}};var TR=1024*1024,$R=500,OR=256*1024;function $q(){try{let e=Tq(import.meta.url)("@vscode/ripgrep");return typeof e.rgPath=="string"&&e.rgPath.length>0?e.rgPath:null}catch{return null}}function Oq(t,e){let r=t.replaceAll(`\r
|
||
`,`
|
||
`).split(`
|
||
`),n=Math.max(0,Math.min(r.length-1,e-1)),i=n;for(;i>=0&&!/^\s{0,3}#{1,6}\s+\S/u.test(r[i]);)i-=1;let o=i>=0?r[i].replace(/^\s{0,3}#{1,6}\s+/u,"").trim():"Project knowledge",a=i>=0?i:n;for(;a>0&&r[a-1].trim()!=="";)a-=1;let s=Math.max(n,i>=0?i:n);if(i>=0&&n===i)for(;s+1<r.length&&r[s+1].trim()==="";)s+=1;for(;s+1<r.length&&r[s+1].trim()!==""&&!/^\s{0,3}#{1,6}\s+/u.test(r[s+1]);)s+=1;let c=r.slice(a,s+1).join(`
|
||
`).trim().slice(0,1600);return{title:o.slice(0,200),snippet:c}}function Mq(t){if(!t||typeof t!="object")return null;let e=t.data;if(!e||typeof e!="object")return null;let r=e.path?.text;return typeof r=="string"?r:null}function MR(t){if(!t||typeof t!="object")return 1;let e=t.data?.line_number;return typeof e=="number"&&Number.isSafeInteger(e)?e:1}function Lq(t){if(!t||typeof t!="object")return"";let e=t.data?.lines?.text;return typeof e=="string"?e:""}function Dq(t,e,r){let n=Ii.resolve(t,e);return r.get(n)??r.get(Ii.resolve(e))??null}function Bq(t,e,r){let n=t.matchedTerms.size/Math.max(1,r.terms.length),i=e.matchedTerms.size/Math.max(1,r.terms.length);if(t.strong!==e.strong)return t.strong?-1:1;if(n!==i)return i-n;if(t.pathAssociation!==e.pathAssociation)return t.pathAssociation?-1:1;let o=Us(t.document.kind)-Us(e.document.kind);if(o!==0)return o;if(t.matchCount!==e.matchCount)return e.matchCount-t.matchCount;let a=(e.document.archivedAt??"").localeCompare(t.document.archivedAt??"");return a!==0?a:t.document.source.localeCompare(e.document.source)}var St=class{options;reportDiagnostic;localStore;recordStoreError=null;constructor(e){this.options=e,this.reportDiagnostic=e.reportDiagnostic,this.localStore=e.localStore??null}recordStore(){if(this.localStore)return this.localStore;if(this.recordStoreError)return null;try{return this.localStore??=new Yu({projectRoot:this.options.projectRoot,...this.options.cacheRoot?{cacheRoot:this.options.cacheRoot}:{},...this.options.reportDiagnostic?{reportDiagnostic:this.options.reportDiagnostic}:{}})}catch{return this.recordStoreError={code:"records-unavailable",message:"Local project knowledge records are unavailable; using document search only."},this.reportDiagnostic?.(this.recordStoreError),null}}async status(){let e=this.recordStore();return e?e.status():{provider:"local",healthy:!1,writable:!1,diagnostics:[this.recordStoreError]}}async indexStatus(){let e=this.recordStore();if(!e)return null;try{return await e.indexStatus()}catch{return this.reportDiagnostic?.({code:"index-unavailable",message:"Local project knowledge section index is unavailable."}),null}}async refreshIndex(){let e=this.recordStore();if(!e)return null;try{return await e.syncCorpus(this.options.corpus,{complete:this.options.corpusComplete!==!1}),await e.indexStatus()}catch{return this.reportDiagnostic?.({code:"index-unavailable",message:"Local project knowledge section index is unavailable."}),null}}async query(e){let r=this.recordStore();if(e.kind==="manifest"){let y=r?.list({...e.projectId?{projectId:e.projectId}:{},...e.state&&e.state!=="all"?{state:e.state}:{},limit:e.limit??100})??[];return{kind:"manifest",items:(e.state==="all"?y:y.filter(b=>b.state!=="superseded")).map(b=>({id:b.id,memoryType:vP(b.type),type:b.type,state:b.state,authority:b.authority,title:b.title,summary:b.summary,applicablePaths:[...b.applicablePaths],operations:[...b.operations],phases:[...b.phases??[]],sourceTypes:[...new Set(b.conclusions.flatMap(k=>k.sources.map(S=>S.source)))],verification:b.verification.map(k=>({...k}))})),truncated:e.limit!==void 0&&y.length>=e.limit,diagnostics:r?[]:[this.recordStoreError]}}if(e.kind==="expand"){r&&await r.apply({kind:"refresh",id:e.id,...e.projectId===void 0?{}:{projectId:e.projectId}});let y=r?.read(e.id)??null;return{kind:"expand",record:y&&y.state!=="superseded"&&(!e.projectId||y.projectId===e.projectId)?y:null,diagnostics:r?[]:[this.recordStoreError]}}if(e.kind==="list"){let y=r?.list({...e.projectId?{projectId:e.projectId}:{},...e.type?{type:e.type}:{},...e.state&&e.state!=="all"?{state:e.state}:{},...e.authority?{authority:e.authority}:{},...e.limit?{limit:e.limit}:{}})??[],v=r&&e.projectId&&(e.state===void 0||e.state==="all")&&e.type===void 0&&e.authority===void 0?r.projectCounts(e.projectId):void 0;return{kind:"list",records:y,...v===void 0?{}:{counts:v},truncated:e.limit!==void 0&&(v===void 0?y.length>=e.limit:v.total>y.length),diagnostics:r?[]:[this.recordStoreError]}}if(e.kind==="get"){let y=r?.read(e.id)??null;return{kind:"get",record:y&&(!e.projectId||y.projectId===e.projectId)?y:null,diagnostics:r?[]:[this.recordStoreError]}}let n=[];if(r)await r.apply({kind:"refresh"});else{n.push(this.recordStoreError);let y={code:"index-unavailable",message:"Local project knowledge section index is unavailable."};n.push(y),this.reportDiagnostic?.(y)}let i=[],o=[],a=!1;if(this.options.indexEnabled!==!1&&r)try{let y=await r.syncCorpus(this.options.corpus,{complete:this.options.corpusComplete!==!1});o=[...y.refreshedSources,...y.changedSources],i=await this.readCurrentSections(r.searchSections(e.query),n),a=!0}catch{o=[...this.options.corpus],n.push({code:"index-unavailable",message:"Local project knowledge section index is unavailable."})}let s=a&&o.length===0&&this.options.runRipgrep===void 0?[]:await this.searchWithRipgrep(e.query,[...o]);i=await this.readCurrentSections(i,n);let l=[r?.searchRecords(e.query)??[],i,s],d=[...new Set(e.query.terms.map(y=>y.toLocaleLowerCase()).filter(Boolean))],u=new Map;for(let[y,v]of l.entries())v.forEach((b,k)=>{let S=b.record?`record:${b.record.id}`:`${b.source}\0${b.title??""}`,E=u.get(S),N=(E?.score??0)+1/(60+k+1)+(y===0?(b.score??0)>=100?.08:.01+.08*Math.min(1,(b.score??0)/Math.max(1,d.length)):y===1?.025:.03);u.set(S,{result:E?.result??b,score:N})});let p=new Map,f=0,m=!1;for(let{result:y}of[...u.values()].sort((v,b)=>b.score-v.score||(v.result.record?.id??v.result.source).localeCompare(b.result.record?.id??b.result.source)).map(({result:v,score:b})=>({result:{...v,score:b},score:b}))){let v=y.record?`record:${y.record.id}`:`${y.source}\0${y.title??""}`;if(!p.has(v)){if(y.record){if(f>=2){m=!0;continue}f+=1}p.set(v,y)}}let g=Math.max(1,Math.min(40,e.limit??8)),h=[...p.values()].slice(0,g),w=h.flatMap(y=>y.record?[y.record]:[]);return{kind:"search",hits:w.map(y=>({record:y})),results:h,records:w,truncated:m||p.size>h.length,diagnostics:n}}async apply(e){let r=this.recordStore();if(!r)return{kind:e.kind,changed:!1,diagnostics:[this.recordStoreError]};if(e.kind==="experience-delta"&&await r.mutationApplied(e.idempotencyKey))return{kind:e.kind,changed:!1,...e.delta.targetId===void 0?{}:{record:r.read(e.delta.targetId)},diagnostics:[]};let n=e.kind==="experience-delta"?Fq(e,r.read(e.delta.targetId??""),oe(this.options.projectRoot)):e;if(n===null)return{kind:e.kind,changed:!1,diagnostics:[]};let i=await r.apply(e.kind==="experience-delta"&&n.kind==="feedback"?{...n,idempotencyKey:e.idempotencyKey}:n);if(e.kind==="experience-delta"&&await r.markMutationApplied(e.idempotencyKey,e.updatedAt),e.kind==="refresh"&&!e.id)try{e.projectId===void 0&&this.options.corpusComplete!==!1?await r.rebuildWorkspace(this.options.corpus):await r.syncCorpus(this.options.corpus,{complete:this.options.corpusComplete!==!1})}catch{this.reportDiagnostic?.({code:"index-rebuild",message:"Local project knowledge workspace index could not be rebuilt."})}return e.kind==="experience-delta"?{...i,kind:e.kind}:i}close(){this.localStore?.close(),this.localStore=null}async readCurrentSections(e,r){return(await Promise.all(e.map(async i=>{let o=i.document?.source;if(!o)return i;try{return await O(this.options.projectRoot,o,OR,{label:o}),i}catch{return r.push({code:"local-document",message:"未进入检索:索引来源当前不可读取,不会参与本次召回。"}),null}}))).filter(i=>i!==null)}async searchWithRipgrep(e,r=[]){if(e.terms.length===0||this.options.corpus.length===0)return[];let n=new Map(this.options.corpus.map(p=>[Ii.resolve(p.absolutePath),p])),i=r.length>0?r.map(p=>p.absolutePath):this.searchTargets(),o=[...e.strongTerms,...e.phraseTerms].slice(0,16);o.length===0&&o.push(...e.weakTerms.slice(0,4));let a=["--json","--fixed-strings","--ignore-case","--no-messages","--iglob","*.md",...o.flatMap(p=>["-e",p]),"--",...i],s=this.options.rgCommand??$q(),c=this.options.runRipgrep?await this.options.runRipgrep(a):await Ay({cwd:this.options.projectRoot,args:a,command:s??"rg",timeoutMs:2e3,maxOutputBytes:TR,maxMatches:$R});if(!this.options.runRipgrep&&c.error&&s&&s!=="rg"&&(c=await Ay({cwd:this.options.projectRoot,args:a,command:"rg",timeoutMs:2e3,maxOutputBytes:TR,maxMatches:$R})),c.error&&!c.stdout&&!c.timedOut&&!c.truncated)return this.reportDiagnostic?.({code:"local-tool-missing",message:"Local project knowledge search is unavailable; install ripgrep or keep the bundled binary available."}),[];if(c.exitCode!==null&&c.exitCode>1)return this.reportDiagnostic?.({code:"local-tool",message:`Project knowledge local search failed with exit code ${c.exitCode}.`}),[];(c.error||c.timedOut||c.truncated)&&this.reportDiagnostic?.({code:c.timedOut?"local-timeout":c.truncated?"local-output-limit":"local-tool",message:c.timedOut?"Project knowledge local search timed out.":"Project knowledge local search was bounded before completion."});let l=new Map,d=!1,u=c.stdout.split(/\r?\n/u);for(let[p,f]of u.entries()){if(!f.trim())continue;let m;try{m=JSON.parse(f)}catch{if(p===u.length-1&&!/\r?\n$/u.test(c.stdout)&&(c.truncated||c.timedOut||c.matchLimitReached))continue;d||this.reportDiagnostic?.({code:"local-invalid-json",message:"Local project knowledge search returned invalid JSON."}),d=!0;continue}if(!m||typeof m!="object"||m.type!=="match")continue;let g=Mq(m);if(!g)continue;let h=Dq(this.options.projectRoot,g,n);if(!h)continue;let w;try{w=(await O(this.options.projectRoot,h.source,OR,{label:h.source})).bytes.toString("utf8")}catch{this.reportDiagnostic?.({code:"local-document",message:`未进入检索:无法读取 ${h.source},该文件当前不会参与召回。`});continue}let y=Lq(m),{title:v,snippet:b}=Oq(w,MR(m)),k=new Set(e.terms.filter(j=>$o(y,j)||$o(v,j)||$o(h.source,j))),S=`${h.source}\0${v}`,E=l.get(S),N=new Set(E?.matchedTerms??[]);for(let j of k)N.add(j);let P=`${v}
|
||
${h.source}
|
||
${b}`,_=Ox(e,P);l.set(S,{content:E?.content??b,source:h.source,title:v,document:h,matchedTerms:N,matchCount:(E?.matchCount??0)+1,strong:_,pathAssociation:!!(e.path&&(h.source.toLowerCase().includes(e.path.toLowerCase())||v.toLowerCase().includes(e.path.toLowerCase()))),line:E?.line??MR(m)})}return d?[]:[...l.values()].filter(p=>p.strong||p.matchedTerms.size>=2).sort((p,f)=>Bq(p,f,e)).slice(0,8)}searchTargets(){let e=new Set,r=[];for(let n of this.options.corpus)n.kind==="superpowers"?r.push(Ii.relative(this.options.projectRoot,n.absolutePath)):e.add(Ii.dirname(Ii.relative(this.options.projectRoot,n.absolutePath)));return[...e,...r].map(n=>n.replaceAll(Ii.sep,"/")).sort()}};function Fq(t,e,r){let{delta:n,updatedAt:i}=t;if(n.owner!=="project-knowledge"&&n.owner!=="comet.project-knowledge")throw new Error("Learning Delta owner does not match Project Knowledge");if(n.feedback!==void 0){if(!n.targetId)throw new Error("Learning Delta feedback target is required");return{kind:"feedback",id:n.targetId,projectId:n.applicability.projectId??e?.projectId??r,outcome:n.feedback.status,...n.feedback.previousStatus===void 0?{}:{previousOutcome:n.feedback.previousStatus},applicationId:n.feedback.applicationId,revision:n.feedback.revision,updatedAt:i}}if(n.payload?.kind==="record")return{kind:"upsert",record:U(n.payload.record)};if(n.payload?.kind==="verify"){let p=n.payload;if(typeof p.projectId!="string"||!Array.isArray(p.commands)||!p.commands.every(f=>typeof f=="string"))throw new Error("Learning Delta verification payload is invalid");return{kind:"verify",projectId:p.projectId,commands:p.commands,updatedAt:typeof p.updatedAt=="string"?p.updatedAt:i}}if(n.action==="noop")return null;let o=n.applicability.projectId??e?.projectId??r;if(n.action==="supersede"||n.action==="forget"){if(!n.targetId)throw new Error("Learning Delta target is required");return{kind:"supersede",id:n.targetId,projectId:o,updatedAt:i,reason:n.statement}}let a=Kq(n.kind,n.memoryType,e?.type),s=n.authority==="user"||n.authority==="explicit"?"user":n.authority==="repository"?"repository":"automatic",c=n.recommendedState==="enforced"&&(n.verification?.length??0)===0?"proven":n.recommendedState,l=n.targetId??`learned-${Iq("sha256").update(`${o}\0${a}\0${n.statement}`).digest("hex").slice(0,24)}`,d=n.evidence.flatMap(p=>p.source?[{source:p.source,...p.anchor===void 0?{}:{anchor:p.anchor},evidence:p.summary}]:[]);return{kind:"upsert",record:U({id:l,projectId:o,type:a,state:c,authority:s,title:n.title??n.statement.slice(0,200),summary:n.statement,applicablePaths:n.applicability.paths??e?.applicablePaths??[],operations:n.applicability.operations??e?.operations??[],phases:n.applicability.phases??e?.phases??[],conclusions:d.length>0?[{text:n.statement,sources:d}]:[],relations:e?.relations??[],verification:n.verification??e?.verification??[],sourceVersions:e?.sourceVersions??[],applicationCount:e?.applicationCount??0,successCount:e?.successCount??0,failureCount:e?.failureCount??0,...e?.lastAppliedAt===void 0?{}:{lastAppliedAt:e.lastAppliedAt},updatedAt:i})}}function Kq(t,e,r){return new Set(["topology","fact","dependency","decision","pattern","procedure","constraint","failure-resolution"]).has(t)?t:r!==void 0?r:e==="project-model"?"fact":"pattern"}var Hq=1024*1024,Wq=512,FR=200,KR=1600,Vq=5e3,qq=8,zq=512*1024,Gq=32;function W(t,e,r=!1){if(typeof t!="string")return null;let n=[...t].map(i=>{let o=i.codePointAt(0)??0;return o<32||o===127?" ":i}).join("").trim().slice(0,e);return r&&!n?null:n}function My(t){return Array.isArray(t)?t.map(e=>{if(!e||typeof e!="object"||Array.isArray(e))return null;let r=W(e.code,64,!0),n=W(e.message,240,!0);return r&&n?{code:r,message:n}:null}).filter(e=>e!==null).slice(0,qq):[]}function Zs(){return[]}function LR(t){let e={...t};return delete e.evidence,e}function DR(t){return{...t,conclusions:t.conclusions.map(e=>({...e,sources:e.sources.map(LR)})),relations:t.relations.map(e=>({...e,sources:e.sources.map(LR)}))}}function Uq(t){if(t.kind==="upsert")return{kind:"upsert",record:DR(t.record)};if(t.kind!=="experience-delta")return t;let e=t.delta,r=e.payload;r?.kind==="record"?r={kind:"record",record:DR(U(r.record))}:r?.kind==="verify"?r={kind:"verify",projectId:W(r.projectId,128)??"",commands:ec(r.commands,16,2e3),...typeof r.updatedAt=="string"?{updatedAt:r.updatedAt.slice(0,64)}:{}}:r!==void 0&&(r=void 0);let{payload:n,...i}=e,o={...i,statement:W(e.statement,4e3)??"",...e.title===void 0?{}:{title:W(e.title,512)??""},applicability:{...e.applicability.projectId===void 0?{}:{projectId:W(e.applicability.projectId,128)??""},...e.applicability.paths===void 0?{}:{paths:ec(e.applicability.paths,32,512)},...e.applicability.operations===void 0?{}:{operations:ec(e.applicability.operations,16,128)},...e.applicability.phases===void 0?{}:{phases:ec(e.applicability.phases,16,128)},...e.applicability.tasks===void 0?{}:{tasks:ec(e.applicability.tasks,16,512)}},evidence:e.evidence.slice(0,Gq).map(a=>({...a,summary:W(a.summary,1e3)??"",...a.source===void 0?{}:{source:W(a.source,512)??""},...a.anchor===void 0?{}:{anchor:W(a.anchor,256)??""},...a.command===void 0?{}:{command:W(a.command,2e3)??""}})),...r===void 0?{}:{payload:r}};return{...t,idempotencyKey:W(t.idempotencyKey,256,!0)??"invalid",delta:o}}function ec(t,e,r){return Array.isArray(t)?t.map(n=>W(n,r)).filter(n=>!!n).slice(0,e):[]}function Jq(t){if(t.kind==="search"){let e=t.query;return{kind:"search",task:W(e.task,2e3)??"",...e.path?{path:W(e.path,512)}:{},...e.phase?{phase:W(e.phase,128)}:{},...e.operation?{operation:W(e.operation,128)}:{},terms:e.terms.slice(0,28).map(r=>W(r,128)).filter(Boolean),limit:Math.max(1,Math.min(8,t.limit??8))}}return t.kind==="list"?{kind:"list",...t.projectId?{projectId:W(t.projectId,128)}:{},...t.type?{type:t.type}:{},...t.state?{state:t.state}:{},...t.authority?{authority:t.authority}:{},limit:Math.max(1,Math.min(500,t.limit??100))}:t.kind==="manifest"?{kind:"manifest",...t.projectId?{projectId:W(t.projectId,128)}:{},...t.state?{state:t.state}:{},limit:Math.max(1,Math.min(500,t.limit??100))}:t.kind==="expand"?{kind:"expand",id:W(t.id,128)??"",...t.projectId?{projectId:W(t.projectId,128)}:{}}:{kind:"get",id:W(t.id,128)??"",...t.projectId?{projectId:W(t.projectId,128)}:{}}}function Oy(t,e,r){if(!Array.isArray(t))return[];let n=[];for(let i of t.slice(0,500))try{let o=U(i);if(o.projectId!==r)throw new Error("Project mismatch");n.push(o)}catch{e()}return n}function Yq(t,e,r){if(!t||typeof t!="object"||Array.isArray(t))return e(),null;let n=W(t.content,KR,!0),i=W(t.source,Wq,!0);if(!n||!i)return e(),null;let o=t.title,a=o===void 0?void 0:W(o,FR);if(o!==void 0&&a===null)return e(),null;let s=t.score;if(s!==void 0&&(typeof s!="number"||!Number.isFinite(s)))return e(),null;let c,l=t.record;if(l!==void 0)try{if(c=U(l),c.projectId!==r)throw new Error("Project mismatch")}catch{return e(),null}return{content:n,source:i,...a?{title:a}:{},...s===void 0?{}:{score:s},...c?{record:c}:{}}}function Xq(t,e){let r=t&&typeof t=="object"&&!Array.isArray(t)&&"status"in t?t.status:t;if(!r||typeof r!="object"||Array.isArray(r))return e(),null;let n=r.provider,i=r.healthy,o=r.writable;if(n!=="remote"||typeof i!="boolean"||typeof o!="boolean")return e(),null;let a=r.recordCount,s=r.updatedAt;return{provider:"remote",healthy:i,writable:o,...Number.isSafeInteger(a)&&Number(a)>=0?{recordCount:Number(a)}:{},...typeof s=="string"?{updatedAt:s.slice(0,64)}:{},diagnostics:My(r.diagnostics)}}function Qq(t,e,r,n){let i=t&&typeof t=="object"&&!Array.isArray(t)&&"result"in t?t.result:t;if(!i||typeof i!="object"||Array.isArray(i))return r(),null;let o=i.kind??e.kind,a=My(i.diagnostics);if(o==="list")return{kind:"list",records:Oy(i.records,r,n),truncated:i.truncated===!0,diagnostics:a};if(o==="get"){let p=i.record,f=null;if(p!=null)try{if(f=U(p),f.projectId!==n)throw new Error("Project mismatch")}catch{r()}return{kind:"get",record:f,diagnostics:a}}if(o==="expand"){let p=i.record,f=null;if(p!=null)try{if(f=U(p),f.projectId!==n)throw new Error("Project mismatch")}catch{r()}return{kind:"expand",record:f,diagnostics:a}}if(o==="manifest")return{kind:"manifest",items:Array.isArray(i.items)?i.items.slice(0,500).flatMap(f=>{if(!f||typeof f!="object"||Array.isArray(f))return r(),[];let m=f,g=W(m.id,128,!0),h=W(m.title,FR,!0),w=W(m.summary,KR,!0),y=m.type,v=m.memoryType,b=m.state,k=m.authority;if(!g||!h||!w||!["topology","fact","dependency","decision","pattern","procedure","constraint","failure-resolution"].includes(String(y))||v!=="project-model"&&v!=="project-policy"||!["trial","proven","enforced","superseded"].includes(String(b))||!["automatic","user","repository"].includes(String(k)))return r(),[];let S=N=>Array.isArray(N)?N.map(P=>W(P,1024)).filter(P=>P!==null):[],E=Array.isArray(m.verification)?m.verification.slice(0,16).flatMap(N=>{if(!N||typeof N!="object"||Array.isArray(N))return r(),[];let P=W(N.command,4e3,!0),_=W(N.expected,2e3);return P?[{command:P,..._===null?{}:{expected:_}}]:[]}):[];return[{id:g,memoryType:v,type:y,state:b,authority:k,title:h,summary:w,applicablePaths:S(m.applicablePaths),operations:S(m.operations),phases:S(m.phases),sourceTypes:S(m.sourceTypes),verification:E}]}):[],truncated:i.truncated===!0,diagnostics:a};let s=[],c=0,l=new Set;for(let p of Array.isArray(i.results)?(i.results??[]).slice(0,16):[]){let f=Yq(p,r,n);if(!(!f||l.has(`${f.source}\0${f.title??""}`))){if(c+f.content.length>Vq)break;l.add(`${f.source}\0${f.title??""}`),c+=f.content.length,s.push(f)}}let d=Oy(i.records,r,n);return{kind:"search",hits:Array.isArray(i.hits)?(i.hits??[]).slice(0,40).flatMap(p=>{if(!p||typeof p!="object"||Array.isArray(p))return r(),[];try{let f=U(p.record);if(f.projectId!==n)throw new Error("Project mismatch");let m=p.score;return m!==void 0&&(typeof m!="number"||!Number.isFinite(m))?(r(),[]):[{record:f,...m===void 0?{}:{score:m}}]}catch{return r(),[]}}):d.map(p=>({record:p})),results:s,records:d,truncated:i.truncated===!0,diagnostics:a}}function Zq(t,e,r,n){let i=t&&typeof t=="object"&&!Array.isArray(t)&&"result"in t?t.result:t;if(!i||typeof i!="object"||Array.isArray(i))return r(),null;let o=i.record,a;if(o===null)a=null;else if(o!==void 0)try{if(a=U(o),a.projectId!==n)throw new Error("Project mismatch")}catch{r()}return{kind:e.kind,changed:i.changed===!0,...a===void 0?{}:{record:a},...Array.isArray(i.records)?{records:Oy(i.records,r,n)}:{},diagnostics:My(i.diagnostics)}}var Ti=class{options;projectId;constructor(e){this.options=e,this.projectId=e.projectId??(e.projectRoot?oe(e.projectRoot):"project")}async status(){let e=this.options.config.token_env;if(e&&!this.token()){let o={code:"remote-token",message:`Remote Project Knowledge 未配置环境变量 ${e}。`};return this.report(o.code,o.message),{provider:"remote",healthy:!1,writable:!1,diagnostics:[o]}}let r=await this.request("status",{});if(r===null)return{provider:"remote",healthy:!1,writable:!1,diagnostics:[{code:"remote-unavailable",message:"Remote Project Knowledge 不可用。"}]};let n={value:!1},i=Xq(r,()=>{n.value=!0});return!i||n.value?(this.report("remote-schema","Remote Project Knowledge status 响应格式无效。"),{provider:"remote",healthy:!1,writable:!1,diagnostics:[{code:"remote-schema",message:"Remote Project Knowledge status 响应格式无效。"}]}):i}async query(e){let r=e.kind==="search"?this.projectId:e.projectId??this.projectId,n=await this.request("query",Jq(e),e.kind==="search"?void 0:e.projectId);if(n===null)return BR(e);let i={value:!1},o=Qq(n,e,()=>{i.value=!0},r);return!o||i.value?(this.report("remote-schema","Remote Project Knowledge query 响应包含无效数据。"),BR(e)):o}async apply(e){let r=(e.kind==="upsert"?e.record.projectId:e.kind==="experience-delta"?e.delta.applicability.projectId:e.projectId)??this.projectId,n=await this.request("apply",Uq(e),e.kind==="upsert"?e.record.projectId:e.kind==="experience-delta"?e.delta.applicability.projectId:e.projectId);if(n===null)return{kind:e.kind,changed:!1,diagnostics:[{code:"remote-unavailable",message:"Remote Project Knowledge 不可用。"}]};let i={value:!1},o=Zq(n,e,()=>{i.value=!0},r);return!o||i.value?(this.report("remote-schema","Remote Project Knowledge apply 响应格式无效。"),{kind:e.kind,changed:!1,diagnostics:[{code:"remote-schema",message:"Remote Project Knowledge apply 响应格式无效。"}]}):o}async request(e,r,n=this.projectId){let i=this.options.config.token_env,o=this.token();if(i&&!o)return this.report("remote-token",`Remote Project Knowledge 未配置环境变量 ${i}。`),null;let a={schema:"comet.project-knowledge.provider.v1",operation:e,...this.options.config.scope?{scope:this.options.config.scope}:{},projectId:W(n,128,!0)??this.projectId,input:r},s=JSON.stringify(a);if(new TextEncoder().encode(s).byteLength>zq)return this.report("remote-request-size","Remote Project Knowledge 请求超过大小限制。"),null;try{let{response:c,bytes:l}=await Bu({url:this.options.config.endpoint,timeoutMs:this.options.config.timeout_ms,maxResponseBytes:Hq,fetch:this.options.fetch,init:{method:"POST",redirect:"error",headers:{"content-type":"application/json",...o?{authorization:`Bearer ${o}`}:{}},body:s}});if(!c.ok)return this.report("remote-status",`Remote Project Knowledge 返回 HTTP ${c.status}。`),null;try{let d=JSON.parse(new TextDecoder().decode(l));return ez(d,e,a.projectId)?d.result:(this.report("remote-schema","Remote Project Knowledge 响应 envelope 无效。"),null)}catch{return this.report("remote-json","Remote Project Knowledge 返回了无效 JSON。"),null}}catch(c){return this.report("remote-failed",c instanceof Kr&&c.code==="timeout"?"Remote Project Knowledge 请求超时。":"Remote Project Knowledge 请求失败。"),null}}report(e,r){this.options.reportDiagnostic?.({code:e,message:r})}token(){let e=this.options.config.token_env;return e?this.options.env?.[e]??process.env[e]:void 0}};function ez(t,e,r){if(!t||typeof t!="object"||Array.isArray(t))return!1;let n=t;return n.schema==="comet.project-knowledge.provider.v1"&&n.operation===e&&n.projectId===r&&Object.prototype.hasOwnProperty.call(n,"result")}function BR(t){return t.kind==="list"?{kind:"list",records:[],truncated:!1,diagnostics:Zs()}:t.kind==="get"?{kind:"get",record:null,diagnostics:Zs()}:t.kind==="expand"?{kind:"expand",record:null,diagnostics:Zs()}:t.kind==="manifest"?{kind:"manifest",items:[],truncated:!1,diagnostics:Zs()}:{kind:"search",hits:[],results:[],records:[],truncated:!1,diagnostics:Zs()}}ge();var tz=512,rz=/^[A-Za-z_][A-Za-z0-9_]*$/u;function HR(t){let{config:e}=t,r={maxFileMb:e.local?.max_file_mb??Qe.max_file_mb,maxTotalMb:e.local?.max_total_mb??Qe.max_total_mb};if(e.provider!=="remote")return{provider:"local",configured:!0,localLimits:r,retrieval:t.language==="en"?"Local uses a workspace-isolated section index with bounded ripgrep fallback.":"Local 使用按工作区隔离的 section 索引与项目外 Record 存储;不会在项目中生成知识文件。",diagnostics:[]};let n=e.remote,i=nz(n?.endpoint),o=n?.timeout_ms??0,a=iz(n?.token_env),s=oz(n?.scope),c=i!==null&&Number.isSafeInteger(o)&&o>=100&&o<=3e4,l=n?{endpoint:i??"",...a===void 0?{}:{tokenEnv:a},tokenConfigured:a===void 0?!0:!!(t.env?.[a]??process.env[a]),...s===void 0?{}:{scope:s},timeoutMs:o}:void 0;return{provider:"remote",configured:c,localLimits:r,...l===void 0?{}:{remote:l},retrieval:t.language==="en"?"Remote uses the configured Project Knowledge Provider v1 settings; status reports the latest provider health.":"Remote 使用已配置的 Project Knowledge Provider v1;状态会显示最近一次 Provider 健康情况。",diagnostics:[]}}function nz(t){if(typeof t!="string"||t.trim().length===0)return null;try{let e=new URL(t.trim());return e.username="",e.password="",e.search="",e.hash="",e.toString()}catch{return null}}function iz(t){if(!(typeof t!="string"||!rz.test(t)))return t}function oz(t){if(typeof t!="string")return;let e=[...t].map(r=>{let n=r.codePointAt(0)??0;return n<32||n===127?" ":r}).join("").trim().slice(0,tz);return e.length===0?void 0:e}import{createHash as iA}from"node:crypto";import{readFile as Dz}from"node:fs/promises";import{promises as Sz}from"node:fs";Q();import{createHash as az}from"node:crypto";import{promises as zo}from"node:fs";import X from"node:path";var sz=64*1024,WR=1500,Ly=64,tc=512,cz=["app","domains","platform","src","packages"],VR=new Set([".ts",".tsx",".js",".jsx",".mjs",".cjs",".py",".go",".java",".rs"]),lz=new Set([".ts",".tsx",".js",".jsx",".mjs",".cjs"]),Fy=new Set([".git",".comet","node_modules","plugin-state","dist","build","out","coverage","target",".cache","cache","tmp","temp"]),dz=new Set([".db",".sqlite",".sqlite3",".png",".jpg",".jpeg",".gif",".webp",".zip",".tar",".gz"]),qo=class extends Error{};function Qu(t){if(Date.now()>t)throw new qo}function In(t,e){return{source:t,...e===void 0?{}:{anchor:e}}}function Ky(t,e,r,n,i,o={}){return{id:t,type:e,title:r,summary:n,applicablePaths:o.applicablePaths??[],operations:o.operations??[],phases:o.phases??[],conclusions:i,relations:o.relations??[],verification:o.verification??[]}}async function Dy(t,e=200,r=Number.POSITIVE_INFINITY,n=()=>!0,i=!1){let o=[],a=()=>{if(Date.now()<=r)return!1;if(i)return!0;throw new qo},s=async c=>{if(a()||o.length>=e)return;let l;try{l=await zo.readdir(c,{withFileTypes:!0})}catch{return}for(let d of l.sort((u,p)=>u.name.localeCompare(p.name))){if(a())return;if(o.length>=e||d.name.startsWith(".")||Fy.has(d.name))continue;let u=X.join(c,d.name);d.isSymbolicLink()||(d.isDirectory()?await s(u):d.isFile()&&n(u)&&!dz.has(X.extname(d.name).toLocaleLowerCase())&&o.push(u))}};return await s(t),o}function $i(t,e){return X.relative(t,e).replaceAll(X.sep,"/")}async function qR(t){try{let e=await zo.lstat(t);return e.isDirectory()&&!e.isSymbolicLink()}catch{return!1}}async function By(t,e,r=Number.POSITIVE_INFINITY){for(let n of e){Qu(r);try{let i=await zo.lstat(X.join(t,...n.split("/")));if(i.isFile()&&!i.isSymbolicLink())return n}catch{}}return null}async function zR(t,e,r=Number.POSITIVE_INFINITY){try{return Qu(r),(await O(t,e,sz,{label:e})).bytes.toString("utf8")}catch{return null}}async function uz(t,e){Qu(e);let r;try{r=await zo.readdir(t,{withFileTypes:!0})}catch{return[]}return r.filter(n=>n.isDirectory()&&!n.isSymbolicLink()&&!n.name.startsWith(".")&&!Fy.has(n.name)).map(n=>n.name).sort((n,i)=>n.localeCompare(i)).slice(0,30)}async function pz(t,e,r){let n=await By(t,["package.json","pnpm-workspace.yaml","README.md"],e),i=await By(t,[".comet/config.yaml","tsconfig.json","vite.config.ts"],e),o=await uz(t,e),a=await Promise.all(o.map(async c=>{let l=await Dy(X.join(t,c),1,e);return l[0]?$i(t,l[0]):null})),s=[n,i,...a].filter(c=>c!==null).filter((c,l,d)=>d.indexOf(c)===l).slice(0,32).map(c=>In(c));return s.length===0?null:Ky("generated-project-map","topology",r==="en"?"Project structure overview":"项目结构概览",r==="en"?"Project layers derived from real repository directories, configuration, and manifests.":"从仓库中的真实目录、项目配置和 manifest 生成项目分层概览。",[{text:r==="en"?`Primary project directories: ${o.join(", ")||"none discovered"}.`:`项目主要目录:${o.join("、")||"未发现"}。`,sources:s}],{applicablePaths:o.map(c=>`${c}/`)})}function GR(t){return t.toLocaleLowerCase().replaceAll("/","-").replace(/[^a-z0-9._-]+/gu,"-").replace(/^-+|-+$/gu,"")}function fz(t,e){let r=GR(t),n=`generated-module-${r||"root"}`;if(n.length<=128&&!e.has(r))return n;let i=az("sha256").update(t).digest("hex").slice(0,10);return`${n.slice(0,114).replace(/[-._]+$/u,"")}-${i}`}async function UR(t,e,r){let n=[];for(let c of cz){Qu(e);let l=X.join(t,c);if(!await qR(l))continue;let d;try{d=await zo.readdir(l,{withFileTypes:!0})}catch{continue}let u=d.filter(p=>p.isDirectory()&&!p.isSymbolicLink()&&!p.name.startsWith(".")&&!Fy.has(p.name)).map(p=>`${c}/${p.name}`);u.length>0?n.push(...u):d.some(p=>p.isFile()&&VR.has(X.extname(p.name).toLowerCase()))&&n.push(c)}let i=[...new Set(n)].sort((c,l)=>c.localeCompare(l));i.length>Ly&&r?.({code:"project-model-module-limit",message:`项目模型只分析前 ${Ly} 个模块;其余模块当前未生成知识记录。`});let o=i.slice(0,Ly),a=o.map(GR),s=new Set(a.filter((c,l,d)=>d.indexOf(c)!==d.lastIndexOf(c)));return o.map(c=>({modulePath:c,absolutePath:X.join(t,...c.split("/")),id:fz(c,s)}))}async function JR(t){let e=Date.now()+WR;try{return["generated-project-map","generated-build-test",...(await UR(X.resolve(t.projectRoot),e,t.reportDiagnostic)).map(n=>n.id)]}catch(r){if(!(r instanceof qo))throw r;return t.reportDiagnostic?.({code:"project-model-timeout",message:"项目模型发现超过 1.5 秒预算,当前仅补齐已确认的记录。"}),["generated-project-map","generated-build-test"]}}function mz(t){let e=X.posix.basename(t,X.posix.extname(t)).toLocaleLowerCase();return/^(?:index|main|cli)$/u.test(e)||/-entry$/u.test(e)}function hz(t){let e=[...t.matchAll(/\b(?:import|export)\s+(?:[^;]*?\s+from\s+)?['"]([^'"]+)['"]/gu),...t.matchAll(/\b(?:require|import)\s*\(\s*['"]([^'"]+)['"]\s*\)/gu)].flatMap(r=>r[1]?[r[1]]:[]);return[...new Set(e)].slice(0,32)}function gz(t,e,r,n){if(!r.startsWith("."))return;let i=X.resolve(X.dirname(X.join(t,...e.split("/"))),r);return n.find(o=>i===o.absolutePath||i.startsWith(`${o.absolutePath}${X.sep}`))}async function yz(t,e,r,n,i){let o=await UR(t,e,i),a=new Map((n??[]).map((w,y)=>[w,y])),s=[...o].sort((w,y)=>{let v=a.get(w.id)??Number.POSITIVE_INFINITY,b=a.get(y.id)??Number.POSITIVE_INFINITY;return v-b||w.modulePath.localeCompare(y.modulePath)}),c=[],l=new Set,d=!1;for(let w of s){if(c.length>tc)break;if(Date.now()>e){d=!0;break}let y=await Dy(w.absolutePath,tc+1-c.length,e,v=>VR.has(X.extname(v).toLocaleLowerCase()),!0);if(l.add(w.id),c.push(...y),Date.now()>e){d=!0;break}}let u=c.length>tc;u&&i?.({code:"project-model-source-limit",message:`项目模型只分析前 ${tc} 个源码文件;其余源码当前未用于生成模块记录。`});let p=c.slice(0,tc).sort((w,y)=>$i(t,w).localeCompare($i(t,y))),f=[],m=new Map,g=await Promise.all(p.map(async w=>Date.now()>e?{file:w,text:null}:{file:w,text:await zR(t,$i(t,w),e)}));Date.now()>e&&(d=!0);for(let{file:w,text:y}of g){if(!lz.has(X.extname(w).toLocaleLowerCase()))continue;let v=$i(t,w);if(y===null)continue;for(let k of hz(y))f.push({importer:v,specifier:k,targetModule:gz(t,v,k,o)});let b=[...y.matchAll(/\b(register[A-Z][A-Za-z0-9_$]*)\s*\(/gu)].flatMap(k=>k[1]?[k[1]]:[]);b.length>0&&m.set(v,[...new Set(b)].slice(0,6))}d&&i?.({code:"project-model-timeout",message:"项目模型生成超过 1.5 秒预算,当前仅保留预算内已确认的记录。"});let h=[];for(let w of o){if(!l.has(w.id)||(d||u)&&n!==void 0&&!a.has(w.id))continue;let v=p.filter(C=>C===w.absolutePath||C.startsWith(`${w.absolutePath}${X.sep}`)).map(C=>$i(t,C)).filter(mz).sort((C,L)=>C.localeCompare(L)).slice(0,8),b=f.filter(C=>C.importer.startsWith(`${w.modulePath}/`)&&C.targetModule!==void 0&&C.targetModule.modulePath!==w.modulePath),k=[...new Map(b.map(C=>[C.targetModule.id,C.targetModule])).values()].sort((C,L)=>C.modulePath.localeCompare(L.modulePath)).slice(0,8),S=f.filter(C=>C.targetModule?.modulePath===w.modulePath&&!C.importer.startsWith(`${w.modulePath}/`)),E=[...new Set(S.map(C=>o.find(L=>C.importer.startsWith(`${L.modulePath}/`))?.modulePath??C.importer))].sort((C,L)=>C.localeCompare(L)).slice(0,8),N=[...m.entries()].filter(([C])=>C.startsWith(`${w.modulePath}/`)).sort(([C],[L])=>C.localeCompare(L)).slice(0,6),P=`test/${w.modulePath}`,_=await qR(X.join(t,...P.split("/")));if(v.length===0&&k.length===0&&E.length===0&&N.length===0&&!_)continue;let j=[];if(v.length>0&&j.push({text:r==="en"?`Confirmed entry points: ${v.join(", ")}.`:`可确认入口:${v.join("、")}。`,sources:v.map(C=>In(C))}),k.length>0&&j.push({text:r==="en"?`Cross-module dependencies: ${k.map(C=>C.modulePath).join(", ")}.`:`跨模块依赖:${k.map(C=>C.modulePath).join("、")}。`,sources:b.slice(0,16).map(C=>In(C.importer))}),E.length>0&&j.push({text:r==="en"?`External callers: ${E.join(", ")}.`:`外部调用方:${E.join("、")}。`,sources:S.slice(0,16).map(C=>In(C.importer))}),N.length>0&&j.push({text:r==="en"?`Registration points: ${N.map(([C,L])=>`${C} (${L.join(", ")})`).join("; ")}.`:`注册点:${N.map(([C,L])=>`${C}(${L.join("、")})`).join(";")}。`,sources:N.map(([C])=>In(C))}),_){let C=await Dy(X.join(t,...P.split("/")),4,e,()=>!0,!0);j.push({text:r==="en"?`Mirrored test directory: ${P}/.`:`镜像测试目录:${P}/。`,sources:C.map(L=>In($i(t,L)))})}let x=k.map(C=>{let L=b.find(I=>I.targetModule?.id===C.id);return{type:"depends-on",targetId:C.id,sources:[In(L.importer)]}});h.push(Ky(w.id,"dependency",r==="en"?`Module entry points and dependencies: ${w.modulePath}`:`模块入口与依赖:${w.modulePath}`,j.map(C=>C.text).join(" "),j,{applicablePaths:[`${w.modulePath}/`,..._?[`${P}/`]:[]],relations:x}))}return h}async function vz(t,e){try{let r=JSON.parse(e).packageManager;if(typeof r=="string"&&r.trim()){let n=r.trim().split("@")[0];if(n&&["pnpm","npm","yarn","bun"].includes(n))return n}}catch{}for(let[r,n]of[["pnpm-lock.yaml","pnpm"],["yarn.lock","yarn"],["bun.lockb","bun"],["bun.lock","bun"],["package-lock.json","npm"]])try{if((await zo.lstat(X.join(t,r))).isFile())return n}catch{}return"npm"}async function wz(t,e,r){let n=await By(t,["package.json","pyproject.toml","Makefile","README.md"],e),i=n?await zR(t,n,e):null,o=[];if(n==="package.json"&&i)try{let c=JSON.parse(i).scripts??{},l=await vz(t,i);for(let d of["build","test","lint","typecheck","check:generated"])typeof c[d]=="string"&&o.push(`${l} run ${d}`)}catch{}let a=n?[In(n)]:[];if(a.length===0)return null;let s=o.length>0?r==="en"?`Preferred project verification commands: ${o.join(", ")}.`:`项目验证优先使用:${o.join("、")}。`:r==="en"?"No build or test command is directly discoverable from the manifest.":"项目未声明可从 manifest 直接识别的构建或测试命令。";return Ky("generated-build-test","procedure",r==="en"?"Build and test workflow":"构建与测试方式",s,[{text:o.length>0?r==="en"?`Run in order: ${o.join(", ")}.`:`建议按顺序运行:${o.join("、")}。`:r==="en"?"Inspect project documentation and CI before choosing verification commands.":"请先核对项目说明和 CI 中记录的实际验证命令。",sources:a}],{operations:["build","test","verify"],verification:o.map(c=>({command:c,expected:r==="en"?"pass":"成功"}))})}async function bz(t){let e=X.resolve(t.projectRoot),r=Date.now()+WR,n=t.language??"zh-CN",i=[];try{let o=await pz(e,r,n);o&&i.push(o);let a=await wz(e,r,n);a&&i.push(a),i.push(...await yz(e,r,n,t.preferredRecordIds,t.reportDiagnostic))}catch(o){if(!(o instanceof qo))throw o;t.reportDiagnostic?.({code:"project-model-timeout",message:"项目模型生成超过 1.5 秒预算,当前仅保留预算内已确认的记录。"})}return i}async function kz(t,e){let r=[...new Map(e.map(i=>[i.source,i.source])).values()],n=[];for(let i of r.slice(0,32))try{let o=await wr(t,i,{label:`Project Knowledge source ${i}`});n.push({source:i,size:Number(o.stat.size),modifiedAt:Math.trunc(Number(o.stat.mtimeMs)),digest:o.digest})}catch{}return n}async function rc(t){let e=X.resolve(t.projectRoot),r=await bz(t),n=oe(e),i=new Date().toISOString(),o=[];for(let a of r){let s=[...a.conclusions,...a.relations].flatMap(l=>l.sources),c=await kz(e,s);o.push({...a,projectId:n,state:"proven",authority:"repository",sourceVersions:c,applicationCount:0,successCount:0,failureCount:0,updatedAt:i})}return o}async function YR(t){if(!(t.provider instanceof Ti))try{await Nz(t)}catch(e){t.reportDiagnostic?.({code:"readiness-failed",message:`项目知识准备未完成:${e instanceof Error?e.message:String(e)}`})}}async function Nz(t){try{await Sz.access(t.projectRoot)}catch{return}let e=oe(t.projectRoot),r=await t.provider.apply({kind:"refresh",projectId:e});for(let s of r.diagnostics)t.reportDiagnostic?.(s);let n=await t.provider.query({kind:"list",projectId:e,state:"all",limit:500});for(let s of n.diagnostics)t.reportDiagnostic?.(s);let i=new Set(n.kind==="list"?n.records.filter(s=>s.state!=="superseded").map(s=>s.id):[]),o=await JR({projectRoot:t.projectRoot,reportDiagnostic:t.reportDiagnostic}),a=await rc({projectRoot:t.projectRoot,preferredRecordIds:o.filter(s=>!i.has(s)),language:t.language??"zh-CN",reportDiagnostic:t.reportDiagnostic});for(let s of a.slice(0,66))try{let c=await t.provider.apply({kind:"upsert",record:s});for(let l of c.diagnostics)t.reportDiagnostic?.(l)}catch(c){t.reportDiagnostic?.({code:"readiness-upsert-failed",message:`项目知识记录准备失败:${c instanceof Error?c.message:String(c)}`})}}Q();import{promises as Ez}from"node:fs";import{createHash as eA}from"node:crypto";import Wy from"node:path";var tA=24,xz=16,Pz=16,Cz=16,Rz=48*1024,XR=256*1024,Az=512,_z=16,jz=1024*1024;function ur(t,e=""){return typeof t=="string"?t.trim().slice(0,Az):e}function QR(t,e){return Array.isArray(t)?[...new Set(t.filter(r=>typeof r=="string"))].map(r=>ur(r)).filter(Boolean).slice(0,e):[]}function rA(t){if(typeof t!="string")return null;let e=t.trim().replaceAll("\\","/");return!e||e.includes("\0")||Wy.posix.isAbsolute(e)||Wy.win32.isAbsolute(e)||e.split("/").some(r=>r==="..")?null:e}function Iz(t){if(!Array.isArray(t))return[];let e=t.map(r=>typeof r=="string"?r:!r||typeof r!="object"||Array.isArray(r)?null:r.path??r.source).map(rA).filter(r=>r!==null);return[...new Set(e)].slice(0,xz)}function Tz(t){return Array.isArray(t)?t.map(e=>{if(!e||typeof e!="object"||Array.isArray(e))return null;let r=ur(e.command),n=e.success;return!r||typeof n!="boolean"?null:{command:r,success:n}}).filter(e=>e!==null).slice(0,Cz):[]}function Vy(t){let e=QR(t.context.paths,tA).map(rA).filter(l=>l!==null),r=Iz(t.evidence.filter(l=>l.source!==void 0).map(l=>l.source)),n=t.evidence.filter(l=>l.kind==="verification"&&l.command!==void 0),i=QR(n.map(l=>l.command),Pz),o=Tz(n.map(l=>({command:l.command,success:l.success})));if(!(e.length>0||r.length>0||i.length>0||o.length>0)&&!["review.resolved","failure.resolved","change.archived"].includes(t.type))return null;let s=ur(t.context.workflow,t.source.workflow??t.source.name),c=ur(t.context.changeId,t.source.changeId??t.episodeId);return!s||!c?null:{eventName:t.type,workflow:s,changeId:c,success:t.outcome?.status!=="contributed-to-failure"&&t.evidence.every(l=>l.success!==!1),...ur(t.context.operation)?{operation:ur(t.context.operation)}:{},...ur(t.context.phase)?{phase:ur(t.context.phase)}:{},changedPaths:e,artifactRefs:r,verificationCommands:i,verificationResults:o}}async function $z(t,e){if(!["verification.completed","review.resolved","failure.resolved","change.archived","repository.changed"].includes(t.type))return null;let r=Vy(t);if(r===null)return null;let n=[...new Set([...r.changedPaths,...r.artifactRefs])],i=[],o=0;for(let a of n.slice(0,tA)){if(o>=(e.maxTotalSourceBytes??XR))break;try{if(!(await $(e.projectRoot,a,{label:a,expected:"file"})).exists)continue;let c=await O(e.projectRoot,a,Math.min(e.maxSourceBytes??Rz,(e.maxTotalSourceBytes??XR)-o),{label:a}),l=c.bytes.toString("utf8");o+=c.bytes.length,i.push({source:a,text:l,size:Number(c.stat.size),modifiedAt:Math.trunc(Number(c.stat.mtimeMs)),digest:eA("sha256").update(c.bytes).digest("hex")})}catch{}}return{eventName:r.eventName,workflow:r.workflow,changeId:r.changeId,success:r.success,occurredAt:t.occurredAt,...r.operation===void 0?{}:{operation:r.operation},...r.phase===void 0?{}:{phase:r.phase},...ur(t.outcome?.summary,t.evidence.find(a=>a.summary.trim().length>0)?.summary??"")?{summary:ur(t.outcome?.summary,t.evidence.find(a=>a.summary.trim().length>0)?.summary??"")}:{},changedHint:r,sources:i}}function Oz(t){if(!t.success)return!1;let e=t.changedHint.verificationResults;return e.length>0?e.every(r=>r.success===!0):["review.resolved","failure.resolved","change.archived"].includes(t.eventName)}function Mz(t,e,r){let n={"review.resolved":"decision","failure.resolved":"failure-resolution","verification.completed":"constraint","change.archived":"procedure"}[t.eventName];if(n===void 0)return null;let i=n==="constraint"?t.changedHint.verificationResults.filter(l=>l.success).map(l=>({command:l.command,expected:"pass"})):[];if(n==="constraint"&&i.length===0)return null;let o=n==="constraint"?r==="en"?`The project successfully ran: ${i.map(l=>l.command).join(", ")}.`:`项目已成功运行验证命令:${i.map(l=>l.command).join("、")}。`:n==="failure-resolution"?r==="en"?"This failure was resolved; similar tasks should reuse the verified resolution.":"本次失败已经解决,后续相似任务应复用已验证的处理方式。":n==="decision"?r==="en"?"This review decision was accepted and can guide similar project changes.":"本次评审结论已通过,可作为后续相似变更的项目决策依据。":r==="en"?"This archived change provides a reusable completion and verification workflow.":"本次变更已经归档,可复用其完成与验证流程。",a=n==="constraint"?o:t.summary??o,s=t.sources.slice(0,8).map(l=>({source:l.source})),c=eA("sha256").update(JSON.stringify({type:n,workflow:t.workflow,summary:a,operation:t.operation,verification:i,paths:t.changedHint.changedPaths})).digest("hex").slice(0,20);return gt({id:`learned-${n}-${c}`,projectId:oe(e),type:n,state:"proven",authority:"automatic",title:n==="constraint"?r==="en"?"Verified project command":"已验证的项目命令":n==="failure-resolution"?r==="en"?"Resolved failure experience":"已解决的问题经验":n==="decision"?r==="en"?"Review-confirmed project decision":"评审确认的项目决策":r==="en"?"Archived change workflow":"已归档的变更流程",summary:a,applicablePaths:t.changedHint.changedPaths,operations:t.operation===void 0?[]:[t.operation],phases:t.phase===void 0?[]:[t.phase],conclusions:s.length===0?[]:[{text:a,sources:s}],relations:[],verification:i,sourceVersions:t.sources.slice(0,8).map(l=>({source:l.source,size:l.size,modifiedAt:Math.trunc(l.modifiedAt),digest:l.digest})),applicationCount:0,successCount:0,failureCount:0,updatedAt:t.occurredAt})}async function Lz(t,e){for(let r of t.sources)try{if(!(await $(e,r.source,{label:r.source,expected:"file"})).exists)return r.source;let i=await wr(e,r.source,{label:r.source});if(Number(i.stat.size)!==r.size||i.digest!==r.digest)return r.source}catch{return r.source}return null}async function Hy(t,e){for(let o of t.sourceVersions)try{let a=await $(e,o.source,{label:o.source,expected:"file"});if(!a.exists)return o.source;if(o.digest!==void 0){let s=await wr(e,o.source,{label:o.source});if(Number(s.stat.size)!==o.size||s.digest!==o.digest)return o.source}else{let s=await Ez.stat(a.target);if(Number(s.size)!==o.size||Math.trunc(Number(s.mtimeMs))!==o.modifiedAt)return o.source}}catch{return o.source}let r=[...t.conclusions.flatMap(o=>o.sources),...t.relations.flatMap(o=>o.sources)],n=new Set(t.sourceVersions.map(o=>o.source)),i=new Map;for(let o of r){if(!n.has(o.source))return o.source;let a=i.get(o.source)??[];i.set(o.source,[...a,o])}for(let[o,a]of i){let s=a.filter(c=>c.anchor!==void 0||c.lineStart!==void 0||c.lineEnd!==void 0);if(s.length!==0)try{let c=(await O(e,o,jz,{label:o})).bytes.toString("utf8");if(!s.every(l=>Ju(c,l)))return o}catch{return o}}return null}var Zu=class{projectRoot;provider;language;reviewer;reportDiagnostic;constructor(e){this.projectRoot=Wy.resolve(e.projectRoot),this.provider=e.provider,this.language=e.language??"zh-CN",this.reviewer=e.reviewer,this.reportDiagnostic=e.reportDiagnostic}async bootstrapProjectModel(e=[]){let r=[],n=s=>{r.push(s),this.reportDiagnostic?.(s)},i=[];try{i=await rc({projectRoot:this.projectRoot,language:this.language,reportDiagnostic:n})}catch{n({code:"deterministic-extractor",message:"确定性项目知识提取暂不可用,已跳过本次写入。"})}let o=[],a=[];for(let s of i.slice(0,66))try{let c=gt(s),l=await Hy(c,this.projectRoot);if(l!==null){n({code:"source-changed",message:"首次建模期间项目来源发生变化,已跳过本次记录。",source:l});continue}let d=await this.provider.apply({kind:"upsert",record:c});for(let u of d.diagnostics)n(u);d.changed&&o.push(c.id),d.changed&&(d.record?.state==="proven"||d.record?.state==="enforced")&&a.push(c.id)}catch{n({code:"provider-write",message:"项目知识记录未能写入 Provider。"})}return{skipped:i.length===0,persisted:o,proven:a,superseded:[],diagnostics:r}}async reflectEvent(e){let r=[],n=u=>{r.push(u),this.reportDiagnostic?.(u)},i=await $z(e,{projectRoot:this.projectRoot});if(i===null||!Oz(i))return{skipped:!0,deferred:!1,deltas:[],...i===null?{}:{changedHint:i.changedHint},diagnostics:r};let o=[],a=this.reviewer===void 0;if(this.reviewer!==void 0)try{let u=await this.reviewer.review(i);o=Array.isArray(u)?u.slice(0,_z):[]}catch(u){a=!0,n({code:"reviewer-unavailable",message:u instanceof Error&&u.message.startsWith("Host Agent review pending")?"经验已保存,等待宿主 Agent 使用 comet knowledge review 完成评审。":"项目知识语义评审暂不可用,已继续确定性学习并延后语义策略。"})}let s=await Lz(i,this.projectRoot);if(s!==null)return n({code:"source-changed",message:"语义评审期间项目来源发生变化,已跳过本次写入。",source:s}),{skipped:!0,deferred:a,deltas:[],changedHint:i.changedHint,diagnostics:r};let c=[],l=[];try{l=await rc({projectRoot:this.projectRoot,changedPaths:i.changedHint.changedPaths,language:this.language,reportDiagnostic:n})}catch{n({code:"deterministic-extractor",message:"确定性项目知识提取暂不可用,已跳过本次写入。"})}let d=i.eventName==="verification.completed"?Mz(i,this.projectRoot,this.language):null;d!==null&&(l=[...l,d]);for(let u of l.slice(0,67))try{let p=gt({...u}),f=await Hy(p,this.projectRoot);if(f!==null){n({code:"source-changed",message:"确定性记录校验期间项目来源发生变化,已跳过本次记录。",source:f});continue}c.push(ZR(e,p))}catch{n({code:"record-invalid",message:"项目知识记录无效,已跳过该记录。"})}for(let u of o)try{if(u.action==="supersede"){c.push({action:"supersede",owner:"comet.project-knowledge",targetId:u.recordId,memoryType:"project-policy",kind:"semantic-review",statement:"semantic-review",applicability:{projectId:e.projectId??oe(this.projectRoot)},evidence:e.evidence,authority:"repository",recommendedState:"superseded"});continue}let p=gt({...u.record,state:"trial",authority:"automatic",applicationCount:0,successCount:0,failureCount:0}),f=await Hy(p,this.projectRoot);if(f!==null){n({code:"source-changed",message:"语义记录校验期间项目来源发生变化,已跳过本次记录。",source:f});continue}c.push(ZR(e,p))}catch{n({code:"review-action-invalid",message:"语义评审动作无效,已跳过该动作。"})}if(i.eventName==="verification.completed"&&i.changedHint.verificationResults.length>0)try{let u=i.changedHint.verificationResults.filter(p=>p.success).map(p=>p.command);c.push({action:"update",owner:"comet.project-knowledge",memoryType:"project-policy",kind:"verification-status",statement:u.join(`
|
||
`),applicability:{projectId:oe(this.projectRoot)},evidence:e.evidence,authority:"repository",verification:u.map(p=>({command:p,expected:"pass"})),payload:{kind:"verify",projectId:oe(this.projectRoot),commands:u,updatedAt:i.occurredAt},recommendedState:"enforced"})}catch{n({code:"verification-invalid",message:"项目知识验证状态无效,已跳过。"})}return{skipped:!1,deferred:a,deltas:c,changedHint:i.changedHint,diagnostics:r}}async processEvent(e){let r=await this.reflectEvent(e),n=[...r.diagnostics],i=[],o=[],a=[];for(let[s,c]of r.deltas.entries())try{let l=await this.provider.apply({kind:"experience-delta",delta:c,idempotencyKey:`direct:${e.eventId}:${s}`,updatedAt:e.occurredAt});if(n.push(...l.diagnostics),!l.changed)continue;let d=[...l.record?[l.record.id]:[],...(l.records??[]).map(u=>u.id),...c.targetId?[c.targetId]:[]];for(let u of[...new Set(d)])c.action==="supersede"||c.action==="forget"?a.push(u):i.push(u);for(let u of[...l.record?[l.record]:[],...l.records??[]])(u.state==="proven"||u.state==="enforced")&&o.push(u.id)}catch{n.push({code:"provider-write",message:"项目知识记录未能写入 Provider。"})}return{skipped:r.skipped,persisted:[...new Set(i)],proven:[...new Set(o)],superseded:[...new Set(a)],...r.changedHint===void 0?{}:{changedHint:r.changedHint},diagnostics:n}}};function ZR(t,e){let r=["topology","fact","dependency"].includes(e.type);return{action:"create",owner:"comet.project-knowledge",targetId:e.id,memoryType:r?"project-model":"project-policy",kind:e.type,title:e.title,statement:e.summary,applicability:{projectId:e.projectId,paths:e.applicablePaths,operations:e.operations,phases:e.phases},evidence:t.evidence,authority:e.authority==="user"?"user":"repository",verification:e.verification,payload:{kind:"record",record:e},recommendedState:e.state}}Aa();Q();ge();var Wt="comet.project-knowledge",Gy=3,Bz=2*1024*1024,Fz=new Set(["topology","fact","dependency","decision","pattern","procedure","constraint","failure-resolution"]),Kz=new Set(["decision","pattern","procedure","constraint","failure-resolution"]);function qy(t,e){if(t===void 0)return[];if(!Array.isArray(t))throw new Error(`${e} must be an array`);return t.map((r,n)=>{if(typeof r!="string"||!r.trim())throw new Error(`${e}[${n}] must be a non-empty string`);return r.trim()})}function nA(t,e){if(t!==void 0){if(typeof t!="number"||!Number.isSafeInteger(t)||t<=0)throw new Error(`${e} must be a positive integer`);return t}}function Hz(t,e){let r=nA(e.maxFileMb,"maxFileMb"),n=nA(e.maxTotalMb,"maxTotalMb");if(r===void 0&&n===void 0)return t===void 0?void 0:{...t,include:[...t.include]};let i={...t??{include:[]},include:[...t?.include??[]],max_file_mb:r??t?.max_file_mb??Qe.max_file_mb,max_total_mb:n??t?.max_total_mb??Qe.max_total_mb};if(i.max_file_mb>i.max_total_mb)throw new Error("maxFileMb must not exceed maxTotalMb");return i}function Wz(t){if(t===void 0)return[];if(!Array.isArray(t))throw new Error("sources must be an array");return t.map((e,r)=>{if(typeof e=="string"&&e.trim())return{source:e.trim()};if(!e||typeof e!="object"||Array.isArray(e))throw new Error(`sources[${r}] must be a source object or string`);let n=e.source;if(typeof n!="string"||!n.trim())throw new Error(`sources[${r}].source must be a non-empty string`);let i=e.anchor;return{source:n.trim(),...typeof i=="string"&&i.trim()?{anchor:i.trim()}:{}}})}function Vz(t){if(t===void 0)return[];if(!Array.isArray(t))throw new Error("verification must be an array");return t.map((e,r)=>{if(typeof e=="string"&&e.trim())return{command:e.trim()};if(!e||typeof e!="object"||Array.isArray(e))throw new Error(`verification[${r}] must be a command object or string`);let n=e.command;if(typeof n!="string"||!n.trim())throw new Error(`verification[${r}].command must be a non-empty string`);let i=e.expected;return{command:n.trim(),...typeof i=="string"&&i.trim()?{expected:i.trim()}:{}}})}function qz(t="zh-CN"){return{id:"project-knowledge",label:t==="en"?"Project Knowledge":"项目知识",route:"/plugins/project-knowledge",load:async({invoke:e})=>e("status")}}function oA(t){return{id:Wt,kind:"first-party",version:t.version??"1.0.0",scopes:["project"],compatible:t.cometVersionRange??(()=>!0),create:async e=>zz(e,t)}}async function zz(t,e){let r=await Qz(t.storage),n=await Zz(t.storage),i=Promise.resolve(),o=()=>{let m={diagnostics:[...r],changedHints:[...n]};i=i.then(()=>t.storage.write(m)).catch(()=>{})},a=m=>{let g=sA(`[${m.code}] ${m.message}`);if(!r.some(w=>w.code===m.code&&w.message===g)){for(r.push({code:m.code,message:g});r.length>Gy;)r.shift();o(),t.reportDiagnostic({phase:"context",code:"execution-failed",message:g})}},s=m=>{let g=r.filter(h=>h.code!==m);g.length!==r.length&&(r.splice(0,r.length,...g),o())},c=m=>{e.knowledgeConfig.provider!=="local"||m.kind!=="search"||m.diagnostics.some(g=>g.code==="local-tool-missing")||s("local-tool-missing")},l=async(m={})=>{let g=e.knowledgeConfig.provider,h=g==="local"&&m.discoverCorpus!==!1?await Vu({projectRoot:e.projectRoot,reportDiagnostic:a}):{documents:[],complete:!0};return g==="remote"?new Ti({config:e.knowledgeConfig.remote,projectRoot:e.projectRoot,reportDiagnostic:a}):new St({projectRoot:e.projectRoot,corpus:h.documents,corpusComplete:h.complete,...e.cacheRoot?{cacheRoot:e.cacheRoot}:{},reportDiagnostic:a})},d=async m=>{let g=await l();try{return await new Zu({projectRoot:e.projectRoot,provider:g,language:e.language,reviewer:e.semanticReviewer??new wi(e.projectRoot,e.cacheRoot),reportDiagnostic:a}).reflectEvent(m)}finally{g instanceof St&&g.close()}},u=async m=>{await YR({projectRoot:e.projectRoot,provider:m,language:e.language,reportDiagnostic:a})},p=async m=>{for(n.push(m);n.length>8;)n.shift();await t.storage.write({diagnostics:[...r],changedHints:[...n]})},f=async()=>{let m=null;try{let g=HR({config:e.knowledgeConfig,language:e.language});m=await l();let h=m,w=oe(e.projectRoot);await u(h);let y=await h.status(),v=await h.query({kind:"list",projectId:w,state:"all",limit:100}),b=v.kind==="list"?v.records:[],k=await e.listContextApplications?.()??[],S=b.map(I=>({...I,...Gz(I.id,k),...Uy(I)===void 0?{}:{activation:Uy(I)}})),E=Uz(k,Wt),N=new Map(S.map(I=>[I.id,I])),P=m instanceof St?await m.indexStatus():null,_=rr(e.projectRoot,e.cacheRoot),j=[...r,...y.diagnostics,...v.kind==="list"?v.diagnostics:[]].filter((I,B,re)=>{let J=I.message.replace(/^\[[^\]]+\]\s*/u,"");return re.findIndex(Oi=>Oi.code===I.code&&Oi.message.replace(/^\[[^\]]+\]\s*/u,"")===J)===B}),x=0;if(!e.semanticReviewer)try{x=(await new wi(e.projectRoot,e.cacheRoot).pending()).length}catch(I){let B={code:"host-review-unavailable",message:`待评审知识暂不可用:${I instanceof Error?I.message:String(I)}`};a(B),j.push(B)}let C;try{let I=await iR(e.projectRoot,e.cacheRoot),B=k.filter(re=>re.owner===Wt&&re.candidateId===xy).sort((re,J)=>J.appliedAt.localeCompare(re.appliedAt));C={directory:Vo(e.projectRoot,e.cacheRoot),total:I.length,entries:I,applicationCount:B.length,...B[0]===void 0?{}:{lastApplication:B[0]},applicationHistory:B.slice(0,10)}}catch(I){let B={code:"project-memory-unavailable",message:`项目记忆暂不可用:${I instanceof Error?I.message:String(I)}`};a(B),j.push(B)}return{...g,pendingHostReviewCount:x,status:y,...C===void 0?{}:{projectMemory:C},records:S,counts:{active:v.kind==="list"&&v.counts?v.counts.active:b.filter(I=>I.state!=="superseded").length,trial:v.kind==="list"&&v.counts?v.counts.trial:b.filter(I=>I.state==="trial").length,proven:v.kind==="list"&&v.counts?v.counts.proven:b.filter(I=>I.state==="proven").length,enforced:v.kind==="list"&&v.counts?v.counts.enforced:b.filter(I=>I.state==="enforced").length,superseded:v.kind==="list"&&v.counts?v.counts.superseded:b.filter(I=>I.state==="superseded").length,total:v.kind==="list"&&v.counts?v.counts.total:b.length,displayed:b.length},truncated:v.kind==="list"?v.truncated:!1,manifestPreview:E.flatMap(I=>{let B=N.get(I.candidateId),re=k.filter(J=>J.owner===Wt&&J.candidateId===I.candidateId);return B===void 0&&(I.candidateTitle===void 0||I.candidateSummary===void 0||I.candidateState===void 0)?[]:[{id:B?.id??I.candidateId,memoryType:B===void 0?I.memoryType==="project-model"?"project-model":"project-policy":["topology","fact","dependency"].includes(B.type)?"project-model":"project-policy",state:B?.state??I.candidateState,title:B?.title??I.candidateTitle,summary:B?.summary??I.candidateSummary,whyApplied:I.whyApplied,applicationCount:B?.applicationCount??re.length,successCount:B?.successCount??re.filter(J=>J.outcome==="used-successfully").length,failureCount:B?.failureCount??re.filter(J=>J.outcome==="corrected"||J.outcome==="contributed-to-failure").length,delivery:I.delivery,appliedAt:I.appliedAt,...I.outcome===void 0?{}:{outcome:I.outcome},lastApplication:I,...B?.activation===void 0?{}:{activation:B.activation}}]}),local:e.knowledgeConfig.provider==="local"?{available:y.healthy&&P?.available===!0,repositoryId:_.repositoryId,workspaceId:_.workspaceId,sourceCount:P?.sourceCount??0,sources:P?.sources??[],sectionCount:P?.sectionCount??0,...P?.lastQueryMs===void 0?{}:{lastQueryMs:P.lastQueryMs},...P?.lastCandidateCount===void 0?{}:{lastCandidateCount:P.lastCandidateCount},...P?.updatedAt??y.updatedAt?{updatedAt:P?.updatedAt??y.updatedAt}:{},channels:P?.channels??["records","sections"],truncated:v.kind==="list"?v.truncated:!1}:void 0,diagnostics:j.slice(-Gy)}}finally{m instanceof St&&m.close()}};return{dashboard:qz(e.language),events:["verification.completed","review.resolved","failure.resolved","change.archived","repository.changed","context.outcome"],reflect:async m=>{let g=[],h=!1;for(let w of hu(m)){if(w.type==="context.outcome"&&w.outcome!==void 0){for(let b of bu(w.outcome.unitIds,Wt))g.push({action:"update",owner:Wt,targetId:b,memoryType:"project-policy",kind:"application-feedback",statement:w.outcome.summary??`Context outcome: ${w.outcome.status}`,applicability:Jz(w),evidence:w.evidence,...w.outcome.applicationId===void 0||w.outcome.revision===void 0?{}:{feedback:{applicationId:w.outcome.applicationId,status:w.outcome.status,...w.outcome.previousStatus===void 0?{}:{previousStatus:w.outcome.previousStatus},revision:w.outcome.revision}},recommendedState:w.outcome.status==="corrected"||w.outcome.status==="contributed-to-failure"?"superseded":"proven"});continue}let y=Vy(w);y!==null&&await p(y);let v=await d(w);h||=v.deferred,g.push(...v.deltas)}return{deltas:g,deferred:h}},consolidate:async({deltas:m})=>{let g=null;try{g=await l({discoverCorpus:!1});for(let{delta:h,idempotencyKey:w}of m)await g.apply({kind:"experience-delta",delta:h,idempotencyKey:w,updatedAt:new Date().toISOString()})}finally{g instanceof St&&g.close()}},invoke:async(m,g)=>{let h=null;try{let w=g&&typeof g=="object"?g:{};if(m==="configure-provider"){if(e.updateKnowledgeConfig===void 0)throw new Error("Project Knowledge configuration is read-only in this host");let b=w.provider;if(b!=="local"&&b!=="remote")throw new Error("provider must be local or remote");let k=Hz(e.knowledgeConfig.local,w);if(b==="local")await e.updateKnowledgeConfig({provider:"local",...k===void 0?{}:{local:k}});else{let S=w.remote;if(!S||typeof S!="object"||Array.isArray(S))throw new Error("remote provider configuration is required");let E=S;if(typeof E.endpoint!="string"||!E.endpoint.trim())throw new Error("remote endpoint is required");let N=typeof E.timeoutMs=="number"?E.timeoutMs:E.timeout_ms;if(typeof N!="number"||!Number.isSafeInteger(N))throw new Error("remote timeout must be an integer");await e.updateKnowledgeConfig({provider:"remote",...k===void 0?{}:{local:k},remote:{endpoint:E.endpoint.trim(),...typeof E.tokenEnv=="string"&&E.tokenEnv.trim()?{token_env:E.tokenEnv.trim()}:{},...typeof E.scope=="string"&&E.scope.trim()?{scope:E.scope.trim()}:{},timeout_ms:N}})}return{configured:!0}}let y=w,v=oe(e.projectRoot);if(m==="status")return f();if(m==="read-source"){if(typeof y.source!="string"||!y.source.trim())throw new Error("read-source requires source");let b=y.source.trim().replaceAll("\\","/");try{let k=await O(e.projectRoot,b,Bz,{label:`Project Knowledge source ${b}`});if(k.bytes.includes(0))throw new Error("来源文件不是可查看的文本文件");return{kind:"source",source:b,content:k.bytes.toString("utf8"),size:Number(k.stat.size),modifiedAt:new Date(Number(k.stat.mtimeMs)).toISOString(),truncated:!1}}catch(k){throw k instanceof Ee&&k.reason==="too-large"?new Error("来源文件过大,无法在 Dashboard 内完整查看",{cause:k}):k instanceof Error&&k.message.includes("不是可查看的文本文件")?k:new Error("来源文件无法读取",{cause:k})}}if(m==="memory-get"){if(typeof y.slug!="string"||!y.slug.trim())throw new Error("memory-get requires slug");let b=await Ry(e.projectRoot,y.slug.trim(),e.cacheRoot);if(b===null)throw new Error("项目记忆不存在");return{kind:"memory",...b}}if(m==="forget"&&typeof y.memory=="string"&&y.memory.trim()){let b=y.memory.trim(),k=await oR(e.projectRoot,b,e.cacheRoot);if(!k)throw new Error("项目记忆不存在");return{changed:!0,memory:b,removed:k}}if(h=await l(),(m==="list"||m==="query")&&await u(h),m==="list"){let b=y.state;return await h.query({kind:"list",projectId:v,...b==="trial"||b==="proven"||b==="enforced"||b==="superseded"||b==="all"?{state:b}:{state:"all"},limit:typeof y.limit=="number"?Math.min(500,Math.max(1,y.limit)):100})}if(m==="get"){if(typeof y.id!="string"||!y.id.trim())throw new Error("get requires id");return await h.query({kind:"get",id:y.id.trim(),projectId:v})}if(m==="query"){if(typeof y.task!="string"||!y.task.trim())throw new Error("query requires task");let b=await h.query({kind:"search",query:tu({task:y.task,...typeof y.path=="string"?{path:y.path}:{},...typeof y.phase=="string"?{phase:y.phase}:{},...typeof y.operation=="string"?{operation:y.operation}:{}}),limit:8});return c(b),b}if(m==="create"){let b=y.type;if(typeof b!="string"||!Fz.has(b))throw new Error("create requires a supported type");if(typeof y.title!="string"||!y.title.trim())throw new Error("create requires title");if(typeof y.summary!="string"||!y.summary.trim())throw new Error("create requires summary");let k=gP({type:b,title:y.title.trim(),summary:y.summary.trim(),applicablePaths:qy(y.applicablePaths,"applicablePaths"),operations:qy(y.operations,"operations"),phases:qy(y.phases,"phases"),sources:Wz(y.sources),verification:Vz(y.verification)},v);return await h.apply({kind:"upsert",record:k})}if(m==="correct"){if(typeof y.id!="string"||!y.id.trim())throw new Error("correct requires id");if(typeof y.text!="string"||!y.text.trim())throw new Error("correct requires text");return await h.apply({kind:"correct",id:y.id.trim(),projectId:v,summary:y.text.trim().slice(0,2e3),updatedAt:new Date().toISOString()})}if(m==="forget"){if(typeof y.id!="string"||!y.id.trim())throw new Error("forget requires id");return await h.apply({kind:"supersede",id:y.id.trim(),projectId:v,updatedAt:new Date().toISOString()})}if(m==="feedback"){if(typeof y.id!="string"||!y.id.trim())throw new Error("feedback requires id");if(!["used-successfully","ignored","overridden","corrected","contributed-to-failure"].includes(String(y.outcome)))throw new Error("feedback requires a supported outcome");return await h.apply({kind:"feedback",id:y.id.trim(),projectId:v,outcome:y.outcome,updatedAt:new Date().toISOString()})}if(m==="refresh")return await h.apply({kind:"refresh",projectId:v,...typeof y.id=="string"&&y.id.trim()?{id:y.id.trim()}:{}});throw new Error(`Unknown project knowledge capability: ${m}`)}finally{h instanceof St&&h.close()}},provideContext:async m=>{let g=[];try{let w=await nR(e.projectRoot,e.cacheRoot),y=Yz(w,m.projectId,e.language);y!==null&&g.push(y)}catch(w){a({code:"project-memory-unavailable",message:`项目记忆索引暂不可用:${w instanceof Error?w.message:String(w)}`})}let h=null;try{let w=tu(m);h=await l(),await u(h);let y=await h.query({kind:"search",query:w,limit:8});c(y);let v=y.kind==="search"?y.results:[];g.push(...v.map(b=>zy(b,m.projectId,e.language)))}catch(w){a({code:"context-provider-unavailable",message:`项目知识检索暂不可用:${w instanceof Error?w.message:String(w)}`})}finally{h instanceof St&&h.close()}return n.length>0&&(n.splice(0,n.length),o()),await i,g.length===0?null:g},resolveContext:async(m,g)=>{if(m.startsWith(Wu)){let v=m.slice(Wu.length),b=await Ry(e.projectRoot,v,e.cacheRoot);return b===null?null:Xz(b,g.projectId,e.language)}let h=null;try{h=await l({discoverCorpus:!1});let v=oe(e.projectRoot),b=await h.query({kind:"expand",id:m,projectId:v});if(b.kind==="expand"&&b.record!==null)return zy({source:`record:${b.record.id}`,title:b.record.title,content:b.record.summary,record:b.record},g.projectId,e.language)}finally{h instanceof St&&h.close()}if(!m.startsWith("document-")||e.knowledgeConfig.provider!=="local")return null;let y=(await fR({projectRoot:e.projectRoot,reportDiagnostic:a})).find(v=>`document-${iA("sha256").update(v.source).digest("hex").slice(0,24)}`===m);return y===void 0?null:zy({source:y.source,title:y.source,content:await Dz(y.absolutePath,"utf8"),document:y},g.projectId,e.language)}}}function Gz(t,e){let r=e.filter(n=>n.owner===Wt&&n.candidateId===t).sort((n,i)=>i.appliedAt.localeCompare(n.appliedAt));return r[0]===void 0?{}:{contextApplicationCount:r.length,lastApplication:r[0],applicationHistory:r}}function Uz(t,e){let r=t.filter(i=>i.owner===e).sort((i,o)=>o.appliedAt.localeCompare(i.appliedAt)),n=r[0]?.episodeId;return n===void 0?[]:r.filter(i=>i.episodeId===n).sort((i,o)=>i.applicationId.localeCompare(o.applicationId))}function Jz(t){return{...t.projectId===void 0?{}:{projectId:t.projectId},...t.context.paths===void 0?{}:{paths:t.context.paths},...t.context.operation===void 0?{}:{operations:[t.context.operation]},...t.context.phase===void 0?{}:{phases:[t.context.phase]},...t.context.task===void 0?{}:{tasks:[t.context.task]}}}function zy(t,e,r){let n=t.record;if(n!==void 0){let o=aA(n.type),a=Uy(n);return{id:n.id,owner:Wt,scope:"project",memoryType:o?"project-policy":"project-model",kind:n.type,state:n.state,authority:n.authority==="automatic"?"inferred":n.authority,title:n.title,summary:n.summary,content:[n.summary,`Applicable paths: ${n.applicablePaths.join(", ")||"*"}`,`Operations: ${n.operations.join(", ")||"*"}`,`Phases: ${(n.phases??[]).join(", ")||"*"}`,...n.conclusions.map(s=>`- ${s.text}
|
||
Sources: ${s.sources.map(c=>[c.source,c.anchor].filter(Boolean).join("#")).join(", ")}`)].join(`
|
||
`),selectors:{projectId:n.projectId,paths:n.applicablePaths,operations:n.operations,phases:n.phases??[]},sources:n.conclusions.flatMap(s=>s.sources.map(c=>({type:"repository",source:c.source,anchor:c.anchor}))),verification:n.verification,...a?.kind==="verification"?{priority:120,matchReasons:[r==="en"?"This project policy is enforced by an existing verification command.":"当前策略由项目验证命令强制执行"]}:a?.kind==="skill-candidate"?{priority:20,matchReasons:[r==="en"?"This stable multi-step procedure can become a Skill after user confirmation.":"该流程已形成稳定的多步骤程序,可在用户确认后整理为 Skill。"]}:{}}}return{id:`document-${iA("sha256").update(t.source).digest("hex").slice(0,24)}`,owner:Wt,scope:"project",memoryType:"project-model",kind:"fact",state:"proven",authority:"repository",title:t.title??t.source,summary:t.content.slice(0,1e3),content:t.content,selectors:{...e===void 0?{}:{projectId:e}},sources:[{type:"repository",source:t.source}],verification:[]}}function Yz(t,e,r){let n=aR(t,r??"zh-CN");if(n===null)return null;let i=t.slice(0,3).map(o=>o.title).join(r==="en"?"; ":";");return{id:xy,owner:Wt,scope:"project",memoryType:"project-policy",kind:"project-memory",state:"proven",authority:"user",title:r==="en"?"Project memory index":"项目记忆索引",summary:`${t.length} ${r==="en"?"entries":"条"}${i?`:${i}`:""}`.slice(0,400),content:n,selectors:{...e===void 0?{}:{projectId:e}},sources:[],verification:[],priority:130,matchReasons:[r==="en"?"Durable lessons the agent recorded for this project; expand entries on demand.":"Agent 为本项目沉淀的可复用经验索引;单条内容按需展开。"]}}function Xz(t,e,r){let n=r==="en",i=[n?`Type: ${t.type}`:`类型:${t.type}`,n?`Created: ${t.created} · Updated: ${t.updated}`:`创建:${t.created} · 更新:${t.updated}`,...t.paths.length>0?[n?`Paths: ${t.paths.join(", ")}`:`相关路径:${t.paths.join("、")}`]:[],...t.source===void 0?[]:[n?`Source: ${t.source}`:`来源:${t.source}`]];return{id:`${Wu}${t.slug}`,owner:Wt,scope:"project",memoryType:"project-policy",kind:"project-memory",state:"proven",authority:"user",title:t.title,summary:t.description,content:`${t.description}
|
||
|
||
${i.join(`
|
||
`)}
|
||
|
||
${t.body}`,selectors:{...e===void 0?{}:{projectId:e}},sources:t.source===void 0?[]:[{type:"workflow",source:t.source}],verification:[]}}function Uy(t){if(!aA(t.type))return;let e=t.type==="procedure"?[...t.conclusions.map(r=>r.text),...t.summary.split(/\r?\n/u)].map(r=>r.replace(/^\s*(?:\d+[.)]|[-*])\s*/u,"").trim()).filter(Boolean):void 0;return LP({kind:t.type,state:t.state,verification:t.verification,...e===void 0?{}:{steps:e},applicationCount:t.applicationCount,successCount:t.successCount,failureCount:t.failureCount})}function aA(t){return Kz.has(t)}async function Qz(t){try{let e=await t.read();if(!e||typeof e!="object"||Array.isArray(e))return[];let r=e.diagnostics;return Array.isArray(r)?r.map(n=>{if(!n||typeof n!="object"||Array.isArray(n))return null;let i=n.code,o=n.message;if(typeof i!="string"||typeof o!="string")return null;let a=i.trim().slice(0,64),s=sA(o);return!a||!s?null:{code:a,message:s}}).filter(n=>n!==null).slice(-Gy):[]}catch{return[]}}async function Zz(t){try{let e=await t.read();if(!e||typeof e!="object"||Array.isArray(e))return[];let r=e.changedHints;return Array.isArray(r)?r.filter(n=>{if(!n||typeof n!="object"||Array.isArray(n))return!1;let i=n;return typeof i.eventName=="string"&&typeof i.changeId=="string"}).slice(-8):[]}catch{return[]}}function sA(t){return t.replace(/Bearer\s+\S+/giu,"Bearer [redacted]").replace(/Authorization:\s*\S+/giu,"Authorization: [redacted]").slice(0,240)}qe();ge();ge();var Jy=class{constructor(e,r,n="zh-CN",i=new js,o,a=!0){this.runtime=e;this.projectId=r;this.language=n;this.contextDirector=i;this.applicationStore=o;this.persistContextApplications=a}runtime;projectId;language;contextDirector;applicationStore;persistContextApplications;get pluginRuntime(){return this.runtime}get currentProjectId(){return this.projectId}get currentLanguage(){return this.language}async collectContext(e){let r=await this.collectCandidates(e),n=await this.contextDirector.select(r,{...e,projectId:this.projectId,language:this.language});return n.text?(await this.recordContextApplications(n.applications),[{pluginId:"comet.context-director",text:n.text,episodeId:n.episodeId,manifest:n.manifest,applications:n.applications}]):[]}async expandContext(e,r){let n={scope:"project",projectId:this.projectId},i=wu(e),o=i?.candidateId??e,[a,s]=await Promise.all([this.runtime.resolveContext(o,{...r,projectId:this.projectId},"user",i?.owner),this.runtime.resolveContext(o,{...r,projectId:this.projectId},n,i?.owner)]),c=[...new Map([...a,...s].map(l=>[`${l.owner}:${l.id}`,l])).values()];return this.contextDirector.expand(c,e,{...r,projectId:this.projectId,language:this.language})}async recordContextOutcome(e,r,n){if(await this.contextDirector.recordOutcome(e,r,this.projectId,n)===null)throw new Error(`Unknown context application: ${e}`);await this.flushContextApplicationOutbox()}async collectCandidates(e){let r={scope:"project",projectId:this.projectId},[n,i]=await Promise.all([this.runtime.collectContext({...e,projectId:this.projectId},"user"),this.runtime.collectContext({...e,projectId:this.projectId},r)]),o=new Map;for(let a of[...n,...i]){let s=`${a.owner}:${a.id}`;o.has(s)||o.set(s,a)}return[...o.values()]}async recordContextApplications(e){this.persistContextApplications&&await this.flushContextApplicationOutbox()}async flushContextApplicationOutbox(){if(this.applicationStore===void 0)return;let e=(await this.applicationStore.list()).filter(r=>r.scope==="user"||r.projectId===this.projectId);for(let r of e){let n=r.appliedEventDispatchedAt!==void 0;if(r.appliedEventDispatchedAt===void 0)try{await this.runtime.dispatch(t2(r,this.projectId)),await this.applicationStore.markAppliedEventDispatched(r.applicationId),n=!0}catch{}if(n){for(let i of r.outcomeEvents??[])if(i.dispatchedAt===void 0)try{await this.runtime.dispatch(r2(r,i,this.projectId)),await this.applicationStore.markOutcomeEventDispatched(r.applicationId,i.revision)}catch{break}}}}async dispatchExperience(e){await this.runtime.dispatch(e);try{await this.syncMemory()}catch{}}async remember(e){let r=i2(e,this.projectId);return await this.runtime.invoke("comet.personal-memory","remember",{...r,language:r.language??this.language},"user",{throwOnError:!0})}async observe(e){return await this.dispatchExperience(e),this.runtime.invoke("comet.personal-memory","status",{},"user")}async observeMemory(e){let r=e.scope==="project"?"project":"user",n=await this.runtime.invoke("comet.personal-memory","observe",e,{scope:r,...r==="project"?{projectId:this.projectId}:{}},{throwOnError:!0});return n.deferred===!0&&await this.runtime.dispatch(n2(e,this.projectId)),n}async recordMemoryLearningCheck(e,r){return await this.runtime.invoke("comet.personal-memory","learning-check",{check:e,...r===void 0?{}:{context:r}},{scope:"project",projectId:this.projectId},{throwOnError:!0})}async status(){return this.runtime.invoke("comet.personal-memory","status",{},{scope:"project",projectId:this.projectId},{throwOnError:!0})}async retrieve(e){return await this.runtime.invoke("comet.personal-memory","retrieve",cA(e,this.projectId),"user",{throwOnError:!0})}async manage(e={}){return await this.runtime.invoke("comet.personal-memory","manage",cA(e,this.projectId),"user",{throwOnError:!0})}async correct(e,r){return await this.runtime.invoke("comet.personal-memory","correct",{id:e,correction:r,projectKey:this.projectId},"user",{throwOnError:!0})}async forget(e,r=!1){await this.runtime.invoke("comet.personal-memory","remove",{id:e,permanent:r,projectKey:this.projectId},"user",{throwOnError:!0})}async rollback(e){return await this.runtime.invoke("comet.personal-memory","rollback",{id:e,projectKey:this.projectId},"user",{throwOnError:!0})}async syncMemory(){return await this.runtime.replayLearning(),this.runtime.invoke("comet.personal-memory","sync",{},"user",{throwOnError:!0})}async memoryRemote(){return this.runtime.invoke("comet.personal-memory","remote",{},"user",{throwOnError:!0})}async configureMemoryRemote(e){return this.runtime.invoke("comet.personal-memory","configure-remote",{url:e},"user",{throwOnError:!0})}async pauseProjectLearning(e,r=this.projectId){return ep(r,this.projectId,"pause-project-learning"),this.runtime.invoke("comet.personal-memory","pause-project-learning",{projectKey:r,paused:e},"user",{throwOnError:!0})}async pauseProjectRetrieval(e,r=this.projectId){return ep(r,this.projectId,"pause-project-retrieval"),this.runtime.invoke("comet.personal-memory","pause-project-retrieval",{projectKey:r,paused:e},"user",{throwOnError:!0})}async diagnostics(){return this.runtime.diagnostics()}};async function dA(t){let e=pr.resolve(t.homeDirectory??e2.homedir()),r=pr.resolve(t.memoryRoot??pr.join(e,".comet","memory")),n=pr.resolve(t.stateRoot??pr.join(e,".comet","plugins")),i=pr.resolve(t.projectRoot),o=t.bestEffortContext===!0,a=o?Math.max(100,Math.min(t.lockTimeoutMs??750,750)):t.lockTimeoutMs,s=aP(i),c=t.language??await o2(i),l=await a2(i),d=t.memoryProviderConfig??await gy(e),u=a===void 0?{}:{timeoutMs:a},p=new jl(pr.join(n,"storage"),u),f=new ki(new As(await p.open("comet.agent-learning","user"))),m=new ki(new As(await p.open("comet.agent-learning","project",t.projectId))),g=o?new _s:new vu(await p.open("comet.agent-context","user")),h=o&&d.provider==="remote"&&d.remote?{...d,remote:{...d.remote,timeoutMs:Math.min(d.remote.timeoutMs??a??750,a??750)}}:d,w=await s2(i),y=o&&w.provider==="remote"&&w.remote?{...w,remote:{...w.remote,timeout_ms:Math.min(w.remote.timeout_ms,a??750)}}:w,v=new js({applications:g,defaultCharBudget:h.taskContextCharLimit}),b=new Nu({cometVersion:t.cometVersion??QC(),store:new Su(new gn(pr.join(n,"state.json"),u)),storage:p,journals:{user:f,project:m},replayPendingLearningOnContext:!o,...t.scheduleLearning===void 0?{}:{scheduleLearning:t.scheduleLearning},descriptors:[jC({projectId:t.projectId,language:c,projectPolicy:l,...t.runMemoryReview===void 0?{}:{runMemoryReview:t.runMemoryReview},...t.onMemoryReviewNotice===void 0?{}:{onReviewNotice:t.onMemoryReviewNotice},getProviderConfig:()=>gy(e),configureProvider:S=>HC(e,S),listContextApplications:async S=>(await g.list(S)).filter(E=>E.owner==="comet.personal-memory"&&(E.scope==="user"||E.projectId===t.projectId)),createService:()=>{if(h.provider==="remote"){if(h.remote===void 0)throw new Error("Remote Provider endpoint is not configured");return new Ku({...h.remote,profileCharLimit:h.profileCharLimit,taskContextCharLimit:h.taskContextCharLimit,projectKey:t.projectId})}return new Iu({language:c,profileMaxChars:h.profileCharLimit,taskMaxChars:h.taskContextCharLimit,repository:new Eu(r,{git:new xu(r),...a===void 0?{}:{lockTimeoutMs:a},projectKey:t.projectId,projectName:s})})}}),oA({projectRoot:i,knowledgeConfig:y,updateKnowledgeConfig:async S=>{let E=await Re(i);if(E===null)throw new Error("Project config is not available");await gm(i,{...E,knowledge:S})},language:c,listContextApplications:async S=>(await g.list(S)).filter(E=>E.owner==="comet.project-knowledge"&&E.scope==="project"&&E.projectId===t.projectId),...t.knowledgeCacheRoot?{cacheRoot:pr.resolve(t.knowledgeCacheRoot)}:t.stateRoot?{cacheRoot:pr.join(n,"knowledge-cache")}:t.homeDirectory?{cacheRoot:Tg(e)}:{},...t.runProjectKnowledgeReview?{semanticReviewer:t.runProjectKnowledgeReview}:{}})]});o||await b.reconcileFirstParty();let k=new Jy(b,t.projectId,c,v,o?void 0:g,!o);return o||await k.flushContextApplicationOutbox(),k}function t2(t,e){return{schema:Dr,eventId:`context-applied:${t.applicationId}`,episodeId:t.episodeId,occurredAt:t.appliedAt,type:"context.applied",actor:"agent",scope:t.scope,...t.scope==="project"?{projectId:t.projectId??e}:{},source:{kind:"system",name:"context-director"},context:{task:t.task,...t.path===void 0?{}:{paths:[t.path]},...t.operation===void 0?{}:{operation:t.operation},...t.phase===void 0?{}:{phase:t.phase}},evidence:[{id:t.candidateId,kind:"outcome",summary:t.whyApplied,digest:t.candidateDigest}]}}function r2(t,e,r){let n=lA("sha256").update(`${t.applicationId}:${e.revision}:${e.status}`).digest("hex");return{schema:Dr,eventId:`context-outcome:${n}`,episodeId:t.episodeId,occurredAt:e.occurredAt,type:"context.outcome",actor:"agent",scope:t.scope,...t.scope==="project"?{projectId:t.projectId??r}:{},source:{kind:"system",name:"context-director"},context:{task:t.task,...t.path===void 0?{}:{paths:[t.path]},...t.operation===void 0?{}:{operation:t.operation},...t.phase===void 0?{}:{phase:t.phase}},evidence:e.evidence===void 0?[]:[{id:"adoption",kind:"outcome",summary:e.evidence.decision},{id:"adoption-verification",kind:"verification",summary:e.evidence.verification.success?"Host reported verification passed":"Host reported verification failed",...e.evidence.verification}],outcome:{status:e.status,...e.evidence===void 0?{}:{summary:e.evidence.decision},...e.previousStatus===void 0?{}:{previousStatus:e.previousStatus},revision:e.revision,applicationId:t.applicationId,unitIds:[Fo(t.owner,t.candidateId)]}}}function n2(t,e){let r=lA("sha256").update(JSON.stringify({scope:t.scope,projectKey:t.projectKey,workflow:t.workflow,changeId:t.changeId,candidateKey:t.candidateKey??"default",text:t.text})).digest("hex"),n=t.scope==="project"?t.projectKey??e:void 0;return{schema:Dr,eventId:`memory-observation:${r}`,episodeId:`memory-observation:${r}`,occurredAt:t.observedAt??new Date().toISOString(),type:"user.signal",actor:"agent",scope:t.scope==="project"?"project":"user",...n===void 0?{}:{projectId:n},source:{kind:"workflow",name:"memory.observe",workflow:t.workflow,changeId:t.changeId},context:{workflow:t.workflow,changeId:t.changeId,operation:"memory.observe",...t.pathPatterns===void 0?{}:{paths:t.pathPatterns}},signal:{kind:"preference",explicit:!1,longTerm:!0,text:t.text,category:t.category,...t.candidateKey===void 0?{}:{targetId:t.candidateKey},selectors:{...t.pathPatterns===void 0?{}:{paths:t.pathPatterns},...t.taskTypes===void 0?{}:{tasks:t.taskTypes},...t.operations===void 0?{}:{operations:t.operations},...t.phases===void 0?{}:{phases:t.phases}}},evidence:t.evidence===void 0||t.evidence.length===0?[{id:`memory-observation-evidence:${r}`,kind:"source",summary:t.text,success:t.success}]:t.evidence}}function cA(t,e){if(t.projectKey!==void 0&&ep(t.projectKey,e,"memory-query"),t.scope==="global"){let{projectKey:r,...n}=t;return n}return{...t,projectKey:t.projectKey??e}}function i2(t,e){if(t.projectKey!==void 0&&ep(t.projectKey,e,"remember"),t.scope==="project")return{...t,projectKey:e};let{projectKey:r,...n}=t;return n}function ep(t,e,r){if(t!==e)throw new Error(`${r}.projectKey does not match the current project`)}async function o2(t){try{let e=await Re(t);return e?.default_workflow==="classic"?e?.classic?.language??e?.native?.language??"zh-CN":e?.native?.language??e?.classic?.language??"zh-CN"}catch{return"zh-CN"}}async function a2(t){return(await Re(t))?.memory??{...Bn}}async function s2(t){return(await Re(t))?.knowledge??{...Ui}}async function l2(t,e,r={}){let n=[],i=await d2(t,a=>n.push(a),{lockTimeoutMs:r.lockTimeoutMs??750,...r.bestEffortContext===!0?{bestEffortContext:!0}:{}}),o=await i.collectContext(e);try{(await new wi(t).pending()).length>0&&process.stderr.write(`Project knowledge: host Agent review pending. Run comet knowledge review --json, inspect the evidence, and submit supported lessons with --id and --file.
|
||
`)}catch{process.stderr.write(`Project knowledge: pending review status is unavailable.
|
||
`)}for(let a of n)process.stderr.write(`${a}
|
||
`);for(let a of await i.diagnostics())a.pluginId!=="comet.project-knowledge"||a.phase!=="context"||process.stderr.write(`Project knowledge: ${a.message}
|
||
`);return o}async function Yy(t,e){let r=l2(t,e,{lockTimeoutMs:750,bestEffortContext:!0});return new Promise((n,i)=>{let o=!1,a=setTimeout(()=>{o||(o=!0,n([]))},1500);r.then(s=>{o||(o=!0,clearTimeout(a),n(s))},s=>{o||(o=!0,clearTimeout(a),i(s))})})}async function d2(t,e,r={}){let n=c2.resolve(t);return dA({projectRoot:n,projectId:oe(n),scheduleLearning:i=>i(),...r.lockTimeoutMs===void 0?{}:{lockTimeoutMs:r.lockTimeoutMs},...r.bestEffortContext===!0?{bestEffortContext:!0}:{},...e===void 0?{}:{onMemoryReviewNotice:e}})}var u2=ye("readCometCurrentSelection",t=>Xn(t)),mA={listNative:rP,getNative:_g,listClassic:ZS,getClassic:eN,inspectNative:iP,inspectClassic:dN,collectContext:Yy};function hA(t){return t?t.workflows??[t.default_workflow]:["classic"]}async function uA(t,e){let r=await jg(t),n=hA(r),i=[tp.join(t,".comet")];if(n.includes("native")&&r?.native&&i.push(tp.join(t,r.native.artifact_root,"comet")),n.includes("classic")){let s=ja(t,r?.classic?.artifact_layout??"legacy");i.push(s.openSpecRoot,s.superpowersRoot)}let o=!1,a=!1;for(let s of e.targets){let c=tp.resolve(t,s);if(tp.relative(t,c).replaceAll("\\","/")===".comet/config.yaml"){o=!0;continue}if(!await mn(t,c,i))return null;a=!0}return!o&&!a?null:{allowed:!0,reason:o&&a?"Write targets are Comet control files or configured Hook allow paths":o?"Comet control artifact write":"Write targets are configured Hook allow paths"}}async function pA(t,e,r,n,i={}){let o=async()=>{if(!e.includes("classic"))return[];if(n?.workflow==="classic")return n.candidates;try{return await r.listClassic(t)}catch(c){if(i.tolerateUnavailableClassic&&c instanceof dn)return[];throw c}},[a,s]=await Promise.all([e.includes("native")?n?.workflow==="native"?n.candidates:r.listNative(t):[],o()]);return[...a,...s]}function fA(t,e){return t.length===0?{status:"none",staleSelection:e}:t.length===1?{status:"inferred",owner:t[0],staleSelection:e}:{status:"ambiguous",candidates:t,staleSelection:e}}async function p2(t,e=mA){let r=await jg(t),n=hA(r),i;try{i=await u2(t)}catch(o){return{status:"stale",code:"selection-unreadable",reason:o instanceof Error?o.message:String(o)}}if(i.status==="selected"){let o=i.selection;if(!n.includes(o.workflow))return{status:"stale",code:"workflow-disabled",reason:`selected workflow '${o.workflow}' is not enabled for this project`};if(o.workflow==="native"&&e.getNative)try{let c=await e.getNative(t,o.change);if(c)return{status:"owned",owner:c}}catch(c){return{status:"stale",code:"change-state-unreadable",reason:`cannot safely read selected Native change: ${c instanceof Error?c.message:String(c)}`}}if(o.workflow==="classic"&&e.getClassic)try{let c=await e.getClassic(t,o.change);if(c){let l=await rs(t);return l.status!=="selected"?{status:"stale",code:"classic-selection-invalid",reason:l.status==="stale"?l.reason:`selected Classic change '${o.change}' is no longer active`}:{status:"owned",owner:c}}}catch(c){return{status:"stale",code:"change-state-unreadable",reason:`cannot safely read selected Classic change: ${c instanceof Error?c.message:String(c)}`}}let a;try{a=o.workflow==="native"?await e.listNative(t):await e.listClassic(t)}catch(c){return{status:"stale",code:"change-state-unreadable",reason:`cannot safely enumerate active Comet changes: ${c instanceof Error?c.message:String(c)}`}}let s=a.find(c=>c.name===o.change);if(!s){let c={code:"target-missing",reason:`selected ${o.workflow} change '${o.change}' is missing or archived`};try{let l=await pA(t,n,e,{workflow:o.workflow,candidates:a});return fA(l,c)}catch(l){return{status:"stale",code:"change-state-unreadable",reason:`cannot safely enumerate active Comet changes: ${l instanceof Error?l.message:String(l)}`}}}if(o.workflow==="classic"){let c=await rs(t);if(c.status!=="selected")return{status:"stale",code:"classic-selection-invalid",reason:c.status==="stale"?c.reason:`selected Classic change '${o.change}' is no longer active`}}return{status:"owned",owner:s}}try{let o=await pA(t,n,e,void 0,{tolerateUnavailableClassic:!0});return fA(o)}catch(o){return{status:"stale",code:"change-state-unreadable",reason:`cannot safely enumerate active Comet changes: ${o instanceof Error?o.message:String(o)}`}}}async function gA(t,e,r=mA){if(e.intent==="context")try{let[i]=await(r.collectContext??Yy)(t,{task:e.task?.trim()||"Current agent task",...e.sessionId===void 0?{}:{sessionId:e.sessionId}});return i?.text?{allowed:!0,reason:"Comet context selected",context:i.text}:{allowed:!0,reason:"No matching Comet context"}}catch(i){let o=(i instanceof Error?i.message:String(i)).replace(/[\r\n]+/gu," ");return{allowed:!0,reason:"Comet context is temporarily unavailable",diagnostic:`Comet context is temporarily unavailable${o?`: ${o}`:""}`.slice(0,512)}}if(e.intent==="non-write")return{allowed:!0,reason:"Hook event is not a write"};if(e.intent==="unknown"||e.targets.length===0)return{allowed:!0,reason:"Hook write target is outside Comet attribution"};let n;try{let i=await(r.scopeTargets??Pl)(t,e.targets);if(i.projectTargets.length===0)return{allowed:!0,reason:"Write targets are outside the guarded project"};n={...e,targets:i.projectTargets}}catch(i){return{allowed:!1,reason:["Comet Hook Router scope could not be determined safely.",`Reason: ${i instanceof Error?i.message:String(i)}`,"Next: verify that the project root is accessible, then retry the write."].join(" ")}}try{let i=await p2(t,r);if(i.status==="none"){let s=await nP(t,n,{allowCanonicalFormal:!0});return s||{allowed:!0,reason:"No active Comet change"}}if(i.status==="stale"){let s=await uA(t,n);return s||{allowed:!1,reason:`${i.reason}. Resume /comet-native or /comet-classic and select the current change before retrying`}}if(i.status==="ambiguous"){let s=await uA(t,n);return s||{allowed:!1,reason:`Multiple active Comet changes require one current selection: ${i.candidates.map(c=>`${c.workflow}:${c.name}`).join(", ")}`}}let o=i.owner,a=await(o.workflow==="native"?r.inspectNative(t,n,o.name):r.inspectClassic(t,o.name,n));return a.allowed,a}catch(i){return{allowed:!1,reason:`Comet Hook Router failed closed: ${i instanceof Error?i.message:String(i)}`}}}import{promises as f2}from"fs";import Nt from"path";function m2(t,e){let r=Nt.resolve(t),n=Nt.resolve(e);return process.platform==="win32"?r.toLowerCase()===n.toLowerCase():r===n}function h2(t,e){let r=Nt.relative(t,e);return r===""||r!==".."&&!r.startsWith(`..${Nt.sep}`)&&!Nt.isAbsolute(r)}function yA(t,e){return[...e].sort((r,n)=>n.length-r.length).find(r=>h2(r,t))??null}async function g2(t){for(let e of[".git",Nt.join(".comet","config.yaml")])try{await f2.lstat(Nt.join(t,e))}catch(r){throw r.code!=="ENOENT"?r:new Error(`linked worktree ${t} is not initialized for Comet: missing ${e.replaceAll("\\","/")}`,{cause:r})}}async function vA(t,e){let r=Nt.resolve(t),n=ti(r);if(n.length<2||e.targets.length===0)return r;let o=(e.cwd?yA(Nt.resolve(e.cwd),n):null)??r,a=new Map;for(let c of e.targets){let l=Nt.isAbsolute(c)?Nt.resolve(c):Nt.resolve(o,c),d=yA(l,n);if(!d)continue;let u=process.platform==="win32"?d.toLowerCase():d;a.set(u,d)}if(a.size===0)return r;if(a.size>1)throw new Error("one Hook request cannot write across multiple Git worktrees");let[s]=a.values();return m2(s,r)||await g2(s),s}qe();var b2="Usage: comet-hook-router --platform <platform-id> [--project-root <project-root>]";function k2(t){let e,r;for(let n=0;n<t.length;n++){let i=t[n];if(i==="--platform"){e=t[++n];continue}if(i==="--project-root"){r=t[++n];continue}throw new Error(`Unknown argument: ${i}`)}if(!e||e.startsWith("--"))throw new Error("--platform is required");if(!Xf.has(e))throw new Error(`unsupported Hook platform: ${e}`);if(r?.startsWith("--"))throw new Error("--project-root requires a value");return{platformId:e,...r?{projectRoot:y2.resolve(r)}:{}}}async function S2(t,e){if(t.projectRoot){let n=e?await vA(t.projectRoot,e):t.projectRoot;return bA(n)}if(!e?.cwd)return null;let r=e.cwd;return bA(r)}async function bA(t){let e=await Pa(t);return await Re(e)===null?null:e}async function N2(t){let e;try{e=k2(t)}catch(i){return process.stderr.write(`${i instanceof Error?i.message:String(i)}
|
||
${b2}
|
||
`),64}let r;try{let i=await Zf(),o=await S2(e,i);r=o?await ik(()=>gA(o,i)):{allowed:!0,reason:"No Comet project discovered"}}catch(i){r={allowed:!1,reason:`Comet Hook Router failed closed during project discovery: ${i instanceof Error?i.message:String(i)}`}}let n=rk(e.platformId,r);return n.stdout&&process.stdout.write(n.stdout),n.stderr&&process.stderr.write(n.stderr),n.exitCode}async function E2(t=process.argv.slice(2)){return N2(t)}function x2(t,e=import.meta.url){if(!t)return!1;try{return wA(t)===wA(v2(e))}catch{return e===w2(t).href}}var P2=process.argv[1];x2(P2)&&E2().then(t=>{process.exitCode=t});export{x2 as isDirectEntry,E2 as main,S2 as projectRootFrom,N2 as runCometHookRouter};
|