@fxri/toolkit 1.10.4 → 1.11.0

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,17 +1,17 @@
1
- var K=["\u5F85\u529E","\u8FDB\u884C\u4E2D","\u5DF2\u5B8C\u6210","\u963B\u585E","\u5DF2\u653E\u5F03"],z=["\u5DF2\u5B8C\u6210","\u5DF2\u653E\u5F03"],te=["owner","status","created","updated","completed","depends_on","scope"];import{readFileSync as xt}from"fs";function O(e){return e.replace(/^\uFEFF/,"")}function L(e){return O(xt(e,"utf8"))}var ne=/^---\r?\n([\s\S]*?)\r?\n---/;function re(e){let t=O(e).match(ne);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 j(e){return re(e)}function N(e){let t=O(e),n=t.match(/^---\r?\n[\s\S]*?\r?\n---\r?\n?/);return n?t.slice(n[0].length):t}function oe(e){return e.split(/\r?\n/).find(t=>t.startsWith("# ")&&!t.startsWith("#!"))?.replace(/^#\s*/,"")??""}function Se(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 St,readdirSync as Te,statSync as Tt}from"fs";import{join as Re,basename as Rt,extname as At}from"path";function T(e,t){if(!St(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 Te(e)){let s=Re(e,o);if(Tt(s).isDirectory()){if(!r(o))continue;for(let i of Te(s))i.endsWith(".md")&&n.push(Re(s,i))}else o.endsWith(".md")&&n.push(s)}return n}function D(e){return Rt(e,At(e)).match(/^(\d{8})/)?.[1]??""}import{readFileSync as Zt}from"fs";import{join as qt,basename as Ze}from"path";import{existsSync as Ct}from"fs";import{join as Ae,dirname as Ft}from"path";import{homedir as Lt}from"os";var X,Et;function Ot(){return Et??Lt()}function Ce(e){if(!Ct(e))return null;try{let t=JSON.parse(L(e));return typeof t=="object"&&t!==null?t:null}catch{return null}}function It(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 Fe(){if(X!==void 0)return X;let e=Ce(Ae(Ot(),".toolkitrc.json")),t=null,n=process.cwd();for(;;){let r=Ce(Ae(n,".toolkitrc.json"));if(r){t=r;break}let o=Ft(n);if(o===n)break;n=o}return X=It(e,t),X}function U(e){let t=Fe();if(!t)return;let n=t[e];return typeof n=="object"&&n!==null?n:void 0}function Mt(){X=void 0}function Le(e,t){let n=e.trim().toLowerCase();return["1","true","on","yes"].includes(n)?!0:["0","false","off","no"].includes(n)?!1:t}function Ee(e,t,n,r){if(e!==void 0)return e;let o=process.env[t];return o!==void 0&&o!==""?Le(o,r):n!==void 0?n:r}var Bt=[{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 _t(){let e=U("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 jt(){let e=_t(),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,...Bt.filter(r=>!t.has(r.name))]}function C(e,t){if(!t||!e)return e;let n=e;for(let r of jt())n=n.replace(r.pattern,r.replacement);return n}import{readFileSync as ze}from"fs";import{join as Ue,basename as Ut}from"path";function Y(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}function x(e){let t=e.trim(),n=t.match(/^(\d{4})-(\d{1,2})-(\d{1,2})[T\s](\d{1,2}):(\d{2})(?::\d{2})?$/)??t.match(/^(\d{4})-(\d{1,2})-(\d{1,2})$/);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 Me(e){return e.match(/^\d{8}-(.+?)-/)?.[1]??""}function Nt(e,t){return`> \u8D1F\u8D23\u4EBA\uFF1A${Me(e)||"\u672A\u6807\u6CE8"}\u3000\u72B6\u6001\uFF1A\u5DF2\u5B8C\u6210\u3000\u8303\u56F4\uFF1A-\u3000\u5B8C\u6210\u65F6\u95F4\uFF1A${x(t)}`}function Be(e,t,n){let r=Y(n),o=r.owner||Me(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${x(t)}`}function R(e){e=O(e);let t=e.split(/\r?\n/).map(l=>l.replace(/\r$/,"")),n=[],r=[];for(let l of t)/^-{3,}$/.test(l.trim())?(n.push(r),r=[]):r.push(l);n.push(r);let o=[],s=Oe(n[0]??[]),i=s.findIndex(l=>/^## .+/.test(l));i>=0&&o.push(Ie(s.slice(i)));for(let l=1;l<n.length;l++){let d=Oe(n[l]??[]);d.length!==0&&(/^## .+/.test(d[0]??"")?o.push(Ie(d)):Dt(o,d.join(`
3
- `).trim()))}if(o.length===0)return{header:e,blocks:[]};let c=i>=0?i:s.length;return{header:s.slice(0,c).join(`
4
- `).trimEnd(),blocks:o}}function Oe(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 Ie(e){let t=(e[0]??"").replace(/^## /,"").trim(),n=null,r="",o=1;for(let s=1;s<e.length;s++){let i=e[s]??"",c=i.trim();if(c.startsWith("> ")&&c.includes("\u5B8C\u6210\u65F6\u95F4")){n=i;let l=c.match(/完成时间:(.+)$/);l&&(r=(l[1]??"").trim()),o=s+1;break}}return{title:t,metaLine:n,completed:r,body:e.slice(o).join(`
5
- `).trim()}}function Dt(e,t){let n=e[e.length-1];!n||!t||(n.body=n.body?`${n.body}
1
+ var ee=["\u5F85\u529E","\u8FDB\u884C\u4E2D","\u5DF2\u5B8C\u6210","\u963B\u585E","\u5DF2\u653E\u5F03"],H=["\u5DF2\u5B8C\u6210","\u5DF2\u653E\u5F03"],ce=["owner","status","created","updated","completed","depends_on","scope"];import{readFileSync as Jt}from"fs";function N(e){return e.replace(/^\uFEFF/,"")}function A(e){return N(Jt(e,"utf8"))}var le=/^---\r?\n([\s\S]*?)\r?\n---/;function ae(e){let t=N(e).match(le);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 Y(e){return ae(e)}function W(e){let t=N(e),n=t.match(/^---\r?\n[\s\S]*?\r?\n---\r?\n?/);return n?t.slice(n[0].length):t}function ue(e){return e.split(/\r?\n/).find(t=>t.startsWith("# ")&&!t.startsWith("#!"))?.replace(/^#\s*/,"")??""}function Ye(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 Zt,readdirSync as We,statSync as Xt}from"fs";import{join as ze,basename as qt,extname as Qt}from"path";function L(e,t){if(!Zt(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 We(e)){let s=ze(e,o);if(Xt(s).isDirectory()){if(!r(o))continue;for(let i of We(s))i.endsWith(".md")&&n.push(ze(s,i))}else o.endsWith(".md")&&n.push(s)}return n}function z(e){return qt(e,Qt(e)).match(/^(\d{8})/)?.[1]??""}import{readFileSync as Sn}from"fs";import{join as wn,basename as pt}from"path";import{existsSync as en}from"fs";import{join as Ue,dirname as tn}from"path";import{homedir as nn}from"os";var te,rn;function on(){return rn??nn()}var Se=new Set;function we(e,t){Se.has(e)||(Se.add(e),console.warn(`\u26A0\uFE0F \u5FFD\u7565\u914D\u7F6E\u9879\u300C${e}\u300D\uFF1A${t}\uFF0C\u5DF2\u6309\u672A\u914D\u7F6E\u5904\u7406`))}function Pe(e){if(!en(e))return null;try{let t=JSON.parse(A(e));return typeof t!="object"||t===null?(we(e,`\u9876\u5C42\u987B\u4E3A\u5BF9\u8C61\uFF08\u5B9E\u9645\uFF1A${t===null?"null":typeof t}\uFF09`),null):t}catch{return we(e,"JSON \u89E3\u6790\u5931\u8D25"),null}}function sn(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 He(){if(te!==void 0)return te;let e=Pe(Ue(on(),".toolkitrc.json")),t=null,n=process.cwd();for(;;){let r=Pe(Ue(n,".toolkitrc.json"));if(r){t=r;break}let o=tn(n);if(o===n)break;n=o}return te=sn(e,t),te}function V(e){let t=He();if(!t)return;let n=t[e];if(n!==void 0){if(typeof n=="object"&&n!==null)return n;we(e,`\u914D\u7F6E\u6BB5\u987B\u4E3A\u5BF9\u8C61\uFF08\u5B9E\u9645\uFF1A${typeof n}\uFF09`)}}function cn(){te=void 0,Se.clear()}function Ve(e,t){let n=e.trim().toLowerCase();return["1","true","on","yes"].includes(n)?!0:["0","false","off","no"].includes(n)?!1:t}function Ge(e,t,n,r){if(e!==void 0)return e;let o=process.env[t];return o!==void 0&&o!==""?Ve(o,r):n!==void 0?n:r}var ln=[{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 an(){let e=V("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 un(){let e=an(),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,...ln.filter(r=>!t.has(r.name))]}function S(e,t){if(!t||!e)return e;let n=e;for(let r of un())n=n.replace(r.pattern,r.replacement);return n}import{readFileSync as it}from"fs";import{join as ct,basename as kn}from"path";function U(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 Ze=/^(\d{4})-(\d{1,2})-(\d{1,2})[T\s](\d{1,2}):(\d{2})(?::\d{2})?$/,Xe=/^(\d{4})-(\d{1,2})-(\d{1,2})$/;function I(e){let t=e.trim();return Ze.test(t)||Xe.test(t)}function E(e){let t=e.trim(),n=t.match(Ze)??t.match(Xe);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 qe(e){return e.match(/^\d{8}-(.+?)-/)?.[1]??""}function fn(e,t){return`> \u8D1F\u8D23\u4EBA\uFF1A${qe(e)||"\u672A\u6807\u6CE8"}\u3000\u72B6\u6001\uFF1A\u5DF2\u5B8C\u6210\u3000\u8303\u56F4\uFF1A-\u3000\u5B8C\u6210\u65F6\u95F4\uFF1A${E(t)}`}function Qe(e,t,n){let r=U(n),o=r.owner||qe(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=N(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=Ke(n[0]??[]),i=s.findIndex(c=>/^## .+/.test(c));i>=0&&o.push(Je(s.slice(i)));for(let c=1;c<n.length;c++){let d=Ke(n[c]??[]);d.length!==0&&(/^## .+/.test(d[0]??"")?o.push(Je(d)):dn(o,d.join(`
3
+ `).trim()))}if(o.length===0)return{header:e,blocks:[]};let a=i>=0?i:s.length;return{header:s.slice(0,a).join(`
4
+ `).trimEnd(),blocks:o}}function Ke(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 Je(e){let t=(e[0]??"").replace(/^## /,"").trim(),n=null,r="",o=1;for(let s=1;s<e.length;s++){let i=e[s]??"",a=i.trim();if(a.startsWith("> ")&&a.includes("\u5B8C\u6210\u65F6\u95F4")){n=i;let c=a.match(/完成时间:(.+)$/);c&&(r=(c[1]??"").trim()),o=s+1;break}}return{title:t,metaLine:n,completed:r,body:e.slice(o).join(`
5
+ `).trim()}}function dn(e,t){let n=e[e.length-1];!n||!t||(n.body=n.body?`${n.body}
6
6
 
7
- ${t}`:t)}function _e(e){let t=[];for(let n of e)for(let r of n.body.matchAll(/^## (\d{8}-[^-]+-.+)$/gm))r[1]&&t.push(r[1]);return t}function me(e){let t=e.metaLine??(e.completed?Nt(e.title,e.completed):null);return t?`## ${e.title}
7
+ ${t}`:t)}function et(e){let t=[];for(let n of e)for(let r of n.body.matchAll(/^## (\d{8}-[^-]+-.+)$/gm))r[1]&&t.push(r[1]);return t}function Re(e){let t=e.metaLine??(I(e.completed)?fn(e.title,e.completed):null);return t?`## ${e.title}
8
8
 
9
9
  ${t}
10
10
 
11
11
  ${e.body}`:`## ${e.title}
12
12
 
13
- ${e.body}`}function Yt(e){let t=new Map;for(let s of e)t.set(s.title,s);let n=[...t.values()],r=n.filter(s=>x(s.completed)),o=n.filter(s=>!x(s.completed));return r.sort((s,i)=>x(i.completed).localeCompare(x(s.completed))),[...r,...o]}function W(e,t,n=`
14
- `){let r=Yt(t).map(me).join(`
13
+ ${e.body}`}function pn(e){let t=new Map;for(let s of e)t.set(s.title,s);let n=[...t.values()],r=n.filter(s=>I(s.completed)),o=n.filter(s=>!I(s.completed));return r.sort((s,i)=>E(i.completed).localeCompare(E(s.completed))),[...r,...o]}function P(e,t,n=`
14
+ `){let r=pn(t).map(Re).join(`
15
15
 
16
16
  ---
17
17
 
@@ -19,47 +19,56 @@ ${e.body}`}function Yt(e){let t=new Map;for(let s of e)t.set(s.title,s);let n=[.
19
19
 
20
20
  ${r}
21
21
  `:`${r}
22
- `).replace(/\n/g,n)}function se(e){if(Array.isArray(e))return e.filter(o=>typeof o=="string");if(typeof e!="string")return[];let t=e.trim();if(!t||t==="[]")return[];try{let o=JSON.parse(t);if(Array.isArray(o))return o.map(String).filter(Boolean)}catch{}let n=[...t.matchAll(/'([^']*)'|"([^"]*)"/g)].map(o=>o[1]??o[2]).filter(o=>!!o);if(n.length>0)return n;let r=t.match(/^\[(.*)\]$/)?.[1];return r!=null?r.split(/[,,]/).map(o=>o.trim().replace(/^['"]|['"]$/g,"")).filter(Boolean):[]}import{relative as Wt,sep as zt}from"path";function I(e,t){return Wt(e,t).split(zt).join("/")}var P=e=>String(e).padStart(2,"0");function je(e){let t=e.trim().match(/^(\d{4})[-/]?(\d{1,2})[-/]?(\d{1,2})/);if(!t)return null;let[,n,r,o]=t;return!n||!r||!o?null:{y:n,m:P(+r),d:P(+o)}}function y(e){let t=je(e);return t?`${t.y}-${t.m}-${t.d}`:""}function Ne(e){let t=je(e);return t?`${t.y}${t.m}${t.d}`:e.trim().replace(/[-/]/g,"")}function De(){let e=new Date;return`${e.getFullYear()}-${P(e.getMonth()+1)}-${P(e.getDate())}`}function ge(){let e=new Date;return`${e.getFullYear()}${P(e.getMonth()+1)}${P(e.getDate())}`}var M=["\u5F85\u529E","\u8FDB\u884C\u4E2D","\u963B\u585E","\u5DF2\u5B8C\u6210","\u5DF2\u653E\u5F03","\u672A\u6807\u6CE8"];function Pe(e=".tasks"){let t=Ue(e,"active");return T(t).map(n=>{let r=ze(n,"utf8"),o=j(r);return{view:"\u5F85\u5B8C\u6210",title:oe(r)||Ut(n,".md"),status:o.status||"\u672A\u6807\u6CE8",owner:o.owner||"\u672A\u6807\u6CE8",scope:o.scope||"-",created:o.created||D(n),updated:o.updated||"",completed:o.completed||"",depends:se(o.depends_on),file:I(e,n)}})}function Pt(e){let t=Y(e);return{owner:t.owner||"\u672A\u6807\u6CE8",status:t.status||"\u5DF2\u5B8C\u6210",scope:t.scope||"-"}}function Ve(e=".tasks",t){let n=Ue(e,"archive"),r=[];for(let o of T(n,t)){let s=ze(o,"utf8");for(let i of R(s).blocks){let c=Pt(i.metaLine);r.push({view:"\u5DF2\u5F52\u6863",title:i.title,status:c.status,owner:c.owner,scope:c.scope,created:i.title.match(/^(\d{8})-/)?.[1]??"",updated:"",completed:i.completed,depends:[],file:I(e,o)})}}return r}function Vt(e){return e.split("+").map(t=>t.trim()).filter(Boolean)}function Gt(e,t){if(e===void 0)return!0;let n=Array.isArray(e)?e:[e],r=Vt(t);return n.some(o=>r.includes(o))}function Ye(e,t){return e===void 0?!0:Array.isArray(e)?e.includes(t):e===t}function Jt(e,t){if(!Ye(t.owner,e.owner)||!Gt(t.scope,e.scope)||!Ye(t.status,e.status))return!1;if(t.date||t.since||t.until){let n=t.date?y(t.date):y(t.since||""),r=t.date?y(t.date):y(t.until||"");if(!n&&!r||!(e.view==="\u5DF2\u5F52\u6863"?[y(e.completed)]:[y(e.created),y(e.updated)].filter(Boolean)).some(i=>i&&(!n||i>=n)&&(!r||i<=r)))return!1}return!0}function Ge(e){return e.view==="\u5DF2\u5F52\u6863"?y(e.completed):y(e.created||e.updated||e.completed)}function We(e){let t=e.view==="\u5DF2\u5F52\u6863"?e.completed:e.completed||e.updated||e.created,n=y(t);if(!n)return"";let r=t.match(/(\d{1,2}):(\d{2})/),o=r?.[1]??"",s=r?.[2]??"";return n.replace(/-/g,"")+(r?`${o.padStart(2,"0")}${s}`:"0000")}function Je(e){let t=new Map(M.map((n,r)=>[n,r]));return[...e].sort((n,r)=>{let o=t.get(n.status)??M.length,s=t.get(r.status)??M.length;return o!==s?o-s:We(r).localeCompare(We(n))})}function He(e){let t={},n={};for(let r of e)t[r.status]=(t[r.status]||0)+1,n[r.owner]=(n[r.owner]||0)+1;return{total:e.length,byStatus:t,byOwner:n}}function Ht(e){if(!e.date&&!e.since&&!e.until)return;let t=e.date?y(e.date):y(e.since||""),n=e.date?y(e.date):y(e.until||"");if(!t&&!n)return;let r=o=>o.slice(0,7).replace("-","");return{since:t?r(t):void 0,until:n?r(n):void 0}}function he(e=".tasks",t="active",n={}){let r=[];(t==="active"||t==="all")&&r.push(...Pe(e)),(t==="archived"||t==="all")&&r.push(...Ve(e,Ht(n))),r=r.filter(s=>Jt(s,n));let o=Je(r);return{rows:o,summary:He(o)}}function Kt(e=".tasks"){let t=qt(e,"active");return T(t).map(n=>{let r=Zt(n,"utf8"),o=j(r),s=oe(r)||Ze(n,".md");return{file:n,name:Ze(n,".md"),date:D(n),title:s,frontmatter:o,body:N(r).trim()}})}function Xt(e=".tasks",t=!0){qe(e,"active",{},t)}function qe(e=".tasks",t="active",n={},r=!0){let{rows:o,summary:s}=he(e,t,n);Qt(o,s,t,n,r)}function Qt(e,t,n="active",r={},o=!0){if(console.log(`\u4EFB\u52A1\u603B\u89C8\uFF08${n==="active"?"\u5F85\u5B8C\u6210":n==="archived"?"\u5DF2\u5F52\u6863":"\u5F85\u5B8C\u6210 + \u5DF2\u5F52\u6863"}\uFF09\uFF1A
23
- `),e.length===0){let l=Object.values(r).some(d=>Array.isArray(d)?d.length>0:!!d);console.log(l?"\u65E0\u5339\u914D\u4EFB\u52A1":n==="archived"?"\u5F53\u524D\u65E0\u5DF2\u5F52\u6863\u4EFB\u52A1":n==="all"?"\u5F53\u524D\u65E0\u4EFB\u52A1":"\u5F53\u524D\u65E0\u5F85\u5B8C\u6210\u4EFB\u52A1");return}let i={};for(let l of e)(i[l.status]||=[]).push(l);let c=Object.keys(i).filter(l=>!M.includes(l)).sort();for(let l of[...M,...c]){let d=i[l]||[];if(d.length!==0){console.log(`\u3010${l}\u3011${d.length} \u9879`);for(let p of d){let g=n==="all"?`${p.view} `:"";console.log(` ${Ge(p)} ${g}${(p.owner||"\u672A\u6807\u6CE8").padEnd(8)} ${C(p.title,o)}\uFF08${p.scope||"-"}\uFF09`)}console.log("")}}en(t)}function en(e){let t=M.filter(o=>e.byStatus[o]),n=Object.keys(e.byStatus).filter(o=>!M.includes(o)),r=Object.keys(e.byOwner).sort((o,s)=>(e.byOwner[s]??0)-(e.byOwner[o]??0));if(console.log(`\u5171 ${e.total} \u4E2A\u4EFB\u52A1`),t.length>0||n.length>0){let o=t.map(s=>`${s} ${e.byStatus[s]}`);n.length>0&&o.push(`\u5176\u4ED6 ${n.reduce((s,i)=>s+(e.byStatus[i]??0),0)}`),console.log(`\u6309\u72B6\u6001\uFF1A${o.join("\u3000")}`)}r.length>0&&console.log(`\u6309\u8D1F\u8D23\u4EBA\uFF1A${r.map(o=>`${o} ${e.byOwner[o]}`).join("\u3000")}`)}import{mkdirSync as sn}from"fs";import{dirname as cn}from"path";import{createRequire as an}from"module";import{writeFileSync as tn,renameSync as nn}from"fs";import{dirname as rn,join as on}from"path";function F(e,t){let n=on(rn(e),`.tmp-${process.pid}-${Date.now().toString(36)}`);tn(n,t),nn(n,e)}var ln=an(import.meta.url);function ke(e){sn(cn(e),{recursive:!0})}var ie=[{label:"\u89C6\u56FE",value:e=>e.view==="\u5DF2\u5F52\u6863"?"\u5DF2\u5F52\u6863":"\u5F85\u5B8C\u6210"},{label:"\u4EFB\u52A1\u540D",value:e=>e.title},{label:"\u72B6\u6001",value:e=>e.status},{label:"\u8D1F\u8D23\u4EBA",value:e=>e.owner},{label:"\u8303\u56F4",value:e=>e.scope},{label:"\u521B\u5EFA\u65E5\u671F",value:e=>e.created?y(e.created):""},{label:"\u66F4\u65B0\u65E5\u671F",value:e=>e.updated?y(e.updated):""},{label:"\u5B8C\u6210\u65F6\u95F4",value:e=>e.completed},{label:"\u4F9D\u8D56",value:e=>e.depends.join(", ")},{label:"\u6765\u6E90\u6587\u4EF6",value:e=>e.file}],un=[{label:"\u4EFB\u52A1\u540D",value:e=>e.title},{label:"\u72B6\u6001",value:e=>e.status},{label:"\u8D1F\u8D23\u4EBA",value:e=>e.owner},{label:"\u8303\u56F4",value:e=>e.scope},{label:"\u521B\u5EFA\u65E5\u671F",value:e=>e.created?y(e.created):""},{label:"\u66F4\u65B0\u65E5\u671F",value:e=>e.updated?y(e.updated):""},{label:"\u5B8C\u6210\u65F6\u95F4",value:e=>e.completed},{label:"\u4F9D\u8D56",value:e=>e.depends.join(", ")},{label:"\u6765\u6E90\u6587\u4EF6",value:e=>e.file}],dn=[{label:"\u4EFB\u52A1\u540D",value:e=>e.title},{label:"\u72B6\u6001",value:e=>e.status},{label:"\u8D1F\u8D23\u4EBA",value:e=>e.owner},{label:"\u8303\u56F4",value:e=>e.scope},{label:"\u5B8C\u6210\u65F6\u95F4",value:e=>e.completed},{label:"\u6765\u6E90\u6587\u4EF6",value:e=>e.file}];function fn(e){return/[",\n\r]/.test(e)?`"${e.replace(/"/g,'""')}"`:e}function Ke(e,t=!0){let n=ie.map(o=>o.label).join(","),r=e.map(o=>ie.map(s=>{let i=s.label==="\u4EFB\u52A1\u540D"?C(s.value(o),t):s.value(o);return fn(i)}).join(",")).join(`\r
22
+ `).replace(/\n/g,n)}function mn(e){return e.trim().replace(/^['"]|['"]$/g,"")}function tt(e){return e.split(/[,,]/).map(mn).filter(Boolean)}function fe(e){if(Array.isArray(e))return e.filter(r=>typeof r=="string");if(typeof e!="string")return[];let t=e.trim();if(!t||t==="[]")return[];try{let r=JSON.parse(t);if(Array.isArray(r))return r.map(String).filter(Boolean);if(typeof r!="string")return console.warn(`\u26A0\uFE0F depends_on\u300C${t}\u300D\u4E0D\u662F\u5217\u8868\u5F62\u6001\uFF0C\u5DF2\u5FFD\u7565`),[]}catch{}let n=[...t.matchAll(/'([^']*)'|"([^"]*)"/g)].map(r=>r[1]??r[2]).filter(r=>!!r);if(n.length>0)return n;if(t.startsWith("[")||t.endsWith("]")){let r=t.match(/^\[(.*)\]$/)?.[1];return r==null&&console.warn(`\u26A0\uFE0F depends_on\u300C${t}\u300D\u4E2D\u62EC\u53F7\u4E0D\u5B8C\u6574\uFF0C\u5DF2\u6309\u88F8\u5217\u8868\u89E3\u6790`),tt((r??t).replace(/^\[/,"").replace(/\]$/,""))}return tt(t)}import{relative as gn,sep as hn}from"path";function M(e,t){return gn(e,t).split(hn).join("/")}var G=e=>String(e).padStart(2,"0");function nt(e){let t=e.trim().match(/^(\d{4})[-/]?(\d{1,2})[-/]?(\d{1,2})/);if(!t)return null;let[,n,r,o]=t;return!n||!r||!o?null:{y:n,m:G(+r),d:G(+o)}}function $(e){let t=nt(e);return t?`${t.y}-${t.m}-${t.d}`:""}function Te(e){let t=nt(e);return t?`${t.y}${t.m}${t.d}`:e.trim().replace(/[-/]/g,"")}function rt(){let e=new Date;return`${e.getFullYear()}-${G(e.getMonth()+1)}-${G(e.getDate())}`}function Ee(){let e=new Date;return`${e.getFullYear()}${G(e.getMonth()+1)}${G(e.getDate())}`}var j=["\u5F85\u529E","\u8FDB\u884C\u4E2D","\u963B\u585E","\u5DF2\u5B8C\u6210","\u5DF2\u653E\u5F03","\u672A\u6807\u6CE8"];function lt(e=".tasks"){let t=ct(e,"active");return L(t).map(n=>{let r=it(n,"utf8"),o=Y(r);return{view:"\u5F85\u5B8C\u6210",title:ue(r)||kn(n,".md"),status:o.status||"\u672A\u6807\u6CE8",owner:o.owner||"\u672A\u6807\u6CE8",scope:o.scope||"-",created:o.created||z(n),updated:o.updated||"",completed:o.completed||"",depends:fe(o.depends_on),file:M(e,n)}})}function bn(e){let t=U(e);return{owner:t.owner||"\u672A\u6807\u6CE8",status:t.status||"\u5DF2\u5B8C\u6210",scope:t.scope||"-"}}function at(e=".tasks",t){let n=ct(e,"archive"),r=[];for(let o of L(n,t)){let s=it(o,"utf8");for(let i of F(s).blocks){let a=bn(i.metaLine);r.push({view:"\u5DF2\u5F52\u6863",title:i.title,status:a.status,owner:a.owner,scope:a.scope,created:i.title.match(/^(\d{8})-/)?.[1]??"",updated:"",completed:i.completed,depends:[],file:M(e,o)})}}return r}function yn(e){return e.split("+").map(t=>t.trim()).filter(Boolean)}function xn(e,t){if(e===void 0)return!0;let n=Array.isArray(e)?e:[e],r=yn(t);return n.some(o=>r.includes(o))}function ot(e,t){return e===void 0?!0:Array.isArray(e)?e.includes(t):e===t}function vn(e,t){if(!ot(t.owner,e.owner)||!xn(t.scope,e.scope)||!ot(t.status,e.status))return!1;if(t.date||t.since||t.until){let n=t.date?$(t.date):$(t.since||""),r=t.date?$(t.date):$(t.until||"");if(!n&&!r||!(e.view==="\u5DF2\u5F52\u6863"?[$(e.completed)]:[$(e.created),$(e.updated)].filter(Boolean)).some(i=>i&&(!n||i>=n)&&(!r||i<=r)))return!1}return!0}function ut(e){return e.view==="\u5DF2\u5F52\u6863"?$(e.completed):$(e.created||e.updated||e.completed)}function st(e){let t=e.view==="\u5DF2\u5F52\u6863"?e.completed:e.completed||e.updated||e.created,n=$(t);if(!n)return"";let r=t.match(/(\d{1,2}):(\d{2})/),o=r?.[1]??"",s=r?.[2]??"";return n.replace(/-/g,"")+(r?`${o.padStart(2,"0")}${s}`:"0000")}function ft(e){let t=new Map(j.map((n,r)=>[n,r]));return[...e].sort((n,r)=>{let o=t.get(n.status)??j.length,s=t.get(r.status)??j.length;return o!==s?o-s:st(r).localeCompare(st(n))})}function dt(e){let t={},n={};for(let r of e)t[r.status]=(t[r.status]||0)+1,n[r.owner]=(n[r.owner]||0)+1;return{total:e.length,byStatus:t,byOwner:n}}function $n(e){if(!e.date&&!e.since&&!e.until)return;let t=e.date?$(e.date):$(e.since||""),n=e.date?$(e.date):$(e.until||"");if(!t&&!n)return;let r=o=>o.slice(0,7).replace("-","");return{since:t?r(t):void 0,until:n?r(n):void 0}}function Ae(e=".tasks",t="active",n={}){let r=[];(t==="active"||t==="all")&&r.push(...lt(e)),(t==="archived"||t==="all")&&r.push(...at(e,$n(n))),r=r.filter(s=>vn(s,n));let o=ft(r);return{rows:o,summary:dt(o)}}function Rn(e=".tasks"){let t=wn(e,"active");return L(t).map(n=>{let r=Sn(n,"utf8"),o=Y(r),s=ue(r)||pt(n,".md");return{file:n,name:pt(n,".md"),date:z(n),title:s,frontmatter:o,body:W(r).trim()}})}function Tn(e=".tasks",t=!0){mt(e,"active",{},t)}function mt(e=".tasks",t="active",n={},r=!0){let{rows:o,summary:s}=Ae(e,t,n);En(o,s,t,n,r)}function En(e,t,n="active",r={},o=!0){if(console.log(`\u4EFB\u52A1\u603B\u89C8\uFF08${n==="active"?"\u5F85\u5B8C\u6210":n==="archived"?"\u5DF2\u5F52\u6863":"\u5F85\u5B8C\u6210 + \u5DF2\u5F52\u6863"}\uFF09\uFF1A
23
+ `),e.length===0){let c=Object.values(r).some(d=>Array.isArray(d)?d.length>0:!!d);console.log(c?"\u65E0\u5339\u914D\u4EFB\u52A1":n==="archived"?"\u5F53\u524D\u65E0\u5DF2\u5F52\u6863\u4EFB\u52A1":n==="all"?"\u5F53\u524D\u65E0\u4EFB\u52A1":"\u5F53\u524D\u65E0\u5F85\u5B8C\u6210\u4EFB\u52A1");return}let i={};for(let c of e)(i[c.status]||=[]).push(c);let a=Object.keys(i).filter(c=>!j.includes(c)).sort();for(let c of[...j,...a]){let d=i[c]||[];if(d.length!==0){console.log(`\u3010${c}\u3011${d.length} \u9879`);for(let p of d){let m=n==="all"?`${p.view} `:"";console.log(` ${ut(p)} ${m}${(p.owner||"\u672A\u6807\u6CE8").padEnd(8)} ${S(p.title,o)}\uFF08${p.scope||"-"}\uFF09`)}console.log("")}}An(t)}function An(e){let t=j.filter(o=>e.byStatus[o]),n=Object.keys(e.byStatus).filter(o=>!j.includes(o)),r=Object.keys(e.byOwner).sort((o,s)=>(e.byOwner[s]??0)-(e.byOwner[o]??0));if(console.log(`\u5171 ${e.total} \u4E2A\u4EFB\u52A1`),t.length>0||n.length>0){let o=t.map(s=>`${s} ${e.byStatus[s]}`);n.length>0&&o.push(`\u5176\u4ED6 ${n.reduce((s,i)=>s+(e.byStatus[i]??0),0)}`),console.log(`\u6309\u72B6\u6001\uFF1A${o.join("\u3000")}`)}r.length>0&&console.log(`\u6309\u8D1F\u8D23\u4EBA\uFF1A${r.map(o=>`${o} ${e.byOwner[o]}`).join("\u3000")}`)}import{mkdirSync as _n}from"fs";import{dirname as On}from"path";import{createRequire as Nn}from"module";import{writeFileSync as Ln,renameSync as In}from"fs";import{dirname as Cn,join as Fn}from"path";function _(e,t){let n=Fn(Cn(e),`.tmp-${process.pid}-${Date.now().toString(36)}`);Ln(n,t),In(n,e)}var Mn=Nn(import.meta.url);function Le(e){_n(On(e),{recursive:!0})}var de=[{label:"\u89C6\u56FE",value:e=>e.view==="\u5DF2\u5F52\u6863"?"\u5DF2\u5F52\u6863":"\u5F85\u5B8C\u6210"},{label:"\u4EFB\u52A1\u540D",value:e=>e.title},{label:"\u72B6\u6001",value:e=>e.status},{label:"\u8D1F\u8D23\u4EBA",value:e=>e.owner},{label:"\u8303\u56F4",value:e=>e.scope},{label:"\u521B\u5EFA\u65E5\u671F",value:e=>e.created?$(e.created):""},{label:"\u66F4\u65B0\u65E5\u671F",value:e=>e.updated?$(e.updated):""},{label:"\u5B8C\u6210\u65F6\u95F4",value:e=>e.completed},{label:"\u4F9D\u8D56",value:e=>e.depends.join(", ")},{label:"\u6765\u6E90\u6587\u4EF6",value:e=>e.file}],Bn=[{label:"\u4EFB\u52A1\u540D",value:e=>e.title},{label:"\u72B6\u6001",value:e=>e.status},{label:"\u8D1F\u8D23\u4EBA",value:e=>e.owner},{label:"\u8303\u56F4",value:e=>e.scope},{label:"\u521B\u5EFA\u65E5\u671F",value:e=>e.created?$(e.created):""},{label:"\u66F4\u65B0\u65E5\u671F",value:e=>e.updated?$(e.updated):""},{label:"\u5B8C\u6210\u65F6\u95F4",value:e=>e.completed},{label:"\u4F9D\u8D56",value:e=>e.depends.join(", ")},{label:"\u6765\u6E90\u6587\u4EF6",value:e=>e.file}],jn=[{label:"\u4EFB\u52A1\u540D",value:e=>e.title},{label:"\u72B6\u6001",value:e=>e.status},{label:"\u8D1F\u8D23\u4EBA",value:e=>e.owner},{label:"\u8303\u56F4",value:e=>e.scope},{label:"\u5B8C\u6210\u65F6\u95F4",value:e=>e.completed},{label:"\u6765\u6E90\u6587\u4EF6",value:e=>e.file}];function Dn(e){return/[",\n\r]/.test(e)?`"${e.replace(/"/g,'""')}"`:e}function gt(e,t=!0){let n=de.map(o=>o.label).join(","),r=e.map(o=>de.map(s=>Dn(S(s.value(o),t))).join(",")).join(`\r
24
24
  `);return`\uFEFF${n}${r?`\r
25
- ${r}`:""}`}function Xe(e,t,n=!0){let r=e.map(o=>({view:o.view==="\u5DF2\u5F52\u6863"?"archived":"active",title:C(o.title,n),status:o.status,owner:o.owner,scope:o.scope,created:o.created,updated:o.updated,completed:o.completed,depends:o.depends,file:o.file}));return JSON.stringify({schemaVersion:1,summary:t,items:r},null,2)}async function pn(e,t,n=!0){let r=ln("exceljs"),o=new r.Workbook,s=e.filter(a=>a.view==="\u5F85\u5B8C\u6210"),i=e.filter(a=>a.view==="\u5DF2\u5F52\u6863"),c=(a,u,f)=>{a.columns=u.map(h=>({header:h.label,key:h.label,width:Math.max(h.label.length+4,14)})),a.getRow(1).font={bold:!0};for(let h of f)a.addRow(u.map(b=>b.label==="\u4EFB\u52A1\u540D"?C(b.value(h),n):b.value(h)))},l=o.addWorksheet("\u5F85\u5B8C\u6210");c(l,un,s);let d=o.addWorksheet("\u5DF2\u5F52\u6863");c(d,dn,i);let p=o.addWorksheet("\u6C47\u603B");p.columns=[{header:"\u7C7B\u522B",key:"k",width:10},{header:"\u6570\u503C",key:"v",width:12}];let g=(a,u)=>{p.addRow([a,""]).font={bold:!0};for(let[f,h]of Object.entries(u).sort((b,S)=>S[1]-b[1]))p.addRow([f,h])};p.addRow(["\u4EFB\u52A1\u603B\u6570",t.total]).font={bold:!0},g("\u6309\u72B6\u6001",t.byStatus),g("\u6309\u8D1F\u8D23\u4EBA",t.byOwner),p.addRow([]);let m=p.addRow(ie.map(a=>a.label));m.font={bold:!0};for(let a of e)p.addRow(ie.map(u=>u.label==="\u4EFB\u52A1\u540D"?C(u.value(a),n):u.value(a)));return Buffer.from(await o.xlsx.writeBuffer())}async function mn(e,t,n,r=!0){let o=e.split(".").pop()?.toLowerCase();if(o==="csv")ke(e),F(e,Ke(t,r));else if(o==="json")ke(e),F(e,Xe(t,n,r));else if(o==="xlsx")ke(e),F(e,await pn(t,n,r));else throw new Error(`\u4E0D\u652F\u6301\u7684\u5BFC\u51FA\u683C\u5F0F\u300C${o||""}\u300D\uFF0C\u4EC5\u652F\u6301 .csv / .xlsx / .json`)}import{existsSync as ve,mkdirSync as nt}from"fs";import{join as J}from"path";import{createRequire as Tn}from"module";import{openSync as gn,writeSync as hn,readFileSync as kn,unlinkSync as Qe,statSync as bn,closeSync as vn}from"fs";import{join as et}from"path";var wn=600*1e3,yn=1800*1e3,be={pid:process.pid,startedAt:Math.round(Date.now()-process.uptime()*1e3)};function tt(e){try{let t=JSON.parse(kn(e,"utf8"));if(typeof t.pid=="number"&&typeof t.startedAt=="number")return{pid:t.pid,startedAt:t.startedAt}}catch{}return null}function $n(e){try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}function xn(e){try{return Date.now()-bn(e).mtimeMs}catch{return Number.POSITIVE_INFINITY}}function Sn(e,t,n){let r=xn(e);return r>yn?!0:t?!$n(t.pid):r>n}function V(e,t=wn){let n=et(e,".archive.lock");for(let r=0;r<2;r++)try{let o=gn(n,"wx");return hn(o,JSON.stringify(be)),o}catch{if(!Sn(n,tt(n),t))return null;try{Qe(n)}catch{}}return null}function G(e,t){vn(t);let n=et(e,".archive.lock"),r=tt(n);if(!(!r||r.pid!==be.pid||r.startedAt!==be.startedAt))try{Qe(n)}catch{}}var Rn=Tn(import.meta.url),rt={\u4EFB\u52A1\u540D:"title",\u6807\u9898:"title",\u4E8B\u9879:"title",\u4EFB\u52A1:"title",\u4EFB\u52A1\u6807\u9898:"title",\u4E8B\u9879\u540D\u79F0:"title",title:"title",name:"title",task:"title",subject:"title",summary:"title",\u72B6\u6001:"status",status:"status",state:"status",\u8D1F\u8D23\u4EBA:"owner",\u7ECF\u529E\u4EBA:"owner",\u5904\u7406\u4EBA:"owner",\u6267\u884C\u4EBA:"owner",\u6307\u6D3E\u7ED9:"owner",owner:"owner",assignee:"owner",handler:"owner",\u8303\u56F4:"scope",\u9879\u76EE:"scope",\u6A21\u5757:"scope",scope:"scope",project:"scope",\u521B\u5EFA\u65E5\u671F:"created",\u521B\u5EFA\u65F6\u95F4:"created",created:"created",created_at:"created",createdat:"created",\u66F4\u65B0\u65E5\u671F:"updated",\u66F4\u65B0\u65F6\u95F4:"updated",updated:"updated",updated_at:"updated",updatedat:"updated",\u5B8C\u6210\u65F6\u95F4:"completed",\u5B8C\u6210\u65E5\u671F:"completed",\u622A\u6B62\u65F6\u95F4:"completed",\u622A\u6B62\u65E5\u671F:"completed",\u7ED3\u675F\u65F6\u95F4:"completed",completed:"completed",done:"completed",finished:"completed",completedat:"completed",due:"completed",\u4F9D\u8D56:"depends",\u4F9D\u8D56\u4EFB\u52A1:"depends",depends:"depends",depends_on:"depends",dependency:"depends",dependencies:"depends",\u5907\u6CE8:"body",\u63CF\u8FF0:"body",\u6B63\u6587:"body",\u8BF4\u660E:"body",description:"body",body:"body",note:"body",notes:"body",\u89C6\u56FE:"",\u6765\u6E90\u6587\u4EF6:"",\u6587\u4EF6:"",view:"",file:"",path:""},An=new Set(["title","depends","body"]),Cn=/^[A-Za-z][A-Za-z0-9_.-]*$/;function ot(e,t={}){let n=new Map;return e.forEach((r,o)=>{let s=String(r??"").trim().toLowerCase();if(!s)return;let i;t[s]!==void 0&&(i=t[s]),i===void 0&&(i=rt[s]),i!==""&&i&&!n.has(i)&&n.set(i,o)}),n}function Fn(e){let t=[],n=O(e).replace(/\r\n/g,`
25
+ ${r}`:""}`}function ht(e,t,n=!0){let r=e.map(o=>({view:o.view==="\u5DF2\u5F52\u6863"?"archived":"active",title:S(o.title,n),status:S(o.status,n),owner:S(o.owner,n),scope:S(o.scope,n),created:S(o.created,n),updated:S(o.updated,n),completed:S(o.completed,n),depends:o.depends.map(s=>S(s,n)),file:S(o.file,n)}));return JSON.stringify({schemaVersion:1,summary:t,items:r},null,2)}async function Yn(e,t,n=!0){let r=Mn("exceljs"),o=new r.Workbook,s=e.filter(u=>u.view==="\u5F85\u5B8C\u6210"),i=e.filter(u=>u.view==="\u5DF2\u5F52\u6863"),a=(u,l,f)=>{u.columns=l.map(g=>({header:g.label,key:g.label,width:Math.max(g.label.length+4,14)})),u.getRow(1).font={bold:!0};for(let g of f)u.addRow(l.map(b=>S(b.value(g),n)))},c=o.addWorksheet("\u5F85\u5B8C\u6210");a(c,Bn,s);let d=o.addWorksheet("\u5DF2\u5F52\u6863");a(d,jn,i);let p=o.addWorksheet("\u6C47\u603B");p.columns=[{header:"\u7C7B\u522B",key:"k",width:10},{header:"\u6570\u503C",key:"v",width:12}];let m=(u,l)=>{p.addRow([u,""]).font={bold:!0};for(let[f,g]of Object.entries(l).sort((b,w)=>w[1]-b[1]))p.addRow([f,g])};p.addRow(["\u4EFB\u52A1\u603B\u6570",t.total]).font={bold:!0},m("\u6309\u72B6\u6001",t.byStatus),m("\u6309\u8D1F\u8D23\u4EBA",t.byOwner),p.addRow([]);let h=p.addRow(de.map(u=>u.label));h.font={bold:!0};for(let u of e)p.addRow(de.map(l=>S(l.value(u),n)));return Buffer.from(await o.xlsx.writeBuffer())}async function Wn(e,t,n,r=!0){let o=e.split(".").pop()?.toLowerCase();if(o==="csv")Le(e),_(e,gt(t,r));else if(o==="json")Le(e),_(e,ht(t,n,r));else if(o==="xlsx")Le(e),_(e,await Yn(t,n,r));else throw new Error(`\u4E0D\u652F\u6301\u7684\u5BFC\u51FA\u683C\u5F0F\u300C${o||""}\u300D\uFF0C\u4EC5\u652F\u6301 .csv / .xlsx / .json`)}import{existsSync as Ce,mkdirSync as xt}from"fs";import{join as Z}from"path";import{createRequire as qn}from"module";import{openSync as zn,writeSync as Un,readFileSync as Pn,unlinkSync as kt,statSync as Hn,closeSync as Vn}from"fs";import{join as bt}from"path";var Gn=600*1e3,Kn=1800*1e3,Ie={pid:process.pid,startedAt:Math.round(Date.now()-process.uptime()*1e3)};function yt(e){try{let t=JSON.parse(Pn(e,"utf8"));if(typeof t.pid=="number"&&typeof t.startedAt=="number")return{pid:t.pid,startedAt:t.startedAt}}catch{}return null}function Jn(e){try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}function Zn(e){try{return Date.now()-Hn(e).mtimeMs}catch{return Number.POSITIVE_INFINITY}}function Xn(e,t,n){let r=Zn(e);return r>Kn?!0:t?!Jn(t.pid):r>n}function K(e,t=Gn){let n=bt(e,".archive.lock");for(let r=0;r<2;r++)try{let o=zn(n,"wx");return Un(o,JSON.stringify(Ie)),o}catch{if(!Xn(n,yt(n),t))return null;try{kt(n)}catch{}}return null}function J(e,t){Vn(t);let n=bt(e,".archive.lock"),r=yt(n);if(!(!r||r.pid!==Ie.pid||r.startedAt!==Ie.startedAt))try{kt(n)}catch{}}var Qn=qn(import.meta.url),vt={\u4EFB\u52A1\u540D:"title",\u6807\u9898:"title",\u4E8B\u9879:"title",\u4EFB\u52A1:"title",\u4EFB\u52A1\u6807\u9898:"title",\u4E8B\u9879\u540D\u79F0:"title",title:"title",name:"title",task:"title",subject:"title",summary:"title",\u72B6\u6001:"status",status:"status",state:"status",\u8D1F\u8D23\u4EBA:"owner",\u7ECF\u529E\u4EBA:"owner",\u5904\u7406\u4EBA:"owner",\u6267\u884C\u4EBA:"owner",\u6307\u6D3E\u7ED9:"owner",owner:"owner",assignee:"owner",handler:"owner",\u8303\u56F4:"scope",\u9879\u76EE:"scope",\u6A21\u5757:"scope",scope:"scope",project:"scope",\u521B\u5EFA\u65E5\u671F:"created",\u521B\u5EFA\u65F6\u95F4:"created",created:"created",created_at:"created",createdat:"created",\u66F4\u65B0\u65E5\u671F:"updated",\u66F4\u65B0\u65F6\u95F4:"updated",updated:"updated",updated_at:"updated",updatedat:"updated",\u5B8C\u6210\u65F6\u95F4:"completed",\u5B8C\u6210\u65E5\u671F:"completed",\u622A\u6B62\u65F6\u95F4:"completed",\u622A\u6B62\u65E5\u671F:"completed",\u7ED3\u675F\u65F6\u95F4:"completed",completed:"completed",done:"completed",finished:"completed",completedat:"completed",due:"completed",\u4F9D\u8D56:"depends",\u4F9D\u8D56\u4EFB\u52A1:"depends",depends:"depends",depends_on:"depends",dependency:"depends",dependencies:"depends",\u5907\u6CE8:"body",\u63CF\u8FF0:"body",\u6B63\u6587:"body",\u8BF4\u660E:"body",description:"body",body:"body",note:"body",notes:"body",\u89C6\u56FE:"",\u6765\u6E90\u6587\u4EF6:"",\u6587\u4EF6:"",view:"",file:"",path:""},er=new Set(["title","depends","body"]),tr=/^[A-Za-z][A-Za-z0-9_.-]*$/;function $t(e,t={}){let n=new Map;return e.forEach((r,o)=>{let s=String(r??"").trim().toLowerCase();if(!s)return;let i;t[s]!==void 0&&(i=t[s]),i===void 0&&(i=vt[s]),i!==""&&i&&!n.has(i)&&n.set(i,o)}),n}function nr(e){let t=[],n=N(e).replace(/\r\n/g,`
26
26
  `).replace(/\r/g,`
27
- `),r=[],o="",s=!1;for(let i=0;i<n.length;i++){let c=n[i];s?c==='"'?n[i+1]==='"'?(o+='"',i++):s=!1:o+=c:c==='"'?s=!0:c===","?(r.push(o),o=""):c===`
28
- `?(r.push(o),t.push(r),r=[],o=""):o+=c}return(o!==""||r.length>0)&&(r.push(o),t.push(r)),t.filter(i=>i.length>1||(i[0]||"").trim()!=="")}function Ln(e,t){let n=Fn(e);if(n.length===0)return[];let r=ot(n[0]??[],t),o=[];for(let s=1;s<n.length;s++){let i={},c=n[s]??[];for(let[l,d]of r)i[l]=(c[d]??"").trim();(i.title||Object.keys(i).length>0)&&o.push(i)}return o}function En(e,t){let n=[];for(let r=1;r<=(e.rowCount||0);r++){let o=e.getRow(r),s=[];for(let c=1;c<=(o.cellCount||0);c++)s.push(o.getCell(c).text??"");if(s.every(c=>c.trim()===""))continue;let i=ot(s,t);if(i.has("title")){for(let c=r+1;c<=e.rowCount;c++){let l=e.getRow(c),d={},p=!0;for(let[g,m]of i){let a=(l.getCell(m+1).text??"").trim();a&&(p=!1),d[g]=a}!p&&(d.title||Object.keys(d).length>0)&&n.push(d)}break}}return n}async function On(e,t){let n=Rn("exceljs"),r=new n.Workbook;await r.xlsx.readFile(e);let o=[];for(let s of r.worksheets)s.name.includes("\u6C47\u603B")||o.push(...En(s,t));return o}function In(e,t){let n=JSON.parse(e);if(!Array.isArray(n)&&typeof n.schemaVersion=="number"){let s=n.schemaVersion;s>1&&console.warn(`\u26A0\uFE0F \u5BFC\u5165 JSON \u6765\u81EA\u66F4\u9AD8 schema \u7248\u672C v${s}\uFF0C\u5B57\u6BB5\u89E3\u6790\u53EF\u80FD\u4E0D\u5B8C\u6574`)}let r=Array.isArray(n)?n:Array.isArray(n.items)?n.items:[],o=[];for(let s of r){if(!s||typeof s!="object")continue;let i={};for(let[c,l]of Object.entries(s)){let d=c.trim().toLowerCase(),p;t[d]!==void 0&&(p=t[d]),p===void 0&&(p=rt[d]),p&&(Array.isArray(l)?i[p]=l.join(","):l!=null&&(i[p]=String(l)))}o.push(i)}return o}function Mn(e){let t=e.trim().replace(/[\\/:*?"<>|]/g," ").replace(/\s+/g," "),n=t.length>24;return{slug:t.slice(0,24).trim().replace(/\s+/g,"-")||"\u4EFB\u52A1",truncated:n}}function Bn(e,t,n){let r={};for(let[o,s]of Object.entries(e)){if(An.has(o)||te.includes(o))continue;let i=(s??"").trim();if(i){if(!Cn.test(o)){n.push(`\u4EFB\u52A1\u300C${t}\u300D\u81EA\u5B9A\u4E49\u5217\u540D\u300C${o}\u300D\u975E\u6CD5\uFF08\u987B\u4EE5\u5B57\u6BCD\u5F00\u5934\uFF0C\u4EC5\u542B\u5B57\u6BCD/\u6570\u5B57/\u4E0B\u5212\u7EBF/\u4E2D\u5212\u7EBF/\u70B9\uFF09\uFF0C\u672A\u5199\u5165 frontmatter`);continue}if(/[\r\n]/.test(i)){n.push(`\u4EFB\u52A1\u300C${t}\u300D\u81EA\u5B9A\u4E49\u5217\u300C${o}\u300D\u503C\u542B\u6362\u884C\uFF0C\u672A\u5199\u5165 frontmatter`);continue}r[o]=i}}return r}function _n(e,t,n){let r=(e.title||"").trim();if(!r)return n.push(`\u8DF3\u8FC7\u4E00\u884C\uFF1A\u7F3A\u5C11\u4EFB\u52A1\u540D\uFF08${Object.entries(e).slice(0,3).map(([d,p])=>`${d}=${p}`).join(" ")}\uFF09`),{ok:!1};let o=(e.status||"").trim()||"\u5F85\u529E";K.includes(o)||(n.push(`\u4EFB\u52A1\u300C${r}\u300D\u72B6\u6001\u300C${o}\u300D\u975E\u6CD5\uFF0C\u5DF2\u5F52\u4E3A\u5F85\u529E`),o="\u5F85\u529E");let s=e.completed?.trim()?x(e.completed.trim()):"";s&&!z.includes(o)&&(n.push(`\u4EFB\u52A1\u300C${r}\u300D\u5E26\u5B8C\u6210\u65F6\u95F4\u4F46\u72B6\u6001\u4E3A\u300C${o}\u300D\uFF0C\u5DF2\u7F6E\u4E3A\u5DF2\u5B8C\u6210`),o="\u5DF2\u5B8C\u6210");let i=(e.owner||"").trim()||t.owner||"";i=i.replace(/\s+/g,"");let c=(e.scope||"").trim()||t.scope||"-";e.scope&&/[、,,()()]/.test(e.scope.trim())&&n.push(`\u4EFB\u52A1\u300C${r}\u300D\u8303\u56F4\u300C${e.scope.trim()}\u300D\u542B\u987F\u53F7/\u9017\u53F7/\u62EC\u53F7\uFF0C\u5C06\u6309\u5355\u503C\u5199\u5165\uFF1B\u591A\u503C\u8BF7\u7528\u534A\u89D2\u52A0\u53F7\uFF08\u5982 toolkit+lxgl-web\uFF09\uFF0C\u62EC\u53F7\u6CE8\u91CA\u8BF7\u79FB\u5165\u6B63\u6587`);let l=(e.depends||"").split(/[,,;;]/).map(d=>d.trim()).filter(Boolean);return{ok:!0,t:{title:r,status:o,owner:i||"\u672A\u6807\u6CE8",scope:c,created:Ne(e.created||""),completed:s,depends:l,body:e.body?.trim()||"",extra:Bn(e,r,n)}}}function jn(e,t,n,r){let o=t.created||ge(),s=J(e,"active",o.slice(0,6)),{slug:i,truncated:c}=Mn(t.title);c&&r.push(`\u4EFB\u52A1\u300C${t.title}\u300D\u6807\u9898\u8FC7\u957F\uFF0C\u6587\u4EF6\u540D\u5DF2\u622A\u65AD`);let l=`${o}-${t.owner}-${i}`,d=1,p=J(s,`${l}.md`);for(;ve(p);)p=J(s,`${l}-${d++}.md`);let m=["---",`owner: ${t.owner}`,`status: ${t.status}`,`created: ${o}`,`updated: ${ge()}`,`completed: ${t.completed?`'${t.completed}'`:"''"}`,`depends_on: ${JSON.stringify(t.depends)}`,`scope: ${t.scope}`,...Object.entries(t.extra).map(([a,u])=>`${a}: ${u}`),"---","",`# ${t.title}`].join(`
27
+ `),r=[],o="",s=!1;for(let i=0;i<n.length;i++){let a=n[i];s?a==='"'?n[i+1]==='"'?(o+='"',i++):s=!1:o+=a:a==='"'?s=!0:a===","?(r.push(o),o=""):a===`
28
+ `?(r.push(o),t.push(r),r=[],o=""):o+=a}return(o!==""||r.length>0)&&(r.push(o),t.push(r)),t.filter(i=>i.length>1||(i[0]||"").trim()!=="")}function rr(e,t){let n=nr(e);if(n.length===0)return[];let r=$t(n[0]??[],t),o=[];for(let s=1;s<n.length;s++){let i={},a=n[s]??[];for(let[c,d]of r)i[c]=(a[d]??"").trim();(i.title||Object.keys(i).length>0)&&o.push(i)}return o}function or(e,t){let n=[];for(let r=1;r<=(e.rowCount||0);r++){let o=e.getRow(r),s=[];for(let a=1;a<=(o.cellCount||0);a++)s.push(o.getCell(a).text??"");if(s.every(a=>a.trim()===""))continue;let i=$t(s,t);if(i.has("title")){for(let a=r+1;a<=e.rowCount;a++){let c=e.getRow(a),d={},p=!0;for(let[m,h]of i){let u=(c.getCell(h+1).text??"").trim();u&&(p=!1),d[m]=u}!p&&(d.title||Object.keys(d).length>0)&&n.push(d)}break}}return n}async function sr(e,t){let n=Qn("exceljs"),r=new n.Workbook;await r.xlsx.readFile(e);let o=[];for(let s of r.worksheets)s.name.includes("\u6C47\u603B")||o.push(...or(s,t));return o}function ir(e,t){let n=JSON.parse(e);if(!Array.isArray(n)&&typeof n.schemaVersion=="number"){let s=n.schemaVersion;s>1&&console.warn(`\u26A0\uFE0F \u5BFC\u5165 JSON \u6765\u81EA\u66F4\u9AD8 schema \u7248\u672C v${s}\uFF0C\u5B57\u6BB5\u89E3\u6790\u53EF\u80FD\u4E0D\u5B8C\u6574`)}let r=Array.isArray(n)?n:Array.isArray(n.items)?n.items:[],o=[];for(let s of r){if(!s||typeof s!="object")continue;let i={};for(let[a,c]of Object.entries(s)){let d=a.trim().toLowerCase(),p;t[d]!==void 0&&(p=t[d]),p===void 0&&(p=vt[d]),p&&(Array.isArray(c)?i[p]=c.join(","):c!=null&&(i[p]=String(c)))}o.push(i)}return o}function cr(e){let t=e.trim().replace(/[\\/:*?"<>|]/g," ").replace(/\s+/g," "),n=t.length>24;return{slug:t.slice(0,24).trim().replace(/\s+/g,"-")||"\u4EFB\u52A1",truncated:n}}function lr(e,t,n){let r={};for(let[o,s]of Object.entries(e)){if(er.has(o)||ce.includes(o))continue;let i=(s??"").trim();if(i){if(!tr.test(o)){n.push(`\u4EFB\u52A1\u300C${t}\u300D\u81EA\u5B9A\u4E49\u5217\u540D\u300C${o}\u300D\u975E\u6CD5\uFF08\u987B\u4EE5\u5B57\u6BCD\u5F00\u5934\uFF0C\u4EC5\u542B\u5B57\u6BCD/\u6570\u5B57/\u4E0B\u5212\u7EBF/\u4E2D\u5212\u7EBF/\u70B9\uFF09\uFF0C\u672A\u5199\u5165 frontmatter`);continue}if(/[\r\n]/.test(i)){n.push(`\u4EFB\u52A1\u300C${t}\u300D\u81EA\u5B9A\u4E49\u5217\u300C${o}\u300D\u503C\u542B\u6362\u884C\uFF0C\u672A\u5199\u5165 frontmatter`);continue}r[o]=i}}return r}function ar(e,t,n){let r=(e.title||"").trim();if(!r)return n.push(`\u8DF3\u8FC7\u4E00\u884C\uFF1A\u7F3A\u5C11\u4EFB\u52A1\u540D\uFF08${Object.entries(e).slice(0,3).map(([d,p])=>`${d}=${p}`).join(" ")}\uFF09`),{ok:!1};let o=(e.status||"").trim()||"\u5F85\u529E";ee.includes(o)||(n.push(`\u4EFB\u52A1\u300C${r}\u300D\u72B6\u6001\u300C${o}\u300D\u975E\u6CD5\uFF0C\u5DF2\u5F52\u4E3A\u5F85\u529E`),o="\u5F85\u529E");let s=e.completed?.trim()?E(e.completed.trim()):"";s&&!H.includes(o)&&(n.push(`\u4EFB\u52A1\u300C${r}\u300D\u5E26\u5B8C\u6210\u65F6\u95F4\u4F46\u72B6\u6001\u4E3A\u300C${o}\u300D\uFF0C\u5DF2\u7F6E\u4E3A\u5DF2\u5B8C\u6210`),o="\u5DF2\u5B8C\u6210");let i=(e.owner||"").trim()||t.owner||"";i=i.replace(/\s+/g,"");let a=(e.scope||"").trim()||t.scope||"-";e.scope&&/[、,,()()]/.test(e.scope.trim())&&n.push(`\u4EFB\u52A1\u300C${r}\u300D\u8303\u56F4\u300C${e.scope.trim()}\u300D\u542B\u987F\u53F7/\u9017\u53F7/\u62EC\u53F7\uFF0C\u5C06\u6309\u5355\u503C\u5199\u5165\uFF1B\u591A\u503C\u8BF7\u7528\u534A\u89D2\u52A0\u53F7\uFF08\u5982 toolkit+lxgl-web\uFF09\uFF0C\u62EC\u53F7\u6CE8\u91CA\u8BF7\u79FB\u5165\u6B63\u6587`);let c=(e.depends||"").split(/[,,;;]/).map(d=>d.trim()).filter(Boolean);return{ok:!0,t:{title:r,status:o,owner:i||"\u672A\u6807\u6CE8",scope:a,created:Te(e.created||""),updated:Te(e.updated||""),completed:s,depends:c,body:e.body?.trim()||"",extra:lr(e,r,n)}}}function ur(e,t,n,r){let o=t.created||Ee(),s=Z(e,"active",o.slice(0,6)),{slug:i,truncated:a}=cr(t.title);a&&r.push(`\u4EFB\u52A1\u300C${t.title}\u300D\u6807\u9898\u8FC7\u957F\uFF0C\u6587\u4EF6\u540D\u5DF2\u622A\u65AD`);let c=`${o}-${t.owner}-${i}`,d=1,p=Z(s,`${c}.md`);for(;Ce(p);)p=Z(s,`${c}-${d++}.md`);let h=["---",`owner: ${t.owner}`,`status: ${t.status}`,`created: ${o}`,`updated: ${t.updated||Ee()}`,`completed: ${t.completed?`'${t.completed}'`:"''"}`,`depends_on: ${JSON.stringify(t.depends)}`,`scope: ${t.scope}`,...Object.entries(t.extra).map(([u,l])=>`${u}: ${l}`),"---","",`# ${t.title}`].join(`
29
29
  `)+(t.body?`
30
30
 
31
31
  ${t.body}
32
32
  `:`
33
- `);return n||(nt(s,{recursive:!0}),F(p,m)),p}function Nn(e,t){let n=e.completed||"",r=n?y(n):"";if(!r)return t.push(`\u4EFB\u52A1\u300C${e.title}\u300D\u7F3A\u5C11\u5B8C\u6210\u65F6\u95F4\uFF0C\u65E0\u6CD5\u76F4\u63A5\u5F52\u6863\uFF08\u53EF\u6539\u7528 active \u76EE\u6807\uFF09`),null;let o=Object.keys(e.extra);o.length>0&&t.push(`\u4EFB\u52A1\u300C${e.title}\u300D\u81EA\u5B9A\u4E49\u5217\u300C${o.join("\u3001")}\u300D\u5728 archive \u76EE\u6807\u65E0\u627F\u8F7D\u4F4D\u7F6E\uFF0C\u672A\u5199\u5165\uFF08\u9700\u4FDD\u7559\u8BF7\u6539\u7528 active \u76EE\u6807\uFF09`);let s=r.replace(/-/g,""),i=`> \u8D1F\u8D23\u4EBA\uFF1A${e.owner}\u3000\u72B6\u6001\uFF1A${e.status}\u3000\u8303\u56F4\uFF1A${e.scope}\u3000\u5B8C\u6210\u65F6\u95F4\uFF1A${n}`,c=`# ${e.title}${e.body?`
34
-
35
- ${e.body}`:""}`;return{date:s,block:{title:e.title,metaLine:i,completed:n,body:c}}}function Dn(e,t){return J(e,"archive",t.slice(0,6),`${t}.md`)}function Yn(e,t,n){let r=J(e,"archive",t.slice(0,6)),o=J(r,`${t}.md`);nt(r,{recursive:!0});let s=`# ${t} \u5F52\u6863
33
+ `);return n||(xt(s,{recursive:!0}),_(p,h)),p}function fr(e,t){let n=e.completed||"",r=n?$(n):"";if(!r)return t.push(`\u4EFB\u52A1\u300C${e.title}\u300D\u7F3A\u5C11\u5B8C\u6210\u65F6\u95F4\uFF0C\u65E0\u6CD5\u76F4\u63A5\u5F52\u6863\uFF08\u53EF\u6539\u7528 active \u76EE\u6807\uFF09`),null;let o=Object.keys(e.extra);o.length>0&&t.push(`\u4EFB\u52A1\u300C${e.title}\u300D\u81EA\u5B9A\u4E49\u5217\u300C${o.join("\u3001")}\u300D\u5728 archive \u76EE\u6807\u65E0\u627F\u8F7D\u4F4D\u7F6E\uFF0C\u672A\u5199\u5165\uFF08\u9700\u4FDD\u7559\u8BF7\u6539\u7528 active \u76EE\u6807\uFF09`);let s=r.replace(/-/g,""),i=`> \u8D1F\u8D23\u4EBA\uFF1A${e.owner}\u3000\u72B6\u6001\uFF1A${e.status}\u3000\u8303\u56F4\uFF1A${e.scope}\u3000\u5B8C\u6210\u65F6\u95F4\uFF1A${n}`;return{date:s,block:{title:e.title,metaLine:i,completed:n,body:e.body}}}function dr(e,t){return Z(e,"archive",t.slice(0,6),`${t}.md`)}function pr(e,t,n){let r=Z(e,"archive",t.slice(0,6)),o=Z(r,`${t}.md`);xt(r,{recursive:!0});let s=`# ${t} \u5F52\u6863
36
34
 
37
35
  > \u672C\u6587\u4EF6\u7531 \`toolkit tasks import --target archive\` \u81EA\u52A8\u751F\u6210\u3002
38
- `,i=[];if(ve(o)){let c=R(L(o));c.header&&(s=c.header),i=c.blocks}i.push(...n),F(o,W(s,i))}async function Wn(e,t=".tasks",n={}){let r=!!n.dryRun,o=[],s=Object.fromEntries(Object.entries(n.importColumns??{}).map(([u,f])=>[String(u).trim().toLowerCase(),String(f)])),i=e.split(".").pop()?.toLowerCase(),c;if(i==="csv")c=Ln(L(e),s);else if(i==="xlsx")c=await On(e,s);else if(i==="json")c=In(L(e),s);else throw new Error(`\u4E0D\u652F\u6301\u7684\u5BFC\u5165\u683C\u5F0F\u300C${i||""}\u300D\uFF0C\u4EC5\u652F\u6301 .csv / .xlsx / .json`);if(c.length===0)return console.log("\u672A\u8BC6\u522B\u5230\u53EF\u5BFC\u5165\u7684\u4EFB\u52A1\u884C\uFF08\u68C0\u67E5\u8868\u5934\u662F\u5426\u5305\u542B\u300C\u4EFB\u52A1\u540D/\u6807\u9898\u300D\u7B49\u5217\u540D\uFF09"),{created:0,skipped:0,warnings:o,dryRun:r};let l=0,d=0,p=n.target??"active",g=new Map,m=null;if(!r&&ve(t)&&(m=V(t),m===null)){let u="\u68C0\u6D4B\u5230\u5199\u5165\u9501 .archive.lock\uFF0C\u53EF\u80FD\u6709\u5E76\u53D1\u5199\u5165\u6B63\u5728\u8FDB\u884C\uFF0C\u672C\u6B21\u5DF2\u8DF3\u8FC7";return console.warn(`\u26A0\uFE0F ${u}`),{created:0,skipped:c.length,warnings:[...o,u],dryRun:r}}try{for(let u of c){let f=_n(u,n,o);if(!f.ok){d++;continue}let h=f.t;if(p==="archive"){let b=Nn(h,o);if(!b){d++;continue}let S=g.get(b.date);S?S.push(b.block):g.set(b.date,[b.block]),console.log(`${r?"[\u9884\u6F14] \u5C06\u5199\u5165\u5F52\u6863":"\u5DF2\u5199\u5165\u5F52\u6863"} \u2192 ${I(t,Dn(t,b.date))}`)}else{let b=jn(t,h,r,o);console.log(`${r?"[\u9884\u6F14] \u5C06\u521B\u5EFA":"\u5DF2\u521B\u5EFA"} \u2192 ${I(t,b)}`)}l++}if(!r)for(let[u,f]of g)Yn(t,u,f)}finally{if(m!==null)try{G(t,m)}catch{}}for(let u of o)console.warn(`\u26A0\uFE0F ${u}`);return console.log(`${r?"\u9884\u6F14\u53EF\u5BFC\u5165":"\u5DF2\u5BFC\u5165"} ${l} \u4E2A\u4EFB\u52A1\uFF0C\u8DF3\u8FC7 ${d} \u884C`),{created:l,skipped:d,warnings:o,dryRun:r}}import{readFileSync as ye,mkdirSync as zn,unlinkSync as Un,existsSync as Pn,readdirSync as Vn,rmdirSync as Gn}from"fs";import{join as ce,basename as we,dirname as it,resolve as st,sep as Jn}from"path";function ae(e,t){let n=st(e),r=st(t);for(;n!==r&&n.startsWith(r+Jn);){try{if(Vn(n).length>0)break;Gn(n)}catch{break}n=it(n)}}function Hn(e){let t=ye(e,"utf8"),{blocks:n}=R(t);return n.map(r=>({block:me(r),completed:r.completed}))}function Zn(e=".tasks",t=!0,n={}){let{dryRun:r=!1,warn:o=!0}=n,s=ce(e,"active"),i=ce(e,"archive"),c=[],l=T(s);if(l.length===0)return console.log("\u5F53\u524D\u65E0\u6D3B\u8DC3\u4EFB\u52A1\uFF0C\u65E0\u9700\u5F52\u6863"),{archived:0,skipped:[],warnings:c};let d=[],p=[];for(let a of l){let u=ye(a,"utf8").replace(/\r\n?/g,`
39
- `),f=j(u);if(!z.includes(f.status))continue;let h=x(f.completed||"");if(!h){p.push(we(a,".md")),console.log(`\u8DF3\u8FC7 ${we(a,".md")}\uFF1A\u7F3A\u5C11 completed \u5B8C\u6210\u65F6\u95F4`);continue}d.push({file:a,name:we(a,".md"),owner:f.owner||"\u672A\u6807\u6CE8",status:f.status||"\u672A\u6807\u6CE8",scope:f.scope||"-",completed:h,body:N(u).trim()})}if(d.length===0)return console.log("\u672C\u6B21\u65E0\u53EF\u5F52\u6863\u4EFB\u52A1"),{archived:0,skipped:p,warnings:c};if(o)for(let a of d){let u=a.completed.replace(/-/g,"").slice(0,8),f=D(a.file);f&&u!==f&&c.push(`\u4EFB\u52A1\u300C${a.name}\u300D\u5B8C\u6210\u65F6\u95F4 ${a.completed} \u4E0E\u521B\u5EFA\u65E5 ${f} \u4E0D\u4E00\u81F4\uFF0C\u8BF7\u786E\u8BA4 completed \u662F\u5426\u586B\u9519`),new Date(a.completed.replace(" ","T")).getTime()>Date.now()+6e4?c.push(`\u4EFB\u52A1\u300C${a.name}\u300D\u5B8C\u6210\u65F6\u95F4 ${a.completed} \u665A\u4E8E\u5F53\u524D\u7CFB\u7EDF\u65F6\u95F4\uFF0C\u7591\u4F3C\u65F6\u95F4\u6E90\u9519\u8BEF\uFF0C\u8BF7\u6838\u5B9E\u540E\u518D\u5F52\u6863`):a.completed.endsWith(" 00:00")&&c.push(`\u4EFB\u52A1\u300C${a.name}\u300D\u5B8C\u6210\u65F6\u95F4 ${a.completed} \u6070\u4E3A\u96F6\u70B9\u6574\uFF0C\u7591\u4F3C\u53EA\u586B\u4E86\u65E5\u671F\u88AB\u8865\u96F6\uFF0C\u8BF7\u6838\u5B9E\u540E\u518D\u5F52\u6863`)}let g={};for(let a of d){let u=a.completed.replace(/-/g,"").slice(0,8);(g[u]||=[]).push(a)}let m=null;if(!r&&(m=V(e),m===null)){let a="\u68C0\u6D4B\u5230\u5F52\u6863\u9501 .archive.lock\uFF0C\u53EF\u80FD\u6709\u5E76\u53D1\u5F52\u6863\u6B63\u5728\u8FDB\u884C\uFF0C\u672C\u6B21\u5DF2\u8DF3\u8FC7";return console.warn(`\u26A0\uFE0F ${a}`),{archived:0,skipped:p,warnings:[...c,a]}}try{let a=0,u=[];for(let[f,h]of Object.entries(g)){let b=ce(i,f.slice(0,6)),S=ce(b,`${f}.md`),B=Pn(S)?ye(S,"utf8"):"",pe=`# ${f} \u5F52\u6863
36
+ `,i=[];if(Ce(o)){let a=F(A(o));a.header&&(s=a.header),i=a.blocks}i.push(...n),_(o,P(s,i))}async function mr(e,t=".tasks",n={}){let r=!!n.dryRun,o=[],s=Object.fromEntries(Object.entries(n.importColumns??{}).map(([l,f])=>[String(l).trim().toLowerCase(),String(f)])),i=e.split(".").pop()?.toLowerCase(),a;if(i==="csv")a=rr(A(e),s);else if(i==="xlsx")a=await sr(e,s);else if(i==="json")a=ir(A(e),s);else throw new Error(`\u4E0D\u652F\u6301\u7684\u5BFC\u5165\u683C\u5F0F\u300C${i||""}\u300D\uFF0C\u4EC5\u652F\u6301 .csv / .xlsx / .json`);if(a.length===0)return console.log("\u672A\u8BC6\u522B\u5230\u53EF\u5BFC\u5165\u7684\u4EFB\u52A1\u884C\uFF08\u68C0\u67E5\u8868\u5934\u662F\u5426\u5305\u542B\u300C\u4EFB\u52A1\u540D/\u6807\u9898\u300D\u7B49\u5217\u540D\uFF09"),{created:0,skipped:0,warnings:o,dryRun:r};let c=0,d=0,p=n.target??"active",m=new Map,h=null;if(!r&&Ce(t)&&(h=K(t),h===null)){let l="\u68C0\u6D4B\u5230\u5199\u5165\u9501 .archive.lock\uFF0C\u53EF\u80FD\u6709\u5E76\u53D1\u5199\u5165\u6B63\u5728\u8FDB\u884C\uFF0C\u672C\u6B21\u5DF2\u8DF3\u8FC7";return console.warn(`\u26A0\uFE0F ${l}`),{created:0,skipped:a.length,warnings:[...o,l],dryRun:r}}try{for(let l of a){let f=ar(l,n,o);if(!f.ok){d++;continue}let g=f.t;if(p==="archive"){let b=fr(g,o);if(!b){d++;continue}let w=m.get(b.date);w?w.push(b.block):m.set(b.date,[b.block]),console.log(`${r?"[\u9884\u6F14] \u5C06\u5199\u5165\u5F52\u6863":"\u5DF2\u5199\u5165\u5F52\u6863"} \u2192 ${M(t,dr(t,b.date))}`)}else{let b=ur(t,g,r,o);console.log(`${r?"[\u9884\u6F14] \u5C06\u521B\u5EFA":"\u5DF2\u521B\u5EFA"} \u2192 ${M(t,b)}`)}c++}if(!r)for(let[l,f]of m)pr(t,l,f)}finally{if(h!==null)try{J(t,h)}catch{}}for(let l of o)console.warn(`\u26A0\uFE0F ${l}`);return console.log(`${r?"\u9884\u6F14\u53EF\u5BFC\u5165":"\u5DF2\u5BFC\u5165"} ${c} \u4E2A\u4EFB\u52A1\uFF0C\u8DF3\u8FC7 ${d} \u884C`),{created:c,skipped:d,warnings:o,dryRun:r}}import{readFileSync as Fe,mkdirSync as gr,unlinkSync as hr,existsSync as kr,readdirSync as br,rmdirSync as yr}from"fs";import{join as pe,basename as me,dirname as wt,resolve as St,sep as xr}from"path";function ge(e,t){let n=St(e),r=St(t);for(;n!==r&&n.startsWith(r+xr);){try{if(br(n).length>0)break;yr(n)}catch{break}n=wt(n)}}function vr(e){let t=Fe(e,"utf8"),{blocks:n}=F(t);return n.map(r=>({block:Re(r),completed:r.completed}))}function $r(e=".tasks",t=!0,n={}){let{dryRun:r=!1,warn:o=!0}=n,s=pe(e,"active"),i=pe(e,"archive"),a=[],c=L(s);if(c.length===0)return console.log("\u5F53\u524D\u65E0\u6D3B\u8DC3\u4EFB\u52A1\uFF0C\u65E0\u9700\u5F52\u6863"),{archived:0,skipped:[],warnings:a};let d=[],p=[];for(let u of c){let l=Fe(u,"utf8").replace(/\r\n?/g,`
37
+ `),f=Y(l);if(!H.includes(f.status))continue;let g=(f.completed||"").trim();if(!I(g)){p.push(me(u,".md")),console.log(g?`\u8DF3\u8FC7 ${me(u,".md")}\uFF1Acompleted\u300C${g}\u300D\u65E0\u6CD5\u8BC6\u522B\u4E3A\u65E5\u671F\u6216\u65E5\u671F+\u65F6\u5206`:`\u8DF3\u8FC7 ${me(u,".md")}\uFF1A\u7F3A\u5C11 completed \u5B8C\u6210\u65F6\u95F4`);continue}d.push({file:u,name:me(u,".md"),owner:f.owner||"\u672A\u6807\u6CE8",status:f.status||"\u672A\u6807\u6CE8",scope:f.scope||"-",completed:E(g),body:W(l).trim()})}if(d.length===0)return console.log("\u672C\u6B21\u65E0\u53EF\u5F52\u6863\u4EFB\u52A1"),{archived:0,skipped:p,warnings:a};if(o){let u=[],l=[],f=[];for(let g of d){let b=g.completed.replace(/-/g,"").slice(0,8),w=z(g.file);w&&b!==w&&u.push(`${g.name}\uFF08\u5B8C\u6210\u65F6\u95F4 ${g.completed}\uFF0C\u521B\u5EFA\u65E5 ${w}\uFF09`),new Date(g.completed.replace(" ","T")).getTime()>Date.now()+6e4?l.push(`${g.name}\uFF08\u5B8C\u6210\u65F6\u95F4 ${g.completed}\uFF09`):g.completed.endsWith(" 00:00")&&f.push(`${g.name}\uFF08\u5B8C\u6210\u65F6\u95F4 ${g.completed}\uFF09`)}u.length>0&&a.push(`\u5B8C\u6210\u65F6\u95F4\u4E0E\u521B\u5EFA\u65E5\u4E0D\u4E00\u81F4\u3001\u8BF7\u786E\u8BA4 completed \u662F\u5426\u586B\u9519\u7684 ${u.length} \u4E2A\u4EFB\u52A1\uFF1A${u.join("\uFF1B")}`),l.length>0&&a.push(`\u5B8C\u6210\u65F6\u95F4\u665A\u4E8E\u5F53\u524D\u7CFB\u7EDF\u65F6\u95F4\u3001\u7591\u4F3C\u65F6\u95F4\u6E90\u9519\u8BEF\u7684 ${l.length} \u4E2A\u4EFB\u52A1\uFF1A${l.join("\uFF1B")}`),f.length>0&&a.push(`\u5B8C\u6210\u65F6\u95F4\u6070\u4E3A\u96F6\u70B9\u6574\u3001\u7591\u4F3C\u53EA\u586B\u4E86\u65E5\u671F\u88AB\u8865\u96F6\u7684 ${f.length} \u4E2A\u4EFB\u52A1\uFF1A${f.join("\uFF1B")}`)}let m={};for(let u of d){let l=u.completed.replace(/-/g,"").slice(0,8);(m[l]||=[]).push(u)}let h=null;if(!r&&(h=K(e),h===null)){let u="\u68C0\u6D4B\u5230\u5F52\u6863\u9501 .archive.lock\uFF0C\u53EF\u80FD\u6709\u5E76\u53D1\u5F52\u6863\u6B63\u5728\u8FDB\u884C\uFF0C\u672C\u6B21\u5DF2\u8DF3\u8FC7";return console.warn(`\u26A0\uFE0F ${u}`),{archived:0,skipped:p,warnings:[...a,u]}}try{let u=0,l=[];for(let[f,g]of Object.entries(m)){let b=pe(i,f.slice(0,6)),w=pe(b,`${f}.md`),B=kr(w)?Fe(w,"utf8"):"",C=`# ${f} \u5F52\u6863
40
38
 
41
- > \u672C\u6587\u4EF6\u7531 \`toolkit tasks archive\` \u81EA\u52A8\u751F\u6210\u3002`,_=[];if(B){let $=R(B);$.header&&(pe=$.header),_.push(...$.blocks)}if(o){let $=new Set(_.map(k=>k.title));for(let k of h)$.has(k.name)&&c.push(`\u5F52\u6863\u6587\u4EF6\u5DF2\u5B58\u5728\u540C\u540D\u4EFB\u52A1\u300C${k.name}\u300D\uFF0C\u672C\u6B21\u4EE5\u65B0\u5185\u5BB9\u8986\u76D6\u540C\u540D\u5757\uFF0C\u7591\u4F3C\u91CD\u590D\u5F52\u6863`)}if(_.push(...h.map($=>({title:$.name,metaLine:`> \u8D1F\u8D23\u4EBA\uFF1A${$.owner}\u3000\u72B6\u6001\uFF1A${$.status}\u3000\u8303\u56F4\uFF1A${$.scope}\u3000\u5B8C\u6210\u65F6\u95F4\uFF1A${$.completed}`,completed:$.completed,body:C($.body,t)}))),r){console.log(`[\u9884\u6F14] \u5C06\u5F52\u6863 ${h.length} \u4E2A\u4EFB\u52A1 \u2192 ${f}.md`);for(let $ of h)console.log(`[\u9884\u6F14] - ${$.name}`);continue}try{zn(b,{recursive:!0});let $=B.includes(`\r
39
+ > \u672C\u6587\u4EF6\u7531 \`toolkit tasks archive\` \u81EA\u52A8\u751F\u6210\u3002`,T=[];if(B){let v=F(B);v.header&&(C=v.header),T.push(...v.blocks)}if(o){let v=new Set(T.map(R=>R.title)),k=g.filter(R=>v.has(R.name)).map(R=>R.name);k.length>0&&a.push(`\u5F52\u6863\u6587\u4EF6\u5DF2\u5B58\u5728\u540C\u540D\u4EFB\u52A1\uFF0C\u7591\u4F3C\u91CD\u590D\u5F52\u6863\u3001\u672C\u6B21\u4EE5\u65B0\u5185\u5BB9\u8986\u76D6\u540C\u540D\u5757\u7684 ${k.length} \u4E2A\u4EFB\u52A1\uFF1A${k.join("\u3001")}`)}if(T.push(...g.map(v=>({title:v.name,metaLine:`> \u8D1F\u8D23\u4EBA\uFF1A${v.owner}\u3000\u72B6\u6001\uFF1A${v.status}\u3000\u8303\u56F4\uFF1A${v.scope}\u3000\u5B8C\u6210\u65F6\u95F4\uFF1A${v.completed}`,completed:v.completed,body:S(v.body,t)}))),r){console.log(`[\u9884\u6F14] \u5C06\u5F52\u6863 ${g.length} \u4E2A\u4EFB\u52A1 \u2192 ${f}.md`);for(let v of g)console.log(`[\u9884\u6F14] - ${v.name}`);continue}try{gr(b,{recursive:!0});let v=B.includes(`\r
42
40
  `)?`\r
43
41
  `:`
44
- `;F(S,W(pe,_,$));for(let A of h)Un(A.file);let k=h[0];k&&ae(it(k.file),e),console.log(`\u5DF2\u5F52\u6863 ${h.length} \u4E2A\u4EFB\u52A1 \u2192 ${f}.md`),a+=h.length}catch($){u.push(`${f}.md\uFF1A${$.message}`)}}for(let f of c)console.warn(`\u26A0\uFE0F ${f}`);if(u.length>0){console.error(`\u5F52\u6863\u5931\u8D25 ${u.length} \u4E2A\u65E5\u671F\u6587\u4EF6\uFF08active \u672A\u5220\u9664\uFF0C\u53EF\u91CD\u8BD5\uFF09\uFF1A`);for(let f of u)console.error(` - ${f}`)}return console.log(r?`[\u9884\u6F14] \u5171 ${d.length} \u4E2A\u4EFB\u52A1\u53EF\u5F52\u6863\uFF08\u672A\u843D\u76D8\uFF09`:`\u5171\u5F52\u6863 ${a} \u4E2A\u4EFB\u52A1${u.length>0?`\uFF0C\u5931\u8D25 ${u.length} \u4E2A`:""}`),{archived:r?d.length:a,skipped:p,warnings:c}}finally{if(m!==null)try{G(e,m)}catch{}}}import{statSync as qn,readdirSync as ct,existsSync as le}from"fs";import{join as H,basename as Q,dirname as Kn}from"path";var at=/待办|待实施|待核对|待确认|待开始|待评估|待排期|待做|TODO/,Xn=/^[-*]\s*\[ \]\s/m,Qn=/^[-*]\s*\[ \]/,er=/^\d{4}-\d{1,2}-\d{1,2}(?:[T\s]\d{1,2}:\d{2}(?::\d{2})?)?$/,tr=/^\d{4}-\d{1,2}-\d{1,2}[T\s]\d{1,2}:\d{2}(?::\d{2})?$/,nr=/^\d{8}-[^-]+-.+\.md$/;function lt(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,c=+o;if(i<1||i>12||c<1||c>31)return!1;let l=new Date(Date.UTC(s,i-1,c));return l.getUTCFullYear()===s&&l.getUTCMonth()===i-1&&l.getUTCDate()===c}function E(e,t,n){for(let r=0;r<t;r++)if((e[r]??"").trimStart().startsWith(`${n}:`))return r+1;return 1}function ut(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 ft(e){let t=[],n=Q(e),r=L(e),o=r.split(/\r?\n/),s=ne.exec(r)?.[0].split(/\r?\n/).length??0;if(!ne.test(r))return t.push({level:"error",file:n,line:1,message:"\u7F3A\u5C11 frontmatter"}),t;let c=re(r);for(let a of Object.keys(c))te.includes(a)||t.push({level:"warn",file:n,line:E(o,s,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?K.includes(c.status)||t.push({level:"error",file:n,line:E(o,s,"status"),message:`status \u975E\u6CD5\u503C\u300C${c.status}\u300D\uFF0C\u5E94\u4E3A ${K.join(" / ")}`}):t.push({level:"error",file:n,line:E(o,s,"status"),message:"frontmatter \u7F3A\u5C11 status \u5B57\u6BB5"}),z.includes(c.status)&&!c.completed&&t.push({level:"error",file:n,line:E(o,s,"completed"),message:`status \u4E3A\u300C${c.status}\u300D\u4F46\u7F3A\u5C11 completed \u5B8C\u6210\u65F6\u95F4`}),c.completed){let a=c.completed.trim(),u=E(o,s,"completed");if(!er.test(a))t.push({level:"warn",file:n,line:u,message:`completed\u300C${c.completed}\u300D\u683C\u5F0F\u975E\u6CD5\uFF0C\u5E94\u4E3A YYYY-MM-DD HH:mm`});else{let f=a.match(/^\d{4}-\d{1,2}-\d{1,2}/)?.[0]??a;lt(f)?tr.test(a)?new Date(a.replace(" ","T")).getTime()>Date.now()+6e4?t.push({level:"warn",file:n,line:u,message:`completed\u300C${c.completed}\u300D\u665A\u4E8E\u5F53\u524D\u7CFB\u7EDF\u65F6\u95F4\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:u,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:u,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:u,message:`completed\u300C${c.completed}\u300D\u65E5\u671F\u4E0D\u5B58\u5728\uFF0C\u8BF7\u6838\u5BF9`})}}c.owner||t.push({level:"warn",file:n,line:E(o,s,"owner"),message:"\u7F3A\u5C11 owner \u8D1F\u8D23\u4EBA\u5B57\u6BB5"}),c.created?/^\d{8}$/.test(c.created.trim())?lt(c.created.trim())||t.push({level:"warn",file:n,line:E(o,s,"created"),message:`created\u300C${c.created}\u300D\u65E5\u671F\u4E0D\u5B58\u5728\uFF0C\u8BF7\u6838\u5BF9`}):t.push({level:"warn",file:n,line:E(o,s,"created"),message:`created\u300C${c.created}\u300D\u683C\u5F0F\u975E\u6CD5\uFF0C\u5E94\u4E3A YYYYMMDD`}):t.push({level:"warn",file:n,line:E(o,s,"created"),message:"\u7F3A\u5C11 created \u521B\u5EFA\u65E5\u671F\u5B57\u6BB5"});let l=n.match(/^(\d{8})-/);if(nr.test(n)?c.created&&/^\d{8}$/.test(c.created.trim())&&l&&c.created.trim()!==l[1]&&t.push({level:"warn",file:n,message:`\u6587\u4EF6\u540D\u65E5\u671F ${l[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(),u=E(o,s,"scope");/[、,,]/.test(a)&&t.push({level:"warn",file:n,line:u,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: toolkit+lxgl-web\uFF09`}),/[()()]/.test(a)&&t.push({level:"warn",file:n,line:u,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 d=Se(N(r)),g=U("check")?.pendingMarkers!==!1?d.match(at):null;return g&&t.push({level:"warn",file:n,line:ut(o,s,at),message:`\u6B63\u6587\u542B\u672A\u95ED\u5408\u5F85\u529E\u6807\u8BB0\u300C${g[0]}\u300D\uFF0C\u5EFA\u8BAE\u62C6\u5206\u4E3A\u72EC\u7ACB active \u4EFB\u52A1\u6216\u660E\u786E\u95ED\u73AF`}),U("check")?.includeCheckbox!==!1&&Xn.test(d)&&t.push({level:"warn",file:n,line:ut(o,s,Qn),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 rr(e){let t=[];if(!le(e))return t;for(let n of ct(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 ct(H(e,n.name)))r.endsWith(".md")&&/^\d{8}-/.test(r)&&t.push(`${n.name}/${r}`)}return t}function or(e){let t=[],n=H(e,"conventions"),r=le(n);return le(H(e,"conventions.md"))&&t.push({level:"warn",file:"conventions.md",message:r?"\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&&!le(H(n,"index.md"))&&t.push({level:"warn",file:"conventions/index.md",message:"\u89C4\u8303\u8F7D\u4F53\u7F3A index.md\uFF08\u552F\u4E00\u5165\u53E3\u4E0E\u552F\u4E00\u6743\u5A01\uFF09\uFF0C\u8BF7\u8865\u9F50"}),t}function sr(e=".tasks"){let t=H(e,"active"),n=T(t),r=[];for(let c of n)r.push(...ft(c)),Kn(c)===t&&r.push({level:"warn",file:Q(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 rr(e))r.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"});r.push(...or(e));let o=new Map;for(let c of n){let l=Q(c,".md"),d=o.get(l);d?d.push(c):o.set(l,[c])}for(let[c,l]of o)l.length>1&&r.push({level:"warn",file:c,message:`\u5B58\u5728 ${l.length} \u4E2A\u540C\u540D\u4EFB\u52A1\u6587\u4EF6\uFF0C\u7591\u4F3C\u91CD\u590D\u5EFA\u6863`});r.push(...cr(n,e));let s=r.filter(c=>c.level==="error").length,i=r.length-s;return{issues:r,errorCount:s,warnCount:i}}var dt=new Map;function ir(e){let t=qn(e),n=dt.get(e);if(n&&n.mtimeMs===t.mtimeMs)return n.titles;let r=[],o=new Set;try{for(let s of R(L(e)).blocks)s.title&&!o.has(s.title)&&(o.add(s.title),r.push(s.title))}catch{}return dt.set(e,{mtimeMs:t.mtimeMs,titles:r}),r}function cr(e,t){let n=[],r=new Set(e.map(a=>Q(a,".md"))),o=new Map,s=a=>a.trim().replace(/\.md$/,"").trim();for(let a of e){let u=Q(a,".md"),f=L(a),h=re(f);o.set(u,se(h.depends_on).map(s))}if(![...o.values()].some(a=>a.length>0))return n;let i=null,c=a=>{if(!i){i=new Map;for(let u of T(H(t,"archive")))for(let f of ir(u))i.has(f)||i.set(f,I(t,u))}return i.get(a)};for(let[a,u]of o)for(let f of u)if(!r.has(f)){let h=c(f);n.push({level:"warn",file:a,message:h?`\u4F9D\u8D56\u7684\u4EFB\u52A1\u300C${f}\u300D\u4E0D\u5728 active \u4E2D\uFF08\u5DF2\u5F52\u6863\u4E8E ${h}\uFF0C\u65E0\u9700\u518D\u4F9D\u8D56\uFF09`:`\u4F9D\u8D56\u7684\u4EFB\u52A1\u300C${f}\u300D\u4E0D\u5728 active \u4E2D\uFF08\u53EF\u80FD\u5DF2\u5F52\u6863\u6216\u6587\u4EF6\u540D\u62FC\u5199\u9519\u8BEF\uFF09`})}let l=0,d=1,p=2,g=new Map,m=(a,u)=>{g.set(a,d);for(let f of o.get(a)??[]){if(!r.has(f))continue;let h=g.get(f)??l;if(h===d)return[...u,f];if(h===l){let b=m(f,[...u,f]);if(b)return b}}return g.set(a,p),null};for(let a of o.keys())if((g.get(a)??l)===l){let u=m(a,[a]);if(u){n.push({level:"warn",file:a,message:`depends_on \u5B58\u5728\u5FAA\u73AF\u4F9D\u8D56\uFF1A${u.join(" \u2192 ")}`});break}}return n}import{readFileSync as ue,unlinkSync as ar,existsSync as de,mkdirSync as pt,renameSync as lr}from"fs";import{join as q,basename as Z,dirname as ee}from"path";var ur=["\u8D1F\u8D23\u4EBA","\u72B6\u6001","\u8303\u56F4","\u5B8C\u6210\u65F6\u95F4"];function mt(e){return ur.every(t=>e.includes(t))}function dr(e){if(!/[、,,]/.test(e))return null;let t=e.split(/[、,,]/).map(n=>n.trim()).filter(Boolean);return t.length>0?t.join("+"):null}function fr(e,t){return e.replace(/(范围[::])[^ ]*/,`$1${t}`)}function pr(e=".tasks"){let t=q(e,"archive"),n=T(t),r=[];for(let o of n){let s=Z(o),i=s.replace(/\.md$/,""),c=ue(o,"utf8"),{blocks:l}=R(c),d=Z(ee(o)),p=s.replace(/\.md$/,"");d&&p&&d!==p.slice(0,6)&&r.push({file:s,message:`\u5F52\u6863\u6587\u4EF6\u4F4D\u4E8E ${d} \u6708\u4EFD\u76EE\u5F55\uFF0C\u4E0E\u6587\u4EF6\u540D\u65E5\u671F ${p.slice(0,6)} \u4E0D\u4E00\u81F4`,fixable:!1});for(let g of _e(l))r.push({file:s,message:`\u7591\u4F3C\u4EFB\u52A1\u5757\u300C${g}\u300D\u7F3A\u5C11\u5757\u95F4 \`---\` \u5206\u9694\u7B26\uFF0C\u5DF2\u88AB\u5F52\u5165\u524D\u4E00\u5757\u6B63\u6587\uFF08\u9700\u4EBA\u5DE5\u786E\u8BA4\uFF09`,fixable:!1});for(let g=1;g<l.length;g++){let m=l[g-1],a=l[g];if(!m||!a)continue;let u=x(m.completed),f=x(a.completed);if(u&&f&&u<f){r.push({file:s,message:"\u4EFB\u52A1\u5757\u672A\u6309\u5B8C\u6210\u65F6\u95F4\u964D\u5E8F\u6392\u5217",fixable:!0});break}}for(let g of l){if(g.metaLine?mt(g.metaLine)||r.push({file:s,message:`\u5757\u300C${g.title}\u300D\u5143\u6570\u636E\u884C\u4E0D\u5B8C\u6574\uFF08\u7F3A\u8D1F\u8D23\u4EBA/\u72B6\u6001/\u8303\u56F4\u4E4B\u4E00\uFF09`,fixable:!!g.completed}):r.push({file:s,message:`\u5757\u300C${g.title}\u300D\u7F3A\u5C11\u5143\u6570\u636E\u884C\uFF08\u8D1F\u8D23\u4EBA/\u72B6\u6001/\u8303\u56F4/\u5B8C\u6210\u65F6\u95F4\uFF09`,fixable:!!g.completed}),g.metaLine){let u=Y(g.metaLine);u.scope&&/[、,,]/.test(u.scope)&&r.push({file:s,message:`\u5757\u300C${g.title}\u300D\u8303\u56F4\u300C${u.scope}\u300D\u542B\u987F\u53F7/\u9017\u53F7\u7591\u4F3C\u591A\u503C\u5206\u9694\uFF0C\u53EF --fix \u5F52\u4E00\u4E3A\u534A\u89D2\u52A0\u53F7`,fixable:!0}),u.scope&&/[()()]/.test(u.scope)&&r.push({file:s,message:`\u5757\u300C${g.title}\u300D\u8303\u56F4\u300C${u.scope}\u300D\u542B\u62EC\u53F7\u7591\u4F3C\u6CE8\u91CA\uFF0C\u5220\u7559\u9700\u4EBA\u5DE5\u786E\u8BA4`,fixable:!1})}let m=x(g.completed),a=m.replace(/-/g,"").slice(0,8);a&&i&&a!==i&&r.push({file:s,message:`\u5757\u300C${g.title}\u300D\u5B8C\u6210\u65F6\u95F4 ${m} \u4E0E\u5F52\u6863\u6587\u4EF6\u65E5\u671F ${i} \u4E0D\u4E00\u81F4`,fixable:!1}),/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}$/.test(m)&&new Date(m.replace(" ","T")).getTime()>Date.now()+6e4?r.push({file:s,message:`\u5757\u300C${g.title}\u300D\u5B8C\u6210\u65F6\u95F4 ${m} \u665A\u4E8E\u5F53\u524D\u7CFB\u7EDF\u65F6\u95F4\uFF0C\u7591\u4F3C\u65F6\u95F4\u6E90\u9519\u8BEF\uFF08\u9700\u4EBA\u5DE5\u786E\u8BA4\uFF09`,fixable:!1}):m.endsWith(" 00:00")&&r.push({file:s,message:`\u5757\u300C${g.title}\u300D\u5B8C\u6210\u65F6\u95F4 ${m} \u6070\u4E3A\u96F6\u70B9\u6574\uFF0C\u7591\u4F3C\u53EA\u586B\u4E86\u65E5\u671F\u88AB\u8865\u96F6\uFF08\u9700\u4EBA\u5DE5\u786E\u8BA4\uFF09`,fixable:!1})}}return r}function mr(e,t,n){let r=q(e,"archive",n.slice(0,6)),o=q(r,`${n}.md`);pt(r,{recursive:!0});let s=`# ${n} \u5F52\u6863
42
+ `;_(w,P(C,T,v));for(let R of g)hr(R.file);let k=g[0];k&&ge(wt(k.file),e),console.log(`\u5DF2\u5F52\u6863 ${g.length} \u4E2A\u4EFB\u52A1 \u2192 ${f}.md`),u+=g.length}catch(v){l.push(`${f}.md\uFF1A${v.message}`)}}for(let f of a)console.warn(`\u26A0\uFE0F ${f}`);if(l.length>0){console.error(`\u5F52\u6863\u5931\u8D25 ${l.length} \u4E2A\u65E5\u671F\u6587\u4EF6\uFF08active \u672A\u5220\u9664\uFF0C\u53EF\u91CD\u8BD5\uFF09\uFF1A`);for(let f of l)console.error(` - ${f}`)}return console.log(r?`[\u9884\u6F14] \u5171 ${d.length} \u4E2A\u4EFB\u52A1\u53EF\u5F52\u6863\uFF08\u672A\u843D\u76D8\uFF09`:`\u5171\u5F52\u6863 ${u} \u4E2A\u4EFB\u52A1${l.length>0?`\uFF0C\u5931\u8D25 ${l.length} \u4E2A`:""}`),{archived:r?d.length:u,skipped:p,warnings:a}}finally{if(h!==null)try{J(e,h)}catch{}}}import{statSync as Xr,readdirSync as Mt,existsSync as qr,readFileSync as Qr}from"fs";import{join as Ne,basename as ie,dirname as eo}from"path";import{readFileSync as he,unlinkSync as Sr,existsSync as ke,mkdirSync as Rt,renameSync as wr}from"fs";import{join as q,basename as X,dirname as ne}from"path";var Rr=["\u8D1F\u8D23\u4EBA","\u72B6\u6001","\u8303\u56F4","\u5B8C\u6210\u65F6\u95F4"];function Tt(e){return Rr.every(t=>e.includes(t))}function Tr(e){if(!/[、,,]/.test(e))return null;let t=e.split(/[、,,]/).map(n=>n.trim()).filter(Boolean);return t.length>0?t.join("+"):null}function Er(e,t){return e.replace(/(范围[::])[^ ]*/,`$1${t}`)}function _e(e=".tasks"){let t=q(e,"archive"),n=L(t),r=[];for(let o of n){let s=M(e,o),i=X(o).replace(/\.md$/,""),a=he(o,"utf8"),{blocks:c}=F(a),d=X(ne(o));d&&i&&d!==i.slice(0,6)&&r.push({file:s,message:`\u5F52\u6863\u6587\u4EF6\u4F4D\u4E8E ${d} \u6708\u4EFD\u76EE\u5F55\uFF0C\u4E0E\u6587\u4EF6\u540D\u65E5\u671F ${i.slice(0,6)} \u4E0D\u4E00\u81F4`,fixable:!1});for(let m of et(c))r.push({file:s,message:`\u7591\u4F3C\u4EFB\u52A1\u5757\u300C${m}\u300D\u7F3A\u5C11\u5757\u95F4 \`---\` \u5206\u9694\u7B26\uFF0C\u5DF2\u88AB\u5F52\u5165\u524D\u4E00\u5757\u6B63\u6587\uFF08\u9700\u4EBA\u5DE5\u786E\u8BA4\uFF09`,fixable:!1});let p=c.filter(m=>I(m.completed));for(let m=1;m<p.length;m++){let h=p[m-1],u=p[m];if(!h||!u)continue;let l=E(h.completed),f=E(u.completed);if(l<f){r.push({file:s,message:"\u4EFB\u52A1\u5757\u672A\u6309\u5B8C\u6210\u65F6\u95F4\u964D\u5E8F\u6392\u5217",fixable:!0});break}}for(let m of c){if(m.metaLine?Tt(m.metaLine)||r.push({file:s,message:`\u5757\u300C${m.title}\u300D\u5143\u6570\u636E\u884C\u4E0D\u5B8C\u6574\uFF08\u7F3A\u8D1F\u8D23\u4EBA/\u72B6\u6001/\u8303\u56F4\u4E4B\u4E00\uFF09`,fixable:I(m.completed)}):r.push({file:s,message:`\u5757\u300C${m.title}\u300D\u7F3A\u5C11\u5143\u6570\u636E\u884C\uFF08\u8D1F\u8D23\u4EBA/\u72B6\u6001/\u8303\u56F4/\u5B8C\u6210\u65F6\u95F4\uFF09`,fixable:I(m.completed)}),m.metaLine){let f=U(m.metaLine);f.scope&&/[、,,]/.test(f.scope)&&r.push({file:s,message:`\u5757\u300C${m.title}\u300D\u8303\u56F4\u300C${f.scope}\u300D\u542B\u987F\u53F7/\u9017\u53F7\u7591\u4F3C\u591A\u503C\u5206\u9694\uFF0C\u53EF --fix \u5F52\u4E00\u4E3A\u534A\u89D2\u52A0\u53F7`,fixable:!0}),f.scope&&/[()()]/.test(f.scope)&&r.push({file:s,message:`\u5757\u300C${m.title}\u300D\u8303\u56F4\u300C${f.scope}\u300D\u542B\u62EC\u53F7\u7591\u4F3C\u6CE8\u91CA\uFF0C\u5220\u7559\u9700\u4EBA\u5DE5\u786E\u8BA4`,fixable:!1})}let h=I(m.completed);m.completed&&!h&&r.push({file:s,message:`\u5757\u300C${m.title}\u300D\u5B8C\u6210\u65F6\u95F4\u300C${m.completed}\u300D\u65E0\u6CD5\u8BC6\u522B\u4E3A\u65E5\u671F\u6216\u65E5\u671F+\u65F6\u5206\uFF08\u9700\u4EBA\u5DE5\u786E\u8BA4\uFF09`,fixable:!1});let u=E(m.completed),l=h?u.replace(/-/g,"").slice(0,8):"";l&&i&&l!==i&&r.push({file:s,message:`\u5757\u300C${m.title}\u300D\u5B8C\u6210\u65F6\u95F4 ${u} \u4E0E\u5F52\u6863\u6587\u4EF6\u65E5\u671F ${i} \u4E0D\u4E00\u81F4`,fixable:!1}),h&&new Date(u.replace(" ","T")).getTime()>Date.now()+6e4?r.push({file:s,message:`\u5757\u300C${m.title}\u300D\u5B8C\u6210\u65F6\u95F4 ${u} \u665A\u4E8E\u5F53\u524D\u7CFB\u7EDF\u65F6\u95F4\uFF0C\u7591\u4F3C\u65F6\u95F4\u6E90\u9519\u8BEF\uFF08\u9700\u4EBA\u5DE5\u786E\u8BA4\uFF09`,fixable:!1}):h&&u.endsWith(" 00:00")&&r.push({file:s,message:`\u5757\u300C${m.title}\u300D\u5B8C\u6210\u65F6\u95F4 ${u} \u6070\u4E3A\u96F6\u70B9\u6574\uFF0C\u7591\u4F3C\u53EA\u586B\u4E86\u65E5\u671F\u88AB\u8865\u96F6\uFF08\u9700\u4EBA\u5DE5\u786E\u8BA4\uFF09`,fixable:!1})}}return r}function Ar(e,t,n){let r=q(e,"archive",n.slice(0,6)),o=q(r,`${n}.md`);Rt(r,{recursive:!0});let s=`# ${n} \u5F52\u6863
45
43
 
46
- > \u672C\u6587\u4EF6\u7531 \`toolkit tasks archive\` \u81EA\u52A8\u751F\u6210\u3002`,i=[];if(de(o)){let l=R(ue(o,"utf8"));l.header&&(s=l.header),i.push(...l.blocks)}i.some(l=>l.title===t.title)&&console.warn(`\u26A0\uFE0F \u76EE\u6807 ${n}.md \u5DF2\u5B58\u5728\u540C\u540D\u5757\u300C${t.title}\u300D\uFF0C\u8FC1\u79FB\u5C06\u4EE5\u672C\u6B21\u5757\u8986\u76D6\u540C\u540D\u5757`),i.push(t);let c=de(o)&&ue(o,"utf8").includes(`\r
44
+ > \u672C\u6587\u4EF6\u7531 \`toolkit tasks archive\` \u81EA\u52A8\u751F\u6210\u3002`,i=[];if(ke(o)){let c=F(he(o,"utf8"));c.header&&(s=c.header),i.push(...c.blocks)}i.some(c=>c.title===t.title)&&console.warn(`\u26A0\uFE0F \u76EE\u6807 ${n}.md \u5DF2\u5B58\u5728\u540C\u540D\u5757\u300C${t.title}\u300D\uFF0C\u8FC1\u79FB\u5C06\u4EE5\u672C\u6B21\u5757\u8986\u76D6\u540C\u540D\u5757`),i.push(t);let a=ke(o)&&he(o,"utf8").includes(`\r
47
45
  `)?`\r
48
46
  `:`
49
- `;F(o,W(s,i,c)),console.log(` \u5757\u300C${t.title}\u300D\u8FC1\u79FB \u2192 ${n}.md`)}function gr(e=".tasks"){let t=q(e,"archive"),n=T(t),r=[],o=0,s=null;if(s=V(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+=hr(e,t,i,r)}catch(c){r.push({file:Z(i),message:`\u5F52\u4E00\u5316\u5931\u8D25\uFF0C\u5DF2\u8DF3\u8FC7\u8BE5\u6587\u4EF6\uFF1A${c.message}`,fixable:!1})}return{issues:r,fixed:o}}finally{if(s!==null)try{G(e,s)}catch{}}}function hr(e,t,n,r){let o=0,s=n,i=Z(s),c=i.replace(/\.md$/,""),l=Z(ee(s)),d=/^\d{8}$/.test(c)?c.slice(0,6):"";if(d&&l!==d){let k=q(t,d,i);de(k)?console.warn(`\u26A0\uFE0F ${i}\uFF1A\u76EE\u6807\u6708\u4EFD\u76EE\u5F55 ${d} \u5DF2\u5B58\u5728\u540C\u540D\u6587\u4EF6\uFF0C\u672A\u81EA\u52A8\u79FB\u52A8\uFF08\u9700\u4EBA\u5DE5\u5904\u7406\uFF09`):(pt(q(t,d),{recursive:!0}),lr(s,k),s=k,ae(ee(n),t))}let p=ue(s,"utf8"),{header:g,blocks:m}=R(p),a=[],u=s!==n;s!==n&&(a.push(`\u79FB\u52A8\u81F3 ${Z(ee(s))} \u6708\u4EFD\u76EE\u5F55`),o++);for(let k of m)k.completed&&(!k.metaLine||!mt(k.metaLine))&&(k.metaLine=Be(k.title,k.completed,k.metaLine),a.push(`\u8865\u5143\u6570\u636E\u300C${k.title}\u300D`),u=!0,o++);for(let k of m){if(!k.metaLine)continue;let A=Y(k.metaLine);if(!A.scope)continue;let xe=dr(A.scope);xe&&(k.metaLine=fr(k.metaLine,xe),a.push(`\u8303\u56F4\u5206\u9694\u5F52\u4E00\u300C${k.title}\u300D`),u=!0,o++),/[()()]/.test(A.scope)&&r.push({file:i,message:`\u5757\u300C${k.title}\u300D\u8303\u56F4\u300C${A.scope}\u300D\u542B\u62EC\u53F7\u7591\u4F3C\u6CE8\u91CA\uFF0C\u5220\u7559\u9700\u4EBA\u5DE5\u786E\u8BA4`,fixable:!1})}let f=[],h=0;for(let k of m){let A=k.completed?x(k.completed).replace(/-/g,"").slice(0,8):"";A&&A!==c?(mr(e,k,A),h++,u=!0):f.push(k)}h>0&&(a.push(`\u8FC1\u79FB ${h} \u4E2A\u6F02\u79FB\u5757`),o+=h);let b=f.filter(k=>k.completed),S=f.filter(k=>!k.completed),B=[...b].sort((k,A)=>x(A.completed).localeCompare(x(k.completed)));JSON.stringify(B.map(k=>k.title))!==JSON.stringify(b.map(k=>k.title))&&(f.splice(0,f.length,...B,...S),a.push("\u964D\u5E8F\u91CD\u6392"),o++,u=!0);let _=/^---\s*\r?\n\r?\n---/m.test(p);_&&(a.push("\u6E05\u7406\u5197\u4F59\u5206\u9694\u7B26"),o++);let $=p.includes(`\r
47
+ `;_(o,P(s,i,a)),console.log(` \u5757\u300C${t.title}\u300D\u8FC1\u79FB \u2192 ${n}.md`)}function Lr(e=".tasks"){let t=q(e,"archive"),n=L(t),r=[],o=0,s=null;if(s=K(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+=Ir(e,t,i,r)}catch(a){r.push({file:X(i),message:`\u5F52\u4E00\u5316\u5931\u8D25\uFF0C\u5DF2\u8DF3\u8FC7\u8BE5\u6587\u4EF6\uFF1A${a.message}`,fixable:!1})}return{issues:r,fixed:o}}finally{if(s!==null)try{J(e,s)}catch{}}}function Ir(e,t,n,r){let o=0,s=n,i=X(s),a=i.replace(/\.md$/,""),c=X(ne(s)),d=/^\d{8}$/.test(a)?a.slice(0,6):"";if(d&&c!==d){let k=q(t,d,i);ke(k)?console.warn(`\u26A0\uFE0F ${i}\uFF1A\u76EE\u6807\u6708\u4EFD\u76EE\u5F55 ${d} \u5DF2\u5B58\u5728\u540C\u540D\u6587\u4EF6\uFF0C\u672A\u81EA\u52A8\u79FB\u52A8\uFF08\u9700\u4EBA\u5DE5\u5904\u7406\uFF09`):(Rt(q(t,d),{recursive:!0}),wr(s,k),s=k,ge(ne(n),t))}let p=he(s,"utf8"),{header:m,blocks:h}=F(p),u=[],l=s!==n;s!==n&&(u.push(`\u79FB\u52A8\u81F3 ${X(ne(s))} \u6708\u4EFD\u76EE\u5F55`),o++);for(let k of h)I(k.completed)&&(!k.metaLine||!Tt(k.metaLine))&&(k.metaLine=Qe(k.title,k.completed,k.metaLine),u.push(`\u8865\u5143\u6570\u636E\u300C${k.title}\u300D`),l=!0,o++);for(let k of h){if(!k.metaLine)continue;let R=U(k.metaLine);if(!R.scope)continue;let De=Tr(R.scope);De&&(k.metaLine=Er(k.metaLine,De),u.push(`\u8303\u56F4\u5206\u9694\u5F52\u4E00\u300C${k.title}\u300D`),l=!0,o++),/[()()]/.test(R.scope)&&r.push({file:i,message:`\u5757\u300C${k.title}\u300D\u8303\u56F4\u300C${R.scope}\u300D\u542B\u62EC\u53F7\u7591\u4F3C\u6CE8\u91CA\uFF0C\u5220\u7559\u9700\u4EBA\u5DE5\u786E\u8BA4`,fixable:!1})}let f=[],g=0;for(let k of h){if(k.completed&&!I(k.completed)){r.push({file:i,message:`\u5757\u300C${k.title}\u300D\u5B8C\u6210\u65F6\u95F4\u300C${k.completed}\u300D\u65E0\u6CD5\u8BC6\u522B\uFF0C\u672A\u8FC1\u79FB\uFF08\u9700\u4EBA\u5DE5\u786E\u8BA4\uFF09`,fixable:!1}),f.push(k);continue}let R=k.completed?E(k.completed).replace(/-/g,"").slice(0,8):"";R&&R!==a?(Ar(e,k,R),g++,l=!0):f.push(k)}g>0&&(u.push(`\u8FC1\u79FB ${g} \u4E2A\u6F02\u79FB\u5757`),o+=g);let b=f.filter(k=>I(k.completed)),w=f.filter(k=>!I(k.completed)),B=[...b].sort((k,R)=>E(R.completed).localeCompare(E(k.completed)));JSON.stringify(B.map(k=>k.title))!==JSON.stringify(b.map(k=>k.title))&&(f.splice(0,f.length,...B,...w),u.push("\u964D\u5E8F\u91CD\u6392"),o++,l=!0);let T=/^---\s*\r?\n\r?\n---/m.test(p);T&&(u.push("\u6E05\u7406\u5197\u4F59\u5206\u9694\u7B26"),o++);let v=p.includes(`\r
50
48
  `)?`\r
51
49
  `:`
52
- `;return m.length>0&&f.length===0?(de(s)&&ar(s),ae(ee(s),t),a.push("\u5220\u9664\u7A7A\u5F52\u6863\u6587\u4EF6"),u=!0):(u||_)&&F(s,W(g,f,$)),a.length>0&&console.log(` ${i}: ${a.join("\u3001")}`),o}var gt={breaking:["\u91CD\u5927\uFF1A","Breaking:"],added:["\u65B0\u589E\uFF1A","Added:"],changed:["\u4FEE\u6539\uFF1A","Changed:"],improved:["\u4F18\u5316\uFF1A","Improved:","\u6280\u80FD\uFF1A","skills\uFF1A"],fixed:["\u4FEE\u590D\uFF1A","Fixed:"],docs:["\u6587\u6863\uFF1A","Docs:"],removed:["\u6E05\u7406\uFF1A","Removed:"],deps:["\u4F9D\u8D56\uFF1A"],other:[]},ht={"### \u{1F41B} \u8865\u4E01\u4FEE\u590D":"fixed"},kt={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"}},Gs="zh";import{readdirSync as kr}from"fs";import{join as bt}from"path";function $e(e){let t=[],n=new Set(["node_modules",".git","dist","coverage"]),r=o=>{let s;try{s=kr(o,{withFileTypes:!0})}catch{return}for(let i of s)if(i.isDirectory()){if(n.has(i.name))continue;r(bt(o,i.name))}else i.name==="CHANGELOG.md"&&t.push(bt(o,i.name))};return r(e),t}import{readFileSync as br,writeFileSync as vr}from"fs";var fe=/^## \d+\.\d+\.\d+/,wt={"### Major Changes":"breaking","### Minor Changes":"added","### Patch Changes":"other","### Dependent Changes":"deps"},wr="- Updated dependencies",yr=Object.values(kt).map(e=>e.released);function $r(){return De()}function yt(e,t,n,r=!0,o=!1){let s=br(e,"utf8"),i=s.includes(`\r
50
+ `;return h.length>0&&f.length===0?(ke(s)&&Sr(s),ge(ne(s),t),u.push("\u5220\u9664\u7A7A\u5F52\u6863\u6587\u4EF6"),l=!0):(l||T)&&_(s,P(m,f,v)),u.length>0&&console.log(` ${i}: ${u.join("\u3001")}`),o}import{existsSync as be,readdirSync as _i}from"fs";import{join as D}from"path";var At="conventions",re="index.md",oe="history.md",xe="conventions.md",se=2,Q=2,Mi=`<!-- toolkit-conventions: v${se} -->`,Cr=`<!-- toolkit-conventions-entry: v${Q} -->`,Fr=/<!--\s*toolkit-conventions:\s*v(\d+)\s*-->/,_r=/<!--\s*toolkit-conventions-entry:\s*v(\d+)\s*-->/,ve="ID";var Or="\u5F53\u524D\u8BED\u4E49";function Nr(e,t){let n=e.split(/\r?\n/,1)[0]??"",r=t.exec(n);return r?Number(r[1]):null}function Mr(e){return Nr(e,Fr)}function Lt(e){let t=_r.exec(e);return t?Number(t[1]):null}function Br(e){let t=D(e,At),n=D(t,re),r=be(n);return{hasDir:be(t),hasIndex:r,hasHistory:be(D(t,oe)),hasLegacy:be(D(e,xe)),markerVersion:r?Mr(A(n)):null}}function jr(e,t,n,r){return e?r===se?t&&n?"v2":"abnormal":t?n?"v2":"abnormal":n?"abnormal":"v1":"none"}function Oe(e){let t=e.trim();return t.startsWith("|")&&t.endsWith("|")&&t.length>1}function ye(e){return e.trim().replace(/^\|/,"").replace(/\|$/,"").split("|").map(t=>t.trim())}function Et(e){if(!Oe(e))return!1;let t=ye(e);return t.length>0&&t.every(n=>/^:?-{2,}:?$/.test(n))}function Dr(e,t){for(let n=0;n+1<e.length;n++){let r=e[n]??"";if(!Oe(r)||!ye(r).includes(t)||!Et(e[n+1]??""))continue;let o=[],s=[];for(let i=n+2;i<e.length;i++){let a=e[i]??"";if(!Oe(a)||Et(a))break;o.push(ye(a)),s.push(i)}return{headerLine:n,separatorLine:n+1,rowLines:s,header:ye(r),rows:o}}return null}function Yr(e){return Dr(e,Or)}function Wr(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 It(e){let t=Br(e),n=D(e,At),r=D(n,re),o=t.hasIndex?A(r):"",s=t.hasIndex?Yr(o.split(/\r?\n/)):null,i=s?.header??[],a=(i[0]??"")===ve,c=s?Wr(s):[],d=c.map(p=>Number(p.id)).filter(p=>Number.isInteger(p));return{...t,dir:n,indexFile:r,historyFile:D(n,oe),legacyFile:D(e,xe),form:jr(t.hasIndex,t.hasHistory,a,t.markerVersion),header:i,entries:c,maxSeq:d.length>0?Math.max(...d):0}}var zr="# \u89C4\u8303\u6F14\u8FDB\u8BB0\u5F55",Ur="| \u89C4\u5219 ID / \u540D\u79F0 | \u4FEE\u8BA2\u5185\u5BB9 | \u4FEE\u8BA2\u6765\u6E90\u4EFB\u52A1 |",Pr="> \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\u5747\u4E0D\u5165\u8868\u3002",Hr="> \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 \u2192 \u65E7\u8BED\u4E49 \u2192 \u53D8\u66F4\u4E3A \u2192 \u4FEE\u8BA2\u6765\u6E90\u4EFB\u52A1\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",Bi=`${zr}
51
+
52
+ ${Hr}
53
+ ${Pr}
54
+
55
+ ${Ur}
56
+ | --- | --- | --- |
57
+ `;import{existsSync as Vr}from"fs";import{join as Ct}from"path";import{spawnSync as Gr}from"child_process";var Kr="toolkit-conventions",Jr="SKILL.md",Zr=[".agents/skills",".trae/skills",".trae-cn/skills",".cursor/skills",".claude/skills"];function Ft(e){let t=[];for(let n of Zr){let r=`${n}/${Kr}`,o=`${r}/${Jr}`;Vr(Ct(e,o))&&t.push({dir:r,file:o,version:Lt(A(Ct(e,o)))})}return t}function _t(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${Q} \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${Q} \u4E0D\u4E00\u81F4\uFF0C\u5171 ${e.length} \u5904\uFF1A${r}\uFF1B\u91CD\u8DD1 toolkit init \u53EF\u4E00\u6B21\u6027\u8865\u9F50`}}function Ot(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`}}function Nt(e,t){let n=new Set;if(t.length===0)return n;let r=Gr("git",["check-ignore","--stdin","-z"],{cwd:e,input:t.map(o=>`${o}\0`).join(""),encoding:"utf8"});if(r.status!==0&&r.status!==1)return n;for(let o of(r.stdout??"").split("\0"))o&&n.add(o);return n}var Bt=/待办|待实施|待核对|待确认|待开始|待评估|待排期|待做|TODO/,to=/^[-*]\s*\[ \]\s/m,no=/^[-*]\s*\[ \]/,ro=/^\d{4}-\d{1,2}-\d{1,2}(?:[T\s]\d{1,2}:\d{2}(?::\d{2})?)?$/,oo=/^\d{4}-\d{1,2}-\d{1,2}[T\s]\d{1,2}:\d{2}(?::\d{2})?$/,so=/^\d{8}-[^-]+-.+\.md$/;function jt(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,a=+o;if(i<1||i>12||a<1||a>31)return!1;let c=new Date(Date.UTC(s,i-1,a));return c.getUTCFullYear()===s&&c.getUTCMonth()===i-1&&c.getUTCDate()===a}function O(e,t,n){for(let r=0;r<t;r++)if((e[r]??"").trimStart().startsWith(`${n}:`))return r+1;return 1}function Dt(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 io(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]===`
58
+ `&&(i===0||t[i-1]!=="\r")){s=i;break}return s>=0&&t.includes(`\r
59
+ `)&&n.push({level:"warn",file:e,line:t.slice(0,s).split(`
60
+ `).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 Wt(e){let t=[],n=ie(e),r=Qr(e,"utf8");t.push(...io(n,r));let o=N(r),s=o.split(/\r?\n/),i=le.exec(o)?.[0].split(/\r?\n/).length??0;if(!le.test(o))return t.push({level:"error",file:n,line:1,message:"\u7F3A\u5C11 frontmatter"}),t;let c=ae(o);for(let l of Object.keys(c))ce.includes(l)||t.push({level:"warn",file:n,line:O(s,i,l),message:`frontmatter \u542B\u672A\u77E5\u5B57\u6BB5\u300C${l}\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?ee.includes(c.status)||t.push({level:"error",file:n,line:O(s,i,"status"),message:`status \u975E\u6CD5\u503C\u300C${c.status}\u300D\uFF0C\u5E94\u4E3A ${ee.join(" / ")}`}):t.push({level:"error",file:n,line:O(s,i,"status"),message:"frontmatter \u7F3A\u5C11 status \u5B57\u6BB5"}),H.includes(c.status)&&!c.completed&&t.push({level:"error",file:n,line:O(s,i,"completed"),message:`status \u4E3A\u300C${c.status}\u300D\u4F46\u7F3A\u5C11 completed \u5B8C\u6210\u65F6\u95F4`}),c.completed){let l=c.completed.trim(),f=O(s,i,"completed");if(!ro.test(l))t.push({level:"warn",file:n,line:f,message:`completed\u300C${c.completed}\u300D\u683C\u5F0F\u975E\u6CD5\uFF0C\u5E94\u4E3A YYYY-MM-DD HH:mm`});else{let g=l.match(/^\d{4}-\d{1,2}-\d{1,2}/)?.[0]??l;jt(g)?oo.test(l)?new Date(l.replace(" ","T")).getTime()>Date.now()+6e4?t.push({level:"warn",file:n,line:f,message:`completed\u300C${c.completed}\u300D\u665A\u4E8E\u5F53\u524D\u7CFB\u7EDF\u65F6\u95F4\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(l)&&t.push({level:"warn",file:n,line:f,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:f,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:f,message:`completed\u300C${c.completed}\u300D\u65E5\u671F\u4E0D\u5B58\u5728\uFF0C\u8BF7\u6838\u5BF9`})}}c.owner||t.push({level:"warn",file:n,line:O(s,i,"owner"),message:"\u7F3A\u5C11 owner \u8D1F\u8D23\u4EBA\u5B57\u6BB5"}),c.created?/^\d{8}$/.test(c.created.trim())?jt(c.created.trim())||t.push({level:"warn",file:n,line:O(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:O(s,i,"created"),message:`created\u300C${c.created}\u300D\u683C\u5F0F\u975E\u6CD5\uFF0C\u5E94\u4E3A YYYYMMDD`}):t.push({level:"warn",file:n,line:O(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:O(s,i,"updated"),message:`updated ${c.updated.trim()} \u65E9\u4E8E created ${c.created.trim()}\uFF0C\u65F6\u95F4\u7EBF\u77DB\u76FE`});let d=n.match(/^(\d{8})-/);if(so.test(n)?c.created&&/^\d{8}$/.test(c.created.trim())&&d&&c.created.trim()!==d[1]&&t.push({level:"warn",file:n,message:`\u6587\u4EF6\u540D\u65E5\u671F ${d[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 l=c.scope.trim(),f=O(s,i,"scope");/[、,,]/.test(l)&&t.push({level:"warn",file:n,line:f,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: toolkit+lxgl-web\uFF09`}),/[()()]/.test(l)&&t.push({level:"warn",file:n,line:f,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=Ye(W(o)),h=V("check")?.pendingMarkers!==!1?p.match(Bt):null;return h&&t.push({level:"warn",file:n,line:Dt(s,i,Bt),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`}),V("check")?.includeCheckbox!==!1&&to.test(p)&&t.push({level:"warn",file:n,line:Dt(s,i,no),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 co(e){let t=[];if(!qr(e))return t;for(let n of Mt(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 Mt(Ne(e,n.name)))r.endsWith(".md")&&/^\d{8}-/.test(r)&&t.push(`${n.name}/${r}`)}return t}function lo(e,t){let n=[],r=It(e);r.hasLegacy&&n.push({level:"warn",file:xe,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/${re}`,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/${re}`,message:r.markerVersion===se?`\u89C4\u8303\u8F7D\u4F53\u6807\u4E3A v${se} \u4F46\u7F3A ${oe} \u6216\u7D22\u5F15\u8868\u9996\u5217\u975E ${ve}\uFF0C\u8BF7\u8865\u9F50\u6216\u6267\u884C toolkit conventions upgrade`:`\u89C4\u8303\u8F7D\u4F53\u5B58\u5728 ${oe} \u4F46\u7D22\u5F15\u8868\u9996\u5217\u4ECD\u975E ${ve}\uFF08\u5F62\u6001\u5F02\u5E38\uFF09\uFF0C\u8BF7\u4EBA\u5DE5\u786E\u8BA4`});let o=Ft(t),s=Nt(t,o.map(a=>a.file)),i=[_t(o.filter(a=>a.version!==Q)),Ot(o.filter(a=>s.has(a.file)))];for(let a of i)a&&n.push({level:"warn",file:a.file,message:a.message});return n}function ao(e=".tasks",t=process.cwd()){let n=Ne(e,"active"),r=L(n),o=[];for(let c of r)o.push(...Wt(c)),eo(c)===n&&o.push({level:"warn",file:ie(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 co(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(...lo(e,t));for(let c of _e(e))o.push({level:"warn",file:c.file,message:c.message});let s=new Map;for(let c of r){let d=ie(c,".md"),p=s.get(d);p?p.push(c):s.set(d,[c])}for(let[c,d]of s)d.length>1&&o.push({level:"warn",file:c,message:`\u5B58\u5728 ${d.length} \u4E2A\u540C\u540D\u4EFB\u52A1\u6587\u4EF6\uFF0C\u7591\u4F3C\u91CD\u590D\u5EFA\u6863`});o.push(...fo(r,e));let i=o.filter(c=>c.level==="error").length,a=o.length-i;return{issues:o,errorCount:i,warnCount:a}}var Yt=new Map;function uo(e){let t=Xr(e),n=Yt.get(e);if(n&&n.mtimeMs===t.mtimeMs)return n.titles;let r=[],o=new Set;try{for(let s of F(A(e)).blocks)s.title&&!o.has(s.title)&&(o.add(s.title),r.push(s.title))}catch{}return Yt.set(e,{mtimeMs:t.mtimeMs,titles:r}),r}function fo(e,t){let n=[],r=new Set(e.map(u=>ie(u,".md"))),o=new Map,s=u=>u.trim().replace(/\.md$/,"").trim();for(let u of e){let l=ie(u,".md"),f=A(u),g=ae(f);o.set(l,fe(g.depends_on).map(s))}if(![...o.values()].some(u=>u.length>0))return n;let i=null,a=u=>{if(!i){i=new Map;for(let l of L(Ne(t,"archive")))for(let f of uo(l))i.has(f)||i.set(f,M(t,l))}return i.get(u)};for(let[u,l]of o)for(let f of l)if(!r.has(f)){let g=a(f);n.push({level:"warn",file:u,message:g?`\u4F9D\u8D56\u7684\u4EFB\u52A1\u300C${f}\u300D\u4E0D\u5728 active \u4E2D\uFF08\u5DF2\u5F52\u6863\u4E8E ${g}\uFF0C\u65E0\u9700\u518D\u4F9D\u8D56\uFF09`:`\u4F9D\u8D56\u7684\u4EFB\u52A1\u300C${f}\u300D\u4E0D\u5728 active \u4E2D\uFF08\u53EF\u80FD\u5DF2\u5F52\u6863\u6216\u6587\u4EF6\u540D\u62FC\u5199\u9519\u8BEF\uFF09`})}let c=0,d=1,p=2,m=new Map,h=(u,l)=>{m.set(u,d);for(let f of o.get(u)??[]){if(!r.has(f))continue;let g=m.get(f)??c;if(g===d)return[...l,f];if(g===c){let b=h(f,[...l,f]);if(b)return b}}return m.set(u,p),null};for(let u of o.keys())if((m.get(u)??c)===c){let l=h(u,[u]);if(l){n.push({level:"warn",file:u,message:`depends_on \u5B58\u5728\u5FAA\u73AF\u4F9D\u8D56\uFF1A${l.join(" \u2192 ")}`});break}}return n}var zt={breaking:["\u91CD\u5927\uFF1A","Breaking:"],added:["\u65B0\u589E\uFF1A","Added:"],changed:["\u4FEE\u6539\uFF1A","Changed:"],improved:["\u4F18\u5316\uFF1A","Improved:","\u6280\u80FD\uFF1A","skills\uFF1A"],fixed:["\u4FEE\u590D\uFF1A","Fixed:"],docs:["\u6587\u6863\uFF1A","Docs:"],removed:["\u6E05\u7406\uFF1A","Removed:"],deps:["\u4F9D\u8D56\uFF1A"],other:[]},Ut={"### \u{1F41B} \u8865\u4E01\u4FEE\u590D":"fixed"},Me={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"}},lc="zh";function ac(e,t,n){let r=e[t];return r?{lang:r}:{lang:e[n]??Me[n],unknown:t}}import{readdirSync as po}from"fs";import{join as Pt}from"path";function Be(e){let t=[],n=new Set(["node_modules",".git","dist","coverage"]),r=o=>{let s;try{s=po(o,{withFileTypes:!0})}catch{return}for(let i of s)if(i.isDirectory()){if(n.has(i.name))continue;r(Pt(o,i.name))}else i.name==="CHANGELOG.md"&&t.push(Pt(o,i.name))};return r(e),t}import{readFileSync as mo,readdirSync as kc,writeFileSync as go}from"fs";var $e=/^## \d+\.\d+\.\d+/,je={"### Major Changes":"breaking","### Minor Changes":"added","### Patch Changes":"other","### Dependent Changes":"deps"},ho="- Updated dependencies",ko=Object.values(Me).map(e=>e.released);function bo(){return rt()}function Gt(e,t,n,r=!0,o=!1){let s=mo(e,"utf8"),i=s.includes(`\r
53
61
  `)?`\r
54
62
  `:`
55
- `,c=s.replace(/\r\n/g,`
56
- `),l=Ir(Fr(c),n,o);for(let[h,b]of Object.entries(n.replacements))l=l.replaceAll(h,b);for(;l.includes(`${n.deps}
57
- ${n.deps}`);)l=l.replace(`${n.deps}
58
- ${n.deps}`,n.deps);for(;;){let h=l.replace(/^- (.+)\n- \1$/gm,"- $1");if(h===l)break;l=h}let d=l.split(`
59
- `),p=[],g=[n.released,...yr].map(Sr),m=new RegExp(`^> \\d{4}-\\d{2}-\\d{2} (?:${g.join("|")})$`),a=0;for(;a<d.length;){let h=d[a]??"";if(fe.test(h)){let b=a+1;for(;b<d.length&&(d[b]??"").trim()==="";)b++;let S=d[b]??"";if(S.startsWith("> ")&&m.test(S.trim())){p.push(h,"",S),a=b+1;continue}p.push(h,"",`> ${t} ${n.released}`,""),a=b;continue}p.push(h),a++}let u=p.join(`
60
- `),f=C(u,r);return f!==c?(vr(e,f.replace(/\n/g,i),"utf8"),!0):!1}function xr(e,t,n,r=!0,o=!1){let s=[];for(let i of $e(e))yt(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 Sr(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Tr(e){let t=[];for(let n of e)for(let r of n.prefixes??[])t.push([n.slot,r]);return t}function $t(e,t){let n=e.slice(2);for(let[r,o]of Object.entries(gt)){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 Rr(e,t){return e.startsWith(wr)?"deps":$t(e,t)?.[0]??null}function Ar(e,t){let n=$t(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 Cr(e){for(let t of e){if(t.startsWith("- "))return!1;if(t.trim()!=="")return!0}return!1}function Fr(e){let t=e.replace(/\r\n/g,`
63
+ `,a=s.replace(/\r\n/g,`
64
+ `),c=Ro(a),d=Co(c,n,o),p=Ht(c),m=Ht(d);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=d;for(let[C,T]of Object.entries(n.replacements))h=h.replaceAll(C,T);for(;h.includes(`${n.deps}
65
+ ${n.deps}`);)h=h.replace(`${n.deps}
66
+ ${n.deps}`,n.deps);for(;;){let C=h.replace(/^- (.+)\n- \1$/gm,"- $1");if(C===h)break;h=C}let u=h.split(`
67
+ `),l=[],f=[n.released,...ko].map(xo),g=new RegExp(`^> \\d{4}-\\d{2}-\\d{2} (?:${f.join("|")})$`),b=0;for(;b<u.length;){let C=u[b]??"";if($e.test(C)){let T=b+1;for(;T<u.length&&(u[T]??"").trim()==="";)T++;let v=u[T]??"";if(v.startsWith("> ")&&g.test(v.trim())){l.push(C,"",v),b=T+1;continue}l.push(C,"",`> ${t} ${n.released}`,""),b=T;continue}l.push(C),b++}let w=l.join(`
68
+ `),B=S(w,r);return B!==a?(go(e,B.replace(/\n/g,i),"utf8"),!0):!1}function yo(e,t,n,r=!0,o=!1){let s=[];for(let i of Be(e))Gt(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 Ht(e){return e.split(`
69
+ `).filter(t=>t.startsWith("- ")).length}function xo(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function vo(e){let t=[];for(let n of e)for(let r of n.prefixes??[])t.push([n.slot,r]);return t}function Kt(e,t){let n=e.slice(2);for(let[r,o]of Object.entries(zt)){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 $o(e,t){return e.startsWith(ho)?"deps":Kt(e,t)?.[0]??null}function So(e,t){let n=Kt(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 wo(e){for(let t of e){if(t.startsWith("- "))return!1;if(t.trim()!=="")return!0}return!1}function Ro(e){let t=e.replace(/\r\n/g,`
61
70
  `);t=t.replace(/^- [0-9a-f]{7}: /gm,"- ");let n=t.split(`
62
71
  `);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(`
63
- `)}function Lr(e){let t=[],n=[],r=0;for(;r<e.length&&!fe.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&&fe.test(e[r]??""));)s.push(e[r++]??"");let i=[];for(;r<e.length&&(e[r]??"").startsWith("### ");){let c=e[r++]??"",l=[];for(;r<e.length&&!(e[r]??"").startsWith("### ")&&!fe.test(e[r]??"");)l.push(e[r++]??"");for(;l.length>0&&(l[l.length-1]??"").trim()==="";)l.pop();i.push({title:c,body:l})}n.push({lines:e.slice(o,r),header:s,sections:i})}return{lead:t,blocks:n}}function Er(e,t,n){let r=e.sections.filter(m=>wt[m.title]!==void 0);if(!n&&r.length===0)return e.lines;let o=n?e.sections:r;if(o.length===0||o.some(m=>Cr(m.body)))return e.lines;let s=new Set(t.map(m=>m.slot)),i=Tr(t),c=new Map(t.map(m=>[m.title,m.slot])),l=new Map,d=[];for(let m of o){let a=Or(m.title,c);if(a===null){d.push(m);continue}for(let u of Br(m.body)){let f=Rr(u[0]??"",i)??a,h=Ar(u,i),b=l.get(f);b?b.push(h):l.set(f,[h])}}for(let m of l.keys())if(!s.has(m))return e.lines;let p=[...e.header];for(;p.length>0&&(p[p.length-1]??"").trim()==="";)p.pop();let g=[...p,""];for(let m of t){let a=l.get(m.slot);a&&g.push(...vt({title:m.title,body:Mr(a)}))}for(let m of d)g.push(...vt(m));return g}function Or(e,t){return t.get(e)??ht[e]??wt[e]??null}function Ir(e,t,n){let r=t.groups;if(!r||r.length===0)return e;let{lead:o,blocks:s}=Lr(e.split(`
64
- `)),i=[...o];for(let c of s)i.push(...Er(c,r,n));return i.join(`
65
- `)}function Mr(e){let t=[];for(let n of e)t.push(...n);return t}function vt(e){return[e.title,"",...e.body,""]}function Br(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{K as ALL_STATUSES,Gs as DEFAULT_LANG,z as DONE_STATUSES,te as FRONTMATTER_KEYS,ht as LEGACY_TITLE_SLOTS,gt as SLOT_PREFIXES,Zn as archiveTasks,He as buildSummary,pr as checkArchive,$e as collectChangelogs,D as dateFromFileName,mn as exportTasks,gr as fixArchive,yt as formatChangelog,xr as formatChangelogs,U as getConfigSection,Wn as importTasks,kt as languages,Pe as listActiveTasks,Ve as listArchivedTasks,T as listTaskFiles,Kt as listTasks,Fe as loadToolkitConfig,$r as localDate,x as normalizeCompleted,Je as orderRows,Hn as parseArchiveTasks,Le as parseBool,j as parseFrontmatter,qe as printTaskBoard,Xt as printTasks,he as queryTasks,C as redactText,Mt as resetToolkitConfigCache,Ee as resolveEnabled,N as stripFrontmatter,Ke as toCSV,Xe as toJSON,ft as validateTaskFile,sr as validateTasks};
72
+ `)}function To(e){let t=[],n=[],r=0;for(;r<e.length&&!$e.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&&$e.test(e[r]??""));)s.push(e[r++]??"");let i=[];for(;r<e.length&&(e[r]??"").startsWith("### ");){let a=e[r++]??"",c=[];for(;r<e.length&&!(e[r]??"").startsWith("### ")&&!$e.test(e[r]??"");)c.push(e[r++]??"");for(;c.length>0&&(c[c.length-1]??"").trim()==="";)c.pop();i.push({title:a,body:c})}n.push({lines:e.slice(o,r),header:s,sections:i})}return{lead:t,blocks:n}}function Eo(e,t,n){let r=e.sections.filter(l=>je[l.title]!==void 0);if(!n&&r.length===0)return e.lines;let o=new Set(t.map(l=>l.slot)),s=vo(t),i=new Map(t.map(l=>[l.title,l.slot])),a=e.sections.map(l=>({section:l,slot:Io(l.title,i)})),c=a.filter(l=>Ao(l,n));if(c.length===0)return e.lines;let d=new Set(c.map(l=>l.section));if(c.some(l=>wo(l.section.body)))return e.lines;let p=new Map;for(let l of c)for(let f of _o(l.section.body)){let g=$o(f[0]??"",s)??l.slot,b=So(f,s),w=p.get(g);w?w.push(b):p.set(g,[b])}for(let l of p.keys())if(!o.has(l))return e.lines;let m=[];for(let l of t){let f=p.get(l.slot);f&&m.push({title:l.title,body:Fo(f)})}let h=[...e.header];for(;h.length>0&&(h[h.length-1]??"").trim()==="";)h.pop();let u=[...h,""];for(let l of m)u.push(...Vt(l));for(let l of a)d.has(l.section)||u.push(...Vt(Lo(l.section)));return u}function Ao(e,t){return e.slot===null?!1:t||je[e.section.title]!==void 0}function Lo(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 Io(e,t){return t.get(e)??Ut[e]??je[e]??null}function Co(e,t,n){let r=t.groups;if(!r||r.length===0)return e;let{lead:o,blocks:s}=To(e.split(`
73
+ `)),i=[...o];for(let a of s)i.push(...Eo(a,r,n));return i.join(`
74
+ `)}function Fo(e){let t=[];for(let n of e)t.push(...n);return t}function Vt(e){return[e.title,"",...e.body,""]}function _o(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{ee as ALL_STATUSES,lc as DEFAULT_LANG,H as DONE_STATUSES,ce as FRONTMATTER_KEYS,Ut as LEGACY_TITLE_SLOTS,zt as SLOT_PREFIXES,$r as archiveTasks,dt as buildSummary,_e as checkArchive,Be as collectChangelogs,z as dateFromFileName,Wn as exportTasks,Lr as fixArchive,Gt as formatChangelog,yo as formatChangelogs,V as getConfigSection,mr as importTasks,Me as languages,lt as listActiveTasks,at as listArchivedTasks,L as listTaskFiles,Rn as listTasks,He as loadToolkitConfig,bo as localDate,E as normalizeCompleted,ft as orderRows,vr as parseArchiveTasks,Ve as parseBool,Y as parseFrontmatter,mt as printTaskBoard,Tn as printTasks,Ae as queryTasks,S as redactText,cn as resetToolkitConfigCache,Ge as resolveEnabled,ac as resolveLang,W as stripFrontmatter,gt as toCSV,ht as toJSON,Wt as validateTaskFile,ao as validateTasks};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fxri/toolkit",
3
- "version": "1.10.4",
3
+ "version": "1.11.0",
4
4
  "description": "专为多人 + AI 跨项目协作打造:任务管理 + 多语言 CHANGELOG。",
5
5
  "license": "MIT",
6
6
  "author": {
package/skills/README.md CHANGED
@@ -8,9 +8,9 @@
8
8
 
9
9
  | 技能 | 版本 | 用途 |
10
10
  | --- | --- | --- |
11
- | [fxri-plan-to-task](./fxri-plan-to-task/SKILL.md) | 1.3.2 | 方案落盘:建档评估(先查后写)→ 建档 → 校验 → 归档 → 任务级规范沉淀(能力终点);规范载体迁移 |
12
- | [fxri-release-changelog](./fxri-release-changelog/SKILL.md) | 1.1.1 | changesets 发版与多语言 CHANGELOG 维护 |
13
- | [fxri-session-recap](./fxri-session-recap/SKILL.md) | 1.2.2 | 会话收尾全量沉淀 + 规范沉淀 / 新会话三层恢复 / 历史任务时间批量修正 |
11
+ | [fxri-plan-to-task](./fxri-plan-to-task/SKILL.md) | 1.4.3 | 方案落盘:建档评估(先查后写)→ 建档 → 校验 → 归档 → 任务级规范沉淀(能力终点);规范载体迁移与升级 |
12
+ | [fxri-release-changelog](./fxri-release-changelog/SKILL.md) | 1.1.3 | changesets 发版与多语言 CHANGELOG 维护 |
13
+ | [fxri-session-recap](./fxri-session-recap/SKILL.md) | 1.2.3 | 会话收尾全量沉淀 + 规范沉淀 / 新会话三层恢复 / 历史任务时间批量修正 |
14
14
 
15
15
  版本号取自各 SKILL.md 的 frontmatter `metadata.version`(`toolkit skills status` / `skills install` 打印的真源版本),与正文首部版本声明双写一致。
16
16
 
@@ -23,15 +23,15 @@
23
23
  ```bash
24
24
  pnpm add -g @fxri/toolkit # 1. 装 CLI(npm 用户 npm i -g @fxri/toolkit)
25
25
  toolkit skills install # 2. 把包内技能装到各 agent 的全局技能目录
26
- toolkit skills status # 查现场状态(悬空 / 指向错误 / 副本漂移 / 缺失 / 同名冲突)
26
+ toolkit skills status # 查现场状态(悬空 / 指向其他版本 / 副本漂移 / 缺失 / 同名冲突)
27
27
  # 前四类重跑 toolkit skills install 补齐,同名冲突需 toolkit skills install --force 覆盖
28
28
  toolkit skills remove # 卸载本包装的产物(只清自己装的,不碰用户自装技能)
29
29
  ```
30
30
 
31
31
  - 真源唯一:技能取自已装 CLI 包内的 `skills/`;软链锚在 pnpm 稳定入口,升级 CLI 后自动指向新版(副本形式需重跑 `toolkit skills install`)
32
32
  - 目标三层:主目标 `~/.agents/skills/`(多家 agent 共读)→ 内置表内**已安装**的各 agent 全局技能目录 → `--dir <path>` 兜底(可多次指定,给表外 agent 用)
33
- - 默认软链(锚在 pnpm 稳定入口,升级不失效);链接创建失败自动降级为副本并打印 ⚠️(如无权限建链);`--copy` 强制副本、`--dry-run` 预演、`--force` 覆盖同名非本包产物
34
- - 产物记录在状态文件 `~/.agents/.toolkit-skills.json`;卸载 CLI 前先跑 `toolkit skills remove`,避免留下悬空链接
33
+ - 默认软链(锚在 pnpm 稳定入口,升级不失效);链接创建失败自动降级为副本并打印 ⚠️(如无权限建链);`--copy` 强制副本、`--dry-run` 预演、`--force` 覆盖同名非本包产物(不改本包已登记副本的形态)
34
+ - 产物记录在状态文件 `~/.agents/.toolkit-skills.json`;卸载 CLI 前先跑 `toolkit skills remove`,避免留下悬空链接(清理后目标目录若已空会一并回收)
35
35
 
36
36
  ### 方式二:上游安装器 `npx skills`(需锁定文件或覆盖表外 agent 时)
37
37
 
@@ -96,5 +96,5 @@ pnpm dlx skills add fxri-toolkit --global # npm 用户把 pnpm dlx 换成
96
96
  - [ ] 引用的 references / assets 相对路径有效
97
97
  - [ ] 技能用途描述已同步 docs/guide 技能表与本文「技能列表」表(含版本标注)
98
98
  - [ ] 涉规范载体(conventions)的改动:`fxri-session-recap/SKILL.md` 的 R3 压缩要点已与 `fxri-plan-to-task/references/conventions-spec.md` 同步(跨 skill 不可引用,只能受控重复,两处不一致即失一致)
99
- - [ ] 涉规范载体(conventions)的改动:`src/init.ts` 的 `index.md` 骨架模板与 `src/tasks/validate.ts` 的形态告警口径已同步(CLI 侧与 skills 细则同源)
99
+ - [ ] 涉规范载体(conventions)的改动:`src/init.ts` 的 `index.md` / `history.md` 骨架模板与入口壳版本分流、`src/tasks/validate.ts` 的形态告警口径、`src/conventions/` 的形态识别与升级链路、`src/conventions/entry.ts` 的入口壳生成与版本告警已同步(CLI 侧与 skills 细则同源)
100
100
  - [ ] 变更已走本仓库质量门:三方一致 + tasks check + pnpm test
@@ -1,27 +1,27 @@
1
1
  ---
2
2
  name: fxri-plan-to-task
3
- description: 将已确认的实施方案落盘为标准任务文件并跟踪至归档:动手前建档评估(查 active/archive 判同主题)、按模板建档、状态机更新、四级时间源取证、自查校验、任务级规范沉淀与手工归档。当用户确认方案后表达「开始落地/登记记录」的意图,或即将动手改仓库文件时使用——含建档、任务登记、落盘、归档、任务校验、规范载体迁移(conventions 单文件升目录形态)等说法及其口语近义表达(如按这个做吧、记一下、建个任务跟踪)均触发。不用于方案未确认的对话、会话收尾整场沉淀(fxri-session-recap 模式一)、与任务记录无关的普通 TODO、issue 管理或日常提交信息撰写。
3
+ description: 将已确认的实施方案落盘为标准任务文件并跟踪至归档:动手前建档评估(查 active/archive 判同主题)、按模板建档、状态机更新、四级时间源取证、自查校验、任务级规范沉淀与手工归档。当用户确认方案后表达「开始落地/登记记录」的意图,或即将动手改仓库文件时使用——含建档、任务登记、落盘、归档、任务校验、规范载体迁移与升级(conventions 单文件升目录形态、v1 升 v2)等说法及其口语近义表达(如按这个做吧、记一下、建个任务跟踪)均触发。不用于方案未确认的对话、会话收尾整场沉淀(fxri-session-recap 模式一)、与任务记录无关的普通 TODO、issue 管理或日常提交信息撰写。
4
4
  license: MIT
5
5
  metadata:
6
- version: "1.3.2"
6
+ version: "1.4.3"
7
7
  author: fxri
8
8
  source: https://github.com/fxri-net/toolkit
9
9
  ---
10
10
 
11
11
  # 方案落盘:任务建档与归档
12
12
 
13
- > 本技能版本 1.3.2(随 @fxri/toolkit 同批分发)。被问版本时即报此值——不读磁盘、不跑 CLI:报出的值就是本会话上下文里已加载内容的版本,可与 `toolkit skills status` 打印的磁盘基准值对照,不一致即说明会话上下文已过期,开新会话即可。
13
+ > 本技能版本 1.4.3(随 @fxri/toolkit 同批分发)。被问版本时即报此值——不读磁盘、不跑 CLI:报出的值就是本会话上下文里已加载内容的版本,可与 `toolkit skills status` 打印的磁盘基准值对照,不一致即说明会话上下文已过期,开新会话即可。
14
14
 
15
15
  ## 何时使用
16
16
 
17
- - 用户确认实施方案后,表达开始落地/登记记录的意图(语义触发,不要求字面一致):建档 / 任务登记 / 落盘 / 归档 / 任务校验 / 规范载体迁移 / 按这个做吧 / 记一下 / 建个任务跟踪
17
+ - 用户确认实施方案后,表达开始落地/登记记录的意图(语义触发,不要求字面一致):建档 / 任务登记 / 落盘 / 归档 / 任务校验 / 规范载体迁移与升级 / 按这个做吧 / 记一下 / 建个任务跟踪
18
18
  - **即将动手改仓库文件前**(方案已确认、准备执行改动)也是本技能适用场景——动手前先做建档评估(见工作流第 1 步),避免跳过建档直接执行
19
19
  - 触发前置条件:**方案已确认**。用户说「开始/开工」但方案尚未确认时,先出方案等确认,不建档
20
20
  - **何时不使用**:方案未确认的对话;会话收尾的整场沉淀与归档(那是 fxri-session-recap 模式一);收尾动作(提交、发版、推送、部署)本身——动作不算、改动才算(见工作流第 1 步);与方案落盘无关的普通 TODO、issue 管理、日历待办、日常提交信息撰写
21
21
 
22
22
  ## 核心约定
23
23
 
24
- 任务文件规范(目录结构、命名、frontmatter 字段、归档格式、手工归档步骤、自查清单)全部以 `references/task-spec.md` 为准;规范载体(conventions)的结构、端名规则、读写判定与存量迁移以 `references/conventions-spec.md` 为准。本文件只写流程。执行任何写操作前先读它们。
24
+ 任务文件规范(目录结构、命名、frontmatter 字段、归档格式、手工归档步骤、自查清单)全部以 `references/task-spec.md` 为准;规范载体(conventions)的结构、形态标记与稳定 ID、归属判定、读写判定、内容修订、存量迁移与 v1→v2 升级、入口壳以 `references/conventions-spec.md` 为准。本文件只写流程。执行任何写操作前先读它们。
25
25
 
26
26
  ## 核心规则
27
27
 
@@ -44,7 +44,7 @@ metadata:
44
44
 
45
45
  - 无 `.tasks/` 任务区时先执行 `toolkit init` 建骨架(幂等,已存在不覆盖)
46
46
  - 列出任务目录 `active/` 下全部 `.md`(含一层 `{YYYYMM}/` 月份子目录),并核对 `archive/` 是否已有同主题任务
47
- - 读 conventions 载体(存在时):先找 `.tasks/conventions/index.md`,不存在再看旧单文件 `.tasks/conventions.md`(兼容期读取,并在对话中提示可迁移);常驻只读 `index.md`,再按本任务 `scope` 命中加载 `common` 与端分册(判定见 `references/conventions-spec.md`);项目协作规范在建档与执行时须遵守;规范载体本身不属于任务,不为其建档
47
+ - 读 conventions 载体(存在时):先找 `.tasks/conventions/index.md`,不存在再看旧单文件 `.tasks/conventions.md`(兼容期读取,并在对话中提示可迁移);常驻只读 `index.md`(`history.md` 与各分册按需读),再按本任务 `scope` 命中加载 `common` 与端分册(形态识别与读写判定见 `references/conventions-spec.md`)——载体也可能经项目级技能入口壳(如 `.agents/skills/toolkit-conventions/`)把 agent 引到此处;项目协作规范在建档与执行时须遵守;规范载体本身不属于任务,不为其建档
48
48
  - **同主题判别表**(建档前必须按此决策):
49
49
  | 现状 | 本次是否产生仓库文件改动 | 处理 |
50
50
  | --- | --- | --- |
@@ -86,9 +86,10 @@ metadata:
86
86
 
87
87
  - 读 conventions 载体(`index.md` 常驻 + 按本任务 `scope` 命中加载分册),判断本任务是否产出可升格规范:用户明示「以后都要这样」的规则、与已有规范重复印证的决策
88
88
  - **归属判定**:先问「是否**所有端都适用**」→ 是则归 `common`;否则逐端确认 → 写入命中的端分册(禁止跨端合并归属;`common` 不得用作「不确定归哪端」的暂存区)
89
- - 有候选 → 输出给用户确认 → 写索引行(带「确立来源任务」)并把条文归位;无候选 → **完全静默**
89
+ - 有候选 → 输出给用户确认 → 写索引行(首列稳定 ID `C-<n>`、带「确立来源任务」)并把条文归位;无候选 → **完全静默**
90
+ - 变更已有规范语义时,先在 `history.md` 追加一行留痕,再更新索引行「当前语义」(细则见 `references/conventions-spec.md`)
90
91
  - 一次性决策不进规范,留在任务正文
91
- - **存量迁移**:发现旧单文件 `conventions.md`(或用户要求迁移)时,按 `references/conventions-spec.md` 的迁移三段式执行(建目录搬原文 → 逐条提归属建议 → 用户确认后拆分册),可中断不丢内容
92
+ - **存量迁移与升级**:发现旧单文件 `conventions.md` 时按迁移三段式执行(建目录搬原文 → 逐条提归属建议 → 用户确认后拆分册);载体为 v1 或 `check` / `toolkit conventions status` 报形态告警时,按 `references/conventions-spec.md` 的 v1→v2 链路升级(优先 `toolkit conventions upgrade`,可 `--dry-run` 预演);均可中断不丢内容
92
93
 
93
94
  ### 6. 收尾边界(硬约束到沉淀)
94
95
 
@@ -114,4 +115,6 @@ metadata:
114
115
  - `toolkit tasks check`:自动校验(替代第 4 步自查清单)
115
116
  - `toolkit tasks archive`:自动归档(替代第 5 步,含排他锁防并发;可 `--dry-run` 预演)
116
117
  - `toolkit tasks normalize`:归档后核验归档块(元数据完整性/日期漂移/排序),可 `--fix` 自动修复
118
+ - `toolkit conventions status`:只读体检载体形态与入口壳现场(替代第 1 步人工判形态、第 5.5 步沉淀前后自查)
119
+ - `toolkit conventions upgrade`:v1 → v2 结构升级(第 5.5 步,纯机械、幂等;可 `--dry-run` 预演)
117
120
  - 任务目录非默认 `.tasks` 时加 `--dir <path>`