opencode-haimati 1.0.6 → 1.0.7

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/README.md CHANGED
@@ -53,9 +53,9 @@ bun add -g opencode-haimati
53
53
  | 工具 | 说明 |
54
54
  |------|------|
55
55
  | `haimati_read` | 读取记忆内容(只支持序号查询,支持分页,返回带行号和版本号) |
56
- | `haimati_write` | 写入新记忆(如果已存在相同分类和标题的记忆则报错) |
56
+ | `haimati_write` | 写入新记忆(title 不能以 ` - 序号` 格式结尾,已存在相同分类和标题的记忆则报错) |
57
57
  | `haimati_search` | 搜索记忆内容(标题、分类、序号、书页内容) |
58
- | `haimati_edit` | 修改记忆内容(部分替换,支持版本并发控制) |
58
+ | `haimati_edit` | 修改记忆内容(部分替换,行号范围 [offsetBegin, offsetEnd),offsetEnd 不包括) |
59
59
  | `haimati_move` | 修改记忆的分类路径 |
60
60
  | `haimati_delete` | 删除记忆 |
61
61
  | `haimati_list` | 列出记忆索引 |
@@ -70,9 +70,11 @@ bun add -g opencode-haimati
70
70
 
71
71
  ```typescript
72
72
  // 写入新记忆
73
+ // 注意:title 不能以 " - 序号" 格式结尾(如 " - 001"),序号由系统自动分配
73
74
  haimati_write({
74
75
  category: "xxx项目/签章",
75
- title: "签章服务WS通信机制",
76
+ title: "签章服务WS通信机制", // ✓ 正确
77
+ // title: "签章服务WS通信机制 - 001", // ✗ 错误,会报错
76
78
  content: "WebSocket通信采用base64编码..."
77
79
  })
78
80
 
@@ -82,11 +84,11 @@ haimati_read({ query: "086" })
82
84
  // 搜索记忆
83
85
  haimati_search({ keyword: "WebSocket", match: "or", limit: 10 })
84
86
 
85
- // 部分修改记忆
87
+ // 部分修改记忆(注意:offsetEnd 不包括此行,[3, 5) 表示替换第 3、4 两行)
86
88
  haimati_edit({
87
89
  query: "086",
88
90
  offsetBegin: 3,
89
- offsetEnd: 5,
91
+ offsetEnd: 5, // 不包括第 5 行
90
92
  content: "新的替换内容",
91
93
  version: 1
92
94
  })
package/dist/index.js CHANGED
@@ -2,90 +2,89 @@ var Y=Object.defineProperty;var Nt=Object.getOwnPropertyDescriptor;var qt=Object
2
2
  ---
3
3
  version:`,R=1,at=!1,N=50});import b from"path";import Wt from"os";import B from"fs";function Rt(t){let i=b.join(t,ot);if(!B.existsSync(i))return null;try{let s=B.readFileSync(i,"utf-8").split(`
4
4
  `);for(let e of s){let o=e.trim();if(!o||o.startsWith("#"))continue;let r=o.match(/^([^:]+):\s*(.+)$/);if(r){let a=r[1].trim(),c=r[2].trim();if(a===st&&c)return b.resolve(t,c)}}}catch(n){console.error("[haimati] \u8BFB\u53D6\u914D\u7F6E\u6587\u4EF6\u5931\u8D25:",n)}return null}function T(t){let i=Rt(t);return i||b.join(t,Q)}function P(t){return b.join(T(t),tt)}function G(t){return b.join(T(t),nt)}function ct(t){return b.join(T(t),".lock")}function lt(t){return b.join(T(t),"\u4E66\u9875")}function C(t,i){let n=parseInt(i,10),s=Math.floor((n-1)/50)*50+1,e=s+50-1,o=`${String(s).padStart(3,"0")}-${String(e).padStart(3,"0")}`;return b.join(lt(t),o)}function H(t,i){return b.join(C(t,i),`${i}.md`)}function $t(){let t=Wt.tmpdir();return b.join(t,"haimati_logs",it)}function v(t){return B.promises.mkdir(t,{recursive:!0}).then(()=>{})}function x(t){return B.promises.access(t).then(()=>!0).catch(()=>!1)}var D=Z(()=>{"use strict";L()});var dt={};yt(dt,{buildIndexTree:()=>U,extractCategoryName:()=>j,findEntryById:()=>S,findEntryByPath:()=>O,getTreeDepth:()=>q,parseIndex:()=>It,readIndex:()=>I,readIndexContent:()=>mt,removeIndexEntry:()=>ft,writeIndex:()=>ut});import xt from"fs";import{promisify as _t}from"util";function q(t){let i=0,n=0,s=t.length;for(;n<s;)if(t[n]==="\u2502"&&n+3<s&&t.slice(n+1,n+4)===" ")i++,n+=4;else if(t.slice(n,n+4)===" ")i++,n+=4;else{if((t[n]==="\u251C"||t[n]==="\u2514")&&n+3<s&&t.slice(n+1,n+4)==="\u2500\u2500 ")break;break}return i}function j(t){let n=t.trim().replace(/^[│├└─\s]+/,"").trim();return n==="/"?"/":!n.endsWith("/")||(n=n.slice(0,-1),!n)?null:n}function It(t){let i=[],n=t.split(`
5
- `),s=[];for(let e of n){if(!e.trim())continue;let o=q(e),r=e.match(/^\s*[│├└─\s]*(.+?)\s*-\s*(\d+)\s*$/);if(r){let a=r[1].trim(),c=r[2],m=s.slice(0,o).filter(g=>g!=="").join("/");i.push({id:c,category:m,title:a})}else{let a=j(e);if(a)if(a==="/"){s[o]="";for(let c=o+1;c<s.length;c++)delete s[c]}else{s[o]=a;for(let c=o+1;c<s.length;c++)delete s[c]}}}return i}function S(t,i){return t.find(n=>n.id===i)||null}function O(t,i,n){return t.find(s=>s.category===i&&s.title===n)||null}function ft(t,i){return t.filter(n=>n.id!==i)}function U(t){if(t.length===0)return"";let i={name:"/",children:[],entry:null};for(let e of t){let o=e.category.split("/"),r=i;for(let c=0;c<o.length;c++){let h=o[c];if(!h)continue;let m=r.children.find(g=>g.name===h);m||(m={name:h,children:[],entry:null},r.children.push(m)),r=m}let a={name:e.id,children:[],entry:e};r.children.push(a)}function n(e){e.children.sort((o,r)=>o.name.localeCompare(r.name,void 0,{sensitivity:"base"}));for(let o of e.children)n(o)}n(i);function s(e,o,r){let a=[],c=o+(r?"\u2514\u2500\u2500 ":"\u251C\u2500\u2500 "),h=e.name==="/"?"/":e.name+"/";a.push(`${c}${h}`),o=o+(r?" ":"\u2502 ");let m=e.children.filter(f=>f.entry===null),g=e.children.filter(f=>f.entry!==null),p=[...m,...g];for(let f=0;f<p.length;f++){let d=p[f],y=f===p.length-1;if(d.entry){let u=o+(y?"\u2514\u2500\u2500 ":"\u251C\u2500\u2500 ");a.push(`${u}${d.entry.title} - ${d.entry.id}`)}else a.push(...s(d,o,y))}return a}return s(i,"",!0).join(`
5
+ `),s=[];for(let e of n){if(!e.trim())continue;let o=q(e),r=e.match(/^\s*[│├└─\s]*(.+?)\s*-\s*(\d+)\s*$/);if(r){let a=r[1].trim(),c=r[2],f=s.slice(0,o).filter(m=>m!=="").join("/");i.push({id:c,category:f,title:a})}else{let a=j(e);if(a)if(a==="/"){s[o]="";for(let c=o+1;c<s.length;c++)delete s[c]}else{s[o]=a;for(let c=o+1;c<s.length;c++)delete s[c]}}}return i}function S(t,i){return t.find(n=>n.id===i)||null}function O(t,i,n){return t.find(s=>s.category===i&&s.title===n)||null}function ft(t,i){return t.filter(n=>n.id!==i)}function U(t){if(t.length===0)return"";let i={name:"/",children:[],entry:null};for(let e of t){let o=e.category.split("/"),r=i;for(let c=0;c<o.length;c++){let g=o[c];if(!g)continue;let f=r.children.find(m=>m.name===g);f||(f={name:g,children:[],entry:null},r.children.push(f)),r=f}let a={name:e.id,children:[],entry:e};r.children.push(a)}function n(e){e.children.sort((o,r)=>o.name.localeCompare(r.name,void 0,{sensitivity:"base"}));for(let o of e.children)n(o)}n(i);function s(e,o,r){let a=[],c=o+(r?"\u2514\u2500\u2500 ":"\u251C\u2500\u2500 "),g=e.name==="/"?"/":e.name+"/";a.push(`${c}${g}`),o=o+(r?" ":"\u2502 ");let f=e.children.filter(u=>u.entry===null),m=e.children.filter(u=>u.entry!==null),p=[...f,...m];for(let u=0;u<p.length;u++){let d=p[u],w=u===p.length-1;if(d.entry){let y=o+(w?"\u2514\u2500\u2500 ":"\u251C\u2500\u2500 ");a.push(`${y}${d.entry.title} - ${d.entry.id}`)}else a.push(...s(d,o,w))}return a}return s(i,"",!0).join(`
6
6
  `)}async function I(t){let i=P(t);if(!await x(i))return[];let n=await Et(i,"utf-8");return It(n)}async function ut(t,i){let n=pt("path").join(t,(L(),z(wt)).HAIMATI_DIR);await x(n)||await v(n);let s=U(i),e=P(t);await Bt(e,s,"utf-8")}async function mt(t){let i=P(t);return await x(i)?Et(i,"utf-8"):""}var Et,Bt,F=Z(()=>{"use strict";D();Et=_t(xt.readFile),Bt=_t(xt.writeFile)});D();F();import{tool as _}from"@opencode-ai/plugin";D();L();import X from"fs";import{promisify as K}from"util";var Gt=K(X.readFile),Ht=K(X.writeFile),Ut=K(X.unlink),Pt=K(X.mkdir);async function k(t,i){let n=H(t,i);if(!await x(n))return null;let s=await Gt(n,"utf-8"),e=s.indexOf(A);if(e===-1){let p=s.split(`
7
7
  `);return p.length<2?null:{title:p[0],createdAt:p[1],content:p.slice(2).join(`
8
8
  `),version:1}}let o=s.substring(0,e).split(`
9
9
  `)[0],a=s.substring(0,e).split(`
10
- `)[1]||"",c=s.substring(e+A.length),h=parseInt(c.trim(),10)||1,g=s.substring(0,e).substring(o.length+1+a.length+1);return{title:o,createdAt:a,content:g,version:h}}async function W(t,i,n,s,e,o=1){let r=lt(t);await x(r)||await Pt(r,{recursive:!0});let a=C(t,i);await x(a)||await Pt(a,{recursive:!0});let c=H(t,i),h=`${n}
10
+ `)[1]||"",c=s.substring(e+A.length),g=parseInt(c.trim(),10)||1,m=s.substring(0,e).substring(o.length+1+a.length+1);return{title:o,createdAt:a,content:m,version:g}}async function W(t,i,n,s,e,o=1){let r=lt(t);await x(r)||await Pt(r,{recursive:!0});let a=C(t,i);await x(a)||await Pt(a,{recursive:!0});let c=H(t,i),g=`${n}
11
11
  ${s}
12
- ${e}${A}${o}`;await Ht(c,h,"utf-8")}async function bt(t,i){let n=H(t,i);return await x(n)?(await Ut(n),!0):!1}async function V(t,i,n,s,e=!1){let o=i.toLowerCase().split(/\s+/).filter(a=>a.length>0);if(o.length===0)return[];let r=[];for(let a of t){let c=a.title.toLowerCase(),h=a.category.toLowerCase(),m=a.id.toLowerCase(),g=0,p=0;for(let d of o)(c.includes(d)||h.includes(d)||m.includes(d))&&g++;if(e&&s){let d=await k(s,a.id);if(d&&d.content){let y=d.content.toLowerCase();for(let u of o)y.includes(u)&&p++}}let f=g+p;n==="and"?f>=o.length&&r.push({entry:a,score:f}):(g>0||e&&p>0)&&r.push({entry:a,score:f})}return r.sort((a,c)=>c.score-a.score),r.map(a=>a.entry)}F();D();F();import Dt from"fs";import{promisify as Lt}from"util";D();L();import Tt from"fs";import{promisify as vt}from"util";var Xt=vt(Tt.writeFile),Kt=vt(Tt.unlink);async function kt(t){let i=T(t);await x(i)||await v(i);let n=ct(t),s=Date.now(),e=50+Math.random()*20;for(;await x(n);){if(Date.now()-s>5e3)return!1;await new Promise(o=>setTimeout(o,e))}return await Xt(n,String(process.pid),"utf-8"),!0}async function Mt(t){let i=ct(t);await x(i)&&await Kt(i)}D();import ht from"fs";import{promisify as gt}from"util";var Vt=gt(ht.appendFile),Jt=gt(ht.writeFile),Yt=gt(ht.stat);function w(t,i=500){if(t.length<=i)return t;let n=Math.floor((i-20)/2);return t.substring(0,n)+"...(\u7701\u7565"+(t.length-i)+"\u5B57\u7B26)..."+t.substring(t.length-n)}async function Zt(t){try{let i=new Date,n=i.toISOString().split("T")[0],s=i.toISOString().replace("T"," ").split(".")[0],e=$t(),o=pt("path").dirname(e);await x(o)||await v(o);let r=!1;await x(e)&&(await Yt(e)).mtime.toISOString().split("T")[0]!==n&&(r=!0);let a=`[${s}] ${t}`;r?await Jt(e,a+`
12
+ ${e}${A}${o}`;await Ht(c,g,"utf-8")}async function bt(t,i){let n=H(t,i);return await x(n)?(await Ut(n),!0):!1}async function V(t,i,n,s,e=!1){let o=i.toLowerCase().split(/\s+/).filter(a=>a.length>0);if(o.length===0)return[];let r=[];for(let a of t){let c=a.title.toLowerCase(),g=a.category.toLowerCase(),f=a.id.toLowerCase(),m=0,p=0;for(let d of o)(c.includes(d)||g.includes(d)||f.includes(d))&&m++;if(e&&s){let d=await k(s,a.id);if(d&&d.content){let w=d.content.toLowerCase();for(let y of o)w.includes(y)&&p++}}let u=m+p;n==="and"?u>=o.length&&r.push({entry:a,score:u}):(m>0||e&&p>0)&&r.push({entry:a,score:u})}return r.sort((a,c)=>c.score-a.score),r.map(a=>a.entry)}F();D();F();import Dt from"fs";import{promisify as Lt}from"util";D();L();import Tt from"fs";import{promisify as vt}from"util";var Xt=vt(Tt.writeFile),Kt=vt(Tt.unlink);async function kt(t){let i=T(t);await x(i)||await v(i);let n=ct(t),s=Date.now(),e=50+Math.random()*20;for(;await x(n);){if(Date.now()-s>5e3)return!1;await new Promise(o=>setTimeout(o,e))}return await Xt(n,String(process.pid),"utf-8"),!0}async function Mt(t){let i=ct(t);await x(i)&&await Kt(i)}D();import ht from"fs";import{promisify as gt}from"util";var Vt=gt(ht.appendFile),Jt=gt(ht.writeFile),Yt=gt(ht.stat);function $(t,i=500){if(t.length<=i)return t;let n=Math.floor((i-20)/2);return t.substring(0,n)+"...(\u7701\u7565"+(t.length-i)+"\u5B57\u7B26)..."+t.substring(t.length-n)}async function Zt(t){try{let i=new Date,n=i.toISOString().split("T")[0],s=i.toISOString().replace("T"," ").split(".")[0],e=$t(),o=pt("path").dirname(e);await x(o)||await v(o);let r=!1;await x(e)&&(await Yt(e)).mtime.toISOString().split("T")[0]!==n&&(r=!0);let a=`[${s}] ${t}`;r?await Jt(e,a+`
13
13
  `,"utf-8"):await Vt(e,a+`
14
- `,"utf-8")}catch(i){console.error("[haimati] \u5199\u5165\u65E5\u5FD7\u6587\u4EF6\u5931\u8D25:",i)}}async function l(t,i){await Zt(`[${t.toUpperCase()}] ${i}`)}var zt=Lt(Dt.readFile),Qt=Lt(Dt.writeFile);async function te(t){let i=G(t);if(!await x(i))return 1;let s=(await zt(i,"utf-8")).trim(),e=parseInt(s,10);return!isNaN(e)&&e>0?e:1}async function ee(t){let i=G(t);if(await x(i))return;let n=await I(t),s=0;for(let e of n){let o=parseInt(e.id,10);o>s&&(s=o)}await Ct(t,s+1)}async function Ct(t,i){let n=T(t);await x(n)||await v(n);let s=G(t);await Qt(s,String(i),"utf-8")}async function St(t,i,n,s,e,o=!1){if(/ - \d{3}$/.test(n))throw await l("warn",`[allocateIdWithLock] title \u683C\u5F0F\u4E0D\u5408\u89C4: "${n}", \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 l("info",`[allocateIdWithLock] \u5F00\u59CB\u5206\u914D\u5E8F\u53F7: category="${i}", title="${n}"`),!await kt(t))return await l("warn",`[allocateIdWithLock] \u83B7\u53D6\u9501\u5931\u8D25: category="${i}", title="${n}"`),null;await l("debug",`[allocateIdWithLock] \u83B7\u53D6\u9501\u6210\u529F: category="${i}", title="${n}"`);try{await ee(t);let r=await I(t),a=r.find(g=>g.category===i&&g.title===n);if(a){if(!o)throw new Error(`\u8BB0\u5FC6\u5DF2\u5B58\u5728: ${i}/${n}\uFF0C\u5982\u9700\u66F4\u65B0\u8BF7\u4F7F\u7528 haimati_edit \u5DE5\u5177`);let g=await k(t,a.id),p=g?g.createdAt:s,f=g?g.version+1:1;return await W(t,a.id,n,p,e,f),await l("info",`[allocateIdWithLock] \u66F4\u65B0\u5DF2\u6709\u6761\u76EE: #${a.id} ${i}/${n}, \u65B0\u7248\u672C: ${f}`),null}let c=await te(t),h=String(c).padStart(3,"0");await W(t,h,n,s,e,1);let m={id:h,category:i,title:n};return r.push(m),await ut(t,r),await Ct(t,c+1),await l("info",`[allocateIdWithLock] \u5206\u914D\u5E8F\u53F7\u6210\u529F: #${h} ${i}/${n}`),h}catch(r){let a=r instanceof Error?r.message:String(r);return await l("error",`[allocateIdWithLock] \u5206\u914D\u5E8F\u53F7\u5931\u8D25: ${a}`),null}finally{await Mt(t)}}function Ft(){return{haimati_read:_({description:"\u4ECE\u6D77\u9A6C\u4F53\u8BB0\u5FC6\u7CFB\u7EDF\u8BFB\u53D6\u5185\u5BB9\u3002\u901A\u8FC7\u5E8F\u53F7\uFF08\u5982 '086'\uFF09\u6765\u5B9A\u4F4D\u5E76\u8BFB\u53D6\u8BB0\u5FC6\u5185\u5BB9\u3002\u652F\u6301\u5206\u9875\u8BFB\u53D6\uFF08offset/limit\uFF09\uFF0C\u8FD4\u56DE\u5185\u5BB9\u5E26\u884C\u53F7\u548C\u7248\u672C\u53F7\u3002",args:{query:_.schema.string().describe("\u5E8F\u53F7\u3002\u4F8B\u5982\uFF1A'086'"),offset:_.schema.number().optional().default(1).describe("\u8D77\u59CB\u884C\u53F7\uFF08\u9ED8\u8BA4 1\uFF09"),limit:_.schema.number().optional().default(2e3).describe("\u6700\u5927\u8BFB\u53D6\u884C\u6570\uFF08\u9ED8\u8BA4 2000\uFF09")},async execute(t,i){let{directory:n}=i,s=P(n);if(await l("info",`[haimati_read] \u5165\u53C2: query="${t.query}", offset=${t.offset||1}, limit=${t.limit||2e3}`),!await x(s)){let e=`\u9519\u8BEF\uFF1A\u6D77\u9A6C\u4F53\u7D22\u5F15\u4E0D\u5B58\u5728\u4E8E ${s}`;return await l("warn",`[haimati_read] \u51FA\u53C2:
15
- ${w(e)}`),e}try{let e=await I(n);await l("debug",`[haimati_read] \u8BFB\u53D6\u7D22\u5F15: \u5171 ${e.length} \u6761\u8BB0\u5F55`);let o=t.query.trim();if(!/^\d+$/.test(o)){let $="\u9519\u8BEF\uFF1Aquery \u5FC5\u987B\u662F\u5E8F\u53F7\uFF0C\u53EA\u652F\u6301\u5E8F\u53F7\u67E5\u8BE2";return await l("warn",`[haimati_read] \u51FA\u53C2:
16
- ${w($)}`),$}let r=S(e,o);if(await l("debug",`[haimati_read] \u5E8F\u53F7\u67E5\u8BE2 #${o}: ${r?"\u627E\u5230":"\u672A\u627E\u5230"}`),!r){let $=`\u672A\u627E\u5230\u8BB0\u5FC6: ${t.query}`;return await l("info",`[haimati_read] \u51FA\u53C2:
17
- ${w($)}`),$}let a=await k(n,r.id);if(!a){let $=`\u672A\u627E\u5230\u4E66\u9875: #${r.id}`;return await l("error",`[haimati_read] \u51FA\u53C2:
18
- ${w($)}`),$}let c=C(n,r.id);await l("debug",`[haimati_read] \u8BFB\u53D6\u4E66\u9875: \u4E66\u9875/${c.split(/[\\/]/).pop()}/${r.id}.md, version=${a.version}`);let h=a.content.split(`
19
- `),m=t.offset||1,g=t.limit||2e3,p=h.length,f=Math.max(0,m-1),d=Math.min(p,f+g),y=[];y.push(`version:${a.version}`);for(let $=f;$<d;$++)y.push(`${$+1}|${h[$]}`);let u=y.join(`
14
+ `,"utf-8")}catch(i){console.error("[haimati] \u5199\u5165\u65E5\u5FD7\u6587\u4EF6\u5931\u8D25:",i)}}async function l(t,i){await Zt(`[${t.toUpperCase()}] ${i}`)}var zt=Lt(Dt.readFile),Qt=Lt(Dt.writeFile);async function te(t){let i=G(t);if(!await x(i))return 1;let s=(await zt(i,"utf-8")).trim(),e=parseInt(s,10);return!isNaN(e)&&e>0?e:1}async function ee(t){let i=G(t);if(await x(i))return;let n=await I(t),s=0;for(let e of n){let o=parseInt(e.id,10);o>s&&(s=o)}await Ct(t,s+1)}async function Ct(t,i){let n=T(t);await x(n)||await v(n);let s=G(t);await Qt(s,String(i),"utf-8")}async function St(t,i,n,s,e,o=!1){if(/ - \d{3}$/.test(n))throw await l("warn",`[allocateIdWithLock] title \u683C\u5F0F\u4E0D\u5408\u89C4: "${n}", \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 l("info",`[allocateIdWithLock] \u5F00\u59CB\u5206\u914D\u5E8F\u53F7: category="${i}", title="${n}"`),!await kt(t))return await l("warn",`[allocateIdWithLock] \u83B7\u53D6\u9501\u5931\u8D25: category="${i}", title="${n}"`),null;await l("debug",`[allocateIdWithLock] \u83B7\u53D6\u9501\u6210\u529F: category="${i}", title="${n}"`);try{await ee(t);let r=await I(t),a=r.find(m=>m.category===i&&m.title===n);if(a){if(!o)throw new Error(`\u8BB0\u5FC6\u5DF2\u5B58\u5728: ${i}/${n}\uFF0C\u5982\u9700\u66F4\u65B0\u8BF7\u4F7F\u7528 haimati_edit \u5DE5\u5177`);let m=await k(t,a.id),p=m?m.createdAt:s,u=m?m.version+1:1;return await W(t,a.id,n,p,e,u),await l("info",`[allocateIdWithLock] \u66F4\u65B0\u5DF2\u6709\u6761\u76EE: #${a.id} ${i}/${n}, \u65B0\u7248\u672C: ${u}`),null}let c=await te(t),g=String(c).padStart(3,"0");await W(t,g,n,s,e,1);let f={id:g,category:i,title:n};return r.push(f),await ut(t,r),await Ct(t,c+1),await l("info",`[allocateIdWithLock] \u5206\u914D\u5E8F\u53F7\u6210\u529F: #${g} ${i}/${n}`),g}catch(r){let a=r instanceof Error?r.message:String(r);return await l("error",`[allocateIdWithLock] \u5206\u914D\u5E8F\u53F7\u5931\u8D25: ${a}`),null}finally{await Mt(t)}}function Ft(){return{haimati_read:_({description:"\u4ECE\u6D77\u9A6C\u4F53\u8BB0\u5FC6\u7CFB\u7EDF\u8BFB\u53D6\u5185\u5BB9\u3002\u901A\u8FC7\u5E8F\u53F7\uFF08\u5982 '086'\uFF09\u6765\u5B9A\u4F4D\u5E76\u8BFB\u53D6\u8BB0\u5FC6\u5185\u5BB9\u3002\u652F\u6301\u5206\u9875\u8BFB\u53D6\uFF08offset/limit\uFF09\uFF0C\u8FD4\u56DE\u5185\u5BB9\u5E26\u884C\u53F7\u548C\u7248\u672C\u53F7\u3002",args:{query:_.schema.string().describe("\u5E8F\u53F7\u3002\u4F8B\u5982\uFF1A'086'"),offset:_.schema.number().optional().default(1).describe("\u8D77\u59CB\u884C\u53F7\uFF08\u9ED8\u8BA4 1\uFF09"),limit:_.schema.number().optional().default(2e3).describe("\u6700\u5927\u8BFB\u53D6\u884C\u6570\uFF08\u9ED8\u8BA4 2000\uFF09")},async execute(t,i){let{directory:n}=i,s=P(n);if(await l("info",`[haimati_read] \u5165\u53C2: query="${t.query}", offset=${t.offset||1}, limit=${t.limit||2e3}`),!await x(s)){let e=`\u9519\u8BEF\uFF1A\u6D77\u9A6C\u4F53\u7D22\u5F15\u4E0D\u5B58\u5728\u4E8E ${s}`;return await l("warn",`[haimati_read] \u51FA\u53C2:
15
+ ${$(e)}`),e}try{let e=await I(n);await l("debug",`[haimati_read] \u8BFB\u53D6\u7D22\u5F15: \u5171 ${e.length} \u6761\u8BB0\u5F55`);let o=t.query.trim();if(!/^\d+$/.test(o)){let h="\u9519\u8BEF\uFF1Aquery \u5FC5\u987B\u662F\u5E8F\u53F7\uFF0C\u53EA\u652F\u6301\u5E8F\u53F7\u67E5\u8BE2";return await l("warn",`[haimati_read] \u51FA\u53C2:
16
+ ${$(h)}`),h}let r=S(e,o);if(await l("debug",`[haimati_read] \u5E8F\u53F7\u67E5\u8BE2 #${o}: ${r?"\u627E\u5230":"\u672A\u627E\u5230"}`),!r){let h=`\u672A\u627E\u5230\u8BB0\u5FC6: ${t.query}`;return await l("info",`[haimati_read] \u51FA\u53C2:
17
+ ${$(h)}`),h}let a=await k(n,r.id);if(!a){let h=`\u672A\u627E\u5230\u4E66\u9875: #${r.id}`;return await l("error",`[haimati_read] \u51FA\u53C2:
18
+ ${$(h)}`),h}let c=C(n,r.id);await l("debug",`[haimati_read] \u8BFB\u53D6\u4E66\u9875: \u4E66\u9875/${c.split(/[\\/]/).pop()}/${r.id}.md, version=${a.version}`);let g=a.content.split(`
19
+ `),f=t.offset||1,m=t.limit||2e3,p=g.length,u=Math.max(0,f-1),d=Math.min(p,u+m),w=[];w.push(`version:${a.version}`);for(let h=u;h<d;h++)w.push(`${h+1}|${g[h]}`);let y=w.join(`
20
20
  `);return await l("info",`[haimati_read] \u51FA\u53C2:
21
- ${w(u)}`),u}catch(e){let o=e instanceof Error?e.message:String(e),r=e instanceof Error?e.stack:"";return await l("error",`[haimati_read] \u51FA\u53C2: \u9519\u8BEF: ${o}
21
+ ${$(y)}`),y}catch(e){let o=e instanceof Error?e.message:String(e),r=e instanceof Error?e.stack:"";return await l("error",`[haimati_read] \u51FA\u53C2: \u9519\u8BEF: ${o}
22
22
  \u5806\u6808: ${r}`),`\u9519\u8BEF: ${o}`}}}),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\uFF08\u5982 'xxx\u9879\u76EE/\u7B7E\u7AE0'\uFF09\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",args:{category:_.schema.string().describe("\u5206\u7C7B\u8DEF\u5F84\uFF0C\u5982 'xxx\u9879\u76EE/\u7B7E\u7AE0' \u6216 '\u901A\u7528'"),title:_.schema.string().describe("\u8BB0\u5FC6\u6807\u9898\uFF0C\u5982 '\u7B7E\u7AE0\u670D\u52A1WS\u901A\u4FE1\u673A\u5236'"),content:_.schema.string().describe("\u8981\u5199\u5165\u7684\u8BE6\u7EC6\u5185\u5BB9")},async execute(t,i){let{directory:n}=i;await l("info",`[haimati_write] \u5165\u53C2: category="${t.category}", title="${t.title}", content\u957F\u5EA6=${t.content.length}\u5B57\u7B26, content=
23
- ${w(t.content)}
24
- `);try{let s=new Date().toISOString(),e=null;for(let c=0;c<3&&(e=await St(n,t.category,t.title,s,t.content,!1),!e);c++)await l("warn",`[haimati_write] \u9501\u83B7\u53D6\u5931\u8D25\uFF0C\u91CD\u8BD5\u7B2C ${c+1} \u6B21`);if(e){let c=C(n,e);await l("debug",`[haimati_write] \u5206\u914D\u65B0\u5E8F\u53F7: #${e}`),await l("debug",`[haimati_write] \u4E66\u9875\u548C\u7D22\u5F15\u5DF2\u66F4\u65B0: \u4E66\u9875/${c.split(/[\\/]/).pop()}/${e}.md`);let h=`\u5DF2\u5199\u5165\u6D77\u9A6C\u4F53 #${e}
23
+ ${$(t.content)}
24
+ `);try{let s=new Date().toISOString(),e=null;for(let c=0;c<3&&(e=await St(n,t.category,t.title,s,t.content,!1),!e);c++)await l("warn",`[haimati_write] \u9501\u83B7\u53D6\u5931\u8D25\uFF0C\u91CD\u8BD5\u7B2C ${c+1} \u6B21`);if(e){let c=C(n,e);await l("debug",`[haimati_write] \u5206\u914D\u65B0\u5E8F\u53F7: #${e}`),await l("debug",`[haimati_write] \u4E66\u9875\u548C\u7D22\u5F15\u5DF2\u66F4\u65B0: \u4E66\u9875/${c.split(/[\\/]/).pop()}/${e}.md`);let g=`\u5DF2\u5199\u5165\u6D77\u9A6C\u4F53 #${e}
25
25
  \u8DEF\u5F84: ${t.category}/${t.title}
26
26
  \u7248\u672C: 1`;return await l("info",`[haimati_write] \u51FA\u53C2:
27
- ${w(h)}`),h}let o=await I(n),r=O(o,t.category,t.title);if(r){let c=`\u9519\u8BEF\uFF1A\u8BB0\u5FC6\u5DF2\u5B58\u5728 #${r.id} (${t.category}/${t.title})\uFF0C\u5982\u9700\u66F4\u65B0\u8BF7\u4F7F\u7528 haimati_edit \u5DE5\u5177`;return await l("error",`[haimati_write] \u51FA\u53C2:
28
- ${w(c)}`),c}let a="\u9519\u8BEF\uFF1A\u65E0\u6CD5\u5206\u914D\u5E8F\u53F7\uFF08\u9501\u7B49\u5F85\u8D85\u65F6\uFF09";return await l("error",`[haimati_write] \u51FA\u53C2:
29
- ${w(a)}`),a}catch(s){let e=s instanceof Error?s.message:String(s),o=s instanceof Error?s.stack:"";return await l("error",`[haimati_write] \u51FA\u53C2: \u9519\u8BEF: ${e}
27
+ ${$(g)}`),g}let o=await I(n),r=O(o,t.category,t.title);if(r){let c=`\u9519\u8BEF\uFF1A\u8BB0\u5FC6\u5DF2\u5B58\u5728 #${r.id} (${t.category}/${t.title})\uFF0C\u5982\u9700\u66F4\u65B0\u8BF7\u4F7F\u7528 haimati_edit \u5DE5\u5177`;return await l("error",`[haimati_write] \u51FA\u53C2:
28
+ ${$(c)}`),c}let a="\u9519\u8BEF\uFF1A\u65E0\u6CD5\u5206\u914D\u5E8F\u53F7\uFF08\u9501\u7B49\u5F85\u8D85\u65F6\uFF09";return await l("error",`[haimati_write] \u51FA\u53C2:
29
+ ${$(a)}`),a}catch(s){let e=s instanceof Error?s.message:String(s),o=s instanceof Error?s.stack:"";return await l("error",`[haimati_write] \u51FA\u53C2: \u9519\u8BEF: ${e}
30
30
  \u5806\u6808: ${o}`),`\u9519\u8BEF: ${e}`}}}),haimati_search:_({description:"\u641C\u7D22\u6D77\u9A6C\u4F53\u8BB0\u5FC6\u7CFB\u7EDF\uFF08\u652F\u6301\u591A\u5173\u952E\u5B57\uFF0C\u7528\u7A7A\u683C\u5206\u9694\uFF09\u3002\u641C\u7D22\u8303\u56F4\u5305\u62EC\uFF1A\u6807\u9898\u3001\u5206\u7C7B\u3001\u5E8F\u53F7\u3001\u4E66\u9875\u5185\u5BB9\u3002\u8F93\u5165\u5173\u952E\u8BCD\uFF0C\u8FD4\u56DE\u5339\u914D\u7684\u6761\u76EE\u5217\u8868\u548C\u5185\u5BB9\u7247\u6BB5\uFF0C\u652F\u6301\u5206\u9875\uFF08limit/offset\uFF09\u3002",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,i){let{directory:n}=i,s=P(n);if(await l("info",`[haimati_search] \u5165\u53C2: keyword="${t.keyword}", match="${t.match}", limit=${t.limit||10}, offset=${t.offset||0}`),!await x(s)){let e="\u9519\u8BEF\uFF1A\u6D77\u9A6C\u4F53\u7D22\u5F15\u4E0D\u5B58\u5728";return await l("warn",`[haimati_search] \u51FA\u53C2:
31
- ${w(e)}`),e}try{let e=await I(n),o=t.keyword.trim(),r=t.match,a=t.limit||10,c=t.offset||0,h=await V(e,o,r,n,!0),m=h.length,g=h.slice(c,c+a);if(g.length===0){let u=`\u672A\u627E\u5230\u5305\u542B '${o}' \u7684\u8BB0\u5FC6`;return await l("info",`[haimati_search] \u51FA\u53C2:
32
- ${w(u)}`),u}let p=[],f=c+g.length<m,d=f?`${c+1}-${c+g.length}/${m}`:`${c+1}-${c+g.length}/${m}`;p.push(`\u627E\u5230 ${d} \u6761\u5339\u914D\uFF1A
33
- `),f&&p.push(`\uFF08\u5982\u9700\u83B7\u53D6\u66F4\u591A\uFF0C\u8BF7\u4F7F\u7528 offset=${c+a} \u7EE7\u7EED\u7FFB\u9875\uFF09
34
- `);for(let u of g){let $=await k(n,u.id),E=`${u.category}/${u.title}`,M="";$&&(M=$.content.split(`
35
- `).filter(At=>At.trim()).slice(0,3).join(" | ").substring(0,150),M.length===150&&(M+="...")),p.push(`## ${E} [${u.id}]`),M&&p.push(`> ${M}`),p.push("")}let y=p.join(`
31
+ ${$(e)}`),e}try{let e=await I(n),o=t.keyword.trim(),r=t.match,a=t.limit||10,c=t.offset||0,g=await V(e,o,r,n,!0),f=g.length,m=g.slice(c,c+a);if(m.length===0){let y=`\u672A\u627E\u5230\u5305\u542B '${o}' \u7684\u8BB0\u5FC6`;return await l("info",`[haimati_search] \u51FA\u53C2:
32
+ ${$(y)}`),y}let p=[],u=c+m.length<f,d=u?`${c+1}-${c+m.length}/${f}`:`${c+1}-${c+m.length}/${f}`;p.push(`\u627E\u5230 ${d} \u6761\u5339\u914D\uFF1A
33
+ `),u&&p.push(`\uFF08\u5982\u9700\u83B7\u53D6\u66F4\u591A\uFF0C\u8BF7\u4F7F\u7528 offset=${c+a} \u7EE7\u7EED\u7FFB\u9875\uFF09
34
+ `);for(let y of m){let h=await k(n,y.id),E=`${y.category}/${y.title}`,M="";h&&(M=h.content.split(`
35
+ `).filter(At=>At.trim()).slice(0,3).join(" | ").substring(0,150),M.length===150&&(M+="...")),p.push(`## ${E} [${y.id}]`),M&&p.push(`> ${M}`),p.push("")}let w=p.join(`
36
36
  `);return await l("info",`[haimati_search] \u51FA\u53C2:
37
- ${w(y)}`),y}catch(e){let o=e instanceof Error?e.message:String(e),r=e instanceof Error?e.stack:"";return await l("error",`[haimati_search] \u51FA\u53C2: \u9519\u8BEF: ${o}
38
- \u5806\u6808: ${r}`),`\u9519\u8BEF: ${o}`}}}),haimati_edit:_({description:"\u4FEE\u6539\u6D77\u9A6C\u4F53\u8BB0\u5FC6\u7684\u90E8\u5206\u5185\u5BB9\u3002\u5C06\u6307\u5B9A\u884C\u53F7\u8303\u56F4 [offsetBegin, offsetEnd) \u7684\u5185\u5BB9\u66FF\u6362\u4E3A\u65B0 content\u3002\u9700\u8981\u63D0\u4F9B read \u65F6\u8FD4\u56DE\u7684 version \u8FDB\u884C\u5E76\u53D1\u63A7\u5236\u3002",args:{query:_.schema.string().describe("\u5E8F\u53F7\uFF0C\u7528\u4E8E\u5B9A\u4F4D\u8981\u66F4\u65B0\u7684\u8BB0\u5FC6"),offsetBegin:_.schema.number().describe("\u8D77\u59CB\u884C\u53F7\uFF08\u5305\u62EC\uFF09"),offsetEnd:_.schema.number().describe("\u7ED3\u675F\u884C\u53F7\uFF08\u4E0D\u5305\u62EC\uFF09"),content:_.schema.string().describe("\u66FF\u6362\u5185\u5BB9"),version:_.schema.number().describe("read \u65F6\u8FD4\u56DE\u7684 version\uFF0C\u7528\u4E8E\u5E76\u53D1\u63A7\u5236")},async execute(t,i){let{directory:n}=i,s=P(n);if(await l("info",`[haimati_edit] \u5165\u53C2: query="${t.query}", offsetBegin=${t.offsetBegin}, offsetEnd=${t.offsetEnd}, content\u957F\u5EA6=${t.content.length}\u5B57\u7B26, version=${t.version}, content=
39
- ${w(t.content)}
37
+ ${$(w)}`),w}catch(e){let o=e instanceof Error?e.message:String(e),r=e instanceof Error?e.stack:"";return await l("error",`[haimati_search] \u51FA\u53C2: \u9519\u8BEF: ${o}
38
+ \u5806\u6808: ${r}`),`\u9519\u8BEF: ${o}`}}}),haimati_edit:_({description:"\u4FEE\u6539\u6D77\u9A6C\u4F53\u8BB0\u5FC6\u7684\u90E8\u5206\u5185\u5BB9\u3002\u5C06\u6307\u5B9A\u884C\u53F7\u8303\u56F4 [offsetBegin, offsetEnd) \u7684\u5185\u5BB9\u66FF\u6362\u4E3A\u65B0 content\uFF0CoffsetEnd \u4E0D\u5305\u62EC\u6B64\u884C\u3002\u9700\u8981\u63D0\u4F9B read \u65F6\u8FD4\u56DE\u7684 version \u8FDB\u884C\u5E76\u53D1\u63A7\u5236\u3002",args:{query:_.schema.string().describe("\u5E8F\u53F7\uFF0C\u7528\u4E8E\u5B9A\u4F4D\u8981\u66F4\u65B0\u7684\u8BB0\u5FC6"),offsetBegin:_.schema.number().describe("\u8D77\u59CB\u884C\u53F7\uFF08\u5305\u62EC\uFF09"),offsetEnd:_.schema.number().describe("\u7ED3\u675F\u884C\u53F7\uFF08\u4E0D\u5305\u62EC\u6B64\u884C\uFF09"),content:_.schema.string().describe("\u66FF\u6362\u5185\u5BB9"),version:_.schema.number().describe("read \u65F6\u8FD4\u56DE\u7684 version\uFF0C\u7528\u4E8E\u5E76\u53D1\u63A7\u5236")},async execute(t,i){let{directory:n}=i,s=P(n);if(await l("info",`[haimati_edit] \u5165\u53C2: query="${t.query}", offsetBegin=${t.offsetBegin}, offsetEnd=${t.offsetEnd}, content\u957F\u5EA6=${t.content.length}\u5B57\u7B26, version=${t.version}, content=
39
+ ${$(t.content)}
40
40
  `),!await x(s)){let e="\u9519\u8BEF\uFF1A\u6D77\u9A6C\u4F53\u7D22\u5F15\u4E0D\u5B58\u5728";return await l("warn",`[haimati_edit] \u51FA\u53C2:
41
- ${w(e)}`),e}try{let e=await I(n),o=t.query.trim();if(!/^\d+$/.test(o)){let u="\u9519\u8BEF\uFF1Aquery \u5FC5\u987B\u662F\u5E8F\u53F7\uFF0C\u53EA\u652F\u6301\u5E8F\u53F7\u67E5\u8BE2";return await l("warn",`[haimati_edit] \u51FA\u53C2:
42
- ${w(u)}`),u}let r=S(e,o);if(!r){let u=`\u672A\u627E\u5230\u4E0E '${o}' \u76F8\u5173\u7684\u8BB0\u5FC6`;return await l("info",`[haimati_edit] \u51FA\u53C2:
43
- ${w(u)}`),u}let a=await k(n,r.id);if(!a){let u=`\u672A\u627E\u5230\u4E66\u9875: #${r.id}`;return await l("error",`[haimati_edit] \u51FA\u53C2:
44
- ${w(u)}`),u}let c=t.offsetBegin,h=t.offsetEnd;if(c>a.content.split(`
45
- `).length||c>=h){let u=`\u9519\u8BEF\uFF1Aoffset \u975E\u6CD5\uFF0CoffsetBegin=${c}, offsetEnd=${h}, \u6587\u4EF6\u603B\u884C\u6570=${a.content.split(`
46
- `).length}`;return await l("warn",`[haimati_edit] \u51FA\u53C2:
47
- ${w(u)}`),u}if(a.version!==t.version){let u=`\u9519\u8BEF\uFF1A\u7248\u672C\u51B2\u7A81\uFF0C\u5F53\u524D version=${a.version}\uFF0C\u4F20\u5165 version=${t.version}\uFF0C\u8BF7\u91CD\u65B0\u8BFB\u53D6\u540E\u518D\u64CD\u4F5C`;return await l("warn",`[haimati_edit] \u51FA\u53C2:
48
- ${w(u)}`),u}let m=a.content.split(`
49
- `),p=[...m.slice(0,c-1),...t.content.split(`
50
- `),...m.slice(h-1)].join(`
51
- `),f=a.version+1;await W(n,r.id,r.title,a.createdAt,p,f);let d=`${r.category}/${r.title}`,y=`\u5DF2\u66F4\u65B0\u6D77\u9A6C\u4F53 #${r.id}
52
- \u8DEF\u5F84: ${d}
53
- \u65B0\u7248\u672C: ${f}`;return await l("info",`[haimati_edit] \u51FA\u53C2:
54
- ${w(y)}`),y}catch(e){let o=e instanceof Error?e.message:String(e),r=e instanceof Error?e.stack:"";return await l("error",`[haimati_edit] \u51FA\u53C2: \u9519\u8BEF: ${o}
41
+ ${$(e)}`),e}try{let e=await I(n),o=t.query.trim();if(!/^\d+$/.test(o)){let h="\u9519\u8BEF\uFF1Aquery \u5FC5\u987B\u662F\u5E8F\u53F7\uFF0C\u53EA\u652F\u6301\u5E8F\u53F7\u67E5\u8BE2";return await l("warn",`[haimati_edit] \u51FA\u53C2:
42
+ ${$(h)}`),h}let r=S(e,o);if(!r){let h=`\u672A\u627E\u5230\u4E0E '${o}' \u76F8\u5173\u7684\u8BB0\u5FC6`;return await l("info",`[haimati_edit] \u51FA\u53C2:
43
+ ${$(h)}`),h}let a=await k(n,r.id);if(!a){let h=`\u672A\u627E\u5230\u4E66\u9875: #${r.id}`;return await l("error",`[haimati_edit] \u51FA\u53C2:
44
+ ${$(h)}`),h}let c=t.offsetBegin,g=t.offsetEnd,f=a.content.split(`
45
+ `).length;if(c<1||c>=f+1||c>=g||g>f+1){let h=`\u9519\u8BEF\uFF1Aoffset \u975E\u6CD5\uFF0CoffsetBegin=${c}, offsetEnd=${g}, \u6587\u4EF6\u603B\u884C\u6570=${f}\uFF0C\u6709\u6548\u8303\u56F4 offsetBegin=[1, ${f+1}), offsetEnd=[offsetBegin+1, ${f+1}]`;return await l("warn",`[haimati_edit] \u51FA\u53C2:
46
+ ${$(h)}`),h}if(a.version!==t.version){let h=`\u9519\u8BEF\uFF1A\u7248\u672C\u51B2\u7A81\uFF0C\u5F53\u524D version=${a.version}\uFF0C\u4F20\u5165 version=${t.version}\uFF0C\u8BF7\u91CD\u65B0\u8BFB\u53D6\u540E\u518D\u64CD\u4F5C`;return await l("warn",`[haimati_edit] \u51FA\u53C2:
47
+ ${$(h)}`),h}let m=a.content.split(`
48
+ `),u=[...m.slice(0,c-1),...t.content.split(`
49
+ `),...m.slice(g)].join(`
50
+ `),d=a.version+1;await W(n,r.id,r.title,a.createdAt,u,d);let w=`${r.category}/${r.title}`,y=`\u5DF2\u66F4\u65B0\u6D77\u9A6C\u4F53 #${r.id}
51
+ \u8DEF\u5F84: ${w}
52
+ \u65B0\u7248\u672C: ${d}`;return await l("info",`[haimati_edit] \u51FA\u53C2:
53
+ ${$(y)}`),y}catch(e){let o=e instanceof Error?e.message:String(e),r=e instanceof Error?e.stack:"";return await l("error",`[haimati_edit] \u51FA\u53C2: \u9519\u8BEF: ${o}
55
54
  \u5806\u6808: ${r}`),`\u9519\u8BEF: ${o}`}}}),haimati_delete:_({description:"\u5220\u9664\u6D77\u9A6C\u4F53\u4E2D\u7684\u8BB0\u5FC6\u3002\u901A\u8FC7\u5E8F\u53F7\uFF08\u5982 '086'\uFF09\u6216\u5B8C\u6574\u8DEF\u5F84\uFF08\u5982 'xxx\u9879\u76EE/\u7B7E\u7AE0/\u7B7E\u7AE0\u670D\u52A1WS\u901A\u4FE1\u673A\u5236'\uFF09\u6765\u5B9A\u4F4D\u8981\u5220\u9664\u7684\u8BB0\u5FC6\u3002",args:{query:_.schema.string().describe("\u5E8F\u53F7\u6216\u5B8C\u6574\u8DEF\u5F84\uFF0C\u7528\u4E8E\u5B9A\u4F4D\u8981\u5220\u9664\u7684\u8BB0\u5FC6")},async execute(t,i){let{directory:n}=i,s=P(n);if(await l("info",`[haimati_delete] \u5165\u53C2: query="${t.query}"`),!await x(s)){let e="\u9519\u8BEF\uFF1A\u6D77\u9A6C\u4F53\u7D22\u5F15\u4E0D\u5B58\u5728";return await l("warn",`[haimati_delete] \u51FA\u53C2:
56
- ${w(e)}`),e}try{let e=await I(n),o=t.query.trim(),r=null;if(/^\d+$/.test(o))r=S(e,o);else{let m=o.split("/").filter(Boolean);if(m.length>=2){let g=m.pop(),p=m.join("/");r=O(e,p,g)}else{let g=await V(e,o,"or",n);if(g.length===1)r=g[0];else if(g.length>1)return`\u627E\u5230\u591A\u6761\u5339\u914D\uFF0C\u8BF7\u4F7F\u7528\u5E8F\u53F7\u7CBE\u786E\u6307\u5B9A\uFF1A
57
- ${g.slice(0,10).map(f=>` - ${f.category}/${f.title} [${f.id}]`).join(`
58
- `)}`}}if(!r){let m=`\u672A\u627E\u5230\u4E0E '${o}' \u76F8\u5173\u7684\u8BB0\u5FC6`;return await l("info",`[haimati_delete] \u51FA\u53C2:
59
- ${w(m)}`),m}await bt(n,r.id);let a=ft(e,r.id);await(F(),z(dt)).writeIndex(n,a);let c=`${r.category}/${r.title}`,h=`\u5DF2\u5220\u9664\u6D77\u9A6C\u4F53 #${r.id}
55
+ ${$(e)}`),e}try{let e=await I(n),o=t.query.trim(),r=null;if(/^\d+$/.test(o))r=S(e,o);else{let f=o.split("/").filter(Boolean);if(f.length>=2){let m=f.pop(),p=f.join("/");r=O(e,p,m)}else{let m=await V(e,o,"or",n);if(m.length===1)r=m[0];else if(m.length>1)return`\u627E\u5230\u591A\u6761\u5339\u914D\uFF0C\u8BF7\u4F7F\u7528\u5E8F\u53F7\u7CBE\u786E\u6307\u5B9A\uFF1A
56
+ ${m.slice(0,10).map(u=>` - ${u.category}/${u.title} [${u.id}]`).join(`
57
+ `)}`}}if(!r){let f=`\u672A\u627E\u5230\u4E0E '${o}' \u76F8\u5173\u7684\u8BB0\u5FC6`;return await l("info",`[haimati_delete] \u51FA\u53C2:
58
+ ${$(f)}`),f}await bt(n,r.id);let a=ft(e,r.id);await(F(),z(dt)).writeIndex(n,a);let c=`${r.category}/${r.title}`,g=`\u5DF2\u5220\u9664\u6D77\u9A6C\u4F53 #${r.id}
60
59
  \u8DEF\u5F84: ${c}`;return await l("info",`[haimati_delete] \u51FA\u53C2:
61
- ${w(h)}`),h}catch(e){let o=e instanceof Error?e.message:String(e),r=e instanceof Error?e.stack:"";return await l("error",`[haimati_delete] \u51FA\u53C2: \u9519\u8BEF: ${o}
60
+ ${$(g)}`),g}catch(e){let o=e instanceof Error?e.message:String(e),r=e instanceof Error?e.stack:"";return await l("error",`[haimati_delete] \u51FA\u53C2: \u9519\u8BEF: ${o}
62
61
  \u5806\u6808: ${r}`),`\u9519\u8BEF: ${o}`}}}),haimati_move:_({description:"\u4FEE\u6539\u6D77\u9A6C\u4F53\u8BB0\u5FC6\u7684\u5206\u7C7B\u8DEF\u5F84\u3002\u901A\u8FC7\u5E8F\u53F7\u6216\u5B8C\u6574\u8DEF\u5F84\u5B9A\u4F4D\u8BB0\u5FC6\uFF0C\u7136\u540E\u5C06\u5176\u79FB\u52A8\u5230\u65B0\u7684\u5206\u7C7B\u3002",args:{query:_.schema.string().describe("\u5E8F\u53F7\u6216\u5B8C\u6574\u8DEF\u5F84\uFF0C\u7528\u4E8E\u5B9A\u4F4D\u8981\u79FB\u52A8\u7684\u8BB0\u5FC6"),newCategory:_.schema.string().describe("\u65B0\u7684\u5206\u7C7B\u8DEF\u5F84\uFF0C\u5982 'xxx\u9879\u76EE/\u5BA2\u6237\u7AEF' \u6216 '\u901A\u7528'")},async execute(t,i){let{directory:n}=i,s=P(n);if(await l("info",`[haimati_move] \u5165\u53C2: query="${t.query}", newCategory="${t.newCategory}"`),!await x(s)){let e="\u9519\u8BEF\uFF1A\u6D77\u9A6C\u4F53\u7D22\u5F15\u4E0D\u5B58\u5728";return await l("warn",`[haimati_move] \u51FA\u53C2:
63
- ${w(e)}`),e}try{let e=await I(n),o=t.query.trim(),r=null;if(/^\d+$/.test(o))r=S(e,o);else{let f=o.split("/").filter(Boolean);if(f.length>=2){let d=f.pop(),y=f.join("/");r=O(e,y,d)}else{let d=await V(e,o,"or",n);if(d.length===1)r=d[0];else if(d.length>1)return`\u627E\u5230\u591A\u6761\u5339\u914D\uFF0C\u8BF7\u4F7F\u7528\u5E8F\u53F7\u7CBE\u786E\u6307\u5B9A\uFF1A
64
- ${d.slice(0,10).map(u=>` - ${u.category}/${u.title} [${u.id}]`).join(`
65
- `)}`}}if(!r){let f=`\u672A\u627E\u5230\u4E0E '${o}' \u76F8\u5173\u7684\u8BB0\u5FC6`;return await l("info",`[haimati_move] \u51FA\u53C2:
66
- ${w(f)}`),f}let c=`${r.category}/${r.title}`,h=t.newCategory,m=`${h}/${r.title}`,g=e.map(f=>f.id===r.id?{...f,category:h}:f);await(F(),z(dt)).writeIndex(n,g);let p=`\u5DF2\u79FB\u52A8\u6D77\u9A6C\u4F53 #${r.id}
62
+ ${$(e)}`),e}try{let e=await I(n),o=t.query.trim(),r=null;if(/^\d+$/.test(o))r=S(e,o);else{let u=o.split("/").filter(Boolean);if(u.length>=2){let d=u.pop(),w=u.join("/");r=O(e,w,d)}else{let d=await V(e,o,"or",n);if(d.length===1)r=d[0];else if(d.length>1)return`\u627E\u5230\u591A\u6761\u5339\u914D\uFF0C\u8BF7\u4F7F\u7528\u5E8F\u53F7\u7CBE\u786E\u6307\u5B9A\uFF1A
63
+ ${d.slice(0,10).map(y=>` - ${y.category}/${y.title} [${y.id}]`).join(`
64
+ `)}`}}if(!r){let u=`\u672A\u627E\u5230\u4E0E '${o}' \u76F8\u5173\u7684\u8BB0\u5FC6`;return await l("info",`[haimati_move] \u51FA\u53C2:
65
+ ${$(u)}`),u}let c=`${r.category}/${r.title}`,g=t.newCategory,f=`${g}/${r.title}`,m=e.map(u=>u.id===r.id?{...u,category:g}:u);await(F(),z(dt)).writeIndex(n,m);let p=`\u5DF2\u79FB\u52A8\u6D77\u9A6C\u4F53 #${r.id}
67
66
  \u65E7\u8DEF\u5F84: ${c}
68
- \u65B0\u8DEF\u5F84: ${m}`;return await l("info",`[haimati_move] \u51FA\u53C2:
69
- ${w(p)}`),p}catch(e){let o=e instanceof Error?e.message:String(e),r=e instanceof Error?e.stack:"";return await l("error",`[haimati_move] \u51FA\u53C2: \u9519\u8BEF: ${o}
67
+ \u65B0\u8DEF\u5F84: ${f}`;return await l("info",`[haimati_move] \u51FA\u53C2:
68
+ ${$(p)}`),p}catch(e){let o=e instanceof Error?e.message:String(e),r=e instanceof Error?e.stack:"";return await l("error",`[haimati_move] \u51FA\u53C2: \u9519\u8BEF: ${o}
70
69
  \u5806\u6808: ${r}`),`\u9519\u8BEF: ${o}`}}}),haimati_list:_({description:"\u5217\u51FA\u6D77\u9A6C\u4F53\u8BB0\u5FC6\u7CFB\u7EDF\u7684\u5B8C\u6574\u7D22\u5F15\u7ED3\u6784\u3002",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")},async execute(t,i){let{directory:n}=i,s=P(n);if(await l("info",`[haimati_list] \u5165\u53C2: category="${t.category||"(\u65E0)"}, recursive=${t.recursive}"`),!await x(s)){let e="\u9519\u8BEF\uFF1A\u6D77\u9A6C\u4F53\u7D22\u5F15\u4E0D\u5B58\u5728";return await l("warn",`[haimati_list] \u51FA\u53C2:
71
- ${w(e)}`),e}try{let e=await I(n);if(t.category){let c=(await mt(n)).split(`
72
- `),h=0,m=[];for(let d of c){if(!d.trim())continue;let y=q(d);if(d.match(/^\s*[│├└─\s]*(.+?)\s*-\s*(\d+)\s*$/))continue;let $=j(d);if($&&($==="/"?m[y]="":m[y]=$,m=m.slice(0,y+1),m.filter(Boolean).join("/")===t.category)){h=y;break}}let g=[],p=[];m=[];for(let d of c){if(!d.trim())continue;let y=q(d),u=d.match(/^\s*[│├└─\s]*(.+?)\s*-\s*(\d+)\s*$/);if(u){let E=u[1].trim(),M=u[2];if(y===h+1){let J=m.slice(1,y).filter(Boolean).join("/");J===t.category&&p.push({category:J,title:E,id:M})}continue}let $=j(d);$&&($==="/"?m[y]="":m[y]=$,m=m.slice(0,y+1),y===h+1&&m.filter(Boolean).join("/")===t.category&&g.push($))}let f=`## ${t.category}
70
+ ${$(e)}`),e}try{let e=await I(n);if(t.category){let c=(await mt(n)).split(`
71
+ `),g=0,f=[];for(let d of c){if(!d.trim())continue;let w=q(d);if(d.match(/^\s*[│├└─\s]*(.+?)\s*-\s*(\d+)\s*$/))continue;let h=j(d);if(h&&(h==="/"?f[w]="":f[w]=h,f=f.slice(0,w+1),f.filter(Boolean).join("/")===t.category)){g=w;break}}let m=[],p=[];f=[];for(let d of c){if(!d.trim())continue;let w=q(d),y=d.match(/^\s*[│├└─\s]*(.+?)\s*-\s*(\d+)\s*$/);if(y){let E=y[1].trim(),M=y[2];if(w===g+1){let J=f.slice(1,w).filter(Boolean).join("/");J===t.category&&p.push({category:J,title:E,id:M})}continue}let h=j(d);h&&(h==="/"?f[w]="":f[w]=h,f=f.slice(0,w+1),w===g+1&&f.filter(Boolean).join("/")===t.category&&m.push(h))}let u=`## ${t.category}
73
72
 
74
- `;if(t.recursive){let d=e.filter(u=>u.category===t.category||u.category.startsWith(t.category+"/")),y=new Map;for(let u of d){let E=u.category.slice(t.category.length+1).split("/")[0]||"(\u76F4\u63A5)";y.has(E)||y.set(E,[]),y.get(E).push(u)}for(let[u,$]of y)f+=`### ${u}/
75
- `,f+=$.map(E=>`- ${E.title} - ${E.id}`).join(`
73
+ `;if(t.recursive){let d=e.filter(y=>y.category===t.category||y.category.startsWith(t.category+"/")),w=new Map;for(let y of d){let E=y.category.slice(t.category.length+1).split("/")[0]||"(\u76F4\u63A5)";w.has(E)||w.set(E,[]),w.get(E).push(y)}for(let[y,h]of w)u+=`### ${y}/
74
+ `,u+=h.map(E=>`- ${E.title} - ${E.id}`).join(`
76
75
  `)+`
77
76
 
78
- `}else g.length>0&&(f+=`**\u5B50\u5206\u7C7B\uFF1A**
79
- `+g.map(d=>`- ${d}/`).join(`
77
+ `}else m.length>0&&(u+=`**\u5B50\u5206\u7C7B\uFF1A**
78
+ `+m.map(d=>`- ${d}/`).join(`
80
79
  `)+`
81
80
 
82
- `),p.length>0&&(f+=`**\u76F4\u63A5\u6761\u76EE\uFF1A**
81
+ `),p.length>0&&(u+=`**\u76F4\u63A5\u6761\u76EE\uFF1A**
83
82
  `+p.map(d=>`- ${d.title} - ${d.id}`).join(`
84
83
  `));return await l("info",`[haimati_list] \u51FA\u53C2:
85
- ${w(f)}`),f}let r=`## \u6D77\u9A6C\u4F53\u7D22\u5F15
84
+ ${$(u)}`),u}let r=`## \u6D77\u9A6C\u4F53\u7D22\u5F15
86
85
 
87
86
  ${U(e)||"(\u7A7A)"}`;return await l("info",`[haimati_list] \u51FA\u53C2:
88
- ${w(r)}`),r}catch(e){let o=e instanceof Error?e.message:String(e),r=e instanceof Error?e.stack:"";return await l("error",`[haimati_list] \u51FA\u53C2: \u9519\u8BEF: ${o}
87
+ ${$(r)}`),r}catch(e){let o=e instanceof Error?e.message:String(e),r=e instanceof Error?e.stack:"";return await l("error",`[haimati_list] \u51FA\u53C2: \u9519\u8BEF: ${o}
89
88
  \u5806\u6808: ${r}`),`\u9519\u8BEF: ${o}`}}})}}L();var Je=async t=>(await l("info","\u6D77\u9A6C\u4F53\u8BB0\u5FC6\u7CFB\u7EDF\u63D2\u4EF6(\u6587\u4EF6\u7248)\u5DF2\u52A0\u8F7D"),{tool:Ft(),event:async({event:n})=>{if(n.type==="session.created")try{let s=n.properties?.info?.id;if(!s){await l("warn","[session.created] \u65E0\u6CD5\u83B7\u53D6 sessionID\uFF0C\u8DF3\u8FC7\u6CE8\u5165");return}if(!!1){await l("info","[session.created] \u81EA\u52A8\u6CE8\u5165\u5DF2\u5173\u95ED\uFF0C\u8DF3\u8FC7\u6CE8\u5165 (AUTO_INJECT_CONTEXT=false)");return}await t.client.session.prompt({path:{id:s},body:{noReply:!0,parts:[{type:"text",text:`## \u6D77\u9A6C\u4F53\u8BB0\u5FC6\u7CFB\u7EDF\u4F7F\u7528\u89C4\u5219
90
89
 
91
90
  \u4F60\u6709\u4E00\u4E2A\u6D77\u9A6C\u4F53\u8BB0\u5FC6\u7CFB\u7EDF\u53EF\u7528\uFF0C\u7528\u4E8E\u5B58\u50A8\u548C\u68C0\u7D22\u8DE8\u4F1A\u8BDD\u7684\u77E5\u8BC6\u3002
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencode-haimati",
3
- "version": "1.0.6",
3
+ "version": "1.0.7",
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.0.6",
3
+ "version": "1.0.7",
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",