@fxri/toolkit 1.9.5 → 1.10.1

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 q=["\u5F85\u529E","\u8FDB\u884C\u4E2D","\u5DF2\u5B8C\u6210","\u963B\u585E","\u5DF2\u653E\u5F03"],z=["\u5DF2\u5B8C\u6210","\u5DF2\u653E\u5F03"],ee=["owner","status","created","updated","completed","depends_on","scope"];import{readFileSync as $t}from"fs";function O(e){return e.replace(/^\uFEFF/,"")}function L(e){return O($t(e,"utf8"))}var te=/^---\r?\n([\s\S]*?)\r?\n---/;function ne(e){let t=O(e).match(te);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 ne(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 re(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 xe,statSync as xt}from"fs";import{join as Te,basename as Tt,extname as Rt}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 xe(e)){let s=Te(e,o);if(xt(s).isDirectory()){if(!r(o))continue;for(let i of xe(s))i.endsWith(".md")&&n.push(Te(s,i))}else o.endsWith(".md")&&n.push(s)}return n}function D(e){return Tt(e,Rt(e)).match(/^(\d{8})/)?.[1]??""}import{readFileSync as Ht}from"fs";import{join as Zt,basename as He}from"path";import{existsSync as At}from"fs";import{join as Re,dirname as Ct}from"path";import{homedir as Ft}from"os";var K,Lt;function Et(){return Lt??Ft()}function Ae(e){if(!At(e))return null;try{let t=JSON.parse(L(e));return typeof t=="object"&&t!==null?t:null}catch{return null}}function Ot(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 Ce(){if(K!==void 0)return K;let e=Ae(Re(Et(),".toolkitrc.json")),t=null,n=process.cwd();for(;;){let r=Ae(Re(n,".toolkitrc.json"));if(r){t=r;break}let o=Ct(n);if(o===n)break;n=o}return K=Ot(e,t),K}function U(e){let t=Ce();if(!t)return;let n=t[e];return typeof n=="object"&&n!==null?n:void 0}function It(){K=void 0}function Fe(e,t){let n=e.trim().toLowerCase();return["1","true","on","yes"].includes(n)?!0:["0","false","off","no"].includes(n)?!1:t}function Le(e,t,n,r){if(e!==void 0)return e;let o=process.env[t];return o!==void 0&&o!==""?Fe(o,r):n!==void 0?n:r}var Mt=[{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 Bt(){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 _t(){let e=Bt(),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,...Mt.filter(r=>!t.has(r.name))]}function C(e,t){if(!t||!e)return e;let n=e;for(let r of _t())n=n.replace(r.pattern,r.replacement);return n}import{readFileSync as We}from"fs";import{join as ze,basename as zt}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 S(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 Ie(e){return e.match(/^\d{8}-(.+?)-/)?.[1]??""}function jt(e,t){return`> \u8D1F\u8D23\u4EBA\uFF1A${Ie(e)||"\u672A\u6807\u6CE8"}\u3000\u72B6\u6001\uFF1A\u5DF2\u5B8C\u6210\u3000\u8303\u56F4\uFF1A-\u3000\u5B8C\u6210\u65F6\u95F4\uFF1A${S(t)}`}function Me(e,t,n){let r=Y(n),o=r.owner||Ie(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${S(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=Ee(n[0]??[]),i=s.findIndex(l=>/^## .+/.test(l));i>=0&&o.push(Oe(s.slice(i)));for(let l=1;l<n.length;l++){let d=Ee(n[l]??[]);d.length!==0&&(/^## .+/.test(d[0]??"")?o.push(Oe(d)):Nt(o,d.join(`
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
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 Ee(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 Oe(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 Nt(e,t){let n=e[e.length-1];!n||!t||(n.body=n.body?`${n.body}
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}
6
6
 
7
- ${t}`:t)}function Be(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 pe(e){let t=e.metaLine??(e.completed?jt(e.title,e.completed):null);return t?`## ${e.title}
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}
8
8
 
9
9
  ${t}
10
10
 
11
11
  ${e.body}`:`## ${e.title}
12
12
 
13
- ${e.body}`}function Dt(e){let t=new Map;for(let s of e)t.set(s.title,s);let n=[...t.values()],r=n.filter(s=>S(s.completed)),o=n.filter(s=>!S(s.completed));return r.sort((s,i)=>S(i.completed).localeCompare(S(s.completed))),[...r,...o]}function W(e,t,n=`
14
- `){let r=Dt(t).map(pe).join(`
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(`
15
15
 
16
16
  ---
17
17
 
@@ -19,47 +19,47 @@ ${e.body}`}function Dt(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 oe(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 Yt,sep as Wt}from"path";function I(e,t){return Yt(e,t).split(Wt).join("/")}var P=e=>String(e).padStart(2,"0");function _e(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 v(e){let t=_e(e);return t?`${t.y}-${t.m}-${t.d}`:""}function je(e){let t=_e(e);return t?`${t.y}${t.m}${t.d}`:e.trim().replace(/[-/]/g,"")}function Ne(){let e=new Date;return`${e.getFullYear()}-${P(e.getMonth()+1)}-${P(e.getDate())}`}function fe(){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 Ue(e=".tasks"){let t=ze(e,"active");return T(t).map(n=>{let r=We(n,"utf8"),o=j(r);return{view:"\u5F85\u5B8C\u6210",title:re(r)||zt(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:oe(o.depends_on),file:I(e,n)}})}function Ut(e){let t=Y(e);return{owner:t.owner||"\u672A\u6807\u6CE8",status:t.status||"\u5DF2\u5B8C\u6210",scope:t.scope||"-"}}function Pe(e=".tasks",t){let n=ze(e,"archive"),r=[];for(let o of T(n,t)){let s=We(o,"utf8");for(let i of R(s).blocks){let c=Ut(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 Pt(e){return e.split("+").map(t=>t.trim()).filter(Boolean)}function Vt(e,t){if(e===void 0)return!0;let n=Array.isArray(e)?e:[e],r=Pt(t);return n.some(o=>r.includes(o))}function De(e,t){return e===void 0?!0:Array.isArray(e)?e.includes(t):e===t}function Gt(e,t){if(!De(t.owner,e.owner)||!Vt(t.scope,e.scope)||!De(t.status,e.status))return!1;if(t.date||t.since||t.until){let n=t.date?v(t.date):v(t.since||""),r=t.date?v(t.date):v(t.until||"");if(!n&&!r||!(e.view==="\u5DF2\u5F52\u6863"?[v(e.completed)]:[v(e.created),v(e.updated)].filter(Boolean)).some(i=>i&&(!n||i>=n)&&(!r||i<=r)))return!1}return!0}function Ve(e){return e.view==="\u5DF2\u5F52\u6863"?v(e.completed):v(e.created||e.updated||e.completed)}function Ye(e){let t=e.view==="\u5DF2\u5F52\u6863"?e.completed:e.completed||e.updated||e.created,n=v(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 Ge(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:Ye(r).localeCompare(Ye(n))})}function Je(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 Jt(e){if(!e.date&&!e.since&&!e.until)return;let t=e.date?v(e.date):v(e.since||""),n=e.date?v(e.date):v(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 me(e=".tasks",t="active",n={}){let r=[];(t==="active"||t==="all")&&r.push(...Ue(e)),(t==="archived"||t==="all")&&r.push(...Pe(e,Jt(n))),r=r.filter(s=>Gt(s,n));let o=Ge(r);return{rows:o,summary:Je(o)}}function qt(e=".tasks"){let t=Zt(e,"active");return T(t).map(n=>{let r=Ht(n,"utf8"),o=j(r),s=re(r)||He(n,".md");return{file:n,name:He(n,".md"),date:D(n),title:s,frontmatter:o,body:N(r).trim()}})}function Kt(e=".tasks",t=!0){Ze(e,"active",{},t)}function Ze(e=".tasks",t="active",n={},r=!0){let{rows:o,summary:s}=me(e,t,n);Xt(o,s,t,n,r)}function Xt(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 f of d){let g=n==="all"?`${f.view} `:"";console.log(` ${Ve(f)} ${g}${(f.owner||"\u672A\u6807\u6CE8").padEnd(8)} ${C(f.title,o)}\uFF08${f.scope||"-"}\uFF09`)}console.log("")}}Qt(t)}function Qt(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 on}from"fs";import{dirname as sn}from"path";import{createRequire as cn}from"module";import{writeFileSync as en,renameSync as tn}from"fs";import{dirname as nn,join as rn}from"path";function F(e,t){let n=rn(nn(e),`.tmp-${process.pid}-${Date.now().toString(36)}`);en(n,t),tn(n,e)}var an=cn(import.meta.url);function ge(e){on(sn(e),{recursive:!0})}var se=[{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?v(e.created):""},{label:"\u66F4\u65B0\u65E5\u671F",value:e=>e.updated?v(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}],ln=[{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?v(e.created):""},{label:"\u66F4\u65B0\u65E5\u671F",value:e=>e.updated?v(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:"\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 qe(e,t=!0){let n=se.map(o=>o.label).join(","),r=e.map(o=>se.map(s=>{let i=s.label==="\u4EFB\u52A1\u540D"?C(s.value(o),t):s.value(o);return dn(i)}).join(",")).join(`\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
24
24
  `);return`\uFEFF${n}${r?`\r
25
- ${r}`:""}`}function Ke(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=an("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,p)=>{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 p)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,ln,s);let d=o.addWorksheet("\u5DF2\u5F52\u6863");c(d,un,i);let f=o.addWorksheet("\u6C47\u603B");f.columns=[{header:"\u7C7B\u522B",key:"k",width:10},{header:"\u6570\u503C",key:"v",width:12}];let g=(a,u)=>{f.addRow([a,""]).font={bold:!0};for(let[p,h]of Object.entries(u).sort((b,x)=>x[1]-b[1]))f.addRow([p,h])};f.addRow(["\u4EFB\u52A1\u603B\u6570",t.total]).font={bold:!0},g("\u6309\u72B6\u6001",t.byStatus),g("\u6309\u8D1F\u8D23\u4EBA",t.byOwner),f.addRow([]);let m=f.addRow(se.map(a=>a.label));m.font={bold:!0};for(let a of e)f.addRow(se.map(u=>u.label==="\u4EFB\u52A1\u540D"?C(u.value(a),n):u.value(a)));return Buffer.from(await o.xlsx.writeBuffer())}async function fn(e,t,n,r=!0){let o=e.split(".").pop()?.toLowerCase();if(o==="csv")ge(e),F(e,qe(t,r));else if(o==="json")ge(e),F(e,Ke(t,n,r));else if(o==="xlsx")ge(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 ke,mkdirSync as tt}from"fs";import{join as J}from"path";import{createRequire as xn}from"module";import{openSync as mn,writeSync as gn,readFileSync as hn,unlinkSync as Xe,statSync as kn,closeSync as bn}from"fs";import{join as Qe}from"path";var yn=600*1e3,wn=1800*1e3,he={pid:process.pid,startedAt:Math.round(Date.now()-process.uptime()*1e3)};function et(e){try{let t=JSON.parse(hn(e,"utf8"));if(typeof t.pid=="number"&&typeof t.startedAt=="number")return{pid:t.pid,startedAt:t.startedAt}}catch{}return null}function vn(e){try{return process.kill(e,0),!0}catch(t){return t.code==="EPERM"}}function $n(e){try{return Date.now()-kn(e).mtimeMs}catch{return Number.POSITIVE_INFINITY}}function Sn(e,t,n){let r=$n(e);return r>wn?!0:t?!vn(t.pid):r>n}function V(e,t=yn){let n=Qe(e,".archive.lock");for(let r=0;r<2;r++)try{let o=mn(n,"wx");return gn(o,JSON.stringify(he)),o}catch{if(!Sn(n,et(n),t))return null;try{Xe(n)}catch{}}return null}function G(e,t){bn(t);let n=Qe(e,".archive.lock"),r=et(n);if(!(!r||r.pid!==he.pid||r.startedAt!==he.startedAt))try{Xe(n)}catch{}}var Tn=xn(import.meta.url),nt={\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:""},Rn=new Set(["title","depends","body"]),An=/^[A-Za-z][A-Za-z0-9_.-]*$/;function rt(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=nt[s]),i!==""&&i&&!n.has(i)&&n.set(i,o)}),n}function Cn(e){let t=[],n=O(e).replace(/\r\n/g,`
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,`
26
26
  `).replace(/\r/g,`
27
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 Fn(e,t){let n=Cn(e);if(n.length===0)return[];let r=rt(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 Ln(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=rt(s,t);if(i.has("title")){for(let c=r+1;c<=e.rowCount;c++){let l=e.getRow(c),d={},f=!0;for(let[g,m]of i){let a=(l.getCell(m+1).text??"").trim();a&&(f=!1),d[g]=a}!f&&(d.title||Object.keys(d).length>0)&&n.push(d)}break}}return n}async function En(e,t){let n=Tn("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(...Ln(s,t));return o}function On(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(),f;t[d]!==void 0&&(f=t[d]),f===void 0&&(f=nt[d]),f&&(Array.isArray(l)?i[f]=l.join(","):l!=null&&(i[f]=String(l)))}o.push(i)}return o}function In(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 Mn(e,t,n){let r={};for(let[o,s]of Object.entries(e)){if(Rn.has(o)||ee.includes(o))continue;let i=(s??"").trim();if(i){if(!An.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 Bn(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,f])=>`${d}=${f}`).join(" ")}\uFF09`),{ok:!1};let o=(e.status||"").trim()||"\u5F85\u529E";q.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()?S(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:je(e.created||""),completed:s,depends:l,body:e.body?.trim()||"",extra:Mn(e,r,n)}}}function _n(e,t,n,r){let o=t.created||fe(),s=J(e,"active",o.slice(0,6)),{slug:i,truncated:c}=In(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,f=J(s,`${l}.md`);for(;ke(f);)f=J(s,`${l}-${d++}.md`);let m=["---",`owner: ${t.owner}`,`status: ${t.status}`,`created: ${o}`,`updated: ${fe()}`,`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(`
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(`
29
29
  `)+(t.body?`
30
30
 
31
31
  ${t.body}
32
32
  `:`
33
- `);return n||(tt(s,{recursive:!0}),F(f,m)),f}function jn(e,t){let n=e.completed||"",r=n?v(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?`
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
34
 
35
- ${e.body}`:""}`;return{date:s,block:{title:e.title,metaLine:i,completed:n,body:c}}}function Nn(e,t){return J(e,"archive",t.slice(0,6),`${t}.md`)}function Dn(e,t,n){let r=J(e,"archive",t.slice(0,6)),o=J(r,`${t}.md`);tt(r,{recursive:!0});let s=`# ${t} \u5F52\u6863
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
36
36
 
37
37
  > \u672C\u6587\u4EF6\u7531 \`toolkit tasks import --target archive\` \u81EA\u52A8\u751F\u6210\u3002
38
- `,i=[];if(ke(o)){let c=R(L(o));c.header&&(s=c.header),i=c.blocks}i.push(...n),F(o,W(s,i))}async function Yn(e,t=".tasks",n={}){let r=!!n.dryRun,o=[],s=Object.fromEntries(Object.entries(n.importColumns??{}).map(([u,p])=>[String(u).trim().toLowerCase(),String(p)])),i=e.split(".").pop()?.toLowerCase(),c;if(i==="csv")c=Fn(L(e),s);else if(i==="xlsx")c=await En(e,s);else if(i==="json")c=On(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,f=n.target??"active",g=new Map,m=null;if(!r&&ke(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 p=Bn(u,n,o);if(!p.ok){d++;continue}let h=p.t;if(f==="archive"){let b=jn(h,o);if(!b){d++;continue}let x=g.get(b.date);x?x.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,Nn(t,b.date))}`)}else{let b=_n(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,p]of g)Dn(t,u,p)}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 Wn,unlinkSync as zn,existsSync as Un,readdirSync as Pn,rmdirSync as Vn}from"fs";import{join as ie,basename as be,dirname as st,resolve as ot,sep as Gn}from"path";function ce(e,t){let n=ot(e),r=ot(t);for(;n!==r&&n.startsWith(r+Gn);){try{if(Pn(n).length>0)break;Vn(n)}catch{break}n=st(n)}}function Jn(e){let t=ye(e,"utf8"),{blocks:n}=R(t);return n.map(r=>({block:pe(r),completed:r.completed}))}function Hn(e=".tasks",t=!0,n={}){let{dryRun:r=!1,warn:o=!0}=n,s=ie(e,"active"),i=ie(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=[],f=[];for(let a of l){let u=ye(a,"utf8").replace(/\r\n?/g,`
39
- `),p=j(u);if(!z.includes(p.status))continue;let h=S(p.completed||"");if(!h){f.push(be(a,".md")),console.log(`\u8DF3\u8FC7 ${be(a,".md")}\uFF1A\u7F3A\u5C11 completed \u5B8C\u6210\u65F6\u95F4`);continue}d.push({file:a,name:be(a,".md"),owner:p.owner||"\u672A\u6807\u6CE8",status:p.status||"\u672A\u6807\u6CE8",scope:p.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:f,warnings:c};if(o)for(let a of d){let u=a.completed.replace(/-/g,"").slice(0,8),p=D(a.file);p&&u!==p&&c.push(`\u4EFB\u52A1\u300C${a.name}\u300D\u5B8C\u6210\u65F6\u95F4 ${a.completed} \u4E0E\u521B\u5EFA\u65E5 ${p} \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:f,warnings:[...c,a]}}try{let a=0,u=[];for(let[p,h]of Object.entries(g)){let b=ie(i,p.slice(0,6)),x=ie(b,`${p}.md`),B=Un(x)?ye(x,"utf8"):"",de=`# ${p} \u5F52\u6863
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
40
40
 
41
- > \u672C\u6587\u4EF6\u7531 \`toolkit tasks archive\` \u81EA\u52A8\u751F\u6210\u3002`,_=[];if(B){let $=R(B);$.header&&(de=$.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 ${p}.md`);for(let $ of h)console.log(`[\u9884\u6F14] - ${$.name}`);continue}try{Wn(b,{recursive:!0});let $=B.includes(`\r
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
42
42
  `)?`\r
43
43
  `:`
44
- `;F(x,W(de,_,$));for(let A of h)zn(A.file);let k=h[0];k&&ce(st(k.file),e),console.log(`\u5DF2\u5F52\u6863 ${h.length} \u4E2A\u4EFB\u52A1 \u2192 ${p}.md`),a+=h.length}catch($){u.push(`${p}.md\uFF1A${$.message}`)}}for(let p of c)console.warn(`\u26A0\uFE0F ${p}`);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 p of u)console.error(` - ${p}`)}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:f,warnings:c}}finally{if(m!==null)try{G(e,m)}catch{}}}import{statSync as Zn,readdirSync as it,existsSync as qn}from"fs";import{join as we,basename as X,dirname as Kn}from"path";var ct=/待办|待实施|待核对|待确认|待开始|待评估|待排期|待做|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 at(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 lt(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 dt(e){let t=[],n=X(e),r=L(e),o=r.split(/\r?\n/),s=te.exec(r)?.[0].split(/\r?\n/).length??0;if(!te.test(r))return t.push({level:"error",file:n,line:1,message:"\u7F3A\u5C11 frontmatter"}),t;let c=ne(r);for(let a of Object.keys(c))ee.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?q.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 ${q.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 p=a.match(/^\d{4}-\d{1,2}-\d{1,2}/)?.[0]??a;at(p)?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())?at(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(ct):null;return g&&t.push({level:"warn",file:n,line:lt(o,s,ct),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:lt(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(!qn(e))return t;for(let n of it(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 it(we(e,n.name)))r.endsWith(".md")&&/^\d{8}-/.test(r)&&t.push(`${n.name}/${r}`)}return t}function or(e=".tasks"){let t=we(e,"active"),n=T(t),r=[];for(let c of n)r.push(...dt(c)),Kn(c)===t&&r.push({level:"warn",file:X(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"});let o=new Map;for(let c of n){let l=X(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(...ir(n,e));let s=r.filter(c=>c.level==="error").length,i=r.length-s;return{issues:r,errorCount:s,warnCount:i}}var ut=new Map;function sr(e){let t=Zn(e),n=ut.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 ut.set(e,{mtimeMs:t.mtimeMs,titles:r}),r}function ir(e,t){let n=[],r=new Set(e.map(a=>X(a,".md"))),o=new Map,s=a=>a.trim().replace(/\.md$/,"").trim();for(let a of e){let u=X(a,".md"),p=L(a),h=ne(p);o.set(u,oe(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(we(t,"archive")))for(let p of sr(u))i.has(p)||i.set(p,I(t,u))}return i.get(a)};for(let[a,u]of o)for(let p of u)if(!r.has(p)){let h=c(p);n.push({level:"warn",file:a,message:h?`\u4F9D\u8D56\u7684\u4EFB\u52A1\u300C${p}\u300D\u4E0D\u5728 active \u4E2D\uFF08\u5DF2\u5F52\u6863\u4E8E ${h}\uFF0C\u65E0\u9700\u518D\u4F9D\u8D56\uFF09`:`\u4F9D\u8D56\u7684\u4EFB\u52A1\u300C${p}\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,f=2,g=new Map,m=(a,u)=>{g.set(a,d);for(let p of o.get(a)??[]){if(!r.has(p))continue;let h=g.get(p)??l;if(h===d)return[...u,p];if(h===l){let b=m(p,[...u,p]);if(b)return b}}return g.set(a,f),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 ae,unlinkSync as cr,existsSync as le,mkdirSync as pt,renameSync as ar}from"fs";import{join as Z,basename as H,dirname as Q}from"path";var lr=["\u8D1F\u8D23\u4EBA","\u72B6\u6001","\u8303\u56F4","\u5B8C\u6210\u65F6\u95F4"];function ft(e){return lr.every(t=>e.includes(t))}function ur(e){if(!/[、,,]/.test(e))return null;let t=e.split(/[、,,]/).map(n=>n.trim()).filter(Boolean);return t.length>0?t.join("+"):null}function dr(e,t){return e.replace(/(范围[::])[^ ]*/,`$1${t}`)}function pr(e=".tasks"){let t=Z(e,"archive"),n=T(t),r=[];for(let o of n){let s=H(o),i=s.replace(/\.md$/,""),c=ae(o,"utf8"),{blocks:l}=R(c),d=H(Q(o)),f=s.replace(/\.md$/,"");d&&f&&d!==f.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 ${f.slice(0,6)} \u4E0D\u4E00\u81F4`,fixable:!1});for(let g of Be(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=S(m.completed),p=S(a.completed);if(u&&p&&u<p){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?ft(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=S(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 fr(e,t,n){let r=Z(e,"archive",n.slice(0,6)),o=Z(r,`${n}.md`);pt(r,{recursive:!0});let s=`# ${n} \u5F52\u6863
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
45
45
 
46
- > \u672C\u6587\u4EF6\u7531 \`toolkit tasks archive\` \u81EA\u52A8\u751F\u6210\u3002`,i=[];if(le(o)){let l=R(ae(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=le(o)&&ae(o,"utf8").includes(`\r
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
47
47
  `)?`\r
48
48
  `:`
49
- `;F(o,W(s,i,c)),console.log(` \u5757\u300C${t.title}\u300D\u8FC1\u79FB \u2192 ${n}.md`)}function mr(e=".tasks"){let t=Z(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+=gr(e,t,i,r)}catch(c){r.push({file:H(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 gr(e,t,n,r){let o=0,s=n,i=H(s),c=i.replace(/\.md$/,""),l=H(Q(s)),d=/^\d{8}$/.test(c)?c.slice(0,6):"";if(d&&l!==d){let k=Z(t,d,i);le(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(Z(t,d),{recursive:!0}),ar(s,k),s=k,ce(Q(n),t))}let f=ae(s,"utf8"),{header:g,blocks:m}=R(f),a=[],u=s!==n;s!==n&&(a.push(`\u79FB\u52A8\u81F3 ${H(Q(s))} \u6708\u4EFD\u76EE\u5F55`),o++);for(let k of m)k.completed&&(!k.metaLine||!ft(k.metaLine))&&(k.metaLine=Me(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 $e=ur(A.scope);$e&&(k.metaLine=dr(k.metaLine,$e),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 p=[],h=0;for(let k of m){let A=k.completed?S(k.completed).replace(/-/g,"").slice(0,8):"";A&&A!==c?(fr(e,k,A),h++,u=!0):p.push(k)}h>0&&(a.push(`\u8FC1\u79FB ${h} \u4E2A\u6F02\u79FB\u5757`),o+=h);let b=p.filter(k=>k.completed),x=p.filter(k=>!k.completed),B=[...b].sort((k,A)=>S(A.completed).localeCompare(S(k.completed)));JSON.stringify(B.map(k=>k.title))!==JSON.stringify(b.map(k=>k.title))&&(p.splice(0,p.length,...B,...x),a.push("\u964D\u5E8F\u91CD\u6392"),o++,u=!0);let _=/^---\s*\r?\n\r?\n---/m.test(f);_&&(a.push("\u6E05\u7406\u5197\u4F59\u5206\u9694\u7B26"),o++);let $=f.includes(`\r
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
50
50
  `)?`\r
51
51
  `:`
52
- `;return m.length>0&&p.length===0?(le(s)&&cr(s),ce(Q(s),t),a.push("\u5220\u9664\u7A7A\u5F52\u6863\u6587\u4EF6"),u=!0):(u||_)&&F(s,W(g,p,$)),a.length>0&&console.log(` ${i}: ${a.join("\u3001")}`),o}var mt={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:[]},gt={"### \u{1F41B} \u8865\u4E01\u4FEE\u590D":"fixed"},ht={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"}},Vs="zh";import{readdirSync as hr}from"fs";import{join as kt}from"path";function ve(e){let t=[],n=new Set(["node_modules",".git","dist","coverage"]),r=o=>{let s;try{s=hr(o,{withFileTypes:!0})}catch{return}for(let i of s)if(i.isDirectory()){if(n.has(i.name))continue;r(kt(o,i.name))}else i.name==="CHANGELOG.md"&&t.push(kt(o,i.name))};return r(e),t}import{readFileSync as kr,writeFileSync as br}from"fs";var ue=/^## \d+\.\d+\.\d+/,yt={"### Major Changes":"breaking","### Minor Changes":"added","### Patch Changes":"other","### Dependent Changes":"deps"},yr="- Updated dependencies",wr=Object.values(ht).map(e=>e.released);function vr(){return Ne()}function wt(e,t,n,r=!0,o=!1){let s=kr(e,"utf8"),i=s.includes(`\r
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
53
53
  `)?`\r
54
54
  `:`
55
55
  `,c=s.replace(/\r\n/g,`
56
- `),l=Or(Cr(c),n,o);for(let[h,b]of Object.entries(n.replacements))l=l.replaceAll(h,b);for(;l.includes(`${n.deps}
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
57
  ${n.deps}`);)l=l.replace(`${n.deps}
58
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
- `),f=[],g=[n.released,...wr].map(Sr),m=new RegExp(`^> \\d{4}-\\d{2}-\\d{2} (?:${g.join("|")})$`),a=0;for(;a<d.length;){let h=d[a]??"";if(ue.test(h)){let b=a+1;for(;b<d.length&&(d[b]??"").trim()==="";)b++;let x=d[b]??"";if(x.startsWith("> ")&&m.test(x.trim())){f.push(h,"",x),a=b+1;continue}f.push(h,"",`> ${t} ${n.released}`,""),a=b;continue}f.push(h),a++}let u=f.join(`
60
- `),p=C(u,r);return p!==c?(br(e,p.replace(/\n/g,i),"utf8"),!0):!1}function $r(e,t,n,r=!0,o=!1){let s=[];for(let i of ve(e))wt(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 xr(e){let t=[];for(let n of e)for(let r of n.prefixes??[])t.push([n.slot,r]);return t}function vt(e,t){let n=e.slice(2);for(let[r,o]of Object.entries(mt)){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 Tr(e,t){return e.startsWith(yr)?"deps":vt(e,t)?.[0]??null}function Rr(e,t){let n=vt(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 Ar(e){for(let t of e){if(t.startsWith("- "))return!1;if(t.trim()!=="")return!0}return!1}function Cr(e){let t=e.replace(/\r\n/g,`
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,`
61
61
  `);t=t.replace(/^- [0-9a-f]{7}: /gm,"- ");let n=t.split(`
62
62
  `);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 Fr(e){let t=[],n=[],r=0;for(;r<e.length&&!ue.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&&ue.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("### ")&&!ue.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 Lr(e,t,n){let r=e.sections.filter(m=>yt[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=>Ar(m.body)))return e.lines;let s=new Set(t.map(m=>m.slot)),i=xr(t),c=new Map(t.map(m=>[m.title,m.slot])),l=new Map,d=[];for(let m of o){let a=Er(m.title,c);if(a===null){d.push(m);continue}for(let u of Mr(m.body)){let p=Tr(u[0]??"",i)??a,h=Rr(u,i),b=l.get(p);b?b.push(h):l.set(p,[h])}}for(let m of l.keys())if(!s.has(m))return e.lines;let f=[...e.header];for(;f.length>0&&(f[f.length-1]??"").trim()==="";)f.pop();let g=[...f,""];for(let m of t){let a=l.get(m.slot);a&&g.push(...bt({title:m.title,body:Ir(a)}))}for(let m of d)g.push(...bt(m));return g}function Er(e,t){return t.get(e)??gt[e]??yt[e]??null}function Or(e,t,n){let r=t.groups;if(!r||r.length===0)return e;let{lead:o,blocks:s}=Fr(e.split(`
64
- `)),i=[...o];for(let c of s)i.push(...Lr(c,r,n));return i.join(`
65
- `)}function Ir(e){let t=[];for(let n of e)t.push(...n);return t}function bt(e){return[e.title,"",...e.body,""]}function Mr(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{q as ALL_STATUSES,Vs as DEFAULT_LANG,z as DONE_STATUSES,ee as FRONTMATTER_KEYS,gt as LEGACY_TITLE_SLOTS,mt as SLOT_PREFIXES,Hn as archiveTasks,Je as buildSummary,pr as checkArchive,ve as collectChangelogs,D as dateFromFileName,fn as exportTasks,mr as fixArchive,wt as formatChangelog,$r as formatChangelogs,U as getConfigSection,Yn as importTasks,ht as languages,Ue as listActiveTasks,Pe as listArchivedTasks,T as listTaskFiles,qt as listTasks,Ce as loadToolkitConfig,vr as localDate,S as normalizeCompleted,Ge as orderRows,Jn as parseArchiveTasks,Fe as parseBool,j as parseFrontmatter,Ze as printTaskBoard,Kt as printTasks,me as queryTasks,C as redactText,It as resetToolkitConfigCache,Le as resolveEnabled,N as stripFrontmatter,qe as toCSV,Ke as toJSON,dt as validateTaskFile,or as validateTasks};
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};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fxri/toolkit",
3
- "version": "1.9.5",
3
+ "version": "1.10.1",
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.1.4 | 方案落盘:建档评估(先查后写)→ 建档 → 校验 → 归档 → 任务级规范沉淀(能力终点) |
12
- | [fxri-release-changelog](./fxri-release-changelog/SKILL.md) | 1.0.11 | changesets 发版与多语言 CHANGELOG 维护 |
13
- | [fxri-session-recap](./fxri-session-recap/SKILL.md) | 1.1.3 | 会话收尾全量沉淀 / 新会话三层恢复 / 历史任务时间批量修正 |
11
+ | [fxri-plan-to-task](./fxri-plan-to-task/SKILL.md) | 1.2.0 | 方案落盘:建档评估(先查后写)→ 建档 → 校验 → 归档 → 任务级规范沉淀(能力终点);规范载体迁移 |
12
+ | [fxri-release-changelog](./fxri-release-changelog/SKILL.md) | 1.0.12 | changesets 发版与多语言 CHANGELOG 维护 |
13
+ | [fxri-session-recap](./fxri-session-recap/SKILL.md) | 1.2.0 | 会话收尾全量沉淀 + 规范沉淀 / 新会话三层恢复 / 历史任务时间批量修正 |
14
14
 
15
15
  版本号取自各 SKILL.md 的 frontmatter `metadata.version`(`toolkit skills status` / `skills install` 打印的真源版本),与正文首部版本声明双写一致。
16
16
 
@@ -95,4 +95,6 @@ pnpm dlx skills add fxri-toolkit --global # npm 用户把 pnpm dlx 换成
95
95
  - [ ] 主干 SKILL.md < 200 行,细节下沉 `references/`,可复制资产放 `assets/`
96
96
  - [ ] 引用的 references / assets 相对路径有效
97
97
  - [ ] 技能用途描述已同步 docs/guide 技能表与本文「技能列表」表(含版本标注)
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 细则同源)
98
100
  - [ ] 变更已走本仓库质量门:三方一致 + tasks check + pnpm test
@@ -1,27 +1,27 @@
1
1
  ---
2
2
  name: fxri-plan-to-task
3
- description: 将已确认的实施方案落盘为标准任务文件并跟踪至归档:动手前建档评估(查 active/archive 判同主题)、按模板建档、状态机更新、四级时间源取证、自查校验、任务级规范沉淀与手工归档。当用户确认方案后表达「开始落地/登记记录」的意图,或即将动手改仓库文件时使用——含建档、任务登记、落盘、归档、任务校验等说法及其口语近义表达(如按这个做吧、记一下、建个任务跟踪)均触发。不用于方案未确认的对话、会话收尾整场沉淀(fxri-session-recap 模式一)、与任务记录无关的普通 TODO、issue 管理或日常提交信息撰写。
3
+ description: 将已确认的实施方案落盘为标准任务文件并跟踪至归档:动手前建档评估(查 active/archive 判同主题)、按模板建档、状态机更新、四级时间源取证、自查校验、任务级规范沉淀与手工归档。当用户确认方案后表达「开始落地/登记记录」的意图,或即将动手改仓库文件时使用——含建档、任务登记、落盘、归档、任务校验、规范载体迁移(conventions 单文件升目录形态)等说法及其口语近义表达(如按这个做吧、记一下、建个任务跟踪)均触发。不用于方案未确认的对话、会话收尾整场沉淀(fxri-session-recap 模式一)、与任务记录无关的普通 TODO、issue 管理或日常提交信息撰写。
4
4
  license: MIT
5
5
  metadata:
6
- version: "1.1.4"
6
+ version: "1.3.0"
7
7
  author: fxri
8
8
  source: https://github.com/fxri-net/toolkit
9
9
  ---
10
10
 
11
11
  # 方案落盘:任务建档与归档
12
12
 
13
- > 本技能版本 1.1.4(随 @fxri/toolkit 同批分发)。被问版本时即报此值——不读磁盘、不跑 CLI:报出的值就是本会话上下文里已加载内容的版本,可与 `toolkit skills status` 打印的磁盘基准值对照,不一致即说明会话上下文已过期,开新会话即可。
13
+ > 本技能版本 1.3.0(随 @fxri/toolkit 同批分发)。被问版本时即报此值——不读磁盘、不跑 CLI:报出的值就是本会话上下文里已加载内容的版本,可与 `toolkit skills status` 打印的磁盘基准值对照,不一致即说明会话上下文已过期,开新会话即可。
14
14
 
15
15
  ## 何时使用
16
16
 
17
- - 用户确认实施方案后,表达开始落地/登记记录的意图(语义触发,不要求字面一致):建档 / 任务登记 / 落盘 / 归档 / 任务校验 / 按这个做吧 / 记一下 / 建个任务跟踪
17
+ - 用户确认实施方案后,表达开始落地/登记记录的意图(语义触发,不要求字面一致):建档 / 任务登记 / 落盘 / 归档 / 任务校验 / 规范载体迁移 / 按这个做吧 / 记一下 / 建个任务跟踪
18
18
  - **即将动手改仓库文件前**(方案已确认、准备执行改动)也是本技能适用场景——动手前先做建档评估(见工作流第 1 步),避免跳过建档直接执行
19
19
  - 触发前置条件:**方案已确认**。用户说「开始/开工」但方案尚未确认时,先出方案等确认,不建档
20
- - **何时不使用**:方案未确认的对话;会话收尾的整场沉淀与归档(那是 fxri-session-recap 模式一);与方案落盘无关的普通 TODO、issue 管理、日历待办、日常提交信息撰写
20
+ - **何时不使用**:方案未确认的对话;会话收尾的整场沉淀与归档(那是 fxri-session-recap 模式一);收尾动作(提交、发版、推送、部署)本身——动作不算、改动才算(见工作流第 1 步);与方案落盘无关的普通 TODO、issue 管理、日历待办、日常提交信息撰写
21
21
 
22
22
  ## 核心约定
23
23
 
24
- 任务文件规范(目录结构、命名、frontmatter 字段、归档格式、手工归档步骤、自查清单)全部以 `references/task-spec.md` 为准,本文件只写流程。执行任何写操作前先读它。
24
+ 任务文件规范(目录结构、命名、frontmatter 字段、归档格式、手工归档步骤、自查清单)全部以 `references/task-spec.md` 为准;规范载体(conventions)的结构、端名规则、读写判定与存量迁移以 `references/conventions-spec.md` 为准。本文件只写流程。执行任何写操作前先读它们。
25
25
 
26
26
  ## 核心规则
27
27
 
@@ -44,18 +44,19 @@ metadata:
44
44
 
45
45
  - 无 `.tasks/` 任务区时先执行 `toolkit init` 建骨架(幂等,已存在不覆盖)
46
46
  - 列出任务目录 `active/` 下全部 `.md`(含一层 `{YYYYMM}/` 月份子目录),并核对 `archive/` 是否已有同主题任务
47
- - 读 `.tasks/conventions.md`(存在时):项目协作规范在建档与执行时须遵守;规范文件本身不属于任务,不为其建档
47
+ - 读 conventions 载体(存在时):先找 `.tasks/conventions/index.md`,不存在再看旧单文件 `.tasks/conventions.md`(兼容期读取,并在对话中提示可迁移);常驻只读 `index.md`,再按本任务 `scope` 命中加载 `common` 与端分册(判定见 `references/conventions-spec.md`);项目协作规范在建档与执行时须遵守;规范载体本身不属于任务,不为其建档
48
48
  - **同主题判别表**(建档前必须按此决策):
49
- | 现状 | 增量情况 | 处理 |
49
+ | 现状 | 本次是否产生仓库文件改动 | 处理 |
50
50
  | --- | --- | --- |
51
51
  | active 有同主题 | 补充/细化(同需求未完) | **更新原文件**正文,updated 同步,不新建 |
52
52
  | active 有同主题 | 已分叉成不同范围 | 问用户:拆新任务 or 合并更新 |
53
- | active 无、archive 有(已归档完成) | 无增量(重复提议同一件事) | 提示「同主题任务已归档于 {日期}」,不重复建档,直接执行 |
54
- | active 无、archive 有 | 有增量(延续/扩展) | **重新建档**,正文首行标注来源链 `延续 {原归档任务名}(见 archive/{YYYYMM}/{YYYYMMDD}.md)` |
55
- | active 无、archive 有 | 仅修正旧记录的时间/内容 | 走 fxri-session-recap 模式三(历史修正),**不是建档** |
53
+ | active 无、archive 有(已归档完成) | 否(重复提议 / 重复执行同一件事) | 提示「同主题任务已归档于 {日期}」,不重复建档,直接执行 |
54
+ | active 无、archive 有 | 是(延续 / 扩展 / 重新实现) | **重新建档**,正文首行标注来源链 `延续 {原归档任务名}(见 archive/{YYYYMM}/{YYYYMMDD}.md)` |
55
+ | active 无、archive 有 | 否,仅修正旧记录的时间/内容 | 走 fxri-session-recap 模式三(历史修正),**不是建档** |
56
56
  | active 与 archive 均无 | — | **建档后再动手**(硬前置,不建档不许改文件) |
57
- - **增量判别口径**(不靠感觉):新方案含原任务中不存在的新需求点/变更点/范围 = 有增量;完全同描述同范围 = 无增量;拿不准 → 列出差异问用户,不猜
58
- - **归档任务不可变**:已归档块是终结记录,不向其追加新内容(追加会破坏完成时间/范围的可信度);延续需求一律走新任务
57
+ - **仓库文件改动口径**(客观判据,不靠感觉):需写入版本控制的工作区文件的增 / 改 / 删(源码、配置、文档、技能、任务区自身均计入);纯读取、纯执行、纯汇报不计入;拿不准 → 列出差异问用户,不猜
58
+ - **动作不算,改动才算**:收尾动作(提交、发版、推送、部署)本身及其固有产物(版本号、更新日志、标签)不构成任务、不作为建档对象;这些动作过程中若出现需改仓库文件才能解决的缺陷(如打包配置错误、发布渠道错误),该修复按普通任务建档
59
+ - **归档块不可变**:已归档块不追加新的工作内容(追加新工作内容会破坏完成时间/范围的可信度);延续需求一律走新任务。唯一例外是**事实更正**:后续核实推翻原块结论时,在其正文末尾追加「修订记录」(保留原结论、不动元数据行、附更正时刻与依据)
59
60
  - 任务唯一键:`{年月日}-{用户名}-{任务简述}`;多人对同一需求共用一个文件
60
61
 
61
62
  ### 2. 建档
@@ -79,17 +80,19 @@ metadata:
79
80
 
80
81
  按 `references/task-spec.md` 的「手工归档步骤」执行:合并归档块 → 降序重排 → 写回 → 删 active 源文件 → 清理空月份目录。可 `toolkit tasks archive` 自动化。
81
82
 
82
- ### 5.5 任务级规范沉淀(新增,归档后执行)
83
+ ### 5.5 任务级规范沉淀(归档后执行)
83
84
 
84
85
  归档完成后按以下轻量步骤提炼本任务产出的规范(与会话收尾的会话级提炼同落点、互不重复):
85
86
 
86
- - 读 `.tasks/conventions.md`,判断本任务是否产出可升格规范:用户明示「以后都要这样」的规则、与已有规范重复印证的决策
87
- - 有候选 → 输出给用户确认 → 写入 conventions.md(带 `来源:{任务文件}` 标注);无候选 → **完全静默**
87
+ - 读 conventions 载体(`index.md` 常驻 + 按本任务 `scope` 命中加载分册),判断本任务是否产出可升格规范:用户明示「以后都要这样」的规则、与已有规范重复印证的决策
88
+ - **归属判定**:先问「是否**所有端都适用**」→ 是则归 `common`;否则逐端确认 → 写入命中的端分册(禁止跨端合并归属;`common` 不得用作「不确定归哪端」的暂存区)
89
+ - 有候选 → 输出给用户确认 → 写索引行(带「确立来源任务」)并把条文归位;无候选 → **完全静默**
88
90
  - 一次性决策不进规范,留在任务正文
91
+ - **存量迁移**:发现旧单文件 `conventions.md`(或用户要求迁移)时,按 `references/conventions-spec.md` 的迁移三段式执行(建目录搬原文 → 逐条提归属建议 → 用户确认后拆分册),可中断不丢内容
89
92
 
90
93
  ### 6. 收尾边界(硬约束到沉淀)
91
94
 
92
- **归档 + 规范沉淀即本技能流程终点**(先归档、后沉淀)。提交、发版、推送不是必经步骤,是否执行取决于用户的全局 / 个人 / 项目规则;若提交代码,先归档与沉淀、后提交,任务归档文件与 conventions.md 变更、代码变更落在**同一个 git 提交**(顺序不可颠倒),避免任务完成却滞留 `active/` 未归档,或归档单独成一条提交。
95
+ **归档 + 规范沉淀即本技能流程终点**(先归档、后沉淀)。提交、发版、推送不是必经步骤,是否执行取决于用户的全局 / 个人 / 项目规则;若提交代码,先归档与沉淀、后提交,任务归档文件与规范载体变更、代码变更落在**同一个 git 提交**(顺序不可颠倒),避免任务完成却滞留 `active/` 未归档,或归档单独成一条提交。
93
96
 
94
97
  ## 失败模式
95
98