opencode-haimati 1.4.4 → 1.4.5

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,4 +1,4 @@
1
- import{tool as $}from"@opencode-ai/plugin";import I from"path";import pt from"os";import U from"fs";var ft=".haimati",dt="\u7D22\u5F15.md";var gt="info";import N from"path";import Wt from"os";import T from"fs";var Ft=["haimati.jsonc","haimati.json"];function Ot(t){let n="",e=0,r=!1;for(;e<t.length;){let i=t[e],a=t[e+1];if(r){if(i==="\\"){n+=i+a,e+=2;continue}i==='"'&&(r=!1),n+=i,e++;continue}if(i==='"'){r=!0,n+=i,e++;continue}if(i==="/"&&a==="/"){for(;e<t.length&&t[e]!==`
1
+ import{tool as $}from"@opencode-ai/plugin";import I from"path";import ht from"os";import U from"fs";var ft=".haimati",dt="\u7D22\u5F15.md";var gt="info";import N from"path";import Wt from"os";import T from"fs";var Ft=["haimati.jsonc","haimati.json"];function Ot(t){let n="",e=0,r=!1;for(;e<t.length;){let i=t[e],a=t[e+1];if(r){if(i==="\\"){n+=i+a,e+=2;continue}i==='"'&&(r=!1),n+=i,e++;continue}if(i==='"'){r=!0,n+=i,e++;continue}if(i==="/"&&a==="/"){for(;e<t.length&&t[e]!==`
2
2
  `;)e++;continue}if(i==="/"&&a==="*"){for(e+=2;e<t.length-1&&!(t[e]==="*"&&t[e+1]==="/");)e++;e+=2;continue}n+=i,e++}return n}function Z(t){let e=Ot(t).replace(/,\s*([}\]])/g,"$1");return JSON.parse(e)}function Q(t){for(let n of Ft){let e=N.join(t,n);if(T.existsSync(e))return e}return null}function X(t){try{let n=T.readFileSync(t,"utf-8"),e=Z(n);return typeof e=="object"&&e!==null?e:{}}catch{return{}}}function F(t,n){let e={...t};for(let r of Object.keys(n)){let i=e[r],a=n[r];i&&a&&typeof i=="object"&&typeof a=="object"&&!Array.isArray(i)&&!Array.isArray(a)?e[r]=F(i,a):a!==void 0&&(e[r]=a)}return e}function mt(){return N.join(Wt.homedir(),".config","opencode")}function Ut(){return process.env.OPENCODE_CONFIG_DIR||null}function Gt(t){return N.join(t,".opencode")}function Ht(){let t=mt(),n=N.join(t,"haimati.jsonc");if(!T.existsSync(n))try{T.existsSync(t)||T.mkdirSync(t,{recursive:!0}),T.writeFileSync(n,`{
3
3
  // \u6D77\u9A6C\u4F53\u5B58\u50A8\u8DEF\u5F84\uFF08\u76F8\u5BF9\u4E8E\u9879\u76EE\u6839\u76EE\u5F55\uFF0C\u6216\u4F7F\u7528\u7EDD\u5BF9\u8DEF\u5F84\uFF09
4
4
  // "haimatiPath": ".haimati",
@@ -22,15 +22,15 @@ import{tool as $}from"@opencode-ai/plugin";import I from"path";import pt from"os
22
22
  // \u542F\u52A8\u65F6\u68C0\u67E5 npm registry \u662F\u5426\u6709\u65B0\u7248\u672C
23
23
  // "autoUpdate": true
24
24
  }
25
- `,"utf-8")}catch{}}function O(t){Ht();let n={},e=Q(mt());if(e){let a=X(e);n=F(n,a)}let r=Ut();if(r){let a=Q(r);if(a){let o=X(a);n=F(n,o)}}let i=Q(Gt(t));if(i){let a=X(i);n=F(n,a)}return n}function ht(t,n,e){return t.haimatiPath?N.resolve(n,t.haimatiPath):e}function E(t){let n=O(t),e=I.join(t,ft);return ht(n,t,e)}function S(t){return I.join(E(t),dt)}function et(t){return I.join(E(t),".lock")}function nt(t){return I.join(E(t),"\u4E66\u9875")}function it(t,n){let e=parseInt(n,10),r=Math.floor((e-1)/50)*50+1,i=r+50-1,a=`${String(r).padStart(3,"0")}-${String(i).padStart(3,"0")}`;return I.join(nt(t),a)}function G(t,n){let e=String(parseInt(n,10)).padStart(3,"0");return I.join(it(t,n),`${e}.md`)}function rt(){let t=pt.homedir();return I.join(t,".opencode-haimati","log")}function ot(){let t={level:gt,logRetentionDays:180},n=I.join(pt.homedir(),".config","opencode"),e=[I.join(n,"haimati.jsonc"),I.join(n,"haimati.json")].find(r=>U.existsSync(r));if(e)try{let r=U.readFileSync(e,"utf-8"),i=Z(r);if(i?.log)return{level:i.log.level||t.level,logRetentionDays:i.log.logRetentionDays??t.logRetentionDays}}catch{}return t}function M(t){return U.promises.mkdir(t,{recursive:!0}).then(()=>{})}function x(t){return U.promises.access(t).then(()=>!0).catch(()=>!1)}import xt from"fs";import{promisify as Pt}from"util";import J from"fs";import at from"path";import{promisify as B}from"util";var zt=B(J.appendFile),Vt=B(J.readdir),Yt=B(J.unlink),Kt=B(J.stat),yt={debug:0,info:1,warn:2,error:3};function Qt(t){let n=t.getFullYear(),e=String(t.getMonth()+1).padStart(2,"0"),r=String(t.getDate()).padStart(2,"0");return`${n}-${e}-${r}`}function Xt(t){let n=t.getFullYear(),e=String(t.getMonth()+1).padStart(2,"0"),r=String(t.getDate()).padStart(2,"0"),i=String(t.getHours()).padStart(2,"0"),a=String(t.getMinutes()).padStart(2,"0"),o=String(t.getSeconds()).padStart(2,"0");return`${n}-${e}-${r} ${i}:${a}:${o}`}function Zt(){let t=Qt(new Date);return at.join(rt(),`${t}.log`)}async function te(t,n){try{let e=at.dirname(t);await x(e)||await M(e),await zt(t,n+`
25
+ `,"utf-8")}catch{}}function O(t){Ht();let n={},e=Q(mt());if(e){let a=X(e);n=F(n,a)}let r=Ut();if(r){let a=Q(r);if(a){let o=X(a);n=F(n,o)}}let i=Q(Gt(t));if(i){let a=X(i);n=F(n,a)}return n}function pt(t,n,e){return t.haimatiPath?N.resolve(n,t.haimatiPath):e}function E(t){let n=O(t),e=I.join(t,ft);return pt(n,t,e)}function S(t){return I.join(E(t),dt)}function et(t){return I.join(E(t),".lock")}function nt(t){return I.join(E(t),"\u4E66\u9875")}function it(t,n){let e=parseInt(n,10),r=Math.floor((e-1)/50)*50+1,i=r+50-1,a=`${String(r).padStart(3,"0")}-${String(i).padStart(3,"0")}`;return I.join(nt(t),a)}function G(t,n){let e=String(parseInt(n,10)).padStart(3,"0");return I.join(it(t,n),`${e}.md`)}function rt(){let t=ht.homedir();return I.join(t,".opencode-haimati","log")}function ot(){let t={level:gt,logRetentionDays:180},n=I.join(ht.homedir(),".config","opencode"),e=[I.join(n,"haimati.jsonc"),I.join(n,"haimati.json")].find(r=>U.existsSync(r));if(e)try{let r=U.readFileSync(e,"utf-8"),i=Z(r);if(i?.log)return{level:i.log.level||t.level,logRetentionDays:i.log.logRetentionDays??t.logRetentionDays}}catch{}return t}function M(t){return U.promises.mkdir(t,{recursive:!0}).then(()=>{})}function x(t){return U.promises.access(t).then(()=>!0).catch(()=>!1)}import xt from"fs";import{promisify as Pt}from"util";import J from"fs";import at from"path";import{promisify as B}from"util";var zt=B(J.appendFile),Vt=B(J.readdir),Yt=B(J.unlink),Kt=B(J.stat),yt={debug:0,info:1,warn:2,error:3};function Qt(t){let n=t.getFullYear(),e=String(t.getMonth()+1).padStart(2,"0"),r=String(t.getDate()).padStart(2,"0");return`${n}-${e}-${r}`}function Xt(t){let n=t.getFullYear(),e=String(t.getMonth()+1).padStart(2,"0"),r=String(t.getDate()).padStart(2,"0"),i=String(t.getHours()).padStart(2,"0"),a=String(t.getMinutes()).padStart(2,"0"),o=String(t.getSeconds()).padStart(2,"0");return`${n}-${e}-${r} ${i}:${a}:${o}`}function Zt(){let t=Qt(new Date);return at.join(rt(),`${t}.log`)}async function te(t,n){try{let e=at.dirname(t);await x(e)||await M(e),await zt(t,n+`
26
26
  `,"utf-8")}catch(e){console.error("[haimati] \u5199\u5165\u65E5\u5FD7\u6587\u4EF6\u5931\u8D25:",e)}}async function wt(){try{let t=ot(),n=rt();if(!await x(n))return;let e=await Vt(n),i=new Date().getTime()-t.logRetentionDays*24*60*60*1e3;for(let a of e){if(!a.match(/^\d{4}-\d{2}-\d{2}\.log$/))continue;let o=at.join(n,a);(await Kt(o)).mtime.getTime()<i&&await Yt(o)}}catch(t){console.error("[haimati] \u6E05\u7406\u5386\u53F2\u65E5\u5FD7\u5931\u8D25:",t)}}async function H(t,n,e){try{let r=ot();if(yt[t]<yt[r.level])return;let a=Xt(new Date),o=e?`[${e}] `:"",c=`[${a}] [${t.toUpperCase()}] ${o}${n}`,s=Zt();await te(s,c),wt().catch(d=>{console.error("[haimati] \u6E05\u7406\u5386\u53F2\u65E5\u5FD7\u5931\u8D25:",d)})}catch(r){console.error("[haimati] \u65E5\u5FD7\u8BB0\u5F55\u5931\u8D25:",r)}}var u={debug(t,n){return H("debug",t,n)},info(t,n){return H("info",t,n)},warn(t,n){return H("warn",t,n)},error(t,n){return H("error",t,n)}};async function $t(){await wt()}var bt=Pt(xt.readFile),ee=Pt(xt.writeFile);function z(t){let n=0,e=0,r=t.length;for(;e<r;)if(t[e]==="\u2502"&&e+3<r&&t.slice(e+1,e+4)===" ")n++,e+=4;else if(t.slice(e,e+4)===" ")n++,e+=4;else{if((t[e]==="\u251C"||t[e]==="\u2514")&&e+3<r&&t.slice(e+1,e+4)==="\u2500\u2500 ")break;break}return n}function V(t){let e=t.trim().replace(/^[│├└─\s]+/,"").trim();return e==="/"?"/":!e.endsWith("/")||(e=e.slice(0,-1),!e)?null:e}function ne(t){let n=[],e=t.split(`
27
- `),r=[];for(let i of e){if(!i.trim())continue;let a=z(i),o=i.match(/^\s*[│├└─\s]*(.+?)\s*-\s*(\d+)\s*$/);if(o){let c=o[1].trim(),s=String(parseInt(o[2],10)),l=r.slice(0,a).filter(f=>f!=="").join("/");n.push({id:s,category:l,title:c})}else{let c=V(i);if(c)if(c==="/"){r[a]="";for(let s=a+1;s<r.length;s++)delete r[s]}else{r[a]=c;for(let s=a+1;s<r.length;s++)delete r[s]}}}return n}function A(t,n){return t.find(e=>e.id===n)||null}function _t(t,n,e){return t.find(r=>r.category===n&&r.title===e)||null}function St(t,n){return t.filter(e=>e.id!==n)}function st(t){if(t.length===0)return"";let n={name:"/",children:[],entry:null};for(let a of t){let o=a.category.split("/"),c=n;for(let d=0;d<o.length;d++){let l=o[d];if(!l)continue;let f=c.children.find(g=>g.name===l);f||(f={name:l,children:[],entry:null},c.children.push(f)),c=f}let s={name:a.id,children:[],entry:a};c.children.push(s)}function e(a){a.children.sort((o,c)=>o.name.localeCompare(c.name,void 0,{sensitivity:"base"}));for(let o of a.children)e(o)}e(n);function r(a,o,c){let s=[],d=o+(c?"\u2514\u2500\u2500 ":"\u251C\u2500\u2500 "),l=a.name==="/"?"/":a.name+"/";s.push(`${d}${l}`),o=o+(c?" ":"\u2502 ");let f=a.children.filter(m=>m.entry===null),g=a.children.filter(m=>m.entry!==null),p=[...f,...g];for(let m=0;m<p.length;m++){let h=p[m],y=m===p.length-1;if(h.entry){let w=h.entry.id.padStart(3,"0"),P=o+(y?"\u2514\u2500\u2500 ":"\u251C\u2500\u2500 ");s.push(`${P}${h.entry.title} - ${w}`)}else s.push(...r(h,o,y))}return s}return r(n,"",!0).join(`
27
+ `),r=[];for(let i of e){if(!i.trim())continue;let a=z(i),o=i.match(/^\s*[│├└─\s]*(.+?)\s*-\s*(\d+)\s*$/);if(o){let c=o[1].trim(),s=String(parseInt(o[2],10)),l=r.slice(0,a).filter(f=>f!=="").join("/");n.push({id:s,category:l,title:c})}else{let c=V(i);if(c)if(c==="/"){r[a]="";for(let s=a+1;s<r.length;s++)delete r[s]}else{r[a]=c;for(let s=a+1;s<r.length;s++)delete r[s]}}}return n}function A(t,n){return t.find(e=>e.id===n)||null}function _t(t,n,e){return t.find(r=>r.category===n&&r.title===e)||null}function St(t,n){return t.filter(e=>e.id!==n)}function st(t){if(t.length===0)return"";let n={name:"/",children:[],entry:null};for(let a of t){let o=a.category.split("/"),c=n;for(let d=0;d<o.length;d++){let l=o[d];if(!l)continue;let f=c.children.find(g=>g.name===l);f||(f={name:l,children:[],entry:null},c.children.push(f)),c=f}let s={name:a.id,children:[],entry:a};c.children.push(s)}function e(a){a.children.sort((o,c)=>o.name.localeCompare(c.name,void 0,{sensitivity:"base"}));for(let o of a.children)e(o)}e(n);function r(a,o,c){let s=[],d=o+(c?"\u2514\u2500\u2500 ":"\u251C\u2500\u2500 "),l=a.name==="/"?"/":a.name+"/";s.push(`${d}${l}`),o=o+(c?" ":"\u2502 ");let f=a.children.filter(m=>m.entry===null),g=a.children.filter(m=>m.entry!==null),h=[...f,...g];for(let m=0;m<h.length;m++){let p=h[m],y=m===h.length-1;if(p.entry){let w=p.entry.id.padStart(3,"0"),P=o+(y?"\u2514\u2500\u2500 ":"\u251C\u2500\u2500 ");s.push(`${P}${p.entry.title} - ${w}`)}else s.push(...r(p,o,y))}return s}return r(n,"",!0).join(`
28
28
  `)}async function D(t){let n=S(t);if(!await x(n))return[];let e=await bt(n,"utf-8");return ne(e)}async function R(t,n){let e=E(t);await x(e)||await M(e);let r=st(n),i=S(t);await ee(i,r,"utf-8"),await u.debug(`[writeIndex] \u5199\u5165\u7D22\u5F15: ${i}, \u5171${n.length}\u6761`)}async function It(t){let n=S(t);return await x(n)?await bt(n,"utf-8"):""}import Y from"fs";import{promisify as K}from"util";var ie=K(Y.readFile),re=K(Y.writeFile),oe=K(Y.unlink),Dt=K(Y.mkdir);async function _(t,n){let e=G(t,n);if(!await x(e))return null;let i=(await ie(e,"utf-8")).split(`
29
29
  `),a="------system------",o=Math.max(0,i.length-5),c=-1;for(let l=i.length-1;l>=o;l--)if(i[l].trim()===a){c=l;break}if(c===-1)return{title:"",createdAt:"",content:i.join(`
30
30
  `)};let s=i.slice(0,c).join(`
31
31
  `),d=i[c+1]?.trim();if(!d)return await u.warn("[readPage] \u51FA\u53C2: \u5143\u6570\u636E\u884C\u4E3A\u7A7A"),null;if(d.startsWith("{"))try{let l=JSON.parse(d);return{title:l.title||"",createdAt:l.create_time||"",content:s}}catch{return await u.warn("[readPage] \u51FA\u53C2: JSON \u89E3\u6790\u5931\u8D25"),null}return c+3>=i.length?(await u.warn("[readPage] \u51FA\u53C2: \u65E7\u683C\u5F0F\u4E0D\u5B8C\u6574"),null):{title:d,createdAt:i[c+2]||"",content:s}}async function q(t,n,e,r,i){let a=nt(t);await x(a)||await Dt(a,{recursive:!0});let o=it(t,n);await x(o)||await Dt(o,{recursive:!0});let c=G(t,n),s="------system------",d=JSON.stringify({title:e,create_time:r}),l=`${s}
32
32
  ${d}`,f=i?`${i}
33
- ${l}`:l;await re(c,f,"utf-8"),await u.debug(`[writePage] \u5199\u5165\u4E66\u9875: ${c}`)}async function Et(t,n){let e=G(t,n);return await x(e)?(await oe(e),await u.debug(`[deletePage] \u5220\u9664\u4E66\u9875: ${e}`),!0):!1}async function Ct(t,n,e,r,i=!1){let a=n.toLowerCase().split(/\s+/).filter(s=>s.length>0);if(a.length===0)return[];let o=[];for(let s of t){let d=s.title.toLowerCase(),l=s.category.toLowerCase(),f=s.id.toLowerCase(),g=new Set,p=0;for(let m of a)(d.includes(m)||l.includes(m)||f.includes(m))&&(p++,g.add(m));if(i&&r){let m=await _(r,s.id);if(m&&m.content){let h=m.content.toLowerCase();for(let y of a)h.includes(y)&&(p++,g.add(y))}}e==="and"?g.size===a.length&&o.push({entry:s,score:p}):g.size>0&&o.push({entry:s,score:p})}o.sort((s,d)=>d.score-s.score);let c=o.map(s=>s.entry);return await u.debug(`[searchEntries] \u641C\u7D22\u5B8C\u6210: \u5173\u952E\u5B57="${n}", \u6A21\u5F0F=${e}, \u7ED3\u679C\u6570=${c.length}`),c}import kt from"fs";import{promisify as vt}from"util";var se=vt(kt.writeFile),ce=vt(kt.unlink);async function Lt(t){let n=E(t);await x(n)||await M(n);let e=et(t),r=Date.now(),i=50+Math.random()*20,a=0;for(;await x(e);){if(a++,Date.now()-r>5e3)return await u.warn(`[acquireLock] \u51FA\u53C2: \u9501\u83B7\u53D6\u8D85\u65F6 (\u91CD\u8BD5${a}\u6B21)`),!1;await new Promise(o=>setTimeout(o,i))}return await se(e,String(process.pid),"utf-8"),await u.debug(`[acquireLock] \u9501\u83B7\u53D6\u6210\u529F: ${e}`),!0}async function Tt(t){let n=et(t);await x(n)&&(await ce(n),await u.debug(`[releaseLock] \u9501\u91CA\u653E\u6210\u529F: ${n}`))}async function Mt(t,n,e,r,i,a=!1){if(/ - \d{3}$/.test(e))throw await u.warn(`[allocateIdWithLock] title \u683C\u5F0F\u4E0D\u5408\u89C4: "${e}", \u629B\u51FA\u9519\u8BEF`),new Error('\u6807\u9898\u4E0D\u80FD\u4EE5 " - \u5E8F\u53F7" \u683C\u5F0F\u7ED3\u5C3E\uFF0C\u5E8F\u53F7\u7531\u7CFB\u7EDF\u81EA\u52A8\u5206\u914D\uFF0C\u8BF7\u4FEE\u6539\u6807\u9898');if(await u.debug(`[allocateIdWithLock] \u5F00\u59CB\u5206\u914D\u5E8F\u53F7: category="${n}", title="${e}"`),!await Lt(t))return await u.warn(`[allocateIdWithLock] \u83B7\u53D6\u9501\u5931\u8D25: category="${n}", title="${e}"`),null;try{let o=await D(t),c=o.find(f=>f.category===n&&f.title===e);if(c){if(!a)throw new Error(`\u8BB0\u5FC6\u5DF2\u5B58\u5728: ${n}/${e}\uFF0C\u5982\u9700\u66F4\u65B0\u8BF7\u4F7F\u7528 haimati_edit \u5DE5\u5177`);let f=await _(t,c.id),g=f?f.createdAt:r;return await q(t,c.id,e,g,i),await u.debug(`[allocateIdWithLock] \u66F4\u65B0\u5DF2\u6709\u6761\u76EE: #${c.id} ${n}/${e}`),null}let s=0;for(let f of o){let g=parseInt(f.id,10);g>s&&(s=g)}let d=String(s+1).padStart(3,"0");await q(t,d,e,r,i);let l={id:d,category:n,title:e};return o.push(l),await R(t,o),await u.debug(`[allocateIdWithLock] \u5206\u914D\u5E8F\u53F7\u6210\u529F: #${d} ${n}/${e}`),d}catch(o){let c=o instanceof Error?o.message:String(o);if(await u.error(`[allocateIdWithLock] \u5206\u914D\u5E8F\u53F7\u5931\u8D25: ${c}`),c.includes("\u8BB0\u5FC6\u5DF2\u5B58\u5728"))throw o;return null}finally{await Tt(t)}}function C(t){let n=t;return typeof n?.directory=="string"&&n.directory?n.directory:null}function ue(t){let n=t.trim();if(!n)return null;if(/^\d+$/.test(n))return[String(parseInt(n,10))];let e=[],r=n.split(",");for(let i of r){let a=i.trim();if(!a)return null;let o=a.match(/^(\d+)\s*-\s*(\d+)$/);if(o){let c=parseInt(o[1],10),s=parseInt(o[2],10);if(c>s||c<=0)return null;for(let d=c;d<=s;d++)e.push(String(d))}else if(/^\d+$/.test(a))e.push(String(parseInt(a,10)));else return null}return e}function W(t,n,e){let r=n.content.split(`
33
+ ${l}`:l;await re(c,f,"utf-8"),await u.debug(`[writePage] \u5199\u5165\u4E66\u9875: ${c}`)}async function Et(t,n){let e=G(t,n);return await x(e)?(await oe(e),await u.debug(`[deletePage] \u5220\u9664\u4E66\u9875: ${e}`),!0):!1}async function Ct(t,n,e,r,i=!1){let a=n.toLowerCase().split(/\s+/).filter(s=>s.length>0);if(a.length===0)return[];let o=[];for(let s of t){let d=s.title.toLowerCase(),l=s.category.toLowerCase(),f=s.id.toLowerCase(),g=new Set,h=0;for(let m of a)(d.includes(m)||l.includes(m)||f.includes(m))&&(h++,g.add(m));if(i&&r){let m=await _(r,s.id);if(m&&m.content){let p=m.content.toLowerCase();for(let y of a)p.includes(y)&&(h++,g.add(y))}}e==="and"?g.size===a.length&&o.push({entry:s,score:h}):g.size>0&&o.push({entry:s,score:h})}o.sort((s,d)=>d.score-s.score);let c=o.map(s=>s.entry);return await u.debug(`[searchEntries] \u641C\u7D22\u5B8C\u6210: \u5173\u952E\u5B57="${n}", \u6A21\u5F0F=${e}, \u7ED3\u679C\u6570=${c.length}`),c}import kt from"fs";import{promisify as vt}from"util";var se=vt(kt.writeFile),ce=vt(kt.unlink);async function Lt(t){let n=E(t);await x(n)||await M(n);let e=et(t),r=Date.now(),i=50+Math.random()*20,a=0;for(;await x(e);){if(a++,Date.now()-r>5e3)return await u.warn(`[acquireLock] \u51FA\u53C2: \u9501\u83B7\u53D6\u8D85\u65F6 (\u91CD\u8BD5${a}\u6B21)`),!1;await new Promise(o=>setTimeout(o,i))}return await se(e,String(process.pid),"utf-8"),await u.debug(`[acquireLock] \u9501\u83B7\u53D6\u6210\u529F: ${e}`),!0}async function Tt(t){let n=et(t);await x(n)&&(await ce(n),await u.debug(`[releaseLock] \u9501\u91CA\u653E\u6210\u529F: ${n}`))}async function Mt(t,n,e,r,i,a=!1){if(/ - \d{3}$/.test(e))throw await u.warn(`[allocateIdWithLock] title \u683C\u5F0F\u4E0D\u5408\u89C4: "${e}", \u629B\u51FA\u9519\u8BEF`),new Error('\u6807\u9898\u4E0D\u80FD\u4EE5 " - \u5E8F\u53F7" \u683C\u5F0F\u7ED3\u5C3E\uFF0C\u5E8F\u53F7\u7531\u7CFB\u7EDF\u81EA\u52A8\u5206\u914D\uFF0C\u8BF7\u4FEE\u6539\u6807\u9898');if(await u.debug(`[allocateIdWithLock] \u5F00\u59CB\u5206\u914D\u5E8F\u53F7: category="${n}", title="${e}"`),!await Lt(t))return await u.warn(`[allocateIdWithLock] \u83B7\u53D6\u9501\u5931\u8D25: category="${n}", title="${e}"`),null;try{let o=await D(t),c=o.find(f=>f.category===n&&f.title===e);if(c){if(!a)throw new Error(`\u8BB0\u5FC6\u5DF2\u5B58\u5728: ${n}/${e}\uFF0C\u5982\u9700\u66F4\u65B0\u8BF7\u4F7F\u7528 haimati_edit \u5DE5\u5177`);let f=await _(t,c.id),g=f?f.createdAt:r;return await q(t,c.id,e,g,i),await u.debug(`[allocateIdWithLock] \u66F4\u65B0\u5DF2\u6709\u6761\u76EE: #${c.id} ${n}/${e}`),null}let s=0;for(let f of o){let g=parseInt(f.id,10);g>s&&(s=g)}let d=String(s+1).padStart(3,"0");await q(t,d,e,r,i);let l={id:d,category:n,title:e};return o.push(l),await R(t,o),await u.debug(`[allocateIdWithLock] \u5206\u914D\u5E8F\u53F7\u6210\u529F: #${d} ${n}/${e}`),d}catch(o){let c=o instanceof Error?o.message:String(o);if(await u.error(`[allocateIdWithLock] \u5206\u914D\u5E8F\u53F7\u5931\u8D25: ${c}`),c.includes("\u8BB0\u5FC6\u5DF2\u5B58\u5728"))throw o;return null}finally{await Tt(t)}}function C(t){let n=t;return typeof n?.directory=="string"&&n.directory?n.directory:null}function ue(t){let n=t.trim().replace(/^#+/,"");if(!n)return null;if(/^\d+$/.test(n))return[String(parseInt(n,10))];let e=[],r=n.split(",");for(let i of r){let a=i.trim().replace(/^#+/,"");if(!a)return null;let o=a.match(/^(\d+)\s*-\s*(\d+)$/);if(o){let c=parseInt(o[1],10),s=parseInt(o[2],10);if(c>s||c<=0)return null;for(let d=c;d<=s;d++)e.push(String(d))}else if(/^\d+$/.test(a))e.push(String(parseInt(a,10)));else return null}return e}function W(t,n,e){let r=n.content.split(`
34
34
  `),i=[],a=e?.offset?Math.max(0,e.offset-1):0,o=e?.limit?Math.min(r.length,a+e.limit):r.length;for(let c=a;c<o;c++)i.push(`${c+1}|${r[c]}`);return i.push("------system------"),i.push(`\u6807\u9898:${t.title}`),i.push(`\u521B\u5EFA\u65F6\u95F4:${n.createdAt}`),i.join(`
35
35
  `)}async function k(t,n){let e=t instanceof Error?t.message:String(t),r=t instanceof Error?t.stack:"";return await u.error(`[${n}] \u51FA\u53C2: \u9519\u8BEF: ${e}
36
36
  \u5806\u6808: ${r}`),`\u9519\u8BEF: ${e}`}function ct(t){return/^\d+$/.test(t.trim())?String(parseInt(t.trim(),10)):null}function At(){return{haimati_read:$({description:`\u4ECE\u6D77\u9A6C\u4F53\u8BB0\u5FC6\u7CFB\u7EDF\u8BFB\u53D6\u8BB0\u5FC6\u5185\u5BB9\u3002\u901A\u8FC7\u5E8F\u53F7\u5B9A\u4F4D\u8BB0\u5FC6\uFF0C\u652F\u6301\u5355\u6761\u548C\u6279\u91CF\u8BFB\u53D6\u3002
@@ -63,14 +63,14 @@ ${l}`:l;await re(c,f,"utf-8"),await u.debug(`[writePage] \u5199\u5165\u4E66\u987
63
63
  - query="5" - \u8BFB\u53D6\u5E8F\u53F7 005 \u7684\u5185\u5BB9\uFF08\u81EA\u52A8\u8865\u5168\u4E3A\u4E09\u4F4D\u6570\uFF09
64
64
  - query="086,087,088" - \u6279\u91CF\u8BFB\u53D6\u5E8F\u53F7 086\u3001087\u3001088
65
65
  - query="086-090" - \u6279\u91CF\u8BFB\u53D6\u5E8F\u53F7 086 \u5230 090\uFF08\u8303\u56F4\u8BED\u6CD5\uFF09
66
- - query="086-088,091" - \u6DF7\u5408\u4F7F\u7528\u8303\u56F4\u548C\u9017\u53F7`,args:{query:$.schema.string().describe("\u5E8F\u53F7\u3002\u5355\u6761\u5982 '086'\uFF0C\u6279\u91CF\u652F\u6301\u9017\u53F7\u5206\u9694\u5982 '086,087,088' \u6216\u8303\u56F4 '086-090'"),offset:$.schema.number().optional().default(1).describe("\u8D77\u59CB\u884C\u53F7\uFF08\u9ED8\u8BA4 1\uFF0C\u4EC5\u5355\u6761\u8BFB\u53D6\u751F\u6548\uFF09"),limit:$.schema.number().optional().default(2e3).describe("\u6700\u5927\u8BFB\u53D6\u884C\u6570\uFF08\u9ED8\u8BA4 2000\uFF0C\u4EC5\u5355\u6761\u8BFB\u53D6\u751F\u6548\uFF09")},async execute(t,n){let e=C(n);if(!e)return"\u9519\u8BEF\uFF1A\u7F3A\u5C11 directory \u914D\u7F6E";let r=S(e);if(await u.info(`[haimati_read] \u5F00\u59CB\u8BFB\u53D6 #${t.query}`),await u.debug(`[haimati_read] \u5165\u53C2: query="${t.query}", offset=${t.offset||1}, limit=${t.limit||2e3}`),!await x(r)){let i=`\u9519\u8BEF\uFF1A\u6D77\u9A6C\u4F53\u7D22\u5F15\u4E0D\u5B58\u5728\u4E8E ${r}`;return await u.debug(`[haimati_read] \u51FA\u53C2:
66
+ - query="086-088,091" - \u6DF7\u5408\u4F7F\u7528\u8303\u56F4\u548C\u9017\u53F7`,args:{query:$.schema.string().describe("\u5E8F\u53F7\u3002\u5355\u6761\u5982 '086'\uFF0C\u6279\u91CF\u652F\u6301\u9017\u53F7\u5206\u9694\u5982 '086,087,088' \u6216\u8303\u56F4 '086-090'"),offset:$.schema.number().optional().default(1).describe("\u8D77\u59CB\u884C\u53F7\uFF08\u9ED8\u8BA4 1\uFF0C\u4EC5\u5355\u6761\u8BFB\u53D6\u751F\u6548\uFF09"),limit:$.schema.number().optional().default(2e3).describe("\u6700\u5927\u8BFB\u53D6\u884C\u6570\uFF08\u9ED8\u8BA4 2000\uFF0C\u4EC5\u5355\u6761\u8BFB\u53D6\u751F\u6548\uFF09")},async execute(t,n){let e=C(n);if(!e)return"\u9519\u8BEF\uFF1A\u7F3A\u5C11 directory \u914D\u7F6E";let r=S(e);if(await u.info(`[haimati_read] \u5F00\u59CB\u8BFB\u53D6 #${t.query}`),await u.debug(`[haimati_read] \u5165\u53C2: query="${t.query}", offset=${t.offset??1}, limit=${t.limit??2e3}`),!await x(r)){let i=`\u9519\u8BEF\uFF1A\u6D77\u9A6C\u4F53\u7D22\u5F15\u4E0D\u5B58\u5728\u4E8E ${r}`;return await u.debug(`[haimati_read] \u51FA\u53C2:
67
67
  ${i}`),i}try{let i=await D(e),a=t.query.trim(),o=ue(a);if(!o||o.length===0){let l=`\u9519\u8BEF\uFF1A\u65E0\u6548\u7684\u67E5\u8BE2\u683C\u5F0F "${a}"`;return await u.debug(`[haimati_read] \u51FA\u53C2:
68
- ${l}`),l}if(o.length===1){let l=o[0],f=A(i,l);if(!f)return await u.info(`[haimati_read] \u8BFB\u53D6\u5931\u8D25: \u672A\u627E\u5230\u8BB0\u5FC6 #${t.query}`),`\u672A\u627E\u5230\u8BB0\u5FC6: ${t.query}`;let g=await _(e,f.id);if(!g)return`\u672A\u627E\u5230\u4E66\u9875: #${f.id.padStart(3,"0")}`;let p=W(f,g,{offset:t.offset||1,limit:t.limit||2e3}),m=`===== #${f.id.padStart(3,"0")} =====
69
- ${p}`;return await u.debug(`[haimati_read] \u51FA\u53C2:
68
+ ${l}`),l}if(o.length===1){let l=o[0],f=A(i,l);if(!f)return await u.info(`[haimati_read] \u8BFB\u53D6\u5931\u8D25: \u672A\u627E\u5230\u8BB0\u5FC6 #${t.query}`),`\u672A\u627E\u5230\u8BB0\u5FC6: ${t.query}`;let g=await _(e,f.id);if(!g)return`\u672A\u627E\u5230\u4E66\u9875: #${f.id.padStart(3,"0")}`;let h=W(f,g,{offset:t.offset??1,limit:t.limit??2e3}),m=`===== #${f.id.padStart(3,"0")} =====
69
+ ${h}`;return await u.debug(`[haimati_read] \u51FA\u53C2:
70
70
  ${m}`),await u.info(`[haimati_read] \u8BFB\u53D6\u6210\u529F: #${f.id} (${f.category}/${f.title})`),m}let c=[],s=0;for(let l of o){let f=A(i,l);if(!f){await u.warn(`[haimati_read] \u6279\u91CF: \u672A\u627E\u5230\u8BB0\u5FC6 #${l}`),c.push(`===== #${l.padStart(3,"0")} =====
71
71
  \u672A\u627E\u5230\u8BB0\u5FC6: ${l}`);continue}let g=await _(e,f.id);if(!g){await u.error(`[haimati_read] \u6279\u91CF: \u672A\u627E\u5230\u4E66\u9875 #${f.id}`),c.push(`===== #${f.id.padStart(3,"0")} =====
72
- \u672A\u627E\u5230\u4E66\u9875`);continue}let p=W(f,g);c.push(`===== #${f.id.padStart(3,"0")} =====
73
- ${p}`),s++}let d=c.join(`
72
+ \u672A\u627E\u5230\u4E66\u9875`);continue}let h=W(f,g);c.push(`===== #${f.id.padStart(3,"0")} =====
73
+ ${h}`),s++}let d=c.join(`
74
74
 
75
75
  `);return await u.info(`[haimati_read] \u6279\u91CF\u8BFB\u53D6\u7ED3\u675F: \u5171 ${o.length} \u6761, \u6210\u529F ${s} \u6761`),d}catch(i){return await k(i,"haimati_read")}}}),haimati_write:$({description:`\u5C06\u65B0\u4FE1\u606F\u5199\u5165\u6D77\u9A6C\u4F53\u8BB0\u5FC6\u7CFB\u7EDF\u3002\u9700\u8981\u63D0\u4F9B\u5206\u7C7B\u8DEF\u5F84\u3001\u6807\u9898\u548C\u5185\u5BB9\u3002\u5982\u679C\u76F8\u540C\u5206\u7C7B\u548C\u6807\u9898\u7684\u8BB0\u5FC6\u5DF2\u5B58\u5728\uFF0C\u5219\u4F1A\u62A5\u9519\u3002
76
76
 
@@ -137,14 +137,14 @@ ${c}`),c}catch(r){return await k(r,"haimati_write")}}}),haimati_search:$({descri
137
137
  - keyword="WS \u7B7E\u540D", match="and" \u2192 \u641C\u7D22\u540C\u65F6\u5305\u542B"WS"\u548C"\u7B7E\u540D"\u7684\u8BB0\u5FC6
138
138
  - keyword="\u5BC6\u7801 \u6CE8\u518C", match="or" \u2192 \u641C\u7D22\u5305\u542B"\u5BC6\u7801"\u6216"\u6CE8\u518C"\u7684\u4EFB\u610F\u8BB0\u5FC6
139
139
  - keyword="\u767B\u5F55", match="and", limit=5, offset=0 \u2192 \u641C\u7D22\u524D 5 \u6761
140
- - keyword="\u767B\u5F55", match="and", limit=5, offset=5 \u2192 \u7FFB\u9875\uFF0C\u83B7\u53D6\u7B2C 6-10 \u6761`,args:{keyword:$.schema.string().describe("\u641C\u7D22\u5173\u952E\u8BCD\uFF08\u652F\u6301\u591A\u5173\u952E\u5B57\uFF0C\u7528\u7A7A\u683C\u5206\u9694\uFF09"),match:$.schema.string().describe("\u5339\u914D\u6A21\u5F0F\uFF1Aand=\u6240\u6709\u5173\u952E\u5B57\u90FD\u5339\u914D\uFF0Cor=\u4EFB\u610F\u5173\u952E\u5B57\u5339\u914D"),limit:$.schema.number().default(10).describe("\u8FD4\u56DE\u7ED3\u679C\u6570\u91CF\u9650\u5236"),offset:$.schema.number().default(0).describe("\u5206\u9875\u504F\u79FB\u91CF\uFF0C\u7528\u4E8E\u83B7\u53D6\u540E\u7EED\u9875\u9762")},async execute(t,n){let e=C(n);if(!e)return"\u9519\u8BEF\uFF1A\u7F3A\u5C11 directory \u914D\u7F6E";let r=S(e);if(await u.info(`[haimati_search] \u5F00\u59CB\u641C\u7D22 "${t.keyword}"`),await u.debug(`[haimati_search] \u5165\u53C2: keyword="${t.keyword}", match="${t.match}", limit=${t.limit||10}, offset=${t.offset||0}`),!await x(r)){let i="\u9519\u8BEF\uFF1A\u6D77\u9A6C\u4F53\u7D22\u5F15\u4E0D\u5B58\u5728";return await u.debug(`[haimati_search] \u51FA\u53C2:
141
- ${i}`),await u.info("[haimati_search] \u641C\u7D22\u5931\u8D25: \u7D22\u5F15\u4E0D\u5B58\u5728"),i}try{let i=await D(e),a=t.keyword.trim(),o=t.match,c=t.limit||10,s=t.offset||0,d=await Ct(i,a,o,e,!0),l=d.length,f=d.slice(s,s+c);if(f.length===0){let y=`\u672A\u627E\u5230\u5305\u542B '${a}' \u7684\u8BB0\u5FC6`;return await u.debug(`[haimati_search] \u51FA\u53C2:
142
- ${y}`),await u.info("[haimati_search] \u641C\u7D22\u5B8C\u6210: \u672A\u627E\u5230\u5339\u914D"),y}let g=[],p=s+f.length<l,m=p?`${s+1}-${s+f.length}/${l}`:`${s+1}-${s+f.length}/${l}`;g.push(`\u627E\u5230 ${m} \u6761\u5339\u914D\uFF1A
143
- `),p&&g.push(`\uFF08\u5982\u9700\u83B7\u53D6\u66F4\u591A\uFF0C\u8BF7\u4F7F\u7528 offset=${s+c} \u7EE7\u7EED\u7FFB\u9875\uFF09
140
+ - keyword="\u767B\u5F55", match="and", limit=5, offset=5 \u2192 \u7FFB\u9875\uFF0C\u83B7\u53D6\u7B2C 6-10 \u6761`,args:{keyword:$.schema.string().describe("\u641C\u7D22\u5173\u952E\u8BCD\uFF08\u652F\u6301\u591A\u5173\u952E\u5B57\uFF0C\u7528\u7A7A\u683C\u5206\u9694\uFF09"),match:$.schema.string().describe("\u5339\u914D\u6A21\u5F0F\uFF1Aand=\u6240\u6709\u5173\u952E\u5B57\u90FD\u5339\u914D\uFF0Cor=\u4EFB\u610F\u5173\u952E\u5B57\u5339\u914D"),limit:$.schema.number().default(10).describe("\u8FD4\u56DE\u7ED3\u679C\u6570\u91CF\u9650\u5236"),offset:$.schema.number().default(0).describe("\u5206\u9875\u504F\u79FB\u91CF\uFF0C\u7528\u4E8E\u83B7\u53D6\u540E\u7EED\u9875\u9762")},async execute(t,n){let e=C(n);if(!e)return"\u9519\u8BEF\uFF1A\u7F3A\u5C11 directory \u914D\u7F6E";let r=S(e);if(await u.info(`[haimati_search] \u5F00\u59CB\u641C\u7D22 "${t.keyword}"`),await u.debug(`[haimati_search] \u5165\u53C2: keyword="${t.keyword}", match="${t.match}", limit=${t.limit??10}, offset=${t.offset??0}`),!await x(r)){let i="\u9519\u8BEF\uFF1A\u6D77\u9A6C\u4F53\u7D22\u5F15\u4E0D\u5B58\u5728";return await u.debug(`[haimati_search] \u51FA\u53C2:
141
+ ${i}`),await u.info("[haimati_search] \u641C\u7D22\u5931\u8D25: \u7D22\u5F15\u4E0D\u5B58\u5728"),i}try{let i=await D(e),a=t.keyword.trim(),o=t.match,c=t.limit??10,s=t.offset??0,d=await Ct(i,a,o,e,!0),l=d.length,f=d.slice(s,s+c);if(f.length===0){let y=`\u672A\u627E\u5230\u5305\u542B '${a}' \u7684\u8BB0\u5FC6`;return await u.debug(`[haimati_search] \u51FA\u53C2:
142
+ ${y}`),await u.info("[haimati_search] \u641C\u7D22\u5B8C\u6210: \u672A\u627E\u5230\u5339\u914D"),y}let g=[],h=s+f.length<l,m=h?`${s+1}-${s+f.length}/${l}`:`${s+1}-${s+f.length}/${l}`;g.push(`\u627E\u5230 ${m} \u6761\u5339\u914D\uFF1A
143
+ `),h&&g.push(`\uFF08\u5982\u9700\u83B7\u53D6\u66F4\u591A\uFF0C\u8BF7\u4F7F\u7528 offset=${s+c} \u7EE7\u7EED\u7FFB\u9875\uFF09
144
144
  `);for(let y of f){let w=await _(e,y.id),P=`${y.category}/${y.title}`,b="";w&&(b=w.content.split(`
145
- `).filter(Rt=>Rt.trim()).slice(0,3).join(" | ").substring(0,150),b.length===150&&(b+="...")),g.push(`## ${P} [${y.id}]`),b&&g.push(`> ${b}`),g.push("")}let h=g.join(`
145
+ `).filter(Rt=>Rt.trim()).slice(0,3).join(" | ").substring(0,150),b.length===150&&(b+="...")),g.push(`## ${P} [${y.id}]`),b&&g.push(`> ${b}`),g.push("")}let p=g.join(`
146
146
  `);return await u.debug(`[haimati_search] \u51FA\u53C2:
147
- ${h}`),await u.info(`[haimati_search] \u641C\u7D22\u5B8C\u6210: \u627E\u5230 ${l} \u6761\u5339\u914D`),h}catch(i){return await k(i,"haimati_search")}}}),haimati_edit:$({description:`\u4FEE\u6539\u6D77\u9A6C\u4F53\u8BB0\u5FC6\u7684\u90E8\u5206\u5185\u5BB9\uFF0C\u91C7\u7528\u5B57\u7B26\u4E32\u6A21\u5F0F\u5339\u914D\u66FF\u6362\u3002
147
+ ${p}`),await u.info(`[haimati_search] \u641C\u7D22\u5B8C\u6210: \u627E\u5230 ${l} \u6761\u5339\u914D`),p}catch(i){return await k(i,"haimati_search")}}}),haimati_edit:$({description:`\u4FEE\u6539\u6D77\u9A6C\u4F53\u8BB0\u5FC6\u7684\u90E8\u5206\u5185\u5BB9\uFF0C\u91C7\u7528\u5B57\u7B26\u4E32\u6A21\u5F0F\u5339\u914D\u66FF\u6362\u3002
148
148
 
149
149
  \u4F7F\u7528 oldString \u5B9A\u4F4D\u8981\u66FF\u6362\u7684\u6587\u672C\uFF0C\u7528 newString \u66FF\u6362\u5B83\u3002
150
150
 
@@ -202,10 +202,10 @@ ${d}`),await u.info(`[haimati_delete] \u5220\u9664\u6210\u529F: #${o.id.padStart
202
202
  - \u5982\u679C\u4E0D\u786E\u5B9A\u8981\u4FEE\u6539\u7684\u8BB0\u5FC6\u5E8F\u53F7\uFF0C\u8BF7\u5148\u4F7F\u7528 haimati_search \u6216 haimati_list \u67E5\u627E
203
203
  - \u4FEE\u6539\u4E0D\u4F1A\u5F71\u54CD\u8BB0\u5FC6\u7684\u5E8F\u53F7\u548C\u5185\u5BB9`,args:{query:$.schema.string().describe("\u5E8F\u53F7\u3002\u4F8B\u5982\uFF1A'086'"),newCategory:$.schema.string().optional().describe("\u65B0\u7684\u5206\u7C7B\u8DEF\u5F84\uFF0C\u5982 'xxx\u9879\u76EE/\u5BA2\u6237\u7AEF' \u6216 '\u901A\u7528'"),newTitle:$.schema.string().optional().describe("\u65B0\u7684\u6807\u9898\uFF0C\u5982 '\u7B7E\u7AE0\u670D\u52A1WS\u901A\u4FE1\u673A\u5236v2'")},async execute(t,n){let e=C(n);if(!e)return"\u9519\u8BEF\uFF1A\u7F3A\u5C11 directory \u914D\u7F6E";let r=S(e);if(await u.info(`[haimati_move] \u5F00\u59CB\u79FB\u52A8 ${t.query}`),await u.debug(`[haimati_move] \u5165\u53C2: query="${t.query}", newCategory="${t.newCategory}", newTitle="${t.newTitle}"`),!await x(r)){let i="\u9519\u8BEF\uFF1A\u6D77\u9A6C\u4F53\u7D22\u5F15\u4E0D\u5B58\u5728";return await u.debug(`[haimati_move] \u51FA\u53C2:
204
204
  ${i}`),i}try{let i=await D(e),a=ct(t.query);if(!a)return"\u9519\u8BEF\uFF1Aquery \u5FC5\u987B\u662F\u5E8F\u53F7\uFF0C\u53EA\u652F\u6301\u5E8F\u53F7\u67E5\u8BE2";let o=A(i,a);if(!o)return await u.info(`[haimati_move] \u79FB\u52A8\u5931\u8D25: \u672A\u627E\u5230\u8BB0\u5FC6 #${t.query}`),`\u672A\u627E\u5230\u8BB0\u5FC6: ${t.query}`;let c=t.newCategory?.trim(),s=t.newTitle?.trim();if(!c&&!s){let w="\u9519\u8BEF\uFF1A\u81F3\u5C11\u9700\u8981\u63D0\u4F9B newCategory \u6216 newTitle \u4E2D\u7684\u4E00\u4E2A";return await u.debug(`[haimati_move] \u51FA\u53C2:
205
- ${w}`),w}let d=o.category,l=o.title,f=c||d,g=s||l,p=`${d}/${l}`,m=`${f}/${g}`,h=i.map(w=>w.id===o.id?{...w,category:f,title:g}:w);if(await R(e,h),s){let w=await _(e,o.id);w&&await q(e,o.id,g,w.createdAt,w.content)}let y=`\u5DF2\u79FB\u52A8\u6D77\u9A6C\u4F53 #${o.id}
206
- \u65E7\u8DEF\u5F84: ${p}
205
+ ${w}`),w}let d=o.category,l=o.title,f=c||d,g=s||l,h=`${d}/${l}`,m=`${f}/${g}`,p=i.map(w=>w.id===o.id?{...w,category:f,title:g}:w);if(await R(e,p),s){let w=await _(e,o.id);w&&await q(e,o.id,g,w.createdAt,w.content)}let y=`\u5DF2\u79FB\u52A8\u6D77\u9A6C\u4F53 #${o.id}
206
+ \u65E7\u8DEF\u5F84: ${h}
207
207
  \u65B0\u8DEF\u5F84: ${m}`;return await u.debug(`[haimati_move] \u51FA\u53C2:
208
- ${y}`),await u.info(`[haimati_move] \u79FB\u52A8\u6210\u529F: #${o.id} ${p} -> ${m}`),y}catch(i){return await k(i,"haimati_move")}}}),haimati_list:$({description:`\u5217\u51FA\u6D77\u9A6C\u4F53\u8BB0\u5FC6\u7CFB\u7EDF\u7684\u7D22\u5F15\u7ED3\u6784\uFF0C\u652F\u6301\u6309\u5206\u7C7B\u6D4F\u89C8\u548C\u67E5\u770B\u8BE6\u7EC6\u5185\u5BB9\u3002
208
+ ${y}`),await u.info(`[haimati_move] \u79FB\u52A8\u6210\u529F: #${o.id} ${h} -> ${m}`),y}catch(i){return await k(i,"haimati_move")}}}),haimati_list:$({description:`\u5217\u51FA\u6D77\u9A6C\u4F53\u8BB0\u5FC6\u7CFB\u7EDF\u7684\u7D22\u5F15\u7ED3\u6784\uFF0C\u652F\u6301\u6309\u5206\u7C7B\u6D4F\u89C8\u548C\u67E5\u770B\u8BE6\u7EC6\u5185\u5BB9\u3002
209
209
 
210
210
  \u529F\u80FD\u8BF4\u660E\uFF1A
211
211
  - \u65E0\u53C2\u6570\uFF1A\u5217\u51FA\u5B8C\u6574\u7684\u6811\u5F62\u7D22\u5F15\uFF0C\u5C55\u793A\u6240\u6709\u5206\u7C7B\u548C\u6761\u76EE
@@ -258,47 +258,47 @@ ${y}`),await u.info(`[haimati_move] \u79FB\u52A8\u6210\u529F: #${o.id} ${p} -> $
258
258
  - category="\u901A\u7528", recursive=true, detail=true \u2192 \u663E\u793A"\u901A\u7528"\u4E0B\u6240\u6709\u6761\u76EE\u7684\u5B8C\u6574\u5185\u5BB9
259
259
  - detail=true \u2192 \u663E\u793A\u6240\u6709\u6761\u76EE\u7684\u8BE6\u7EC6\u5185\u5BB9\uFF08\u6309\u9876\u7EA7\u5206\u7C7B\u5206\u7EC4\uFF09`,args:{category:$.schema.string().optional().describe("\u53EF\u9009\u7684\u5206\u7C7B\u8DEF\u5F84\uFF0C\u5217\u51FA\u8BE5\u5206\u7C7B\u4E0B\u7684\u6761\u76EE"),recursive:$.schema.boolean().optional().default(!1).describe("\u662F\u5426\u9012\u5F52\u904D\u5386\u5B50\u5206\u7C7B\uFF0C\u9ED8\u8BA4false"),detail:$.schema.boolean().optional().default(!1).describe("\u662F\u5426\u663E\u793A\u8BB0\u5FC6\u7684\u8BE6\u7EC6\u5185\u5BB9\uFF0C\u9ED8\u8BA4false")},async execute(t,n){let e=C(n);if(!e)return"\u9519\u8BEF\uFF1A\u7F3A\u5C11 directory \u914D\u7F6E";let r=S(e);if(await u.info(`[haimati_list] \u5F00\u59CB\u5217\u51FA${t.category?` ${t.category}`:" \u5168\u90E8"}${t.detail?" (\u8BE6\u7EC6\u6A21\u5F0F)":""}`),await u.debug(`[haimati_list] \u5165\u53C2: category="${t.category||"(\u65E0)"}, recursive=${t.recursive}, detail=${t.detail}`),!await x(r)){let i="\u9519\u8BEF\uFF1A\u6D77\u9A6C\u4F53\u7D22\u5F15\u4E0D\u5B58\u5728";return await u.debug(`[haimati_list] \u51FA\u53C2:
260
260
  ${i}`),i}try{let i=await D(e);if(t.category){let s=(await It(e)).split(`
261
- `),d=0,l=[];for(let m of s){if(!m.trim())continue;let h=z(m);if(m.match(/^\s*[│├└─\s]*(.+?)\s*-\s*(\d+)\s*$/))continue;let w=V(m);if(w&&(w==="/"?l[h]="":l[h]=w,l=l.slice(0,h+1),l.filter(Boolean).join("/")===t.category)){d=h;break}}let f=[],g=[];l=[];for(let m of s){if(!m.trim())continue;let h=z(m),y=m.match(/^\s*[│├└─\s]*(.+?)\s*-\s*(\d+)\s*$/);if(y){let P=y[1].trim(),b=y[2];if(h===d+1){let L=l.slice(1,h).filter(Boolean).join("/");L===t.category&&g.push({category:L,title:P,id:b})}continue}let w=V(m);w&&(w==="/"?l[h]="":l[h]=w,l=l.slice(0,h+1),h===d+1&&l.filter(Boolean).join("/")===t.category&&f.push(w))}let p=`## ${t.category}
261
+ `),d=0,l=[];for(let m of s){if(!m.trim())continue;let p=z(m);if(m.match(/^\s*[│├└─\s]*(.+?)\s*-\s*(\d+)\s*$/))continue;let w=V(m);if(w&&(w==="/"?l[p]="":l[p]=w,l=l.slice(0,p+1),l.filter(Boolean).join("/")===t.category)){d=p;break}}let f=[],g=[];l=[];for(let m of s){if(!m.trim())continue;let p=z(m),y=m.match(/^\s*[│├└─\s]*(.+?)\s*-\s*(\d+)\s*$/);if(y){let P=y[1].trim(),b=y[2];if(p===d+1){let L=l.slice(1,p).filter(Boolean).join("/");L===t.category&&g.push({category:L,title:P,id:b})}continue}let w=V(m);w&&(w==="/"?l[p]="":l[p]=w,l=l.slice(0,p+1),p===d+1&&l.filter(Boolean).join("/")===t.category&&f.push(w))}let h=`## ${t.category}
262
262
 
263
- `;if(t.recursive){let m=i.filter(y=>y.category===t.category||y.category.startsWith(t.category+"/")),h=new Map;for(let y of m){let P=y.category.slice(t.category.length+1).split("/")[0]||"(\u76F4\u63A5)";h.has(P)||h.set(P,[]),h.get(P).push(y)}for(let[y,w]of h)p+=`### ${y}/
264
- `,p+=w.map(P=>`- ${P.title} - ${P.id.padStart(3,"0")}`).join(`
263
+ `;if(t.recursive){let m=i.filter(y=>y.category===t.category||y.category.startsWith(t.category+"/")),p=new Map;for(let y of m){let P=y.category.slice(t.category.length+1).split("/")[0]||"(\u76F4\u63A5)";p.has(P)||p.set(P,[]),p.get(P).push(y)}for(let[y,w]of p)h+=`### ${y}/
264
+ `,h+=w.map(P=>`- ${P.title} - ${P.id.padStart(3,"0")}`).join(`
265
265
  `)+`
266
266
 
267
- `}else f.length>0&&(p+=`**\u5B50\u5206\u7C7B\uFF1A**
267
+ `}else f.length>0&&(h+=`**\u5B50\u5206\u7C7B\uFF1A**
268
268
  `+f.map(m=>`- ${m}/`).join(`
269
269
  `)+`
270
270
 
271
- `),g.length>0&&(p+=`**\u76F4\u63A5\u6761\u76EE\uFF1A**
271
+ `),g.length>0&&(h+=`**\u76F4\u63A5\u6761\u76EE\uFF1A**
272
272
  `+g.map(m=>`- ${m.title} - ${m.id.padStart(3,"0")}`).join(`
273
- `));if(t.detail){let m=t.recursive?i.filter(h=>h.category===t.category||h.category.startsWith(t.category+"/")):i.filter(h=>h.category===t.category);if(m.length>0)if(t.recursive){let h=`## ${t.category}
273
+ `));if(t.detail){let m=t.recursive?i.filter(p=>p.category===t.category||p.category.startsWith(t.category+"/")):i.filter(p=>p.category===t.category);if(m.length>0)if(t.recursive){let p=`## ${t.category}
274
274
 
275
- `,y=new Map;for(let w of m){let P=w.category.slice(t.category.length+1).split("/")[0]||"(\u76F4\u63A5)";y.has(P)||y.set(P,[]),y.get(P).push(w)}for(let[w,P]of y){h+=`### ${w}/
276
- `;for(let b of P){let L=await _(e,b.id);if(!L){h+=`- ${b.title} - ${b.id.padStart(3,"0")} (\u4E66\u9875\u6587\u4EF6\u4E0D\u5B58\u5728)
275
+ `,y=new Map;for(let w of m){let P=w.category.slice(t.category.length+1).split("/")[0]||"(\u76F4\u63A5)";y.has(P)||y.set(P,[]),y.get(P).push(w)}for(let[w,P]of y){p+=`### ${w}/
276
+ `;for(let b of P){let L=await _(e,b.id);if(!L){p+=`- ${b.title} - ${b.id.padStart(3,"0")} (\u4E66\u9875\u6587\u4EF6\u4E0D\u5B58\u5728)
277
277
 
278
- `;continue}h+=`#### ${b.title} - ${b.id.padStart(3,"0")}
279
- `,h+=W(b,L)+`
278
+ `;continue}p+=`#### ${b.title} - ${b.id.padStart(3,"0")}
279
+ `,p+=W(b,L)+`
280
280
 
281
- `}}p=h}else{p+=`
281
+ `}}h=p}else{h+=`
282
282
  **\u8BE6\u7EC6\u5185\u5BB9\uFF1A**
283
283
 
284
- `;for(let h of m){let y=await _(e,h.id);if(!y){p+=`- ${h.title} - ${h.id.padStart(3,"0")} (\u4E66\u9875\u6587\u4EF6\u4E0D\u5B58\u5728)
284
+ `;for(let p of m){let y=await _(e,p.id);if(!y){h+=`- ${p.title} - ${p.id.padStart(3,"0")} (\u4E66\u9875\u6587\u4EF6\u4E0D\u5B58\u5728)
285
285
 
286
- `;continue}p+=`#### ${h.title} - ${h.id.padStart(3,"0")}
287
- `,p+=W(h,y)+`
286
+ `;continue}h+=`#### ${p.title} - ${p.id.padStart(3,"0")}
287
+ `,h+=W(p,y)+`
288
288
 
289
289
  `}}}return await u.debug(`[haimati_list] \u51FA\u53C2:
290
- ${p}`),await u.info(`[haimati_list] \u5217\u51FA\u6210\u529F: ${t.category}${t.detail?" (\u8BE6\u7EC6\u6A21\u5F0F)":""}`),p}if(t.detail){let c=`## \u6D77\u9A6C\u4F53\u7D22\u5F15\u8BE6\u60C5
290
+ ${h}`),await u.info(`[haimati_list] \u5217\u51FA\u6210\u529F: ${t.category}${t.detail?" (\u8BE6\u7EC6\u6A21\u5F0F)":""}`),h}if(t.detail){let c=`## \u6D77\u9A6C\u4F53\u7D22\u5F15\u8BE6\u60C5
291
291
 
292
292
  `,s=new Map;for(let l of i){let f=l.category.split("/")[0]||"(\u65E0\u5206\u7C7B)";s.has(f)||s.set(f,[]),s.get(f).push(l)}for(let[l,f]of s){c+=`### ${l}/
293
293
 
294
- `;for(let g of f){let p=await _(e,g.id);if(!p){await u.warn(`[haimati_list] detail: #${g.id} (${g.title}) \u4E66\u9875\u6587\u4EF6\u4E0D\u5B58\u5728`);continue}c+=`#### ${g.category}/${g.title} - ${g.id.padStart(3,"0")}
295
- `,c+=W(g,p)+`
294
+ `;for(let g of f){let h=await _(e,g.id);if(!h){await u.warn(`[haimati_list] detail: #${g.id} (${g.title}) \u4E66\u9875\u6587\u4EF6\u4E0D\u5B58\u5728`);continue}c+=`#### ${g.category}/${g.title} - ${g.id.padStart(3,"0")}
295
+ `,c+=W(g,h)+`
296
296
 
297
297
  `}}let d=c;return await u.debug(`[haimati_list] \u51FA\u53C2:
298
298
  ${d}`),await u.info("[haimati_list] \u5217\u51FA\u6210\u529F: \u5168\u90E8 (\u8BE6\u7EC6\u6A21\u5F0F)"),d}let o=`## \u6D77\u9A6C\u4F53\u7D22\u5F15
299
299
 
300
300
  ${st(i)||"(\u7A7A)"}`;return await u.debug(`[haimati_list] \u51FA\u53C2:
301
- ${o}`),await u.info("[haimati_list] \u5217\u51FA\u6210\u529F: \u5168\u90E8"),o}catch(i){return await k(i,"haimati_list")}}})}}import{readFile as le,rm as fe}from"node:fs/promises";import{basename as j,dirname as v,join as ut}from"node:path";import{fileURLToPath as de}from"node:url";var ge="opencode-haimati";function jt(t,n){if(!n)return;let e=new AbortController,r=setTimeout(()=>e.abort(),1e4);me(e.signal).then(i=>{i.updated&&(u.info(`[autoUpdate] \u53D1\u73B0\u65B0\u7248\u672C: ${i.current} \u2192 ${i.latest}`),setTimeout(()=>{t.client.tui.showToast({body:{title:"\u6D77\u9A6C\u4F53\u8BB0\u5FC6\u63D2\u4EF6\u66F4\u65B0",message:`${i.name} \u5DF2\u4ECE ${i.current} \u66F4\u65B0\u5230 ${i.latest}\uFF0C\u91CD\u542F OpenCode \u5B8C\u6210\u66F4\u65B0`,variant:"info"}})},5e3))}).catch(()=>{}).finally(()=>clearTimeout(r))}async function me(t){let n=await he(ge);if(!n)return{updated:!1};let e=await lt(ut(n,"package.json"));if(!e?.name||!e.version)return{updated:!1};let r=await $e(e.name,t);if(!r||!xe(r,e.version))return{updated:!1};let i=await pe(n,e.name);if(!i)return{updated:!1};try{await fe(i,{recursive:!0,force:!0})}catch{return{updated:!1,error:"remove_failed",name:e.name,current:e.version,latest:r}}return{updated:!0,name:e.name,current:e.version,latest:r}}async function he(t){let n=v(de(import.meta.url));for(;;){if((await lt(ut(n,"package.json")))?.name===t)return j(n)==="dist"?v(n):n;let r=v(n);if(r===n)return;n=r}}async function pe(t,n){let e=v(t),r=j(e).startsWith("@")?v(e):e;if(j(r)!=="node_modules")return;let i=v(r),a=await lt(ut(i,"package.json")),o=ye(i,n)??a?.dependencies?.[n];if(!(!o||!we(o)))return i}function ye(t,n){if(n.startsWith("@")){let[i,a]=n.split("/");if(!i||!a||j(v(t))!==i)return;let o=`${a}@`,c=j(t);return c.startsWith(o)?c.slice(o.length):void 0}let e=`${n}@`,r=j(t);return r.startsWith(e)?r.slice(e.length):void 0}function we(t){let n=t.trim();return n?!!(n==="latest"||n==="*"||/^[~^]/.test(n)||/^(?:>=|>|<=|<)/.test(n)||/\s+(?:\|\||-|[<>=])\s+/.test(n)):!1}async function lt(t){try{let n=JSON.parse(await le(t,"utf-8"));return n&&typeof n=="object"?n:void 0}catch{return}}async function $e(t,n){try{let e=await fetch(`https://registry.npmjs.org/${encodeURIComponent(t)}/latest`,{signal:n});if(!e.ok)return;let r=await e.json();if(!r||typeof r!="object")return;let i=r.version;return typeof i=="string"?i:void 0}catch{return}}function xe(t,n){let e=qt(t),r=qt(n);if(!e||!r)return!1;for(let i=0;i<3;i++)if(e.parts[i]!==r.parts[i])return e.parts[i]>r.parts[i];if(!e.pre.length&&r.pre.length)return!0;if(e.pre.length&&!r.pre.length)return!1;for(let i=0;i<Math.max(e.pre.length,r.pre.length);i++){let a=e.pre[i],o=r.pre[i];if(a===void 0)return!1;if(o===void 0)return!0;if(a===o)continue;let c=/^\d+$/.test(a)?Number(a):void 0,s=/^\d+$/.test(o)?Number(o):void 0;return c!==void 0&&s!==void 0?c>s:c!==void 0?!1:s!==void 0?!0:a>o}return!1}function qt(t){let n=t.match(/^v?(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?(?:\+.+)?$/);if(n)return{parts:[Number(n[1]),Number(n[2]),Number(n[3])],pre:n[4]?.split(".")??[]}}var Pe="2026-05-14 17:34:04",Nt=!1;function be(t){return t.type==="text"}var kn=async t=>{await $t(),Nt||(Nt=!0,await u.debug(`[HaimatiPlugin] \u4EE3\u7801\u6700\u540E\u4FEE\u6539\u65E5\u671F: ${Pe}`));let n=O(t.directory),e=At(),r=new Set,i=new Set,a=new Set,o=new Map,c=1e4,s=new Set;return jt(t,n.autoUpdate!==!1),{tool:e,event:async({event:d})=>{if(d.type==="message.updated"&&d.properties.info.role==="assistant"){let l=d.properties.info;if(l.finish==="stop"&&!r.has(l.id)){if(r.add(l.id),a.has(l.id)){a.delete(l.id);return}if(i.has(l.sessionID))return;let f=o.get(l.sessionID);if(f&&Date.now()<f)return;n.autoWrite===!0&&(i.add(l.sessionID),u.info(`[autoWrite] \u5F00\u59CB\u5F02\u6B65\u8BB0\u5FC6\u5199\u5165 session=${l.sessionID}`),t.client.session.prompt({path:{id:l.sessionID},body:{parts:[{type:"text",text:`\u56DE\u987E\u5F53\u524D\u4F1A\u8BDD\uFF0C\u5BF9\u6D77\u9A6C\u4F53\u8BB0\u5FC6\u8FDB\u884C\u7EF4\u62A4\u3002
301
+ ${o}`),await u.info("[haimati_list] \u5217\u51FA\u6210\u529F: \u5168\u90E8"),o}catch(i){return await k(i,"haimati_list")}}})}}import{readFile as le,rm as fe}from"node:fs/promises";import{basename as j,dirname as v,join as ut}from"node:path";import{fileURLToPath as de}from"node:url";var ge="opencode-haimati";function jt(t,n){if(!n)return;let e=new AbortController,r=setTimeout(()=>e.abort(),1e4);me(e.signal).then(i=>{i.updated&&(u.info(`[autoUpdate] \u53D1\u73B0\u65B0\u7248\u672C: ${i.current} \u2192 ${i.latest}`),setTimeout(()=>{t.client.tui.showToast({body:{title:"\u6D77\u9A6C\u4F53\u8BB0\u5FC6\u63D2\u4EF6\u66F4\u65B0",message:`${i.name} \u5DF2\u4ECE ${i.current} \u66F4\u65B0\u5230 ${i.latest}\uFF0C\u91CD\u542F OpenCode \u5B8C\u6210\u66F4\u65B0`,variant:"info"}})},5e3))}).catch(()=>{}).finally(()=>clearTimeout(r))}async function me(t){let n=await pe(ge);if(!n)return{updated:!1};let e=await lt(ut(n,"package.json"));if(!e?.name||!e.version)return{updated:!1};let r=await $e(e.name,t);if(!r||!xe(r,e.version))return{updated:!1};let i=await he(n,e.name);if(!i)return{updated:!1};try{await fe(i,{recursive:!0,force:!0})}catch{return{updated:!1,error:"remove_failed",name:e.name,current:e.version,latest:r}}return{updated:!0,name:e.name,current:e.version,latest:r}}async function pe(t){let n=v(de(import.meta.url));for(;;){if((await lt(ut(n,"package.json")))?.name===t)return j(n)==="dist"?v(n):n;let r=v(n);if(r===n)return;n=r}}async function he(t,n){let e=v(t),r=j(e).startsWith("@")?v(e):e;if(j(r)!=="node_modules")return;let i=v(r),a=await lt(ut(i,"package.json")),o=ye(i,n)??a?.dependencies?.[n];if(!(!o||!we(o)))return i}function ye(t,n){if(n.startsWith("@")){let[i,a]=n.split("/");if(!i||!a||j(v(t))!==i)return;let o=`${a}@`,c=j(t);return c.startsWith(o)?c.slice(o.length):void 0}let e=`${n}@`,r=j(t);return r.startsWith(e)?r.slice(e.length):void 0}function we(t){let n=t.trim();return n?!!(n==="latest"||n==="*"||/^[~^]/.test(n)||/^(?:>=|>|<=|<)/.test(n)||/\s+(?:\|\||-|[<>=])\s+/.test(n)):!1}async function lt(t){try{let n=JSON.parse(await le(t,"utf-8"));return n&&typeof n=="object"?n:void 0}catch{return}}async function $e(t,n){try{let e=await fetch(`https://registry.npmjs.org/${encodeURIComponent(t)}/latest`,{signal:n});if(!e.ok)return;let r=await e.json();if(!r||typeof r!="object")return;let i=r.version;return typeof i=="string"?i:void 0}catch{return}}function xe(t,n){let e=qt(t),r=qt(n);if(!e||!r)return!1;for(let i=0;i<3;i++)if(e.parts[i]!==r.parts[i])return e.parts[i]>r.parts[i];if(!e.pre.length&&r.pre.length)return!0;if(e.pre.length&&!r.pre.length)return!1;for(let i=0;i<Math.max(e.pre.length,r.pre.length);i++){let a=e.pre[i],o=r.pre[i];if(a===void 0)return!1;if(o===void 0)return!0;if(a===o)continue;let c=/^\d+$/.test(a)?Number(a):void 0,s=/^\d+$/.test(o)?Number(o):void 0;return c!==void 0&&s!==void 0?c>s:c!==void 0?!1:s!==void 0?!0:a>o}return!1}function qt(t){let n=t.match(/^v?(\d+)\.(\d+)\.(\d+)(?:-([0-9A-Za-z.-]+))?(?:\+.+)?$/);if(n)return{parts:[Number(n[1]),Number(n[2]),Number(n[3])],pre:n[4]?.split(".")??[]}}var Pe="2026-05-17 19:53:17",Nt=!1;function be(t){return t.type==="text"}var kn=async t=>{await $t(),Nt||(Nt=!0,await u.debug(`[HaimatiPlugin] \u4EE3\u7801\u6700\u540E\u4FEE\u6539\u65E5\u671F: ${Pe}`));let n=O(t.directory),e=At(),r=new Set,i=new Set,a=new Set,o=new Map,c=1e4,s=new Set;return jt(t,n.autoUpdate!==!1),{tool:e,event:async({event:d})=>{if(d.type==="message.updated"&&d.properties.info.role==="assistant"){let l=d.properties.info;if(l.finish==="stop"&&!r.has(l.id)){if(r.add(l.id),a.has(l.id)){a.delete(l.id);return}if(i.has(l.sessionID))return;let f=o.get(l.sessionID);if(f&&Date.now()<f)return;n.autoWrite===!0&&(i.add(l.sessionID),u.info(`[autoWrite] \u5F00\u59CB\u5F02\u6B65\u8BB0\u5FC6\u5199\u5165 session=${l.sessionID}`),t.client.session.prompt({path:{id:l.sessionID},body:{parts:[{type:"text",text:`\u56DE\u987E\u5F53\u524D\u4F1A\u8BDD\uFF0C\u5BF9\u6D77\u9A6C\u4F53\u8BB0\u5FC6\u8FDB\u884C\u7EF4\u62A4\u3002
302
302
 
303
303
  \u4F60\u7684\u804C\u8D23\uFF1A
304
304
  1. \u5199\u5165\u65B0\u77E5\u8BC6 - \u67B6\u6784\u51B3\u7B56\u3001API\u7528\u6CD5\u3001Bug\u6839\u56E0\u4E0E\u4FEE\u590D\u3001\u914D\u7F6E\u65B9\u6CD5\u3001\u5F00\u53D1\u89C4\u8303\u7B49\u503C\u5F97\u957F\u671F\u8BB0\u5F55\u7684\u77E5\u8BC6
@@ -314,14 +314,15 @@ ${o}`),await u.info("[haimati_list] \u5217\u51FA\u6210\u529F: \u5168\u90E8"),o}c
314
314
  - \u9519\u8BEF\u6216\u8FC7\u671F\u7684\u4FE1\u606F\u76F4\u63A5\u5220\u9664\u6216\u4FEE\u6539
315
315
  - \u4E0D\u786E\u5B9A\u5206\u7C7B\u65F6\uFF0C\u5148\u7528 haimati_list \u67E5\u770B\u73B0\u6709\u7ED3\u6784
316
316
 
317
- \u5982\u679C\u6CA1\u4EC0\u4E48\u53EF\u505A\u7684\uFF0C\u56DE\u590D"\u65E0"`}]}}).then(g=>{let p=g?.data?.info?.id;p&&a.add(p),i.delete(l.sessionID),o.set(l.sessionID,Date.now()+c),u.info(`[autoWrite] AI\u8BB0\u5FC6\u5199\u5165\u5B8C\u6210 session=${l.sessionID}`)}).catch(g=>{i.delete(l.sessionID),o.set(l.sessionID,Date.now()+c);let p=g instanceof Error?g.message:String(g);u.error(`[autoWrite] \u5931\u8D25: ${p}`)})),await u.debug(`[message.updated] AI\u56DE\u590D\u7ED3\u675F messageID=${l.id}`)}}},"chat.message":async(d,l)=>{let f=l.parts.filter(be);if(f.length!==0){if(s.has(l.message.sessionID)){l.parts.unshift({id:`prt_auto_reminder_${Date.now()}`,sessionID:f[0].sessionID??l.message.sessionID,messageID:f[0].messageID??l.message.id,type:"text",text:`<\u6D77\u9A6C\u4F53\u81EA\u52A8\u63D0\u793A>
318
- \u5DE5\u4F5C\u524D\u8BF7\u786E\u8BA4\u662F\u5426\u5DF2\u8BFB\u53D6\u6240\u6709\u76F8\u5173\u7684\u6D77\u9A6C\u4F53\u8BB0\u5FC6
317
+ \u5982\u679C\u6CA1\u4EC0\u4E48\u53EF\u505A\u7684\uFF0C\u56DE\u590D"\u65E0"`}]}}).then(g=>{let h=g?.data?.info?.id;h&&a.add(h),i.delete(l.sessionID),o.set(l.sessionID,Date.now()+c),u.info(`[autoWrite] AI\u8BB0\u5FC6\u5199\u5165\u5B8C\u6210 session=${l.sessionID}`)}).catch(g=>{i.delete(l.sessionID),o.set(l.sessionID,Date.now()+c);let h=g instanceof Error?g.message:String(g);u.error(`[autoWrite] \u5931\u8D25: ${h}`)})),await u.debug(`[message.updated] AI\u56DE\u590D\u7ED3\u675F messageID=${l.id}`)}}},"chat.message":async(d,l)=>{let f=l.parts.filter(be);if(f.length!==0){if(s.has(l.message.sessionID)){l.parts.unshift({id:`prt_auto_reminder_${Date.now()}`,sessionID:f[0].sessionID??l.message.sessionID,messageID:f[0].messageID??l.message.id,type:"text",text:`<\u6D77\u9A6C\u4F53\u81EA\u52A8\u63D0\u793A>
318
+ 1\u3001\u5DE5\u4F5C\u524D\u8BFB\u53D6\u6240\u6709\u76F8\u5173\u7684\u6D77\u9A6C\u4F53\u8BB0\u5FC6\uFF1B2\u3001\u5DE5\u4F5C\u540E\u603B\u7ED3\u8BB0\u5FC6
319
319
  </\u6D77\u9A6C\u4F53\u81EA\u52A8\u63D0\u793A>`,synthetic:!0}),await u.debug("[chat.message] \u6CE8\u5165\u7B80\u77ED\u786E\u8BA4\u63D0\u793A");return}s.add(l.message.sessionID),l.parts.unshift({id:`prt_auto_reminder_${Date.now()}`,sessionID:f[0].sessionID??l.message.sessionID,messageID:f[0].messageID??l.message.id,type:"text",text:`<\u6D77\u9A6C\u4F53\u81EA\u52A8\u63D0\u793A>
320
320
  \u4F60\u6709\u4E00\u5957\u6D77\u9A6C\u4F53\u8BB0\u5FC6\u63D2\u4EF6\u53EF\u7528
321
321
 
322
322
  # \u5DE5\u4F5C\u6D41\u7A0B
323
323
 
324
- 1\u3001\u786E\u8BA4\u6D77\u9A6C\u4F53\u4E2D\u662F\u5426\u5B58\u5728\u76F8\u5173\u8BB0\u5FC6\uFF0C\u5982\u679C\u5B58\u5728\uFF0C\u5219\u8BFB\u53D6\u6D77\u9A6C\u4F53\u4E2D\u7684\u76F8\u5173\u8BB0\u5FC6
324
+ 1\u3001\u5DE5\u4F5C\u524D\u8BFB\u53D6\u6240\u6709\u76F8\u5173\u7684\u6D77\u9A6C\u4F53\u8BB0\u5FC6
325
+ - \u786E\u8BA4\u6D77\u9A6C\u4F53\u4E2D\u662F\u5426\u5B58\u5728\u76F8\u5173\u8BB0\u5FC6\uFF0C\u5982\u679C\u5B58\u5728\uFF0C\u5219\u8BFB\u53D6\u5168\u90E8\u6D77\u9A6C\u4F53\u4E2D\u7684\u76F8\u5173\u8BB0\u5FC6
325
326
 
326
327
  2\u3001\u5DE5\u4F5C\u7ED3\u675F\u540E\u603B\u7ED3\u8BB0\u5FC6\uFF1A
327
328
  - \u5C06\u5DE5\u4F5C\u4E2D\u5B66\u4E60\u7684\u65B0\u77E5\u8BC6\u3001\u7ECF\u9A8C\u5199\u5165\u6D77\u9A6C\u4F53
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencode-haimati",
3
- "version": "1.4.4",
3
+ "version": "1.4.5",
4
4
  "description": "OpenCode plugin for a file-based memory system inspired by the hippocampus, providing long-term memory storage and retrieval across sessions.",
5
5
  "main": "./dist/index.js",
6
6
  "type": "module",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencode-haimati",
3
- "version": "1.4.4",
3
+ "version": "1.4.5",
4
4
  "description": "OpenCode plugin for a file-based memory system inspired by the hippocampus, providing long-term memory storage and retrieval across sessions.",
5
5
  "main": "./dist/index.js",
6
6
  "type": "module",