@fxri/toolkit 1.12.0 → 1.12.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  var de=["\u5F85\u529E","\u8FDB\u884C\u4E2D","\u5DF2\u5B8C\u6210","\u963B\u585E","\u5DF2\u653E\u5F03"],Z=["\u5DF2\u5B8C\u6210","\u5DF2\u653E\u5F03"],Se=["owner","status","created","updated","completed","depends_on","scope"];import{readFileSync as Xn}from"fs";function M(e){return e.replace(/^\uFEFF/,"")}function v(e){return M(Xn(e,"utf8"))}var Re=/^---\r?\n([\s\S]*?)\r?\n---/;function ve(e){let t=M(e).match(Re);if(!t)return{};let n={};for(let r of(t[1]??"").split(/\r?\n/)){let o=r.indexOf(":");if(o===-1)continue;let s=r.slice(0,o).trim(),i=r.slice(o+1).trim();(i.startsWith("'")&&i.endsWith("'")||i.startsWith('"')&&i.endsWith('"'))&&(i=i.slice(1,-1)),s&&(n[s]=i)}return n}function P(e){return ve(e)}function z(e){let t=M(e),n=t.match(/^---\r?\n[\s\S]*?\r?\n---\r?\n?/);return n?t.slice(n[0].length):t}function $e(e){return e.split(/\r?\n/).find(t=>t.startsWith("# ")&&!t.startsWith("#!"))?.replace(/^#\s*/,"")??""}function gt(e){let t=e.split(/\r?\n/),n=t.findIndex(r=>/^# /.test(r));return n===-1?e:(t.splice(n,1),t.join(`
2
- `))}import{existsSync as Jn,readdirSync as ht,statSync as Zn}from"fs";import{join as bt,basename as qn,extname as Qn}from"path";function A(e,t){if(!Jn(e))return[];let n=[],r=o=>!t||!/^\d{6}$/.test(o)?!0:!(t.since&&o<t.since||t.until&&o>t.until);for(let o of ht(e)){let s=bt(e,o);if(Zn(s).isDirectory()){if(!r(o))continue;for(let i of ht(s))i.endsWith(".md")&&n.push(bt(s,i))}else o.endsWith(".md")&&n.push(s)}return n}function V(e){return qn(e,Qn(e)).match(/^(\d{8})/)?.[1]??""}import{readFileSync as Nr}from"fs";import{join as Dr,basename as Qt}from"path";import{existsSync as Ge}from"fs";import{join as Rt,dirname as lr,resolve as Ee}from"path";import{homedir as ar}from"os";import{spawnSync as er}from"child_process";import{realpathSync as tr}from"fs";import{basename as kt,dirname as Pe,isAbsolute as nr,join as rr}from"path";function we(e,t,n){try{let r=er("git",e,{cwd:t,...n===void 0?{}:{input:n},encoding:"utf8"});return{status:r.status??-1,stdout:r.stdout??"",stderr:r.stderr??""}}catch(r){return{status:-1,stdout:"",stderr:r instanceof Error?r.message:String(r)}}}function pe(e){if(!nr(e))return e;let t=e,n=[];for(;;)try{let r=tr.native(t);return n.length===0?r:rr(r,...n.reverse())}catch{let r=Pe(t);if(r===t)return e;n.push(kt(t)),t=r}}function or(e){let t=we(["check-ignore","--quiet","--",St(e)],Pe(e));return t.status===0?{state:"ignored"}:t.status===1?{state:"not-ignored"}:/not a git repository/i.test(t.stderr)?{state:"not-a-repo"}:/outside repository/i.test(t.stderr)?{state:"outside-repo"}:{state:"unavailable",detail:t.stderr.trim()||`git check-ignore \u9000\u51FA\u7801 ${t.status}`}}function yt(e,t){let n=new Set;if(t.length===0)return n;let r=we(["check-ignore","--stdin","-z"],e,t.map(o=>`${o}\0`).join(""));if(r.status!==0&&r.status!==1)return n;for(let o of r.stdout.split("\0"))o&&n.add(o);return n}function xt(e,t){let n=cr(t);if(n.kind==="not-a-repo")return{state:"not-a-repo"};if(n.kind==="unavailable")return{state:"unavailable",detail:n.detail};if(!sr(e,n.root))return{state:"outside-repo"};let r=ir(e);if(r===void 0)return{state:"unavailable",detail:"git ls-files \u6267\u884C\u5931\u8D25"};if(r)return{state:"tracked"};let o=or(e);return o.state==="unavailable"?{state:"unavailable",detail:o.detail}:{state:o.state}}function sr(e,t){let n=me(pe(e)),r=me(pe(t));return n===r||n.startsWith(`${r}/`)}function ir(e){let t=we(["ls-files","--error-unmatch","--",kt(e)],Pe(e));if(t.status===0)return!0;if(t.status===1)return!1}function me(e){return St(e).replace(/\/+$/,"").toLowerCase()}function cr(e){let t=we(["rev-parse","--show-toplevel"],e);if(t.status===0){let n=t.stdout.trim();return n?{kind:"repo",root:n}:{kind:"unavailable",detail:"git rev-parse \u672A\u8FD4\u56DE\u4ED3\u5E93\u6839\u8DEF\u5F84"}}return/not a git repository/i.test(t.stderr)?{kind:"not-a-repo"}:{kind:"unavailable",detail:t.stderr.trim()||`git rev-parse \u9000\u51FA\u7801 ${t.status}`}}function St(e){return e.replace(/\\/g,"/")}var ur=".toolkitrc.json",vt=".toolkitrc.local.json",$t=[{key:"tasks.dir",type:"string"},{key:"redact.enabled",type:"boolean"},{key:"updateCheck.enabled",type:"boolean"},{key:"check.warnings",type:"boolean"}],Ve=new Set,Ui=$t.map(e=>e.key);var ge,fr;function wt(){return ge||(ge=Et(Ee(process.cwd())),At(ge.fallbacks)),ge}function Et(e){let t=[],n=ze("\u5168\u5C40\u5C42",Rt(Tt(),".toolkitrc.json"),t),r=ze("\u9879\u76EE\u5C42",Ke(ur,e,{stopAtHome:!1}),t),o=ze("\u672C\u5730\u5C42",Ke(vt,e,{stopAtHome:!0}),t),s=mr(n.config,r.config),i=pr(s,o.config);return{global:n,project:r,local:o,merged:i,fallbacks:t}}function Xe(e){return e===null?"null":Array.isArray(e)?"\u6570\u7EC4":typeof e}function Ke(e,t,n){let r=n.stopAtHome?me(pe(Tt())):"",o=Ee(t);for(;;){if(n.stopAtHome&&me(pe(o))===r)return null;let s=Rt(o,e);if(Ge(s))return s;let i=lr(o);if(i===o)return null;o=i}}function Q(e){let t=wt().merged?.[e];return q(t)?t:void 0}function Tt(){return fr??ar()}function q(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Ct(e){return e!=null}function dr(e){if(e===void 0)return wt().merged;let t=Et(Ee(e));return At(t.fallbacks),t.merged}function pr(e,t){if(!t)return e;let n=e?{...e}:{};for(let[r,o]of Object.entries(t)){if(!q(o))continue;let i={...q(n[r])?n[r]:{}};for(let[l,c]of Object.entries(o))Ct(c)&&(i[l]=c);n[r]=i}return Object.keys(n).length>0?n:null}function mr(e,t){if(!e)return t;if(!t)return e;let n={...e};for(let[r,o]of Object.entries(t))n[r]=o;return n}function At(e){for(let t of e)yr(t.file,t.key,t.detail)}function gr(e,t){if(!Ge(e))return null;let n;try{n=v(e)}catch(o){return t.push({file:e,key:"",detail:`\u6587\u4EF6\u8BFB\u53D6\u5931\u8D25\uFF1A${o instanceof Error?o.message:String(o)}`}),null}let r;try{r=JSON.parse(n)}catch{return t.push({file:e,key:"",detail:"JSON \u89E3\u6790\u5931\u8D25"}),null}return q(r)?r:(t.push({file:e,key:"",detail:`\u9876\u5C42\u987B\u4E3A\u5BF9\u8C61\uFF08\u5B9E\u9645\uFF1A${Xe(r)}\uFF09`}),null)}function ze(e,t,n){if(!t||!Ge(t))return{layer:e,file:null,hit:!1,sections:[],config:null};let r=gr(t,n);return r?(kr(t,r,n),br(t,r,n),{layer:e,file:t,hit:!0,sections:Object.keys(r),config:r}):{layer:e,file:t,hit:!1,sections:[],config:null}}function hr(){ge=void 0,Ve.clear()}function Lt(e=process.cwd()){return Ke(vt,Ee(e),{stopAtHome:!0})}function br(e,t,n){for(let{key:r,type:o}of $t){let s=r.indexOf("."),i=r.slice(0,s),l=r.slice(s+1),c=t[i];if(!q(c))continue;let f=c[l];if(!Ct(f)||typeof f===o&&!(o==="string"&&f===""))continue;let p=o==="string"?"\u987B\u4E3A\u975E\u7A7A\u5B57\u7B26\u4E32":"\u987B\u4E3A\u5E03\u5C14\u503C",m=f===""?"\u7A7A\u5B57\u7B26\u4E32":Xe(f);n.push({file:e,key:r,detail:`${p}\uFF08\u5B9E\u9645\uFF1A${m}\uFF09`}),delete c[l]}}function kr(e,t,n){for(let[r,o]of Object.entries(t))q(o)||(n.push({file:e,key:r,detail:`\u914D\u7F6E\u6BB5\u987B\u4E3A\u5BF9\u8C61\uFF08\u5B9E\u9645\uFF1A${Xe(o)}\uFF09`}),delete t[r])}function yr(e,t,n){let r=`${e}\0${t}`;if(Ve.has(r))return;Ve.add(r);let o=t===""?`\u26A0\uFE0F \u5FFD\u7565\u914D\u7F6E\u6587\u4EF6\u300C${e}\u300D`:`\u26A0\uFE0F \u5FFD\u7565\u914D\u7F6E\u9879\u300C${t}\u300D${e?`\uFF08${e}\uFF09`:""}`;console.warn(`${o}\uFF1A${n}\uFF0C\u5DF2\u6309\u672A\u914D\u7F6E\u5904\u7406`)}function It(e,t){let n=e.trim().toLowerCase();return["1","true","on","yes"].includes(n)?!0:["0","false","off","no"].includes(n)?!1:t}function Ft(e,t,n,r){if(e!==void 0)return e;let o=process.env[t];return o!==void 0&&o!==""?It(o,r):n!==void 0?n:r}var xr=[{name:"\u5185\u7F51URL",pattern:/(https?:\/\/)[a-zA-Z0-9.-]+(:\d{2,5})(?=\/|[\s]|$)/g,replacement:"$1***$2"},{name:"\u90AE\u7BB1",pattern:/([a-zA-Z0-9._%+-])[a-zA-Z0-9._%+-]*@(?:[a-zA-Z0-9-]+\.)+([a-zA-Z]{2,})/g,replacement:"$1***@***.$2"},{name:"JWT",pattern:/\beyJ[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}\b/g,replacement:"eyJ***.***.***"},{name:"AWS\u5BC6\u94A5",pattern:/\b(AKIA|ASIA)[A-Z0-9]{16}\b/g,replacement:"$1****"},{name:"GitHub\u5BC6\u94A5",pattern:/\b(ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9]{36,}\b/g,replacement:"$1_****"},{name:"GitHub\u7EC6\u7C92\u5EA6\u5BC6\u94A5",pattern:/\bgithub_pat_[A-Za-z0-9_]{80,}\b/g,replacement:"github_pat_****"},{name:"OpenAI\u5BC6\u94A5",pattern:/\bsk-[A-Za-z0-9]{20,}\b/g,replacement:"sk-****"},{name:"OpenAI\u9879\u76EE\u5BC6\u94A5",pattern:/\bsk-proj-[A-Za-z0-9_-]{40,}\b/g,replacement:"sk-proj-****"},{name:"Slack\u5BC6\u94A5",pattern:/\b(xox[baprs])-[A-Za-z0-9-]{10,}\b/g,replacement:"$1-****"},{name:"Slack\u5E94\u7528\u4EE4\u724C",pattern:/\bxapp-\d+-[A-Za-z0-9-]{15,}\b/g,replacement:"xapp-****"},{name:"\u624B\u673A\u53F7",pattern:/(?<!\d)(1[3-9]\d)\d{4}(\d{4})(?!\d)/g,replacement:"$1****$2"},{name:"\u8EAB\u4EFD\u8BC1",pattern:/(?<!\d)(\d{6})\d{8}(\d{3}[\dXx])(?!\d)/g,replacement:"$1********$2"},{name:"IPv4",pattern:/(?<![\d.])(\d{1,3}\.\d{1,3})\.\d{1,3}\.\d{1,3}(?![\d.])/g,replacement:"$1.***.***"}];function Sr(){let e=Q("redact");return e?{enabled:typeof e.enabled=="boolean"?e.enabled:void 0,disable:Array.isArray(e.disable)?e.disable.filter(t=>typeof t=="string"):void 0,rules:Array.isArray(e.rules)?e.rules:void 0}:null}function Rr(){let e=Sr(),t=new Set(e?.disable??[]),n=[];for(let r of e?.rules??[])try{n.push({name:r.name,pattern:new RegExp(r.pattern,r.flags??""),replacement:r.replacement})}catch{}return[...n,...xr.filter(r=>!t.has(r.name))]}function w(e,t){if(!t||!e)return e;let n=e;for(let r of Rr())n=n.replace(r.pattern,r.replacement);return n}import{readFileSync as Vt}from"fs";import{join as Kt,basename as Ar}from"path";function K(e){let t={};if(!e)return t;for(let n of e.replace(/^>\s*/,"").split(/[ ]+/).map(r=>r.trim()).filter(Boolean)){let r=n.search(/[::]/);if(r<=0)continue;let o=n.slice(0,r).trim(),s=n.slice(r+1).trim();!o||!s||(o.includes("\u8D1F\u8D23\u4EBA")?t.owner=s:o.includes("\u72B6\u6001")?t.status=s:o.includes("\u8303\u56F4")?t.scope=s:o.includes("\u5B8C\u6210\u65F6\u95F4")&&(t.completed=s))}return t}var Nt=/^(\d{4})-(\d{1,2})-(\d{1,2})[T\s](\d{1,2}):(\d{2})(?::\d{2})?$/,Dt=/^(\d{4})-(\d{1,2})-(\d{1,2})$/;function L(e){let t=e.trim();return Nt.test(t)||Dt.test(t)}function E(e){let t=e.trim(),n=t.match(Nt)??t.match(Dt);if(!n)return t;let r=s=>s?.padStart(2,"0")??"",o=`${n[1]??""}-${r(n[2])}-${r(n[3])}`;return n.length===4?`${o} 00:00`:`${o} ${r(n[4])}:${r(n[5])}`}function Mt(e){return e.match(/^\d{8}-(.+?)-/)?.[1]??""}function vr(e,t){return`> \u8D1F\u8D23\u4EBA\uFF1A${Mt(e)||"\u672A\u6807\u6CE8"}\u3000\u72B6\u6001\uFF1A\u5DF2\u5B8C\u6210\u3000\u8303\u56F4\uFF1A-\u3000\u5B8C\u6210\u65F6\u95F4\uFF1A${E(t)}`}function jt(e,t,n){let r=K(n),o=r.owner||Mt(e)||"\u672A\u6807\u6CE8",s=r.status||"\u5DF2\u5B8C\u6210",i=r.scope||"-";return`> \u8D1F\u8D23\u4EBA\uFF1A${o}\u3000\u72B6\u6001\uFF1A${s}\u3000\u8303\u56F4\uFF1A${i}\u3000\u5B8C\u6210\u65F6\u95F4\uFF1A${E(t)}`}function F(e){e=M(e);let t=e.split(/\r?\n/).map(c=>c.replace(/\r$/,"")),n=[],r=[];for(let c of t)/^-{3,}$/.test(c.trim())?(n.push(r),r=[]):r.push(c);n.push(r);let o=[],s=_t(n[0]??[]),i=s.findIndex(c=>/^## .+/.test(c));i>=0&&o.push(Ot(s.slice(i)));for(let c=1;c<n.length;c++){let f=_t(n[c]??[]);f.length!==0&&(/^## .+/.test(f[0]??"")?o.push(Ot(f)):$r(o,f.join(`
2
+ `))}import{existsSync as Jn,readdirSync as ht,statSync as Zn}from"fs";import{join as bt,basename as qn,extname as Qn}from"path";function A(e,t){if(!Jn(e))return[];let n=[],r=o=>!t||!/^\d{6}$/.test(o)?!0:!(t.since&&o<t.since||t.until&&o>t.until);for(let o of ht(e)){let s=bt(e,o);if(Zn(s).isDirectory()){if(!r(o))continue;for(let i of ht(s))i.endsWith(".md")&&n.push(bt(s,i))}else o.endsWith(".md")&&n.push(s)}return n}function V(e){return qn(e,Qn(e)).match(/^(\d{8})/)?.[1]??""}import{readFileSync as Nr}from"fs";import{join as Dr,basename as Qt}from"path";import{existsSync as Ge}from"fs";import{join as Rt,dirname as lr,resolve as Ee}from"path";import{homedir as ar}from"os";import{spawnSync as er}from"child_process";import{realpathSync as tr}from"fs";import{basename as kt,dirname as Pe,isAbsolute as nr,join as rr}from"path";function we(e,t,n){try{let r=er("git",e,{cwd:t,...n===void 0?{}:{input:n},encoding:"utf8"});return{status:r.status??-1,stdout:r.stdout??"",stderr:r.stderr??""}}catch(r){return{status:-1,stdout:"",stderr:r instanceof Error?r.message:String(r)}}}function pe(e){if(!nr(e))return e;let t=e,n=[];for(;;)try{let r=tr.native(t);return n.length===0?r:rr(r,...n.reverse())}catch{let r=Pe(t);if(r===t)return e;n.push(kt(t)),t=r}}function or(e){let t=we(["check-ignore","--quiet","--",St(e)],Pe(e));return t.status===0?{state:"ignored"}:t.status===1?{state:"not-ignored"}:/not a git repository/i.test(t.stderr)?{state:"not-a-repo"}:/outside repository/i.test(t.stderr)?{state:"outside-repo"}:{state:"unavailable",detail:t.stderr.trim()||`git check-ignore \u9000\u51FA\u7801 ${t.status}`}}function yt(e,t){let n=new Set;if(t.length===0)return n;let r=we(["check-ignore","--stdin","-z"],e,t.map(o=>`${o}\0`).join(""));if(r.status!==0&&r.status!==1)return n;for(let o of r.stdout.split("\0"))o&&n.add(o);return n}function xt(e,t){let n=cr(t);if(n.kind==="not-a-repo")return{state:"not-a-repo"};if(n.kind==="unavailable")return{state:"unavailable",detail:n.detail};if(!sr(e,n.root))return{state:"outside-repo"};let r=ir(e);if(r===void 0)return{state:"unavailable",detail:"git ls-files \u6267\u884C\u5931\u8D25"};if(r)return{state:"tracked"};let o=or(e);return o.state==="unavailable"?{state:"unavailable",detail:o.detail}:{state:o.state}}function sr(e,t){let n=me(pe(e)),r=me(pe(t));return n===r||n.startsWith(`${r}/`)}function ir(e){let t=we(["ls-files","--error-unmatch","--",kt(e)],Pe(e));if(t.status===0)return!0;if(t.status===1)return!1}function me(e){return St(e).replace(/\/+$/,"").toLowerCase()}function cr(e){let t=we(["rev-parse","--show-toplevel"],e);if(t.status===0){let n=t.stdout.trim();return n?{kind:"repo",root:n}:{kind:"unavailable",detail:"git rev-parse \u672A\u8FD4\u56DE\u4ED3\u5E93\u6839\u8DEF\u5F84"}}return/not a git repository/i.test(t.stderr)?{kind:"not-a-repo"}:{kind:"unavailable",detail:t.stderr.trim()||`git rev-parse \u9000\u51FA\u7801 ${t.status}`}}function St(e){return e.replace(/\\/g,"/")}var ur=".toolkitrc.json",vt=".toolkitrc.local.json",$t=[{key:"tasks.dir",type:"string"},{key:"redact.enabled",type:"boolean"},{key:"updateCheck.enabled",type:"boolean"},{key:"check.warnings",type:"boolean"}],Ve=new Set,Wi=$t.map(e=>e.key);var ge,fr;function wt(){return ge||(ge=Et(Ee(process.cwd())),At(ge.fallbacks)),ge}function Et(e){let t=[],n=ze("\u5168\u5C40\u5C42",Rt(Tt(),".toolkitrc.json"),t),r=ze("\u9879\u76EE\u5C42",Ke(ur,e,{stopAtHome:!1}),t),o=ze("\u672C\u5730\u5C42",Ke(vt,e,{stopAtHome:!0}),t),s=mr(n.config,r.config),i=pr(s,o.config);return{global:n,project:r,local:o,merged:i,fallbacks:t}}function Xe(e){return e===null?"null":Array.isArray(e)?"\u6570\u7EC4":typeof e}function Ke(e,t,n){let r=n.stopAtHome?me(pe(Tt())):"",o=Ee(t);for(;;){if(n.stopAtHome&&me(pe(o))===r)return null;let s=Rt(o,e);if(Ge(s))return s;let i=lr(o);if(i===o)return null;o=i}}function Q(e){let t=wt().merged?.[e];return q(t)?t:void 0}function Tt(){return fr??ar()}function q(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Ct(e){return e!=null}function dr(e){if(e===void 0)return wt().merged;let t=Et(Ee(e));return At(t.fallbacks),t.merged}function pr(e,t){if(!t)return e;let n=e?{...e}:{};for(let[r,o]of Object.entries(t)){if(!q(o))continue;let i={...q(n[r])?n[r]:{}};for(let[l,c]of Object.entries(o))Ct(c)&&(i[l]=c);n[r]=i}return Object.keys(n).length>0?n:null}function mr(e,t){if(!e)return t;if(!t)return e;let n={...e};for(let[r,o]of Object.entries(t))n[r]=o;return n}function At(e){for(let t of e)yr(t.file,t.key,t.detail)}function gr(e,t){if(!Ge(e))return null;let n;try{n=v(e)}catch(o){return t.push({file:e,key:"",detail:`\u6587\u4EF6\u8BFB\u53D6\u5931\u8D25\uFF1A${o instanceof Error?o.message:String(o)}`}),null}let r;try{r=JSON.parse(n)}catch{return t.push({file:e,key:"",detail:"JSON \u89E3\u6790\u5931\u8D25"}),null}return q(r)?r:(t.push({file:e,key:"",detail:`\u9876\u5C42\u987B\u4E3A\u5BF9\u8C61\uFF08\u5B9E\u9645\uFF1A${Xe(r)}\uFF09`}),null)}function ze(e,t,n){if(!t||!Ge(t))return{layer:e,file:null,hit:!1,sections:[],config:null};let r=gr(t,n);return r?(kr(t,r,n),br(t,r,n),{layer:e,file:t,hit:!0,sections:Object.keys(r),config:r}):{layer:e,file:t,hit:!1,sections:[],config:null}}function hr(){ge=void 0,Ve.clear()}function Lt(e=process.cwd()){return Ke(vt,Ee(e),{stopAtHome:!0})}function br(e,t,n){for(let{key:r,type:o}of $t){let s=r.indexOf("."),i=r.slice(0,s),l=r.slice(s+1),c=t[i];if(!q(c))continue;let f=c[l];if(!Ct(f)||typeof f===o&&!(o==="string"&&f===""))continue;let p=o==="string"?"\u987B\u4E3A\u975E\u7A7A\u5B57\u7B26\u4E32":"\u987B\u4E3A\u5E03\u5C14\u503C",m=f===""?"\u7A7A\u5B57\u7B26\u4E32":Xe(f);n.push({file:e,key:r,detail:`${p}\uFF08\u5B9E\u9645\uFF1A${m}\uFF09`}),delete c[l]}}function kr(e,t,n){for(let[r,o]of Object.entries(t))q(o)||(n.push({file:e,key:r,detail:`\u914D\u7F6E\u6BB5\u987B\u4E3A\u5BF9\u8C61\uFF08\u5B9E\u9645\uFF1A${Xe(o)}\uFF09`}),delete t[r])}function yr(e,t,n){let r=`${e}\0${t}`;if(Ve.has(r))return;Ve.add(r);let o=t===""?`\u26A0\uFE0F \u5FFD\u7565\u914D\u7F6E\u6587\u4EF6\u300C${e}\u300D`:`\u26A0\uFE0F \u5FFD\u7565\u914D\u7F6E\u9879\u300C${t}\u300D${e?`\uFF08${e}\uFF09`:""}`;console.warn(`${o}\uFF1A${n}\uFF0C\u5DF2\u6309\u672A\u914D\u7F6E\u5904\u7406`)}function It(e,t){let n=e.trim().toLowerCase();return["1","true","on","yes"].includes(n)?!0:["0","false","off","no"].includes(n)?!1:t}function Ft(e,t,n,r){if(e!==void 0)return e;let o=process.env[t];return o!==void 0&&o!==""?It(o,r):n!==void 0?n:r}var xr=[{name:"\u5185\u7F51URL",pattern:/(https?:\/\/)[a-zA-Z0-9.-]+(:\d{2,5})(?=\/|[\s]|$)/g,replacement:"$1***$2"},{name:"\u90AE\u7BB1",pattern:/([a-zA-Z0-9._%+-])[a-zA-Z0-9._%+-]*@(?:[a-zA-Z0-9-]+\.)+([a-zA-Z]{2,})/g,replacement:"$1***@***.$2"},{name:"JWT",pattern:/\beyJ[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}\b/g,replacement:"eyJ***.***.***"},{name:"AWS\u5BC6\u94A5",pattern:/\b(AKIA|ASIA)[A-Z0-9]{16}\b/g,replacement:"$1****"},{name:"GitHub\u5BC6\u94A5",pattern:/\b(ghp|gho|ghu|ghs|ghr)_[A-Za-z0-9]{36,}\b/g,replacement:"$1_****"},{name:"GitHub\u7EC6\u7C92\u5EA6\u5BC6\u94A5",pattern:/\bgithub_pat_[A-Za-z0-9_]{80,}\b/g,replacement:"github_pat_****"},{name:"OpenAI\u5BC6\u94A5",pattern:/\bsk-[A-Za-z0-9]{20,}\b/g,replacement:"sk-****"},{name:"OpenAI\u9879\u76EE\u5BC6\u94A5",pattern:/\bsk-proj-[A-Za-z0-9_-]{40,}\b/g,replacement:"sk-proj-****"},{name:"Slack\u5BC6\u94A5",pattern:/\b(xox[baprs])-[A-Za-z0-9-]{10,}\b/g,replacement:"$1-****"},{name:"Slack\u5E94\u7528\u4EE4\u724C",pattern:/\bxapp-\d+-[A-Za-z0-9-]{15,}\b/g,replacement:"xapp-****"},{name:"\u624B\u673A\u53F7",pattern:/(?<!\d)(1[3-9]\d)\d{4}(\d{4})(?!\d)/g,replacement:"$1****$2"},{name:"\u8EAB\u4EFD\u8BC1",pattern:/(?<!\d)(\d{6})\d{8}(\d{3}[\dXx])(?!\d)/g,replacement:"$1********$2"},{name:"IPv4",pattern:/(?<![\d.])(\d{1,3}\.\d{1,3})\.\d{1,3}\.\d{1,3}(?![\d.])/g,replacement:"$1.***.***"}];function Sr(){let e=Q("redact");return e?{enabled:typeof e.enabled=="boolean"?e.enabled:void 0,disable:Array.isArray(e.disable)?e.disable.filter(t=>typeof t=="string"):void 0,rules:Array.isArray(e.rules)?e.rules:void 0}:null}function Rr(){let e=Sr(),t=new Set(e?.disable??[]),n=[];for(let r of e?.rules??[])try{n.push({name:r.name,pattern:new RegExp(r.pattern,r.flags??""),replacement:r.replacement})}catch{}return[...n,...xr.filter(r=>!t.has(r.name))]}function w(e,t){if(!t||!e)return e;let n=e;for(let r of Rr())n=n.replace(r.pattern,r.replacement);return n}import{readFileSync as Vt}from"fs";import{join as Kt,basename as Ar}from"path";function K(e){let t={};if(!e)return t;for(let n of e.replace(/^>\s*/,"").split(/[ ]+/).map(r=>r.trim()).filter(Boolean)){let r=n.search(/[::]/);if(r<=0)continue;let o=n.slice(0,r).trim(),s=n.slice(r+1).trim();!o||!s||(o.includes("\u8D1F\u8D23\u4EBA")?t.owner=s:o.includes("\u72B6\u6001")?t.status=s:o.includes("\u8303\u56F4")?t.scope=s:o.includes("\u5B8C\u6210\u65F6\u95F4")&&(t.completed=s))}return t}var Nt=/^(\d{4})-(\d{1,2})-(\d{1,2})[T\s](\d{1,2}):(\d{2})(?::\d{2})?$/,Dt=/^(\d{4})-(\d{1,2})-(\d{1,2})$/;function L(e){let t=e.trim();return Nt.test(t)||Dt.test(t)}function E(e){let t=e.trim(),n=t.match(Nt)??t.match(Dt);if(!n)return t;let r=s=>s?.padStart(2,"0")??"",o=`${n[1]??""}-${r(n[2])}-${r(n[3])}`;return n.length===4?`${o} 00:00`:`${o} ${r(n[4])}:${r(n[5])}`}function Mt(e){return e.match(/^\d{8}-(.+?)-/)?.[1]??""}function vr(e,t){return`> \u8D1F\u8D23\u4EBA\uFF1A${Mt(e)||"\u672A\u6807\u6CE8"}\u3000\u72B6\u6001\uFF1A\u5DF2\u5B8C\u6210\u3000\u8303\u56F4\uFF1A-\u3000\u5B8C\u6210\u65F6\u95F4\uFF1A${E(t)}`}function jt(e,t,n){let r=K(n),o=r.owner||Mt(e)||"\u672A\u6807\u6CE8",s=r.status||"\u5DF2\u5B8C\u6210",i=r.scope||"-";return`> \u8D1F\u8D23\u4EBA\uFF1A${o}\u3000\u72B6\u6001\uFF1A${s}\u3000\u8303\u56F4\uFF1A${i}\u3000\u5B8C\u6210\u65F6\u95F4\uFF1A${E(t)}`}function F(e){e=M(e);let t=e.split(/\r?\n/).map(c=>c.replace(/\r$/,"")),n=[],r=[];for(let c of t)/^-{3,}$/.test(c.trim())?(n.push(r),r=[]):r.push(c);n.push(r);let o=[],s=_t(n[0]??[]),i=s.findIndex(c=>/^## .+/.test(c));i>=0&&o.push(Ot(s.slice(i)));for(let c=1;c<n.length;c++){let f=_t(n[c]??[]);f.length!==0&&(/^## .+/.test(f[0]??"")?o.push(Ot(f)):$r(o,f.join(`
3
3
  `).trim()))}if(o.length===0)return{header:e,blocks:[]};let l=i>=0?i:s.length;return{header:s.slice(0,l).join(`
4
4
  `).trimEnd(),blocks:o}}function _t(e){let t=0,n=e.length;for(;t<n&&(e[t]??"").trim()==="";)t++;for(;n>t&&(e[n-1]??"").trim()==="";)n--;return e.slice(t,n)}function Ot(e){let t=(e[0]??"").replace(/^## /,"").trim(),n=null,r="",o=1;for(let s=1;s<e.length;s++){let i=e[s]??"",l=i.trim();if(l.startsWith("> ")&&l.includes("\u5B8C\u6210\u65F6\u95F4")){n=i;let c=l.match(/完成时间:(.+)$/);c&&(r=(c[1]??"").trim()),o=s+1;break}}return{title:t,metaLine:n,completed:r,body:e.slice(o).join(`
5
5
  `).trim()}}function $r(e,t){let n=e[e.length-1];!n||!t||(n.body=n.body?`${n.body}
@@ -50,33 +50,33 @@ ${t.body}
50
50
  `;_(o,G(s,i,l)),console.log(` \u5757\u300C${t.title}\u300D\u8FC1\u79FB \u2192 ${n}.md`)}function zo(e=".tasks"){let t=ce(e,"archive"),n=A(t),r=[],o=0,s=null;if(s=re(e),s===null)return console.warn("\u26A0\uFE0F \u68C0\u6D4B\u5230\u5F52\u6863\u9501\uFF0C\u53EF\u80FD\u6709\u5E76\u53D1\u5199\u64CD\u4F5C\u6B63\u5728\u8FDB\u884C\uFF0C\u672C\u6B21\u5DF2\u8DF3\u8FC7\u4FEE\u590D"),{issues:r,fixed:o};try{for(let i of n)try{o+=Vo(e,t,i,r)}catch(l){r.push({file:ie(i),message:`\u5F52\u4E00\u5316\u5931\u8D25\uFF0C\u5DF2\u8DF3\u8FC7\u8BE5\u6587\u4EF6\uFF1A${l.message}`,fixable:!1})}return{issues:r,fixed:o}}finally{if(s!==null)try{oe(e,s)}catch{}}}function Vo(e,t,n,r){let o=0,s=n,i=ie(s),l=i.replace(/\.md$/,""),c=ie(he(s)),f=/^\d{8}$/.test(l)?l.slice(0,6):"";if(f&&c!==f){let b=ce(t,f,i);_e(b)?console.warn(`\u26A0\uFE0F ${i}\uFF1A\u76EE\u6807\u6708\u4EFD\u76EE\u5F55 ${f} \u5DF2\u5B58\u5728\u540C\u540D\u6587\u4EF6\uFF0C\u672A\u81EA\u52A8\u79FB\u52A8\uFF08\u9700\u4EBA\u5DE5\u5904\u7406\uFF09`):(pn(ce(t,f),{recursive:!0}),Mo(s,b),s=b,Ie(he(n),t))}let{resolved:p,hadConflict:m}=Yo(Fe(s,"utf8")),{header:h,blocks:u}=F(p),a=[],d=s!==n;s!==n&&(a.push(`\u79FB\u52A8\u81F3 ${ie(he(s))} \u6708\u4EFD\u76EE\u5F55`),o++),m&&(a.push("\u89E3\u51B3\u51B2\u7A81\u6807\u8BB0"),d=!0,o++);for(let b of u)L(b.completed)&&(!b.metaLine||!hn(b.metaLine))&&(b.metaLine=jt(b.title,b.completed,b.metaLine),a.push(`\u8865\u5143\u6570\u636E\u300C${b.title}\u300D`),d=!0,o++);for(let b of u){if(!b.metaLine)continue;let D=K(b.metaLine);if(!D.scope)continue;let mt=Uo(D.scope);mt&&(b.metaLine=Wo(b.metaLine,mt),a.push(`\u8303\u56F4\u5206\u9694\u5F52\u4E00\u300C${b.title}\u300D`),d=!0,o++),/[()()]/.test(D.scope)&&r.push({file:i,message:`\u5757\u300C${b.title}\u300D\u8303\u56F4\u300C${D.scope}\u300D\u542B\u62EC\u53F7\u7591\u4F3C\u6CE8\u91CA\uFF0C\u5220\u7559\u9700\u4EBA\u5DE5\u786E\u8BA4`,fixable:!1})}let g=[],k=0;for(let b of u){if(b.completed&&!L(b.completed)){r.push({file:i,message:`\u5757\u300C${b.title}\u300D\u5B8C\u6210\u65F6\u95F4\u300C${b.completed}\u300D\u65E0\u6CD5\u8BC6\u522B\uFF0C\u672A\u8FC1\u79FB\uFF08\u9700\u4EBA\u5DE5\u786E\u8BA4\uFF09`,fixable:!1}),g.push(b);continue}let D=b.completed?E(b.completed).replace(/-/g,"").slice(0,8):"";D&&D!==l?(Po(e,b,D),k++,d=!0):g.push(b)}k>0&&(a.push(`\u8FC1\u79FB ${k} \u4E2A\u6F02\u79FB\u5757`),o+=k);let $=g.filter(b=>L(b.completed)),H=g.filter(b=>!L(b.completed)),T=[...$].sort((b,D)=>E(D.completed).localeCompare(E(b.completed)));JSON.stringify(T.map(b=>b.title))!==JSON.stringify($.map(b=>b.title))&&(g.splice(0,g.length,...T,...H),a.push("\u964D\u5E8F\u91CD\u6392"),o++,d=!0);let S=/^---\s*\r?\n\r?\n---/m.test(p);S&&(a.push("\u6E05\u7406\u5197\u4F59\u5206\u9694\u7B26"),o++);let B=p.includes(`\r
51
51
  `)?`\r
52
52
  `:`
53
- `;return u.length>0&&g.length===0?(_e(s)&&Do(s),Ie(he(s),t),a.push("\u5220\u9664\u7A7A\u5F52\u6863\u6587\u4EF6"),d=!0):(d||S)&&_(s,G(h,g,B)),a.length>0&&console.log(` ${i}: ${a.join("\u3001")}`),o}import{existsSync as le,readdirSync as Ko}from"fs";import{join as O}from"path";var Oe="conventions",W="index.md",j="history.md",ke="retired.md",Ne="conventions.md",ye=3,ae=2,Ll=`<!-- toolkit-conventions: v${ye} -->`,Go=`<!-- toolkit-conventions-entry: v${ae} -->`,Xo=/<!--\s*toolkit-conventions:\s*v(\d+)\s*-->/,Jo=/<!--\s*toolkit-conventions-entry:\s*v(\d+)\s*-->/,J="ID";var kn="\u5F53\u524D\u8BED\u4E49";var yn="\u89C4\u5219",xn="\u5F52\u5C5E",Zo="\u5355\u4E00\u4E8B\u5B9E\u6E90",st="\u4FEE\u8BA2\u5185\u5BB9",qo="\u540E\u7EE7",Qo="\u9000\u4F11\u6765\u6E90\u4EFB\u52A1",es="\u6761\u6587\u53BB\u5411";var it="\u9000\u4F11\u65F6\u8BED\u4E49\uFF08\u51BB\u7ED3\uFF09";function ct(e){return`| ${e.join(" | ")} |`}function ts(e){return`| ${Array.from({length:e},()=>"---").join(" | ")} |`}function lt(e){return`${ct(e)}
54
- ${ts(e.length)}`}var De=[J,yn,kn,xn,Zo],Il=lt(De);var ns=/^C-\d+$/;function rs(e){return e.trim().replace(/^`+|`+$/g,"").trim()}function Sn(e){return ns.test(rs(e))}function os(e,t){let n=e.split(/\r?\n/,1)[0]??"",r=t.exec(n);return r?Number(r[1]):null}function ss(e){return os(e,Xo)}function Rn(e){let t=Jo.exec(e);return t?Number(t[1]):null}function is(e){let t=O(e,Oe),n=O(t,W),r=le(n);return{hasDir:le(t),hasIndex:r,hasHistory:le(O(t,j)),hasRetired:le(O(t,ke)),hasLegacy:le(O(e,Ne)),markerVersion:r?ss(v(n)):null}}function cs(e,t,n,r){return e?r===ye?t&&n?"v3":"abnormal":r===2?t&&n?"v2":"abnormal":r!==null?"abnormal":t?n?"v2":"abnormal":n?"abnormal":"v1":"none"}function X(e){let t=e.trim();return t.startsWith("|")&&t.endsWith("|")&&t.length>1}function ls(e){let t=[],n="",r=0;for(let o of e){if(o==="\\"){r+=1,n+=o;continue}o==="|"&&r%2===0?(t.push(n.trim()),n=""):n+=o,r=0}return t.push(n.trim()),t}function U(e){return ls(e.trim().replace(/^\|/,"").replace(/\|$/,""))}function be(e){if(!X(e))return!1;let t=U(e);return t.length>0&&t.every(n=>/^:?-{2,}:?$/.test(n))}function ue(e,t){for(let n=0;n+1<e.length;n++){let r=e[n]??"";if(!X(r)||!U(r).includes(t)||!be(e[n+1]??""))continue;let o=[],s=[];for(let i=n+2;i<e.length;i++){let l=e[i]??"";if(!X(l)||be(l))break;o.push(U(l)),s.push(i)}return{headerLine:n,separatorLine:n+1,rowLines:s,header:U(r),rows:o}}return null}function as(e){return ue(e,kn)}function vn(e){let t=[];for(let n=0;n+1<e.length;n++){let r=e[n]??"",o=e[n+1]??"";if(!X(r)||!be(o))continue;let s=U(r).length,i=U(o).length;s!==i&&t.push({line:n+1,headerCols:s,sepCols:i})}return t}function $n(e,t){return e.findIndex(n=>n===t)}function us(e){let t=[];for(let n of e.rows)n.every(r=>r==="")||t.push({id:n[0]??"",name:n[1]??"",cells:n});return t}function at(e){let t=is(e),n=O(e,Oe),r=O(n,W),o=t.hasIndex?v(r):"",s=t.hasIndex?as(o.split(/\r?\n/)):null,i=s?.header??[],l=(i[0]??"")===J,c=s?us(s):[],f=c.map(p=>Number(p.id)).filter(p=>Number.isInteger(p));return{...t,dir:n,indexFile:r,historyFile:O(n,j),retiredFile:O(n,ke),legacyFile:O(e,Ne),form:cs(t.hasIndex,t.hasHistory,l,t.markerVersion),header:i,entries:c,maxSeq:f.length>0?Math.max(...f):0}}function ut(e){if(!e.hasIndex)return[];let t=[e.indexFile];if(!le(e.dir))return t;for(let n of Ko(e.dir,{withFileTypes:!0}))!n.isFile()||!n.name.endsWith(".md")||n.name===W||n.name===j||n.name===ke||t.push(O(e.dir,n.name));return t}var fs="# \u89C4\u8303\u6F14\u8FDB\u8BB0\u5F55",fe="\u4FEE\u8BA2\u6765\u6E90\u4EFB\u52A1",Me=[J,st,fe],Fl=ct(Me),ds="> \u8868\u8BED\u4E49\u8FB9\u754C\uFF1A\u672C\u8868\u53EA\u8BB0**\u89C4\u8303\u8BED\u4E49\u53D8\u66F4**\uFF1B\u8F7D\u4F53\u7ED3\u6784\u5347\u7EA7\u3001\u5165\u53E3\u58F3\u751F\u6210 / \u5220\u9664\u3001\u6761\u76EE\u9000\u4F11\u5747\u4E0D\u5165\u8868\uFF08\u9000\u4F11\u89C1 `retired.md`\uFF09\u3002",ps="> \u5143\u89C4\u5219\uFF1A\u89C4\u5219\u8BED\u4E49\u53D8\u66F4\u65F6\u4E0D\u5F97\u8986\u76D6\u65E7\u8BED\u4E49\u76F4\u63A5\u4E22\u53F2\u2014\u2014\u5728\u300C\u6F14\u8FDB\u8BB0\u5F55\u300D\u8FFD\u52A0\u4E00\u6761\uFF08\u89C4\u5219 ID \u2192 \u4FEE\u8BA2\u5185\u5BB9 \u2192 \u4FEE\u8BA2\u6765\u6E90\u4EFB\u52A1\uFF1B\u4FEE\u8BA2\u5185\u5BB9\u65B0\u7ACB\u6761\u76EE\u76F4\u63A5\u5199\u5176\u8BED\u4E49\u3001\u8BED\u4E49\u53D8\u66F4\u5199\u300C\u65E7\u8BED\u4E49\u300D\u2192\u300C\u65B0\u8BED\u4E49\u300D\uFF09\uFF0C`index.md` \u7D22\u5F15\u8868\u53EA\u4FDD\u7559\u5F53\u524D\u8BED\u4E49\uFF1B\u89C4\u5219\u5C42\u6E90\u5934\u53D8\u66F4\uFF08`AGENTS.md` / `docs/ai-rules.md` / skills \u6761\u6587\uFF09\u968F\u8BE5\u53D8\u66F4\u540C\u6279\u843D\u76D8\u3002",_l=`${fs}
53
+ `;return u.length>0&&g.length===0?(_e(s)&&Do(s),Ie(he(s),t),a.push("\u5220\u9664\u7A7A\u5F52\u6863\u6587\u4EF6"),d=!0):(d||S)&&_(s,G(h,g,B)),a.length>0&&console.log(` ${i}: ${a.join("\u3001")}`),o}import{existsSync as le,readdirSync as Ko}from"fs";import{join as O}from"path";var Oe="conventions",W="index.md",j="history.md",ke="retired.md",Ne="conventions.md",ye=3,ae=2,Il=`<!-- toolkit-conventions: v${ye} -->`,Go=`<!-- toolkit-conventions-entry: v${ae} -->`,Xo=/<!--\s*toolkit-conventions:\s*v(\d+)\s*-->/,Jo=/<!--\s*toolkit-conventions-entry:\s*v(\d+)\s*-->/,J="ID";var kn="\u5F53\u524D\u8BED\u4E49";var yn="\u89C4\u5219",xn="\u5F52\u5C5E",Zo="\u5355\u4E00\u4E8B\u5B9E\u6E90",st="\u4FEE\u8BA2\u5185\u5BB9",qo="\u540E\u7EE7",Qo="\u9000\u4F11\u6765\u6E90\u4EFB\u52A1",es="\u6761\u6587\u53BB\u5411";var it="\u9000\u4F11\u65F6\u8BED\u4E49\uFF08\u51BB\u7ED3\uFF09";function ct(e){return`| ${e.join(" | ")} |`}function ts(e){return`| ${Array.from({length:e},()=>"---").join(" | ")} |`}function lt(e){return`${ct(e)}
54
+ ${ts(e.length)}`}var De=[J,yn,kn,xn,Zo],Fl=lt(De);var ns=/^C-\d+$/;function rs(e){return e.trim().replace(/^`+|`+$/g,"").trim()}function Sn(e){return ns.test(rs(e))}function os(e,t){let n=e.split(/\r?\n/,1)[0]??"",r=t.exec(n);return r?Number(r[1]):null}function ss(e){return os(e,Xo)}function Rn(e){let t=Jo.exec(e);return t?Number(t[1]):null}function is(e){let t=O(e,Oe),n=O(t,W),r=le(n);return{hasDir:le(t),hasIndex:r,hasHistory:le(O(t,j)),hasRetired:le(O(t,ke)),hasLegacy:le(O(e,Ne)),markerVersion:r?ss(v(n)):null}}function cs(e,t,n,r){return e?r===ye?t&&n?"v3":"abnormal":r===2?t&&n?"v2":"abnormal":r!==null?"abnormal":t?n?"v2":"abnormal":n?"abnormal":"v1":"none"}function X(e){let t=e.trim();return t.startsWith("|")&&t.endsWith("|")&&t.length>1}function ls(e){let t=[],n="",r=0;for(let o of e){if(o==="\\"){r+=1,n+=o;continue}o==="|"&&r%2===0?(t.push(n.trim()),n=""):n+=o,r=0}return t.push(n.trim()),t}function U(e){return ls(e.trim().replace(/^\|/,"").replace(/\|$/,""))}function be(e){if(!X(e))return!1;let t=U(e);return t.length>0&&t.every(n=>/^:?-{2,}:?$/.test(n))}function ue(e,t){for(let n=0;n+1<e.length;n++){let r=e[n]??"";if(!X(r)||!U(r).includes(t)||!be(e[n+1]??""))continue;let o=[],s=[];for(let i=n+2;i<e.length;i++){let l=e[i]??"";if(!X(l)||be(l))break;o.push(U(l)),s.push(i)}return{headerLine:n,separatorLine:n+1,rowLines:s,header:U(r),rows:o}}return null}function as(e){return ue(e,kn)}function vn(e){let t=[];for(let n=0;n+1<e.length;n++){let r=e[n]??"",o=e[n+1]??"";if(!X(r)||!be(o))continue;let s=U(r).length,i=U(o).length;s!==i&&t.push({line:n+1,headerCols:s,sepCols:i})}return t}function $n(e,t){return e.findIndex(n=>n===t)}function us(e){let t=[];for(let n of e.rows)n.every(r=>r==="")||t.push({id:n[0]??"",name:n[1]??"",cells:n});return t}function at(e){let t=is(e),n=O(e,Oe),r=O(n,W),o=t.hasIndex?v(r):"",s=t.hasIndex?as(o.split(/\r?\n/)):null,i=s?.header??[],l=(i[0]??"")===J,c=s?us(s):[],f=c.map(p=>Number(p.id)).filter(p=>Number.isInteger(p));return{...t,dir:n,indexFile:r,historyFile:O(n,j),retiredFile:O(n,ke),legacyFile:O(e,Ne),form:cs(t.hasIndex,t.hasHistory,l,t.markerVersion),header:i,entries:c,maxSeq:f.length>0?Math.max(...f):0}}function ut(e){if(!e.hasIndex)return[];let t=[e.indexFile];if(!le(e.dir))return t;for(let n of Ko(e.dir,{withFileTypes:!0}))!n.isFile()||!n.name.endsWith(".md")||n.name===W||n.name===j||n.name===ke||t.push(O(e.dir,n.name));return t}var fs="# \u89C4\u8303\u6F14\u8FDB\u8BB0\u5F55",fe="\u4FEE\u8BA2\u6765\u6E90\u4EFB\u52A1",Me=[J,st,fe],_l=ct(Me),ds="> \u8868\u8BED\u4E49\u8FB9\u754C\uFF1A\u672C\u8868\u53EA\u8BB0**\u89C4\u8303\u8BED\u4E49\u53D8\u66F4**\uFF1B\u8F7D\u4F53\u7ED3\u6784\u5347\u7EA7\u3001\u5165\u53E3\u58F3\u751F\u6210 / \u5220\u9664\u3001\u6761\u76EE\u9000\u4F11\u5747\u4E0D\u5165\u8868\uFF08\u9000\u4F11\u89C1 `retired.md`\uFF09\u3002",ps="> \u5143\u89C4\u5219\uFF1A\u89C4\u5219\u8BED\u4E49\u53D8\u66F4\u65F6\u4E0D\u5F97\u8986\u76D6\u65E7\u8BED\u4E49\u76F4\u63A5\u4E22\u53F2\u2014\u2014\u5728\u300C\u6F14\u8FDB\u8BB0\u5F55\u300D\u8FFD\u52A0\u4E00\u6761\uFF08\u89C4\u5219 ID \u2192 \u4FEE\u8BA2\u5185\u5BB9 \u2192 \u4FEE\u8BA2\u6765\u6E90\u4EFB\u52A1\uFF1B\u4FEE\u8BA2\u5185\u5BB9\u65B0\u7ACB\u6761\u76EE\u76F4\u63A5\u5199\u5176\u8BED\u4E49\u3001\u8BED\u4E49\u53D8\u66F4\u5199\u300C\u65E7\u8BED\u4E49\u300D\u2192\u300C\u65B0\u8BED\u4E49\u300D\uFF09\uFF0C`index.md` \u7D22\u5F15\u8868\u53EA\u4FDD\u7559\u5F53\u524D\u8BED\u4E49\uFF1B\u89C4\u5219\u5C42\u6E90\u5934\u53D8\u66F4\uFF08`AGENTS.md` / `docs/ai-rules.md` / skills \u6761\u6587\uFF09\u968F\u8BE5\u53D8\u66F4\u540C\u6279\u843D\u76D8\u3002",Ol=`${fs}
55
55
 
56
56
  ${ps}
57
57
  ${ds}
58
58
 
59
59
  ${lt(Me)}
60
- `,ms="# \u89C4\u8303\u9000\u4F11\u8BB0\u5F55",gs="> \u5143\u89C4\u5219\uFF1A\u6761\u76EE\u4F5C\u5E9F\u5373\u4ECE `index.md` \u8FC1\u51FA\u81F3\u672C\u8868\u5E76\u51BB\u7ED3\u9000\u4F11\u65F6\u8BED\u4E49\uFF1B\u7F16\u53F7\u4E0D\u56DE\u6536\uFF08\u89C1 conventions-spec \xA78\uFF09\u3002\u672C\u8868\u5C5E Z3 \u5F52\u6863\u3001\u4E0D\u8FDB\u5E38\u89C4\u8BFB\u9762\u3002",je=[J,yn,it,xn,qo,Qo,es],Ol=ct(je),Nl=`${ms}
60
+ `,ms="# \u89C4\u8303\u9000\u4F11\u8BB0\u5F55",gs="> \u5143\u89C4\u5219\uFF1A\u6761\u76EE\u4F5C\u5E9F\u5373\u4ECE `index.md` \u8FC1\u51FA\u81F3\u672C\u8868\u5E76\u51BB\u7ED3\u9000\u4F11\u65F6\u8BED\u4E49\uFF1B\u7F16\u53F7\u4E0D\u56DE\u6536\uFF08\u89C1 conventions-spec \xA78\uFF09\u3002\u672C\u8868\u5C5E Z3 \u5F52\u6863\u3001\u4E0D\u8FDB\u5E38\u89C4\u8BFB\u9762\u3002",je=[J,yn,it,xn,qo,Qo,es],Nl=ct(je),Dl=`${ms}
61
61
 
62
62
  ${gs}
63
63
 
64
64
  ${lt(je)}
65
- `;import{existsSync as Ye}from"fs";import{basename as Tn}from"path";import{existsSync as hs,readdirSync as bs}from"fs";import{join as ks,relative as Hl}from"path";var ys=/^\s*(`{3,}|~{3,})/;function xs(e){let t=ys.exec(e)?.[1];return t?{char:t.charAt(0),len:t.length}:null}function Ss(e){return/^\s*/.exec(e)?.[0]??""}function Rs(e){return e.replace(/^(:?)-+(:?)$/,"$1---$2")}function vs(e){if(!X(e))return e;let t=U(e),n=be(e)?t.map(Rs):t;return`${Ss(e)}| ${n.join(" | ")} |`}function Be(e){let t=e.map(()=>!0),n=null;for(let r=0;r<e.length;r++){let o=xs(e[r]??"");if(n===null){o&&(n=o,t[r]=!1);continue}t[r]=!1,o&&o.char===n.char&&o.len>=n.len&&(n=null)}return t}function wn(e){let t=e.split(/\r?\n/),n=Be(t),r=[];for(let o=0;o<t.length;o++){if(!n[o])continue;let s=t[o]??"";X(s)&&vs(s)!==s&&r.push(o+1)}return r}function En(e){if(!hs(e))return[];let t=[],n=r=>{for(let o of bs(r,{withFileTypes:!0})){let s=ks(r,o.name);o.isDirectory()?n(s):o.isFile()&&o.name.endsWith(".md")&&t.push(s)}};return n(e),t.sort()}var $s=/^[-*]\s+(?:\*\*)?确立来源/,ws=/本次起入表|新立条目:|条文全文落/;function Cn(e,t){return e.length===t.length&&t.every((n,r)=>e[r]===n)}function He(e){return e.map(t=>`\u300C${t}\u300D`).join("")}function Es(e){return Cn(e.header,De)?[]:[{file:e.indexFile,message:`${W} \u7D22\u5F15\u8868\u5217\u96C6\u5408\u504F\u79BB v3 \u89C4\u8303\uFF1A\u5E94\u6070\u4E3A ${He(De)}\uFF0C\u5B9E\u4E3A ${He(e.header)}\uFF1B\u8BF7\u4EBA\u5DE5\u786E\u8BA4\u540E\u6309 conventions-spec \u5F52\u4E00`}]}function Ts(e){let t=[],n=[[j,e.historyFile,Me,fe],[ke,e.retiredFile,je,it]];for(let[r,o,s,i]of n){if(!Ye(o))continue;let l=ue(v(o).split(/\r?\n/),i);!l||Cn(l.header,s)||t.push({file:o,line:l.headerLine+1,message:`${r} \u8868\u5934\u504F\u79BB v3 \u89C4\u8303\uFF1A\u5E94\u6070\u4E3A ${He(s)}\uFF0C\u5B9E\u4E3A ${He(l.header)}\uFF1B\u8BF7\u4EBA\u5DE5\u786E\u8BA4\u540E\u6309 conventions-spec \u5F52\u4E00`})}return t}function Cs(e){let t=[],n=[...ut(e),e.historyFile,e.retiredFile];for(let r of n){if(!Ye(r))continue;let o=v(r).split(/\r?\n/),s=Be(o),i=o.map((p,m)=>s[m]?p:""),l=vn(i),c=l[0];if(c===void 0)continue;let f=l.length>1?`\uFF08\u53E6\u6709 ${l.length-1} \u5904\uFF09`:"";t.push({file:r,line:c.line,message:`${Tn(r)} \u7B2C ${c.line} \u884C\u8868\u5934\u4E0E\u5206\u9694\u884C\u5217\u6570\u4E0D\u4E00\u81F4\uFF08\u8868\u5934 ${c.headerCols} \u5217 / \u5206\u9694\u884C ${c.sepCols} \u5217\uFF09${f}\uFF1A\u8BF7\u6309 conventions-spec \u5F52\u4E00`})}return t}function As(e){let t=[],n=ut(e).filter(r=>r!==e.indexFile);for(let r of n){if(!Ye(r))continue;let o=v(r).split(/\r?\n/),s=Be(o),i=[];o.forEach((f,p)=>{s[p]&&$s.test(f)&&i.push(p+1)});let l=i[0];if(l===void 0)continue;let c=i.length>1?`\uFF08\u53E6\u6709 ${i.length-1} \u5904\uFF09`:"";t.push({file:r,line:l,message:`${Tn(r)} \u7B2C ${l} \u884C\u6B8B\u7559\u300C\u786E\u7ACB\u6765\u6E90\u300D\u5B50\u9879${c}\uFF1A\u6765\u6E90\u7531\u7D22\u5F15\u884C\u4E0E history.md / retired.md \u627F\u8F7D\uFF0C\u5206\u518C\u5185\u4E0D\u91CD\u590D\uFF1B\u8BF7\u4EBA\u5DE5\u786E\u8BA4\u540E\u6309 conventions-spec \u5F52\u4E00`})}return t}function Ls(e){if(!Ye(e.historyFile))return[];let t=ue(v(e.historyFile).split(/\r?\n/),fe);if(!t)return[];let n=$n(t.header,st);if(n<0)return[];let r=[];t.rows.forEach((i,l)=>{let c=t.rowLines[l];c!==void 0&&ws.test(i[n]??"")&&r.push(c+1)});let o=r[0];if(o===void 0)return[];let s=r.length>1?`\uFF08\u53E6\u6709 ${r.length-1} \u5904\uFF09`:"";return[{file:e.historyFile,line:o,message:`${j} \u7B2C ${o} \u884C\u300C\u4FEE\u8BA2\u5185\u5BB9\u300D\u5217\u542B\u7981\u7528\u8BED\u6599${s}\uFF1A\u4E0D\u5F97\u5199\u81EA\u6307\u5957\u8BDD\uFF08\u5982\u300C\uFF08\u672C\u6B21\u8D77\u5165\u8868\uFF09\u300D\u300C\u65B0\u7ACB\u6761\u76EE\uFF1A\u300D\uFF09\u6216\u91CD\u590D\u7D22\u5F15\u5217\u7684\u6761\u6587\u53BB\u5411\uFF1B\u8BF7\u4EBA\u5DE5\u786E\u8BA4\u540E\u6309 conventions-spec \xA73.2 \u5F52\u4E00`}]}function An(e){if(!e.hasIndex)return[];let t=[];return e.form==="v3"&&t.push(...Es(e),...Ts(e),...As(e),...Ls(e)),t.push(...Cs(e)),t}import{existsSync as Is}from"fs";import{join as Ln}from"path";var Fs="toolkit-conventions",_s="SKILL.md",Os=[".agents/skills",".trae/skills",".trae-cn/skills",".cursor/skills",".claude/skills"];function In(e){let t=[];for(let n of Os){let r=`${n}/${Fs}`,o=`${r}/${_s}`;Is(Ln(e,o))&&t.push({dir:r,file:o,version:Rn(v(Ln(e,o)))})}return t}function Fn(e){let[t]=e;if(!t)return null;let n=o=>o.version===null?"\u65E0":`v${o.version}`;if(e.length===1)return{file:t.file,message:`\u5165\u53E3\u58F3\u6807\u8BB0 ${n(t)}\uFF0C\u4E0E\u5F53\u524D toolkit \u7684 v${ae} \u4E0D\u4E00\u81F4\uFF1A\u91CD\u8DD1 toolkit init \u53EF\u8865\u9F50`};let r=e.map(o=>`${o.file}\uFF08\u6807\u8BB0 ${n(o)}\uFF09`).join("\u3001");return{file:t.file,message:`\u5165\u53E3\u58F3\u6807\u8BB0\u4E0E\u5F53\u524D toolkit \u7684 v${ae} \u4E0D\u4E00\u81F4\uFF0C\u5171 ${e.length} \u5904\uFF1A${r}\uFF1B\u91CD\u8DD1 toolkit init \u53EF\u4E00\u6B21\u6027\u8865\u9F50`}}function _n(e){let[t]=e;if(!t)return null;if(e.length===1)return{file:t.file,message:`\u5165\u53E3\u58F3 ${t.file} \u88AB gitignore \u8986\u76D6\uFF1A\u4E0D\u4F1A\u968F git \u5206\u53D1\uFF0C\u8BF7\u628A\u8BE5\u8DEF\u5F84\u4ECE\u5FFD\u7565\u89C4\u5219\u4E2D\u6392\u9664`};let n=e.map(r=>r.file).join("\u3001");return{file:t.file,message:`\u5165\u53E3\u58F3\u88AB gitignore \u8986\u76D6\uFF0C\u5171 ${e.length} \u5904\uFF1A${n}\uFF1B\u4E0D\u4F1A\u968F git \u5206\u53D1\uFF0C\u8BF7\u628A\u76F8\u5E94\u8DEF\u5F84\u4ECE\u5FFD\u7565\u89C4\u5219\u4E2D\u6392\u9664`}}var Nn=/待办|待实施|待核对|待确认|待开始|待评估|待排期|待做|TODO/,js=/^[-*]\s*\[ \]\s/m,Bs=/^[-*]\s*\[ \]/,Hs=/^\d{4}-\d{1,2}-\d{1,2}(?:[T\s]\d{1,2}:\d{2}(?::\d{2})?)?$/,Ys=/^\d{4}-\d{1,2}-\d{1,2}[T\s]\d{1,2}:\d{2}(?::\d{2})?$/,Us=/^\d{8}-[^-]+-.+\.md$/;function Dn(e){let t=e.match(/^(\d{4})-?(\d{1,2})-?(\d{1,2})/);if(!t)return!1;let[,n,r,o]=t;if(!n||!r||!o)return!1;let s=+n,i=+r,l=+o;if(i<1||i>12||l<1||l>31)return!1;let c=new Date(Date.UTC(s,i-1,l));return c.getUTCFullYear()===s&&c.getUTCMonth()===i-1&&c.getUTCDate()===l}function N(e,t,n){for(let r=0;r<t;r++)if((e[r]??"").trimStart().startsWith(`${n}:`))return r+1;return 1}function Mn(e,t,n){let r=!1;for(let o=t;o<e.length;o++){let s=e[o]??"";if(!r&&/^# /.test(s)){r=!0;continue}if(n.test(s))return o+1}return t+1}function Ws(e,t){let n=[];t.startsWith("\uFEFF")&&n.push({level:"warn",file:e,line:1,message:"\u6587\u4EF6\u542B UTF-8 BOM\uFF0C\u5EFA\u8BAE\u53BB\u9664\uFF08\u90E8\u5206\u89E3\u6790\u5DE5\u5177\u4F1A\u5F02\u5E38\uFF09"});let o=t.split(/\r?\n/).findIndex(i=>/[ \t]+$/.test(i));o>=0&&n.push({level:"warn",file:e,line:o+1,message:"\u884C\u5C3E\u6709\u591A\u4F59\u7A7A\u767D\uFF08\u7A7A\u683C\u6216\u5236\u8868\u7B26\uFF09\uFF0C\u5EFA\u8BAE\u53BB\u9664"});let s=-1;for(let i=0;i<t.length;i++)if(t[i]===`
65
+ `;import{existsSync as Ye}from"fs";import{basename as Tn}from"path";import{existsSync as hs,readdirSync as bs}from"fs";import{join as ks,relative as Yl}from"path";var ys=/^\s*(`{3,}|~{3,})/;function xs(e){let t=ys.exec(e)?.[1];return t?{char:t.charAt(0),len:t.length}:null}function Ss(e){return/^\s*/.exec(e)?.[0]??""}function Rs(e){return e.replace(/^(:?)-+(:?)$/,"$1---$2")}function vs(e){if(!X(e))return e;let t=U(e),n=be(e)?t.map(Rs):t;return`${Ss(e)}| ${n.join(" | ")} |`}function Be(e){let t=e.map(()=>!0),n=null;for(let r=0;r<e.length;r++){let o=xs(e[r]??"");if(n===null){o&&(n=o,t[r]=!1);continue}t[r]=!1,o&&o.char===n.char&&o.len>=n.len&&(n=null)}return t}function wn(e){let t=e.split(/\r?\n/),n=Be(t),r=[];for(let o=0;o<t.length;o++){if(!n[o])continue;let s=t[o]??"";X(s)&&vs(s)!==s&&r.push(o+1)}return r}function En(e){if(!hs(e))return[];let t=[],n=r=>{for(let o of bs(r,{withFileTypes:!0})){let s=ks(r,o.name);o.isDirectory()?n(s):o.isFile()&&o.name.endsWith(".md")&&t.push(s)}};return n(e),t.sort()}var $s=/^[-*]\s+(?:\*\*)?确立来源/,ws=/本次起入表|新立条目:|条文全文落/;function Cn(e,t){return e.length===t.length&&t.every((n,r)=>e[r]===n)}function He(e){return e.map(t=>`\u300C${t}\u300D`).join("")}function Es(e){return Cn(e.header,De)?[]:[{file:e.indexFile,message:`${W} \u7D22\u5F15\u8868\u5217\u96C6\u5408\u504F\u79BB v3 \u89C4\u8303\uFF1A\u5E94\u6070\u4E3A ${He(De)}\uFF0C\u5B9E\u4E3A ${He(e.header)}\uFF1B\u8BF7\u4EBA\u5DE5\u786E\u8BA4\u540E\u6309 conventions-spec \u5F52\u4E00`}]}function Ts(e){let t=[],n=[[j,e.historyFile,Me,fe],[ke,e.retiredFile,je,it]];for(let[r,o,s,i]of n){if(!Ye(o))continue;let l=ue(v(o).split(/\r?\n/),i);!l||Cn(l.header,s)||t.push({file:o,line:l.headerLine+1,message:`${r} \u8868\u5934\u504F\u79BB v3 \u89C4\u8303\uFF1A\u5E94\u6070\u4E3A ${He(s)}\uFF0C\u5B9E\u4E3A ${He(l.header)}\uFF1B\u8BF7\u4EBA\u5DE5\u786E\u8BA4\u540E\u6309 conventions-spec \u5F52\u4E00`})}return t}function Cs(e){let t=[],n=[...ut(e),e.historyFile,e.retiredFile];for(let r of n){if(!Ye(r))continue;let o=v(r).split(/\r?\n/),s=Be(o),i=o.map((p,m)=>s[m]?p:""),l=vn(i),c=l[0];if(c===void 0)continue;let f=l.length>1?`\uFF08\u53E6\u6709 ${l.length-1} \u5904\uFF09`:"";t.push({file:r,line:c.line,message:`${Tn(r)} \u7B2C ${c.line} \u884C\u8868\u5934\u4E0E\u5206\u9694\u884C\u5217\u6570\u4E0D\u4E00\u81F4\uFF08\u8868\u5934 ${c.headerCols} \u5217 / \u5206\u9694\u884C ${c.sepCols} \u5217\uFF09${f}\uFF1A\u8BF7\u6309 conventions-spec \u5F52\u4E00`})}return t}function As(e){let t=[],n=ut(e).filter(r=>r!==e.indexFile);for(let r of n){if(!Ye(r))continue;let o=v(r).split(/\r?\n/),s=Be(o),i=[];o.forEach((f,p)=>{s[p]&&$s.test(f)&&i.push(p+1)});let l=i[0];if(l===void 0)continue;let c=i.length>1?`\uFF08\u53E6\u6709 ${i.length-1} \u5904\uFF09`:"";t.push({file:r,line:l,message:`${Tn(r)} \u7B2C ${l} \u884C\u6B8B\u7559\u300C\u786E\u7ACB\u6765\u6E90\u300D\u5B50\u9879${c}\uFF1A\u6765\u6E90\u7531\u7D22\u5F15\u884C\u4E0E history.md / retired.md \u627F\u8F7D\uFF0C\u5206\u518C\u5185\u4E0D\u91CD\u590D\uFF1B\u8BF7\u4EBA\u5DE5\u786E\u8BA4\u540E\u6309 conventions-spec \u5F52\u4E00`})}return t}function Ls(e){if(!Ye(e.historyFile))return[];let t=ue(v(e.historyFile).split(/\r?\n/),fe);if(!t)return[];let n=$n(t.header,st);if(n<0)return[];let r=[];t.rows.forEach((i,l)=>{let c=t.rowLines[l];c!==void 0&&ws.test(i[n]??"")&&r.push(c+1)});let o=r[0];if(o===void 0)return[];let s=r.length>1?`\uFF08\u53E6\u6709 ${r.length-1} \u5904\uFF09`:"";return[{file:e.historyFile,line:o,message:`${j} \u7B2C ${o} \u884C\u300C\u4FEE\u8BA2\u5185\u5BB9\u300D\u5217\u542B\u7981\u7528\u8BED\u6599${s}\uFF1A\u4E0D\u5F97\u5199\u81EA\u6307\u5957\u8BDD\uFF08\u5982\u300C\uFF08\u672C\u6B21\u8D77\u5165\u8868\uFF09\u300D\u300C\u65B0\u7ACB\u6761\u76EE\uFF1A\u300D\uFF09\u6216\u91CD\u590D\u7D22\u5F15\u5217\u7684\u6761\u6587\u53BB\u5411\uFF1B\u8BF7\u4EBA\u5DE5\u786E\u8BA4\u540E\u6309 conventions-spec \xA73.2 \u5F52\u4E00`}]}function An(e){if(!e.hasIndex)return[];let t=[];return e.form==="v3"&&t.push(...Es(e),...Ts(e),...As(e),...Ls(e)),t.push(...Cs(e)),t}import{existsSync as Is}from"fs";import{join as Ln}from"path";var Fs="toolkit-conventions",_s="SKILL.md",Os=[".agents/skills",".trae/skills",".trae-cn/skills",".cursor/skills",".claude/skills"];function In(e){let t=[];for(let n of Os){let r=`${n}/${Fs}`,o=`${r}/${_s}`;Is(Ln(e,o))&&t.push({dir:r,file:o,version:Rn(v(Ln(e,o)))})}return t}function Fn(e){let[t]=e;if(!t)return null;let n=o=>o.version===null?"\u65E0":`v${o.version}`;if(e.length===1)return{file:t.file,message:`\u5165\u53E3\u58F3\u6807\u8BB0 ${n(t)}\uFF0C\u4E0E\u5F53\u524D toolkit \u7684 v${ae} \u4E0D\u4E00\u81F4\uFF1A\u91CD\u8DD1 toolkit init \u53EF\u8865\u9F50`};let r=e.map(o=>`${o.file}\uFF08\u6807\u8BB0 ${n(o)}\uFF09`).join("\u3001");return{file:t.file,message:`\u5165\u53E3\u58F3\u6807\u8BB0\u4E0E\u5F53\u524D toolkit \u7684 v${ae} \u4E0D\u4E00\u81F4\uFF0C\u5171 ${e.length} \u5904\uFF1A${r}\uFF1B\u91CD\u8DD1 toolkit init \u53EF\u4E00\u6B21\u6027\u8865\u9F50`}}function _n(e){let[t]=e;if(!t)return null;if(e.length===1)return{file:t.file,message:`\u5165\u53E3\u58F3 ${t.file} \u88AB gitignore \u8986\u76D6\uFF1A\u4E0D\u4F1A\u968F git \u5206\u53D1\uFF0C\u8BF7\u628A\u8BE5\u8DEF\u5F84\u4ECE\u5FFD\u7565\u89C4\u5219\u4E2D\u6392\u9664`};let n=e.map(r=>r.file).join("\u3001");return{file:t.file,message:`\u5165\u53E3\u58F3\u88AB gitignore \u8986\u76D6\uFF0C\u5171 ${e.length} \u5904\uFF1A${n}\uFF1B\u4E0D\u4F1A\u968F git \u5206\u53D1\uFF0C\u8BF7\u628A\u76F8\u5E94\u8DEF\u5F84\u4ECE\u5FFD\u7565\u89C4\u5219\u4E2D\u6392\u9664`}}var Nn=/待办|待实施|待核对|待确认|待开始|待评估|待排期|待做|TODO/,js=/^[-*]\s*\[ \]\s/m,Bs=/^[-*]\s*\[ \]/,Hs=/^\d{4}-\d{1,2}-\d{1,2}(?:[T\s]\d{1,2}:\d{2}(?::\d{2})?)?$/,Ys=/^\d{4}-\d{1,2}-\d{1,2}[T\s]\d{1,2}:\d{2}(?::\d{2})?$/,Us=/^\d{8}-[^-]+-.+\.md$/;function Dn(e){let t=e.match(/^(\d{4})-?(\d{1,2})-?(\d{1,2})/);if(!t)return!1;let[,n,r,o]=t;if(!n||!r||!o)return!1;let s=+n,i=+r,l=+o;if(i<1||i>12||l<1||l>31)return!1;let c=new Date(Date.UTC(s,i-1,l));return c.getUTCFullYear()===s&&c.getUTCMonth()===i-1&&c.getUTCDate()===l}function N(e,t,n){for(let r=0;r<t;r++)if((e[r]??"").trimStart().startsWith(`${n}:`))return r+1;return 1}function Mn(e,t,n){let r=!1;for(let o=t;o<e.length;o++){let s=e[o]??"";if(!r&&/^# /.test(s)){r=!0;continue}if(n.test(s))return o+1}return t+1}function Ws(e,t){let n=[];t.startsWith("\uFEFF")&&n.push({level:"warn",file:e,line:1,message:"\u6587\u4EF6\u542B UTF-8 BOM\uFF0C\u5EFA\u8BAE\u53BB\u9664\uFF08\u90E8\u5206\u89E3\u6790\u5DE5\u5177\u4F1A\u5F02\u5E38\uFF09"});let o=t.split(/\r?\n/).findIndex(i=>/[ \t]+$/.test(i));o>=0&&n.push({level:"warn",file:e,line:o+1,message:"\u884C\u5C3E\u6709\u591A\u4F59\u7A7A\u767D\uFF08\u7A7A\u683C\u6216\u5236\u8868\u7B26\uFF09\uFF0C\u5EFA\u8BAE\u53BB\u9664"});let s=-1;for(let i=0;i<t.length;i++)if(t[i]===`
66
66
  `&&(i===0||t[i-1]!=="\r")){s=i;break}return s>=0&&t.includes(`\r
67
67
  `)&&n.push({level:"warn",file:e,line:t.slice(0,s).split(`
68
- `).length,message:"\u6362\u884C\u7B26\u6DF7\u7528\uFF08\u540C\u6587\u4EF6\u540C\u65F6\u542B CRLF \u4E0E LF\uFF09\uFF0C\u5EFA\u8BAE\u7EDF\u4E00\u4E3A LF"}),n}function Yn(e){let t=[],n=xe(e),r=Ds(e,"utf8");t.push(...Ws(n,r));let o=M(r),s=o.split(/\r?\n/),i=Re.exec(o)?.[0].split(/\r?\n/).length??0;if(!Re.test(o))return t.push({level:"error",file:n,line:1,message:"\u7F3A\u5C11 frontmatter"}),t;let c=ve(o);for(let a of Object.keys(c))Se.includes(a)||t.push({level:"warn",file:n,line:N(s,i,a),message:`frontmatter \u542B\u672A\u77E5\u5B57\u6BB5\u300C${a}\u300D\uFF0C\u672C\u5DE5\u5177\u4E0D\u8BFB\u53D6\uFF08\u5F52\u6863\u4E0E\u5F52\u4E00\u5316\u4E0D\u4F1A\u4FDD\u7559\uFF0C\u8BF7\u81EA\u884C\u7EF4\u62A4\uFF09`});if(c.status?de.includes(c.status)||t.push({level:"error",file:n,line:N(s,i,"status"),message:`status \u975E\u6CD5\u503C\u300C${c.status}\u300D\uFF0C\u5E94\u4E3A ${de.join(" / ")}`}):t.push({level:"error",file:n,line:N(s,i,"status"),message:"frontmatter \u7F3A\u5C11 status \u5B57\u6BB5"}),Z.includes(c.status)&&!c.completed&&t.push({level:"error",file:n,line:N(s,i,"completed"),message:`status \u4E3A\u300C${c.status}\u300D\u4F46\u7F3A\u5C11 completed \u5B8C\u6210\u65F6\u95F4`}),c.completed){let a=c.completed.trim(),d=N(s,i,"completed");if(!Hs.test(a))t.push({level:"warn",file:n,line:d,message:`completed\u300C${c.completed}\u300D\u683C\u5F0F\u975E\u6CD5\uFF0C\u5E94\u4E3A YYYY-MM-DD HH:mm`});else{let g=a.match(/^\d{4}-\d{1,2}-\d{1,2}/)?.[0]??a;Dn(g)?Ys.test(a)?ne(a)?t.push({level:"warn",file:n,line:d,message:`completed\u300C${c.completed}\u300D\u665A\u4E8E\u5F53\u524D\u7CFB\u7EDF\u65F6\u95F4 ${te} \u5C0F\u65F6\u4EE5\u4E0A\uFF0C\u7591\u4F3C\u65F6\u95F4\u6E90\u9519\u8BEF\uFF0C\u8BF7\u5F53\u573A\u53D6\u7CFB\u7EDF\u65F6\u95F4\u6838\u5B9E`}):/(?:[T\s]00:00(?::00)?)$/.test(a)&&t.push({level:"warn",file:n,line:d,message:`completed\u300C${c.completed}\u300D\u6070\u4E3A\u96F6\u70B9\u6574\uFF0C\u7591\u4F3C\u53EA\u586B\u4E86\u65E5\u671F\u88AB\u8865\u96F6\uFF0C\u8BF7\u6838\u5B9E\u5B9E\u9645\u5B8C\u6210\u65F6\u95F4`}):t.push({level:"warn",file:n,line:d,message:`completed\u300C${c.completed}\u300D\u5EFA\u8BAE\u8865\u5168\u4E3A\u5B8C\u6574\u65F6\u95F4 YYYY-MM-DD HH:mm`}):t.push({level:"warn",file:n,line:d,message:`completed\u300C${c.completed}\u300D\u65E5\u671F\u4E0D\u5B58\u5728\uFF0C\u8BF7\u6838\u5BF9`})}}c.owner||t.push({level:"warn",file:n,line:N(s,i,"owner"),message:"\u7F3A\u5C11 owner \u8D1F\u8D23\u4EBA\u5B57\u6BB5"}),c.created?/^\d{8}$/.test(c.created.trim())?Dn(c.created.trim())||t.push({level:"warn",file:n,line:N(s,i,"created"),message:`created\u300C${c.created}\u300D\u65E5\u671F\u4E0D\u5B58\u5728\uFF0C\u8BF7\u6838\u5BF9`}):t.push({level:"warn",file:n,line:N(s,i,"created"),message:`created\u300C${c.created}\u300D\u683C\u5F0F\u975E\u6CD5\uFF0C\u5E94\u4E3A YYYYMMDD`}):t.push({level:"warn",file:n,line:N(s,i,"created"),message:"\u7F3A\u5C11 created \u521B\u5EFA\u65E5\u671F\u5B57\u6BB5"}),c.updated&&c.created&&/^\d{8}$/.test(c.updated.trim())&&/^\d{8}$/.test(c.created.trim())&&c.updated.trim()<c.created.trim()&&t.push({level:"error",file:n,line:N(s,i,"updated"),message:`updated ${c.updated.trim()} \u65E9\u4E8E created ${c.created.trim()}\uFF0C\u65F6\u95F4\u7EBF\u77DB\u76FE`});let f=n.match(/^(\d{8})-/);if(Us.test(n)?c.created&&/^\d{8}$/.test(c.created.trim())&&f&&c.created.trim()!==f[1]&&t.push({level:"warn",file:n,message:`\u6587\u4EF6\u540D\u65E5\u671F ${f[1]} \u4E0E created ${c.created.trim()} \u4E0D\u4E00\u81F4`}):t.push({level:"warn",file:n,message:"\u6587\u4EF6\u540D\u4E0D\u7B26\u5408\u89C4\u8303 {YYYYMMDD}-{\u8D1F\u8D23\u4EBA}-{\u7B80\u8FF0}.md"}),c.scope){let a=c.scope.trim(),d=N(s,i,"scope");/[、,,]/.test(a)&&t.push({level:"warn",file:n,line:d,message:`scope\u300C${c.scope}\u300D\u542B\u987F\u53F7/\u9017\u53F7\u7591\u4F3C\u591A\u503C\u5206\u9694\uFF0C\u591A\u503C\u8BF7\u6539\u7528\u534A\u89D2\u52A0\u53F7\u8FDE\u63A5\uFF08\u5982 scope: web+server\uFF09`}),/[/\\]/.test(a)&&t.push({level:"warn",file:n,line:d,message:`scope\u300C${c.scope}\u300D\u542B\u8DEF\u5F84\u5206\u9694\u7B26\uFF0C\u591A\u503C\u8BF7\u6539\u7528\u534A\u89D2\u52A0\u53F7\u8FDE\u63A5\uFF08\u5982 scope: web+server\uFF09\uFF0C\u7AEF\u540D\u672C\u8EAB\u4E0D\u5F97\u542B\u5206\u9694\u7B26`}),/[()()]/.test(a)&&t.push({level:"warn",file:n,line:d,message:`scope\u300C${c.scope}\u300D\u542B\u62EC\u53F7\u7591\u4F3C\u6CE8\u91CA\u6027\u6587\u5B57\uFF0C\u8BF4\u660E\u8BF7\u79FB\u5165\u6B63\u6587`})}let p=gt(z(o)),h=Q("check")?.pendingMarkers!==!1?p.match(Nn):null;return h&&t.push({level:"warn",file:n,line:Mn(s,i,Nn),message:`\u6B63\u6587\u542B\u672A\u95ED\u5408\u5F85\u529E\u6807\u8BB0\u300C${h[0]}\u300D\uFF0C\u5EFA\u8BAE\u62C6\u5206\u4E3A\u72EC\u7ACB active \u4EFB\u52A1\u6216\u660E\u786E\u95ED\u73AF`}),Q("check")?.includeCheckbox!==!1&&js.test(p)&&t.push({level:"warn",file:n,line:Mn(s,i,Bs),message:"\u6B63\u6587\u542B\u672A\u52FE\u9009\u5F85\u529E\u9879\u300C- [ ]\u300D\uFF0C\u5EFA\u8BAE\u62C6\u5206\u4E3A\u72EC\u7ACB active \u4EFB\u52A1\u6216\u52FE\u9009\u5B8C\u6210"}),t}function Ps(e){let t=[];if(!Hn(e))return t;for(let n of On(e,{withFileTypes:!0}))if(!(n.name==="active"||n.name==="archive")){if(n.isFile())n.name.endsWith(".md")&&/^\d{8}-/.test(n.name)&&t.push(n.name);else if(n.isDirectory())for(let r of On(Ue(e,n.name)))r.endsWith(".md")&&/^\d{8}-/.test(r)&&t.push(`${n.name}/${r}`)}return t}function zs(e){let t=Lt(e);if(!t)return[];let n=I(e,t),r=xt(t,e);return r.state==="not-a-repo"||r.state==="outside-repo"?[]:r.state==="unavailable"?[{level:"warn",file:n,message:`\u672C\u5730\u914D\u7F6E\u6587\u4EF6\u5FFD\u7565\u5224\u5B9A\u4E0D\u53EF\u7528\uFF08${r.detail??"\u672A\u77E5\u539F\u56E0"}\uFF09\uFF0C\u8BF7\u6838\u5B9E git \u73AF\u5883`}]:r.state==="tracked"?[{level:"warn",file:n,message:`\u672C\u5730\u914D\u7F6E\u6587\u4EF6\u5DF2\u88AB\u5FFD\u7565\u89C4\u5219\u8986\u76D6\u4F46\u4ECD\u88AB git \u8DDF\u8E2A\uFF08\u7591\u4F3C\u5386\u53F2 git add -f\uFF09\uFF1A\u6267\u884C git rm --cached ${n} \u540E\u624D\u4F1A\u771F\u6B63\u4E0D\u5165\u5E93`}]:r.state==="ignored"?[]:[{level:"warn",file:n,message:"\u672C\u5730\u914D\u7F6E\u6587\u4EF6\u672A\u88AB gitignore \u8986\u76D6\uFF0C\u53EF\u80FD\u968F git \u63D0\u4EA4\u6CC4\u9732\u4E2A\u4EBA\u914D\u7F6E\uFF1A\u91CD\u8DD1 toolkit init \u53EF\u81EA\u52A8\u8865\u5199\u5FFD\u7565\u884C"}]}function Vs(e,t){let n=[],r=at(e);r.hasLegacy&&n.push({level:"warn",file:Ne,message:r.hasDir?"\u65E7\u5355\u6587\u4EF6\u89C4\u8303\u8F7D\u4F53\u5DF2\u88AB conventions/ \u76EE\u5F55\u5F62\u6001\u53D6\u4EE3\uFF0C\u5EFA\u8BAE\u6E05\u7406\uFF08\u4E24\u8005\u5E76\u5B58\u65F6\u4EE5\u76EE\u5F55\u5F62\u6001\u4E3A\u51C6\uFF09":"\u65E7\u5355\u6587\u4EF6\u89C4\u8303\u8F7D\u4F53\uFF0C\u5EFA\u8BAE\u8FC1\u79FB\u4E3A conventions/ \u76EE\u5F55\u5F62\u6001\uFF08index.md \u4F5C\u552F\u4E00\u5165\u53E3 + common.md / \u7AEF\u5206\u518C\u6309\u9700\u521B\u5EFA\uFF09"}),r.hasDir&&!r.hasIndex&&n.push({level:"warn",file:`conventions/${W}`,message:"\u89C4\u8303\u8F7D\u4F53\u7F3A index.md\uFF08\u552F\u4E00\u5165\u53E3\u4E0E\u552F\u4E00\u6743\u5A01\uFF09\uFF0C\u8BF7\u8865\u9F50"}),r.form==="abnormal"&&n.push({level:"warn",file:`conventions/${W}`,message:r.markerVersion===ye?`\u89C4\u8303\u8F7D\u4F53\u6807\u4E3A v${ye} \u4F46\u7F3A ${j} \u6216\u7D22\u5F15\u8868\u9996\u5217\u975E ${J}\uFF0C\u8BF7\u8865\u9F50\u6216\u6267\u884C toolkit conventions upgrade`:`\u89C4\u8303\u8F7D\u4F53\u5B58\u5728 ${j} \u4F46\u7D22\u5F15\u8868\u9996\u5217\u4ECD\u975E ${J}\uFF08\u5F62\u6001\u5F02\u5E38\uFF09\uFF0C\u8BF7\u4EBA\u5DE5\u786E\u8BA4`}),n.push(...Ks(e,r));let o=In(t),s=yt(t,o.map(l=>l.file)),i=[Fn(o.filter(l=>l.version!==ae)),_n(o.filter(l=>s.has(l.file)))];for(let l of i)l&&n.push({level:"warn",file:l.file,message:l.message});return n.push(...zs(t)),n}function Ks(e,t){return An(t).map(n=>({level:"warn",file:I(e,n.file),...n.line===void 0?{}:{line:n.line},message:n.message}))}var jn=6;function Gs(e){let t=[];for(let n of En(e)){let r=wn(v(n));if(r.length===0)continue;let o=r.slice(0,jn).join("\u3001");t.push({level:"warn",file:I(e,n),line:r[0],message:`\u8868\u683C\u5B58\u5728\u5217\u5BF9\u9F50\u586B\u5145\uFF08\u504F\u79BB\u7D27\u51D1\u5F62\u6001\uFF09${r.length} \u884C\uFF08\u7B2C ${o}${r.length>jn?" \u2026":""} \u884C\uFF09\uFF1A\u6267\u884C toolkit conventions format \u5F52\u4E00`})}return t}function Xs(e){if(at(e).form!=="v3")return[];let t=Ue(e,Oe,j);if(!Hn(t))return[];let n=ue(v(t).split(/\r?\n/),fe);if(!n)return[];let r=n.rowLines.filter((o,s)=>!Sn((n.rows[s]??[])[0]??""));return r.length===0?[]:[{level:"warn",file:I(e,t),line:(r[0]??0)+1,message:`\u6F14\u8FDB\u8BB0\u5F55\u6709 ${r.length} \u884C\u9996\u5217\u4E0D\u662F\u7A33\u5B9A ID\uFF08\u5E94\u8BB0\u884C\u5185\u4EE3\u7801\u5305\u88F9\u7684 C-<n>\uFF09\uFF1A\u8BF7\u4EBA\u5DE5\u6838\u5BF9\u8865\u5F55\uFF08\u5386\u53F2\u884C\u53EA\u8FFD\u52A0\uFF0C\u4E0D\u81EA\u52A8\u6539\u5199\uFF09`}]}function Js(e=".tasks",t=process.cwd()){let n=Ue(e,"active"),r=A(n),o=[];for(let c of r)o.push(...Yn(c)),Ms(c)===n&&o.push({level:"warn",file:xe(c),message:"active \u4EFB\u52A1\u5E94\u653E\u5165 {YYYYMM} \u6708\u4EFD\u5B50\u76EE\u5F55\uFF08\u5F53\u524D\u76F4\u653E active \u6839\u76EE\u5F55\uFF09"});for(let c of Ps(e))o.push({level:"warn",file:c,message:"\u4EFB\u52A1\u6587\u4EF6\u6E38\u79BB\u4E8E active/ \u4E4B\u5916\uFF0Ctasks/check/archive \u5747\u4E0D\u4F1A\u8BFB\u53D6\uFF0C\u5E94\u79FB\u5165 active/{YYYYMM}/ \u6708\u4EFD\u5B50\u76EE\u5F55"});o.push(...Vs(e,t)),o.push(...Gs(e)),o.push(...Xs(e));for(let c of ot(e))o.push({level:"warn",file:c.file,message:c.message});let s=new Map;for(let c of r){let f=xe(c,".md"),p=s.get(f);p?p.push(c):s.set(f,[c])}for(let[c,f]of s)f.length>1&&o.push({level:"warn",file:c,message:`\u5B58\u5728 ${f.length} \u4E2A\u540C\u540D\u4EFB\u52A1\u6587\u4EF6\uFF0C\u7591\u4F3C\u91CD\u590D\u5EFA\u6863`});o.push(...qs(r,e));let i=o.filter(c=>c.level==="error").length,l=o.length-i;return{issues:o,errorCount:i,warnCount:l}}var Bn=new Map;function Zs(e){let t=Ns(e),n=Bn.get(e);if(n&&n.mtimeMs===t.mtimeMs)return n.titles;let r=[],o=new Set;try{for(let s of F(v(e)).blocks)s.title&&!o.has(s.title)&&(o.add(s.title),r.push(s.title))}catch{}return Bn.set(e,{mtimeMs:t.mtimeMs,titles:r}),r}function qs(e,t){let n=[],r=new Set(e.map(u=>xe(u,".md"))),o=new Map,s=u=>u.trim().replace(/\.md$/,"").trim();for(let u of e){let a=xe(u,".md"),d=v(u),g=ve(d);o.set(a,Te(g.depends_on).map(s))}if(![...o.values()].some(u=>u.length>0))return n;let i=null,l=u=>{if(!i){i=new Map;for(let a of A(Ue(t,"archive")))for(let d of Zs(a))i.has(d)||i.set(d,I(t,a))}return i.get(u)};for(let[u,a]of o)for(let d of a)if(!r.has(d)){let g=l(d);n.push({level:"warn",file:u,message:g?`\u4F9D\u8D56\u7684\u4EFB\u52A1\u300C${d}\u300D\u4E0D\u5728 active \u4E2D\uFF08\u5DF2\u5F52\u6863\u4E8E ${g}\uFF0C\u65E0\u9700\u518D\u4F9D\u8D56\uFF09`:`\u4F9D\u8D56\u7684\u4EFB\u52A1\u300C${d}\u300D\u4E0D\u5728 active \u4E2D\uFF08\u53EF\u80FD\u5DF2\u5F52\u6863\u6216\u6587\u4EF6\u540D\u62FC\u5199\u9519\u8BEF\uFF09`})}let c=0,f=1,p=2,m=new Map,h=(u,a)=>{m.set(u,f);for(let d of o.get(u)??[]){if(!r.has(d))continue;let g=m.get(d)??c;if(g===f)return[...a,d];if(g===c){let k=h(d,[...a,d]);if(k)return k}}return m.set(u,p),null};for(let u of o.keys())if((m.get(u)??c)===c){let a=h(u,[u]);if(a){n.push({level:"warn",file:u,message:`depends_on \u5B58\u5728\u5FAA\u73AF\u4F9D\u8D56\uFF1A${a.join(" \u2192 ")}`});break}}return n}var Un={breaking:["\u91CD\u5927\uFF1A","Breaking:"],added:["\u65B0\u589E\uFF1A","Added:"],changed:["\u4FEE\u6539\uFF1A","Changed:"],improved:["\u4F18\u5316\uFF1A","Improved:"],fixed:["\u4FEE\u590D\uFF1A","Fixed:"],docs:["\u6587\u6863\uFF1A","Docs:"],removed:["\u6E05\u7406\uFF1A","Removed:"],deps:["\u4F9D\u8D56\uFF1A"],other:[]},Wn={"### \u{1F41B} \u8865\u4E01\u4FEE\u590D":"fixed"},ft={zh:{groups:[{slot:"breaking",title:"### \u{1F6A8} \u91CD\u5927\u53D8\u66F4"},{slot:"added",title:"### \u2728 \u65B0\u589E\u529F\u80FD"},{slot:"changed",title:"### \u{1F527} \u529F\u80FD\u8C03\u6574"},{slot:"improved",title:"### \u26A1 \u4F18\u5316\u6539\u8FDB"},{slot:"fixed",title:"### \u{1F41B} \u95EE\u9898\u4FEE\u590D"},{slot:"docs",title:"### \u{1F4DD} \u6587\u6863\u66F4\u65B0"},{slot:"removed",title:"### \u{1F9F9} \u6E05\u7406\u79FB\u9664"},{slot:"deps",title:"### \u{1F517} \u4F9D\u8D56\u53D8\u66F4"},{slot:"other",title:"### \u{1F4E6} \u5176\u4ED6\u53D8\u66F4"}],replacements:{"### \u91CD\u5927\u53D8\u66F4":"### \u{1F6A8} \u91CD\u5927\u53D8\u66F4","### \u65B0\u589E\u529F\u80FD":"### \u2728 \u65B0\u589E\u529F\u80FD","### \u8865\u4E01\u4FEE\u590D":"### \u{1F41B} \u95EE\u9898\u4FEE\u590D","- Updated dependencies":"- \u66F4\u65B0\u4F9D\u8D56"},deps:"- \u66F4\u65B0\u4F9D\u8D56",released:"\u53D1\u5E03"},en:{groups:[{slot:"breaking",title:"### \u{1F6A8} Breaking Changes"},{slot:"added",title:"### \u2728 Added"},{slot:"changed",title:"### \u{1F527} Changed"},{slot:"improved",title:"### \u26A1 Improved"},{slot:"fixed",title:"### \u{1F41B} Fixed"},{slot:"docs",title:"### \u{1F4DD} Docs"},{slot:"removed",title:"### \u{1F9F9} Removed"},{slot:"deps",title:"### \u{1F517} Dependency Updates"},{slot:"other",title:"### \u{1F4E6} Other"}],replacements:{},deps:"- Updated dependencies",released:"released"}},$a="zh";function wa(e,t,n){let r=e[t];return r?{lang:r}:{lang:e[n]??ft[n],unknown:t}}import{readdirSync as Qs}from"fs";import{join as Pn}from"path";function dt(e){let t=[],n=new Set(["node_modules",".git","dist","coverage"]),r=o=>{let s;try{s=Qs(o,{withFileTypes:!0})}catch{return}for(let i of s)if(i.isDirectory()){if(n.has(i.name))continue;r(Pn(o,i.name))}else i.name==="CHANGELOG.md"&&t.push(Pn(o,i.name))};return r(e),t}import{readFileSync as ei,readdirSync as _a,writeFileSync as ti}from"fs";var We=/^## \d+\.\d+\.\d+/,pt={"### Major Changes":"breaking","### Minor Changes":"added","### Patch Changes":"other","### Dependent Changes":"deps"},ni="- Updated dependencies",ri=Object.values(ft).map(e=>e.released);function oi(){return Ut()}function Kn(e,t,n,r=!0,o=!1){let s=ei(e,"utf8"),i=s.includes(`\r
68
+ `).length,message:"\u6362\u884C\u7B26\u6DF7\u7528\uFF08\u540C\u6587\u4EF6\u540C\u65F6\u542B CRLF \u4E0E LF\uFF09\uFF0C\u5EFA\u8BAE\u7EDF\u4E00\u4E3A LF"}),n}function Yn(e){let t=[],n=xe(e),r=Ds(e,"utf8");t.push(...Ws(n,r));let o=M(r),s=o.split(/\r?\n/),i=Re.exec(o)?.[0].split(/\r?\n/).length??0;if(!Re.test(o))return t.push({level:"error",file:n,line:1,message:"\u7F3A\u5C11 frontmatter"}),t;let c=ve(o);for(let a of Object.keys(c))Se.includes(a)||t.push({level:"warn",file:n,line:N(s,i,a),message:`frontmatter \u542B\u672A\u77E5\u5B57\u6BB5\u300C${a}\u300D\uFF0C\u672C\u5DE5\u5177\u4E0D\u8BFB\u53D6\uFF08\u5F52\u6863\u4E0E\u5F52\u4E00\u5316\u4E0D\u4F1A\u4FDD\u7559\uFF0C\u8BF7\u81EA\u884C\u7EF4\u62A4\uFF09`});if(c.status?de.includes(c.status)||t.push({level:"error",file:n,line:N(s,i,"status"),message:`status \u975E\u6CD5\u503C\u300C${c.status}\u300D\uFF0C\u5E94\u4E3A ${de.join(" / ")}`}):t.push({level:"error",file:n,line:N(s,i,"status"),message:"frontmatter \u7F3A\u5C11 status \u5B57\u6BB5"}),Z.includes(c.status)&&!c.completed&&t.push({level:"error",file:n,line:N(s,i,"completed"),message:`status \u4E3A\u300C${c.status}\u300D\u4F46\u7F3A\u5C11 completed \u5B8C\u6210\u65F6\u95F4`}),c.completed){let a=c.completed.trim(),d=N(s,i,"completed");if(!Hs.test(a))t.push({level:"warn",file:n,line:d,message:`completed\u300C${c.completed}\u300D\u683C\u5F0F\u975E\u6CD5\uFF0C\u5E94\u4E3A YYYY-MM-DD HH:mm`});else{let g=a.match(/^\d{4}-\d{1,2}-\d{1,2}/)?.[0]??a;Dn(g)?Ys.test(a)?ne(a)?t.push({level:"warn",file:n,line:d,message:`completed\u300C${c.completed}\u300D\u665A\u4E8E\u5F53\u524D\u7CFB\u7EDF\u65F6\u95F4 ${te} \u5C0F\u65F6\u4EE5\u4E0A\uFF0C\u7591\u4F3C\u65F6\u95F4\u6E90\u9519\u8BEF\uFF0C\u8BF7\u5F53\u573A\u53D6\u7CFB\u7EDF\u65F6\u95F4\u6838\u5B9E`}):/(?:[T\s]00:00(?::00)?)$/.test(a)&&t.push({level:"warn",file:n,line:d,message:`completed\u300C${c.completed}\u300D\u6070\u4E3A\u96F6\u70B9\u6574\uFF0C\u7591\u4F3C\u53EA\u586B\u4E86\u65E5\u671F\u88AB\u8865\u96F6\uFF0C\u8BF7\u6838\u5B9E\u5B9E\u9645\u5B8C\u6210\u65F6\u95F4`}):t.push({level:"warn",file:n,line:d,message:`completed\u300C${c.completed}\u300D\u5EFA\u8BAE\u8865\u5168\u4E3A\u5B8C\u6574\u65F6\u95F4 YYYY-MM-DD HH:mm`}):t.push({level:"warn",file:n,line:d,message:`completed\u300C${c.completed}\u300D\u65E5\u671F\u4E0D\u5B58\u5728\uFF0C\u8BF7\u6838\u5BF9`})}}c.owner||t.push({level:"warn",file:n,line:N(s,i,"owner"),message:"\u7F3A\u5C11 owner \u8D1F\u8D23\u4EBA\u5B57\u6BB5"}),c.created?/^\d{8}$/.test(c.created.trim())?Dn(c.created.trim())||t.push({level:"warn",file:n,line:N(s,i,"created"),message:`created\u300C${c.created}\u300D\u65E5\u671F\u4E0D\u5B58\u5728\uFF0C\u8BF7\u6838\u5BF9`}):t.push({level:"warn",file:n,line:N(s,i,"created"),message:`created\u300C${c.created}\u300D\u683C\u5F0F\u975E\u6CD5\uFF0C\u5E94\u4E3A YYYYMMDD`}):t.push({level:"warn",file:n,line:N(s,i,"created"),message:"\u7F3A\u5C11 created \u521B\u5EFA\u65E5\u671F\u5B57\u6BB5"}),c.updated&&c.created&&/^\d{8}$/.test(c.updated.trim())&&/^\d{8}$/.test(c.created.trim())&&c.updated.trim()<c.created.trim()&&t.push({level:"error",file:n,line:N(s,i,"updated"),message:`updated ${c.updated.trim()} \u65E9\u4E8E created ${c.created.trim()}\uFF0C\u65F6\u95F4\u7EBF\u77DB\u76FE`});let f=n.match(/^(\d{8})-/);if(Us.test(n)?c.created&&/^\d{8}$/.test(c.created.trim())&&f&&c.created.trim()!==f[1]&&t.push({level:"warn",file:n,message:`\u6587\u4EF6\u540D\u65E5\u671F ${f[1]} \u4E0E created ${c.created.trim()} \u4E0D\u4E00\u81F4`}):t.push({level:"warn",file:n,message:"\u6587\u4EF6\u540D\u4E0D\u7B26\u5408\u89C4\u8303 {YYYYMMDD}-{\u8D1F\u8D23\u4EBA}-{\u7B80\u8FF0}.md"}),c.scope){let a=c.scope.trim(),d=N(s,i,"scope");/[、,,]/.test(a)&&t.push({level:"warn",file:n,line:d,message:`scope\u300C${c.scope}\u300D\u542B\u987F\u53F7/\u9017\u53F7\u7591\u4F3C\u591A\u503C\u5206\u9694\uFF0C\u591A\u503C\u8BF7\u6539\u7528\u534A\u89D2\u52A0\u53F7\u8FDE\u63A5\uFF08\u5982 scope: web+server\uFF09`}),/[/\\]/.test(a)&&t.push({level:"warn",file:n,line:d,message:`scope\u300C${c.scope}\u300D\u542B\u8DEF\u5F84\u5206\u9694\u7B26\uFF0C\u591A\u503C\u8BF7\u6539\u7528\u534A\u89D2\u52A0\u53F7\u8FDE\u63A5\uFF08\u5982 scope: web+server\uFF09\uFF0C\u7AEF\u540D\u672C\u8EAB\u4E0D\u5F97\u542B\u5206\u9694\u7B26`}),/[()()]/.test(a)&&t.push({level:"warn",file:n,line:d,message:`scope\u300C${c.scope}\u300D\u542B\u62EC\u53F7\u7591\u4F3C\u6CE8\u91CA\u6027\u6587\u5B57\uFF0C\u8BF4\u660E\u8BF7\u79FB\u5165\u6B63\u6587`})}let p=gt(z(o)),h=Q("check")?.pendingMarkers!==!1?p.match(Nn):null;return h&&t.push({level:"warn",file:n,line:Mn(s,i,Nn),message:`\u6B63\u6587\u542B\u672A\u95ED\u5408\u5F85\u529E\u6807\u8BB0\u300C${h[0]}\u300D\uFF0C\u5EFA\u8BAE\u62C6\u5206\u4E3A\u72EC\u7ACB active \u4EFB\u52A1\u6216\u660E\u786E\u95ED\u73AF`}),Q("check")?.includeCheckbox!==!1&&js.test(p)&&t.push({level:"warn",file:n,line:Mn(s,i,Bs),message:"\u6B63\u6587\u542B\u672A\u52FE\u9009\u5F85\u529E\u9879\u300C- [ ]\u300D\uFF0C\u5EFA\u8BAE\u62C6\u5206\u4E3A\u72EC\u7ACB active \u4EFB\u52A1\u6216\u52FE\u9009\u5B8C\u6210"}),t}function Ps(e){let t=[];if(!Hn(e))return t;for(let n of On(e,{withFileTypes:!0}))if(!(n.name==="active"||n.name==="archive")){if(n.isFile())n.name.endsWith(".md")&&/^\d{8}-/.test(n.name)&&t.push(n.name);else if(n.isDirectory())for(let r of On(Ue(e,n.name)))r.endsWith(".md")&&/^\d{8}-/.test(r)&&t.push(`${n.name}/${r}`)}return t}function zs(e){let t=Lt(e);if(!t)return[];let n=I(e,t),r=xt(t,e);return r.state==="not-a-repo"||r.state==="outside-repo"?[]:r.state==="unavailable"?[{level:"warn",file:n,message:`\u672C\u5730\u914D\u7F6E\u6587\u4EF6\u5FFD\u7565\u5224\u5B9A\u4E0D\u53EF\u7528\uFF08${r.detail??"\u672A\u77E5\u539F\u56E0"}\uFF09\uFF0C\u8BF7\u6838\u5B9E git \u73AF\u5883`}]:r.state==="tracked"?[{level:"warn",file:n,message:`\u672C\u5730\u914D\u7F6E\u6587\u4EF6\u5DF2\u88AB\u5FFD\u7565\u89C4\u5219\u8986\u76D6\u4F46\u4ECD\u88AB git \u8DDF\u8E2A\uFF08\u7591\u4F3C\u5386\u53F2 git add -f\uFF09\uFF1A\u6267\u884C git rm --cached ${n} \u540E\u624D\u4F1A\u771F\u6B63\u4E0D\u5165\u5E93`}]:r.state==="ignored"?[]:[{level:"warn",file:n,message:"\u672C\u5730\u914D\u7F6E\u6587\u4EF6\u672A\u88AB gitignore \u8986\u76D6\uFF0C\u53EF\u80FD\u968F git \u63D0\u4EA4\u6CC4\u9732\u4E2A\u4EBA\u914D\u7F6E\uFF1A\u91CD\u8DD1 toolkit init \u53EF\u81EA\u52A8\u8865\u5199\u5FFD\u7565\u884C"}]}function Vs(e,t){let n=[],r=at(e);r.hasLegacy&&n.push({level:"warn",file:Ne,message:r.hasDir?"\u65E7\u5355\u6587\u4EF6\u89C4\u8303\u8F7D\u4F53\u5DF2\u88AB conventions/ \u76EE\u5F55\u5F62\u6001\u53D6\u4EE3\uFF0C\u5EFA\u8BAE\u6E05\u7406\uFF08\u4E24\u8005\u5E76\u5B58\u65F6\u4EE5\u76EE\u5F55\u5F62\u6001\u4E3A\u51C6\uFF09":"\u65E7\u5355\u6587\u4EF6\u89C4\u8303\u8F7D\u4F53\uFF0C\u5EFA\u8BAE\u8FC1\u79FB\u4E3A conventions/ \u76EE\u5F55\u5F62\u6001\uFF08index.md \u4F5C\u552F\u4E00\u5165\u53E3 + common.md / \u7AEF\u5206\u518C\u6309\u9700\u521B\u5EFA\uFF09"}),r.hasDir&&!r.hasIndex&&n.push({level:"warn",file:`conventions/${W}`,message:"\u89C4\u8303\u8F7D\u4F53\u7F3A index.md\uFF08\u552F\u4E00\u5165\u53E3\u4E0E\u552F\u4E00\u6743\u5A01\uFF09\uFF0C\u8BF7\u8865\u9F50"}),r.form==="abnormal"&&n.push({level:"warn",file:`conventions/${W}`,message:r.markerVersion===ye?`\u89C4\u8303\u8F7D\u4F53\u6807\u4E3A v${ye} \u4F46\u7F3A ${j} \u6216\u7D22\u5F15\u8868\u9996\u5217\u975E ${J}\uFF0C\u8BF7\u8865\u9F50\u6216\u6267\u884C toolkit conventions upgrade`:`\u89C4\u8303\u8F7D\u4F53\u5B58\u5728 ${j} \u4F46\u7D22\u5F15\u8868\u9996\u5217\u4ECD\u975E ${J}\uFF08\u5F62\u6001\u5F02\u5E38\uFF09\uFF0C\u8BF7\u4EBA\u5DE5\u786E\u8BA4`}),n.push(...Ks(e,r));let o=In(t),s=yt(t,o.map(l=>l.file)),i=[Fn(o.filter(l=>l.version!==ae)),_n(o.filter(l=>s.has(l.file)))];for(let l of i)l&&n.push({level:"warn",file:l.file,message:l.message});return n.push(...zs(t)),n}function Ks(e,t){return An(t).map(n=>({level:"warn",file:I(e,n.file),...n.line===void 0?{}:{line:n.line},message:n.message}))}var jn=6;function Gs(e){let t=[];for(let n of En(e)){let r=wn(v(n));if(r.length===0)continue;let o=r.slice(0,jn).join("\u3001");t.push({level:"warn",file:I(e,n),line:r[0],message:`\u8868\u683C\u5B58\u5728\u5217\u5BF9\u9F50\u586B\u5145\uFF08\u504F\u79BB\u7D27\u51D1\u5F62\u6001\uFF09${r.length} \u884C\uFF08\u7B2C ${o}${r.length>jn?" \u2026":""} \u884C\uFF09\uFF1A\u6267\u884C toolkit conventions format \u5F52\u4E00`})}return t}function Xs(e){if(at(e).form!=="v3")return[];let t=Ue(e,Oe,j);if(!Hn(t))return[];let n=ue(v(t).split(/\r?\n/),fe);if(!n)return[];let r=n.rowLines.filter((o,s)=>!Sn((n.rows[s]??[])[0]??""));return r.length===0?[]:[{level:"warn",file:I(e,t),line:(r[0]??0)+1,message:`\u6F14\u8FDB\u8BB0\u5F55\u6709 ${r.length} \u884C\u9996\u5217\u4E0D\u662F\u7A33\u5B9A ID\uFF08\u5E94\u8BB0\u884C\u5185\u4EE3\u7801\u5305\u88F9\u7684 C-<n>\uFF09\uFF1A\u8BF7\u4EBA\u5DE5\u6838\u5BF9\u8865\u5F55\uFF08\u5386\u53F2\u884C\u53EA\u8FFD\u52A0\uFF0C\u4E0D\u81EA\u52A8\u6539\u5199\uFF09`}]}function Js(e=".tasks",t=process.cwd()){let n=Ue(e,"active"),r=A(n),o=[];for(let c of r)o.push(...Yn(c)),Ms(c)===n&&o.push({level:"warn",file:xe(c),message:"active \u4EFB\u52A1\u5E94\u653E\u5165 {YYYYMM} \u6708\u4EFD\u5B50\u76EE\u5F55\uFF08\u5F53\u524D\u76F4\u653E active \u6839\u76EE\u5F55\uFF09"});for(let c of Ps(e))o.push({level:"warn",file:c,message:"\u4EFB\u52A1\u6587\u4EF6\u6E38\u79BB\u4E8E active/ \u4E4B\u5916\uFF0Ctasks/check/archive \u5747\u4E0D\u4F1A\u8BFB\u53D6\uFF0C\u5E94\u79FB\u5165 active/{YYYYMM}/ \u6708\u4EFD\u5B50\u76EE\u5F55"});o.push(...Vs(e,t)),o.push(...Gs(e)),o.push(...Xs(e));for(let c of ot(e))o.push({level:"warn",file:c.file,message:c.message});let s=new Map;for(let c of r){let f=xe(c,".md"),p=s.get(f);p?p.push(c):s.set(f,[c])}for(let[c,f]of s)f.length>1&&o.push({level:"warn",file:c,message:`\u5B58\u5728 ${f.length} \u4E2A\u540C\u540D\u4EFB\u52A1\u6587\u4EF6\uFF0C\u7591\u4F3C\u91CD\u590D\u5EFA\u6863`});o.push(...qs(r,e));let i=o.filter(c=>c.level==="error").length,l=o.length-i;return{issues:o,errorCount:i,warnCount:l}}var Bn=new Map;function Zs(e){let t=Ns(e),n=Bn.get(e);if(n&&n.mtimeMs===t.mtimeMs)return n.titles;let r=[],o=new Set;try{for(let s of F(v(e)).blocks)s.title&&!o.has(s.title)&&(o.add(s.title),r.push(s.title))}catch{}return Bn.set(e,{mtimeMs:t.mtimeMs,titles:r}),r}function qs(e,t){let n=[],r=new Set(e.map(u=>xe(u,".md"))),o=new Map,s=u=>u.trim().replace(/\.md$/,"").trim();for(let u of e){let a=xe(u,".md"),d=v(u),g=ve(d);o.set(a,Te(g.depends_on).map(s))}if(![...o.values()].some(u=>u.length>0))return n;let i=null,l=u=>{if(!i){i=new Map;for(let a of A(Ue(t,"archive")))for(let d of Zs(a))i.has(d)||i.set(d,I(t,a))}return i.get(u)};for(let[u,a]of o)for(let d of a)if(!r.has(d)){let g=l(d);n.push({level:"warn",file:u,message:g?`\u4F9D\u8D56\u7684\u4EFB\u52A1\u300C${d}\u300D\u4E0D\u5728 active \u4E2D\uFF08\u5DF2\u5F52\u6863\u4E8E ${g}\uFF0C\u65E0\u9700\u518D\u4F9D\u8D56\uFF09`:`\u4F9D\u8D56\u7684\u4EFB\u52A1\u300C${d}\u300D\u4E0D\u5728 active \u4E2D\uFF08\u53EF\u80FD\u5DF2\u5F52\u6863\u6216\u6587\u4EF6\u540D\u62FC\u5199\u9519\u8BEF\uFF09`})}let c=0,f=1,p=2,m=new Map,h=(u,a)=>{m.set(u,f);for(let d of o.get(u)??[]){if(!r.has(d))continue;let g=m.get(d)??c;if(g===f)return[...a,d];if(g===c){let k=h(d,[...a,d]);if(k)return k}}return m.set(u,p),null};for(let u of o.keys())if((m.get(u)??c)===c){let a=h(u,[u]);if(a){n.push({level:"warn",file:u,message:`depends_on \u5B58\u5728\u5FAA\u73AF\u4F9D\u8D56\uFF1A${a.join(" \u2192 ")}`});break}}return n}var Un={breaking:["\u91CD\u5927\uFF1A","Breaking:"],added:["\u65B0\u589E\uFF1A","Added:"],changed:["\u4FEE\u6539\uFF1A","Changed:"],improved:["\u4F18\u5316\uFF1A","Improved:"],fixed:["\u4FEE\u590D\uFF1A","Fixed:"],docs:["\u6587\u6863\uFF1A","Docs:"],removed:["\u6E05\u7406\uFF1A","Removed:"],deps:["\u4F9D\u8D56\uFF1A"],other:[]},Wn={"### \u{1F41B} \u8865\u4E01\u4FEE\u590D":"fixed"},ft={zh:{groups:[{slot:"breaking",title:"### \u{1F6A8} \u91CD\u5927\u53D8\u66F4"},{slot:"added",title:"### \u2728 \u65B0\u589E\u529F\u80FD"},{slot:"changed",title:"### \u{1F527} \u529F\u80FD\u8C03\u6574"},{slot:"improved",title:"### \u26A1 \u4F18\u5316\u6539\u8FDB"},{slot:"fixed",title:"### \u{1F41B} \u95EE\u9898\u4FEE\u590D"},{slot:"docs",title:"### \u{1F4DD} \u6587\u6863\u66F4\u65B0"},{slot:"removed",title:"### \u{1F9F9} \u6E05\u7406\u79FB\u9664"},{slot:"deps",title:"### \u{1F517} \u4F9D\u8D56\u53D8\u66F4"},{slot:"other",title:"### \u{1F4E6} \u5176\u4ED6\u53D8\u66F4"}],replacements:{"### \u91CD\u5927\u53D8\u66F4":"### \u{1F6A8} \u91CD\u5927\u53D8\u66F4","### \u65B0\u589E\u529F\u80FD":"### \u2728 \u65B0\u589E\u529F\u80FD","### \u8865\u4E01\u4FEE\u590D":"### \u{1F41B} \u95EE\u9898\u4FEE\u590D","- Updated dependencies":"- \u66F4\u65B0\u4F9D\u8D56"},deps:"- \u66F4\u65B0\u4F9D\u8D56",released:"\u53D1\u5E03"},en:{groups:[{slot:"breaking",title:"### \u{1F6A8} Breaking Changes"},{slot:"added",title:"### \u2728 Added"},{slot:"changed",title:"### \u{1F527} Changed"},{slot:"improved",title:"### \u26A1 Improved"},{slot:"fixed",title:"### \u{1F41B} Fixed"},{slot:"docs",title:"### \u{1F4DD} Docs"},{slot:"removed",title:"### \u{1F9F9} Removed"},{slot:"deps",title:"### \u{1F517} Dependency Updates"},{slot:"other",title:"### \u{1F4E6} Other"}],replacements:{},deps:"- Updated dependencies",released:"released"}},wa="zh";function Ea(e,t,n){let r=e[t];return r?{lang:r}:{lang:e[n]??ft[n],unknown:t}}import{readdirSync as Qs}from"fs";import{join as Pn}from"path";function dt(e){let t=[],n=new Set(["node_modules",".git","dist","coverage"]),r=o=>{let s;try{s=Qs(o,{withFileTypes:!0})}catch{return}for(let i of s)if(i.isDirectory()){if(n.has(i.name))continue;r(Pn(o,i.name))}else i.name==="CHANGELOG.md"&&t.push(Pn(o,i.name))};return r(e),t}import{readFileSync as ei,readdirSync as Oa,writeFileSync as ti}from"fs";var We=/^## \d+\.\d+\.\d+/,pt={"### Major Changes":"breaking","### Minor Changes":"added","### Patch Changes":"other","### Dependent Changes":"deps"},ni="- Updated dependencies",ri=Object.values(ft).map(e=>e.released);function oi(){return Ut()}function Kn(e,t,n,r=!0,o=!1){let s=ei(e,"utf8"),i=s.includes(`\r
69
69
  `)?`\r
70
70
  `:`
71
71
  `,l=s.replace(/\r\n/g,`
72
- `),c=fi(l),f=bi(c,n,o),p=zn(c),m=zn(f);m<p&&console.error(`\u26A0\uFE0F ${e}\uFF1A\u5F52\u7C7B\u540E\u6761\u76EE\u6570\u7531 ${p} \u964D\u4E3A ${m}\uFF0C\u7591\u4F3C\u4E22\u5931\u5185\u5BB9\uFF0C\u8BF7\u4EBA\u5DE5\u6838\u5BF9`);let h=f;for(let[T,C]of Object.entries(n.replacements))h=h.replaceAll(T,C);for(;h.includes(`${n.deps}
72
+ `),c=di(l),f=ki(c,n,o),p=zn(c),m=zn(f);m<p&&console.error(`\u26A0\uFE0F ${e}\uFF1A\u5F52\u7C7B\u540E\u6761\u76EE\u6570\u7531 ${p} \u964D\u4E3A ${m}\uFF0C\u7591\u4F3C\u4E22\u5931\u5185\u5BB9\uFF0C\u8BF7\u4EBA\u5DE5\u6838\u5BF9`);let h=f;for(let[T,C]of Object.entries(n.replacements))h=h.replaceAll(T,C);for(;h.includes(`${n.deps}
73
73
  ${n.deps}`);)h=h.replace(`${n.deps}
74
74
  ${n.deps}`,n.deps);for(;;){let T=h.replace(/^- (.+)\n- \1$/gm,"- $1");if(T===h)break;h=T}let u=h.split(`
75
75
  `),a=[],d=[n.released,...ri].map(ii),g=new RegExp(`^> \\d{4}-\\d{2}-\\d{2} (?:${d.join("|")})$`),k=0;for(;k<u.length;){let T=u[k]??"";if(We.test(T)){let C=k+1;for(;C<u.length&&(u[C]??"").trim()==="";)C++;let S=u[C]??"";if(S.startsWith("> ")&&g.test(S.trim())){a.push(T,"",S),k=C+1;continue}a.push(T,"",`> ${t} ${n.released}`,""),k=C;continue}a.push(T),k++}let $=a.join(`
76
76
  `),H=w($,r);return H!==l?(ti(e,H.replace(/\n/g,i),"utf8"),!0):!1}function si(e,t,n,r=!0,o=!1){let s=[];for(let i of dt(e))Kn(i,t,n,r,o)&&s.push(i);if(s.length===0)console.log("\u65E0 CHANGELOG \u9700\u8981\u66F4\u65B0");else for(let i of s)console.log(`changelog \u5DF2\u66F4\u65B0\uFF1A${i}`);return s}function zn(e){return e.split(`
77
- `).filter(t=>t.startsWith("- ")).length}function ii(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function ci(e){let t=[];for(let n of e)for(let r of n.prefixes??[])t.push([n.slot,r]);return t}function Gn(e,t){let n=e.slice(2);for(let[r,o]of Object.entries(Un)){let s=o.find(i=>n.startsWith(i));if(s)return[r,s]}for(let[r,o]of t)if(n.startsWith(o))return[r,o];return null}function li(e,t){return e.startsWith(ni)?"deps":Gn(e,t)?.[0]??null}function ai(e,t){let n=Gn(e[0]??"",t);if(!n)return e;let r=(e[0]??"").slice(2+n[1].length).trim();return r===""?e:[`- ${r}`,...e.slice(1)]}function ui(e){for(let t of e){if(t.startsWith("- "))return!1;if(t.trim()!=="")return!0}return!1}function fi(e){let t=e.replace(/\r\n/g,`
77
+ `).filter(t=>t.startsWith("- ")).length}function ii(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function ci(e){let t=[];for(let n of e)for(let r of n.prefixes??[])t.push([n.slot,r]);return t}function li(e,t){for(let[n,r]of Object.entries(Un)){let o=r.find(s=>e.startsWith(s));if(o)return[n,o]}for(let[n,r]of t)if(e.startsWith(r))return[n,r];return null}function Gn(e,t){return li(e.slice(2),t)}function ai(e,t){return e.startsWith(ni)?"deps":Gn(e,t)?.[0]??null}function ui(e,t){let n=Gn(e[0]??"",t);if(!n)return e;let r=(e[0]??"").slice(2+n[1].length).trim();return r===""?e:[`- ${r}`,...e.slice(1)]}function fi(e){for(let t of e){if(t.startsWith("- "))return!1;if(t.trim()!=="")return!0}return!1}function di(e){let t=e.replace(/\r\n/g,`
78
78
  `);t=t.replace(/^- [0-9a-f]{7}: /gm,"- ");let n=t.split(`
79
79
  `);for(let r=0;r<n.length;r++)if(/^- - .+/.test(n[r]??"")){n[r]=(n[r]??"").replace(/^- - /,"- ");for(let o=r+1;o<n.length&&/^ {2}- /.test(n[o]??"");o++)n[o]=(n[o]??"").slice(2)}return n.join(`
80
- `)}function di(e){let t=[],n=[],r=0;for(;r<e.length&&!We.test(e[r]??"");)t.push(e[r++]??"");for(;r<e.length;){let o=r,s=[];for(;r<e.length&&!(e[r]??"").startsWith("### ")&&!(s.length>0&&We.test(e[r]??""));)s.push(e[r++]??"");let i=[];for(;r<e.length&&(e[r]??"").startsWith("### ");){let l=e[r++]??"",c=[];for(;r<e.length&&!(e[r]??"").startsWith("### ")&&!We.test(e[r]??"");)c.push(e[r++]??"");for(;c.length>0&&(c[c.length-1]??"").trim()==="";)c.pop();i.push({title:l,body:c})}n.push({lines:e.slice(o,r),header:s,sections:i})}return{lead:t,blocks:n}}function pi(e,t,n){let r=e.sections.filter(a=>pt[a.title]!==void 0);if(!n&&r.length===0)return e.lines;let o=new Set(t.map(a=>a.slot)),s=ci(t),i=new Map(t.map(a=>[a.title,a.slot])),l=e.sections.map(a=>({section:a,slot:hi(a.title,i)})),c=l.filter(a=>mi(a,n));if(c.length===0)return e.lines;let f=new Set(c.map(a=>a.section));if(c.some(a=>ui(a.section.body)))return e.lines;let p=new Map;for(let a of c)for(let d of yi(a.section.body)){let g=li(d[0]??"",s)??a.slot,k=ai(d,s),$=p.get(g);$?$.push(k):p.set(g,[k])}for(let a of p.keys())if(!o.has(a))return e.lines;let m=[];for(let a of t){let d=p.get(a.slot);d&&m.push({title:a.title,body:ki(d)})}let h=[...e.header];for(;h.length>0&&(h[h.length-1]??"").trim()==="";)h.pop();let u=[...h,""];for(let a of m)u.push(...Vn(a));for(let a of l)f.has(a.section)||u.push(...Vn(gi(a.section)));return u}function mi(e,t){return e.slot===null?!1:t||pt[e.section.title]!==void 0}function gi(e){let t=[...e.body];for(;t.length>0&&(t[0]??"").trim()==="";)t.shift();for(;t.length>0&&(t[t.length-1]??"").trim()==="";)t.pop();return{title:e.title,body:t}}function hi(e,t){return t.get(e)??Wn[e]??pt[e]??null}function bi(e,t,n){let r=t.groups;if(!r||r.length===0)return e;let{lead:o,blocks:s}=di(e.split(`
81
- `)),i=[...o];for(let l of s)i.push(...pi(l,r,n));return i.join(`
82
- `)}function ki(e){let t=[];for(let n of e)t.push(...n);return t}function Vn(e){return[e.title,"",...e.body,""]}function yi(e){let t=[];for(let n of e){if(n.startsWith("- ")){t.push([n]);continue}t[t.length-1]?.push(n)}for(let n of t)for(;n.length>1&&(n[n.length-1]??"").trim()==="";)n.pop();return t}export{de as ALL_STATUSES,$a as DEFAULT_LANG,Z as DONE_STATUSES,Se as FRONTMATTER_KEYS,Wn as LEGACY_TITLE_SLOTS,Un as SLOT_PREFIXES,No as archiveTasks,qt as buildSummary,ot as checkArchive,dt as collectChangelogs,V as dateFromFileName,Qr as exportTasks,zo as fixArchive,Kn as formatChangelog,si as formatChangelogs,Q as getConfigSection,To as importTasks,ft as languages,Gt as listActiveTasks,Xt as listArchivedTasks,A as listTaskFiles,Mr as listTasks,dr as loadToolkitConfig,oi as localDate,E as normalizeCompleted,Zt as orderRows,Oo as parseArchiveTasks,It as parseBool,P as parseFrontmatter,en as printTaskBoard,jr as printTasks,Qe as queryTasks,w as redactText,hr as resetToolkitConfigCache,Ft as resolveEnabled,wa as resolveLang,z as stripFrontmatter,tn as toCSV,nn as toJSON,Yn as validateTaskFile,Js as validateTasks};
80
+ `)}function pi(e){let t=[],n=[],r=0;for(;r<e.length&&!We.test(e[r]??"");)t.push(e[r++]??"");for(;r<e.length;){let o=r,s=[];for(;r<e.length&&!(e[r]??"").startsWith("### ")&&!(s.length>0&&We.test(e[r]??""));)s.push(e[r++]??"");let i=[];for(;r<e.length&&(e[r]??"").startsWith("### ");){let l=e[r++]??"",c=[];for(;r<e.length&&!(e[r]??"").startsWith("### ")&&!We.test(e[r]??"");)c.push(e[r++]??"");for(;c.length>0&&(c[c.length-1]??"").trim()==="";)c.pop();i.push({title:l,body:c})}n.push({lines:e.slice(o,r),header:s,sections:i})}return{lead:t,blocks:n}}function mi(e,t,n){let r=e.sections.filter(a=>pt[a.title]!==void 0);if(!n&&r.length===0)return e.lines;let o=new Set(t.map(a=>a.slot)),s=ci(t),i=new Map(t.map(a=>[a.title,a.slot])),l=e.sections.map(a=>({section:a,slot:bi(a.title,i)})),c=l.filter(a=>gi(a,n));if(c.length===0)return e.lines;let f=new Set(c.map(a=>a.section));if(c.some(a=>fi(a.section.body)))return e.lines;let p=new Map;for(let a of c)for(let d of xi(a.section.body)){let g=ai(d[0]??"",s)??a.slot,k=ui(d,s),$=p.get(g);$?$.push(k):p.set(g,[k])}for(let a of p.keys())if(!o.has(a))return e.lines;let m=[];for(let a of t){let d=p.get(a.slot);d&&m.push({title:a.title,body:yi(d)})}let h=[...e.header];for(;h.length>0&&(h[h.length-1]??"").trim()==="";)h.pop();let u=[...h,""];for(let a of m)u.push(...Vn(a));for(let a of l)f.has(a.section)||u.push(...Vn(hi(a.section)));return u}function gi(e,t){return e.slot===null?!1:t||pt[e.section.title]!==void 0}function hi(e){let t=[...e.body];for(;t.length>0&&(t[0]??"").trim()==="";)t.shift();for(;t.length>0&&(t[t.length-1]??"").trim()==="";)t.pop();return{title:e.title,body:t}}function bi(e,t){return t.get(e)??Wn[e]??pt[e]??null}function ki(e,t,n){let r=t.groups;if(!r||r.length===0)return e;let{lead:o,blocks:s}=pi(e.split(`
81
+ `)),i=[...o];for(let l of s)i.push(...mi(l,r,n));return i.join(`
82
+ `)}function yi(e){let t=[];for(let n of e)t.push(...n);return t}function Vn(e){return[e.title,"",...e.body,""]}function xi(e){let t=[];for(let n of e){if(n.startsWith("- ")){t.push([n]);continue}t[t.length-1]?.push(n)}for(let n of t)for(;n.length>1&&(n[n.length-1]??"").trim()==="";)n.pop();return t}export{de as ALL_STATUSES,wa as DEFAULT_LANG,Z as DONE_STATUSES,Se as FRONTMATTER_KEYS,Wn as LEGACY_TITLE_SLOTS,Un as SLOT_PREFIXES,No as archiveTasks,qt as buildSummary,ot as checkArchive,dt as collectChangelogs,V as dateFromFileName,Qr as exportTasks,zo as fixArchive,Kn as formatChangelog,si as formatChangelogs,Q as getConfigSection,To as importTasks,ft as languages,Gt as listActiveTasks,Xt as listArchivedTasks,A as listTaskFiles,Mr as listTasks,dr as loadToolkitConfig,oi as localDate,E as normalizeCompleted,Zt as orderRows,Oo as parseArchiveTasks,It as parseBool,P as parseFrontmatter,en as printTaskBoard,jr as printTasks,Qe as queryTasks,w as redactText,hr as resetToolkitConfigCache,Ft as resolveEnabled,Ea as resolveLang,z as stripFrontmatter,tn as toCSV,nn as toJSON,Yn as validateTaskFile,Js as validateTasks};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fxri/toolkit",
3
- "version": "1.12.0",
3
+ "version": "1.12.2",
4
4
  "description": "专为多人 + AI 跨项目协作打造:任务管理 + 多语言 CHANGELOG。",
5
5
  "license": "MIT",
6
6
  "author": {
package/skills/README.md CHANGED
@@ -9,7 +9,7 @@
9
9
  | 技能 | 版本 | 用途 |
10
10
  | --- | --- | --- |
11
11
  | [fxri-plan-to-task](./fxri-plan-to-task/SKILL.md) | 1.8.7 | 方案落盘:建档评估(先查后写)→ 建档 → 校验 → 归档 → 任务级规范沉淀(能力终点);规范载体迁移与升级 |
12
- | [fxri-release-changelog](./fxri-release-changelog/SKILL.md) | 1.1.8 | changesets 发版与多语言 CHANGELOG 维护 |
12
+ | [fxri-release-changelog](./fxri-release-changelog/SKILL.md) | 1.1.9 | changesets 发版与多语言 CHANGELOG 维护 |
13
13
  | [fxri-session-recap](./fxri-session-recap/SKILL.md) | 1.4.1 | 会话收尾全量沉淀 + 规范沉淀 / 新会话三层恢复 / 历史任务时间批量修正 |
14
14
 
15
15
  版本号取自各 SKILL.md 的 frontmatter `metadata.version`(`toolkit skills status` / `skills install` 打印的真源版本),与正文首部版本声明双写一致。
@@ -3,14 +3,14 @@ name: fxri-release-changelog
3
3
  description: 基于 changesets 的发版与多语言 CHANGELOG 维护流程:创建变更集、消费发版、把分组标题与条目转为项目语言风格、清理变更集、打标签发布;无 changesets 的项目提供同格式手工模式。当用户表达发版或记录变更意图——含创建变更集、changeset、发版、version、CHANGELOG 格式化等说法及其口语近义表达(如发一版、出个版本、记一下这次改动、生成更新日志)时使用。⚠️ 注意区分:用户说「提交个版本 / 先提交一版 / commit」通常指 git 提交当前改动(走任务收尾后提交),**不是发版**。不用于日常 commit message 撰写、git 提交操作或与发版无关的文档修改。
4
4
  license: MIT
5
5
  metadata:
6
- version: "1.1.8"
6
+ version: "1.1.9"
7
7
  author: fxri
8
8
  source: https://github.com/fxri-net/toolkit
9
9
  ---
10
10
 
11
11
  # 发版与 CHANGELOG
12
12
 
13
- > 本技能版本 1.1.8(随 @fxri/toolkit 同批分发)。被问版本时即报此值——不读磁盘、不跑 CLI:报出的值就是本会话上下文里已加载内容的版本,可与 `toolkit skills status` 打印的磁盘基准值对照,不一致即说明会话上下文已过期,开新会话即可。
13
+ > 本技能版本 1.1.9(随 @fxri/toolkit 同批分发)。被问版本时即报此值——不读磁盘、不跑 CLI:报出的值就是本会话上下文里已加载内容的版本,可与 `toolkit skills status` 打印的磁盘基准值对照,不一致即说明会话上下文已过期,开新会话即可。
14
14
 
15
15
  ## 何时使用
16
16
 
@@ -31,7 +31,7 @@ metadata:
31
31
 
32
32
  ## changesets 流程
33
33
 
34
- 1. 记录变更:`npx changeset`(或项目包管理器等价脚本)——**变更描述一律以 `类型:` 前缀开头**(如 `新增:` / `修复:` / `优化:`),并按改动的**能力量级**选影响级别(破坏性→major、全新大功能/独立新能力→minor、存量能力上的修补与增量→patch,完整对照见 `references/changelog-format.md`)。写完可跑 `toolkit tasks check` 早期自查:它扫 `.changeset/` 下待发布变更集,逐文件报出缺前缀条目与条数(免得到发版、变更集源被消费删除后才由 changelog 侧兜底告警——那时已无从补写)
34
+ 1. 记录变更:`npx changeset`(或项目包管理器等价脚本)——**变更描述一律逐条以 `- 类型:描述` 书写**:既要 `类型:` 前缀(如 `新增:` / `修复:` / `优化:`)作归类信号,也要 `- ` 列表标记把每条独立成项(缺标记的裸行会被 changesets 并入相邻条目作缩进续行,整段塌成单一条目、只有首行归组剥前缀);并按改动的**能力量级**选影响级别(破坏性→major、全新大功能/独立新能力→minor、存量能力上的修补与增量→patch,完整对照见 `references/changelog-format.md`)。写完可跑 `toolkit tasks check` 早期自查:它扫 `.changeset/` 下待发布变更集,逐文件报出缺前缀条目与未加 `- ` 标记的裸行及条数(免得到发版、变更集源被消费删除后才由 changelog 侧兜底告警——那时已无从补写)
35
35
  2. 消费发版:`npx changeset version`——自动写版本号与 CHANGELOG
36
36
  3. 格式化:按 `references/changelog-format.md` 的语义分组规则归类条目、转换分组标题、润色为项目语言风格(中文示例:`### Patch Changes` 下的 `- 修复:xxx` → `### 🐛 问题修复` 下的 `- xxx`——归类后类型前缀被剥离,类型由分组标题承接);分组维度与 bump 维度正交,条目归组只看类型前缀
37
37
  4. 归一:润色后跑一次 `toolkit changelog --history format`——人工润色(含补写历史块明细)容易在条目之间留空行,该命令按「同组顶层条目逐行相邻」重排历史块;项目另有更新日志镜像页(如 `docs/changelog.md`)时再跑一次同步脚本,否则镜像一致性校验会失败
@@ -54,6 +54,7 @@ metadata:
54
54
  | 条目与仓库既有风格不一致 | 人工润色为项目语言与句式,勿保留机器直译 |
55
55
  | 变更集遗漏(发版后才发现功能未记录) | 补建变更集随下次发版;本次在发布说明中人工补充 |
56
56
  | `toolkit tasks check` 报「变更集条目缺类型前缀」 | 打开所列文件,给缺前缀的**顶层条目**按「类型:描述」补前缀(缩进续行随父条目迁属、无需加);补前缀只改分类信号,不改变 bump 级别 |
57
+ | `toolkit tasks check` 报「变更集条目未加「- 」列表标记」 | 打开所列文件,把裸行逐条改为 `- 类型:描述`(列 0 起首、无 `- ` 标记的行会被 changesets 并入相邻条目作续行,整段塌成单一条目、只有首行归组剥前缀);若已发版才发现,说明该版本块条目可能已挤在单组且前缀未剥离,按 references 的「人工事实更正」修 `CHANGELOG.md` 并重跑镜像页同步 |
57
58
  | 改动已发布却无归档记录(有提交、无任务档) | 先补归档(fxri-session-recap 模式一)再继续发布后续步骤;发版本身不补建档 |
58
59
  | 发版后历史块内出现多余空行(`自举一致性` 类零改动用例失败) | 跑 `toolkit changelog --history format` 归一(**必须带 `--history`**,默认模式不动历史块),再补跑一次镜像页同步脚本 |
59
60
  | 格式化时 stderr 报「归类后条目数由 N 降为 M,疑似丢失内容」 | 归类只应搬移条目,减少即疑似丢内容:核对该版本块是否含非纯条目分组(标题下先出现正文)或被保留分组;确认属正常去重可忽略,否则按 references 的归类规则修回 |
@@ -68,6 +69,6 @@ metadata:
68
69
  - `toolkit changelog format`:仅格式化既有 CHANGELOG
69
70
  - `toolkit changelog --history format`:连带追溯改写历史版本块(用户主动要求修正历史块时才加,默认不动)
70
71
  - `toolkit changelog --lang <语言> …`:切换输出语言(内置 zh / en,其余可配置扩展)
71
- - `toolkit tasks check`:扫 `.changeset/` 下待发布变更集并逐文件报出缺前缀条目(流程第 1 步的早期自查入口,归档前的 `tasks check` 即含此项)
72
+ - `toolkit tasks check`:扫 `.changeset/` 下待发布变更集并逐文件报出缺前缀条目与未加 `- ` 标记的裸行(流程第 1 步的早期自查入口,归档前的 `tasks check` 即含此项)
72
73
  - ⚠️ `changelog` 域开了选项透传,自有选项(`--lang` / `--history` / `--redact` / `--warn`)必须写在子命令**之前**:`toolkit changelog --history format` 生效,写成 `toolkit changelog format --history` 会被 changesets 静默忽略(表现为「无 CHANGELOG 需要更新」)
73
74
  - `toolkit skills install` / `toolkit skills status`:把本包 fxri-* 技能分发到目标技能目录(`--scope` 缺省按 CLI 安装位置自动判定全局面 / 项目面;项目面真源落 `<仓库根>/.agents/skills/`、其余候选目录落入口薄壳,随仓库入库后队友 clone 即用)/ 查看链接、副本与项目面现场(技能随包同源分发,与 CLI 同一发布批次;技能内容版本独立编号,`skills status` 会打印各技能真源版本)
@@ -20,7 +20,8 @@
20
20
 
21
21
  - 版本标题 `## {版本号}`;隔一行后接引用行 `> {YYYY-MM-DD} 发布`(标题与日期行之间保留一个空行)
22
22
  - 分组标题 = emoji + 组名,一行一组,按**语义分组顺序**输出——重大变更 → 新增功能 → 功能调整 → 优化改进 → 问题修复 → 文档更新 → 清理移除 → 依赖变更 → 其他变更;空组省略
23
- - 条目一行一条,项目语言句式(中文条目句末不加句号),与仓库既有风格一致
23
+ - 条目一行一条,每条**须以 `- ` 列表标记开头**(仅 `- ` 列表项被逐条收录);项目语言句式(中文条目句末不加句号),与仓库既有风格一致
24
+ - ⚠️ **务必逐条写成 `- 类型:描述`**:变更集正文里列 0 起首、无 `- ` 标记的裸行会被 changesets 并入相邻条目作缩进续行——整段正文塌成**单一条目**,只有首行参与前缀识别与归类,其余行既不归组也不剥前缀,最终全挤在首行所属的单组里(本仓 v1.12.0 块的成因)。`toolkit tasks check` 对裸行(前缀开头、连续 2 行起)报软告警,归档前据此自查
24
25
  - 同一分组内顶层条目**逐行相邻输出**(条目之间不留空行,缩进子项紧随父条目),分组之间与日期行前后各留一个空行——这是格式化的**不动点**:合规文件重复执行 `toolkit changelog format` 应零改动,`--history` 归一之后同理
25
26
  - ⚠️ 变更集条目以 `- ` 开头时,changesets 会写入 `- - 条目` 首行并把后续行缩进 2 空格(伪影);`toolkit changelog version/format` 会自动还原为顶层条目,手工模式需手动清理
26
27
  - 分组标题集合随版本演进而变化;**历史版本块保留当时口径,`toolkit changelog format` 不追溯改写**(只归类 changesets 本次新写入的英文源标题块)
@@ -46,7 +47,7 @@
46
47
 
47
48
  **无前缀条目的兜底规则**:按条目**所属源组标题**声明的影响级别归组——`### Major Changes` → `breaking`、`### Minor Changes` → `added`、`### Patch Changes` → `other`;不从版本号推导。
48
49
 
49
- **缺前缀的检测入口**:`toolkit tasks check` 扫 `.changeset/` 下待发布变更集(`.md` 且非 `README.md`)的**顶层条目**,逐文件报出缺前缀条目数与首条行号(归档前的早期自查);发版时 changelog 侧另有兜底告警。前缀识别取全局表与各配置语言 `prefixes` 的并集(自定义语言不误报),依赖源条目归 `deps` 不计缺前缀,缩进续行随父条目迁属、不参与识别。
50
+ **缺前缀与裸行的检测入口**:`toolkit tasks check` 扫 `.changeset/` 下待发布变更集(`.md` 且非 `README.md`),逐文件报出两类软告警——**缺类型前缀**的顶层条目数与首条行号、以及**未加 `- ` 列表标记**的裸行数与首条行号(后者取列 0 起首、以已识别前缀开头且连续 2 行起的行,阈值 2 避开正常正文误报);归档前的早期自查,发版时 changelog 侧另有兜底告警。前缀识别取全局表与各配置语言 `prefixes` 的并集(自定义语言不误报),依赖源条目归 `deps` 不计缺前缀,缩进续行随父条目迁属、不参与识别。
50
51
 
51
52
  **追溯历史块的兜底规则**(`--history`):历史块没有英文源组标题,改按**所属既有组标题**查槽位——先查当前语言组标题,再查历史组标题表(如 `### 🐛 补丁修复` → `fixed`);两处都识别不出则整组连同标题保留、不臆造归属。
52
53