opencode-haimati 2.0.4 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -118,7 +118,7 @@ ${h}`),await s.info(`[haimati_list] \u5217\u51FA\u6210\u529F: ${t.category}${t.d
118
118
  ${g}`),await s.info("[haimati_list] \u5217\u51FA\u6210\u529F: \u5168\u90E8 (\u8BE6\u7EC6\u6A21\u5F0F)"),g}let a=`## \u6D77\u9A6C\u4F53\u7D22\u5F15
119
119
 
120
120
  ${$t(i)||"(\u7A7A)"}`;return await s.debug(`[haimati_list] \u51FA\u53C2:
121
- ${a}`),await s.info("[haimati_list] \u5217\u51FA\u6210\u529F: \u5168\u90E8"),a}catch(i){return await R(i,"haimati_list")}}})}}import{readFile as He,rm as Ge}from"node:fs/promises";import{basename as z,dirname as N,join as Mt}from"node:path";import{fileURLToPath as ze}from"node:url";var Je="opencode-haimati";function se(t,n){if(!n)return;let e=new AbortController,r=setTimeout(()=>e.abort(),1e4);Ke(e.signal).then(i=>{i.updated&&(s.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 Ke(t){let n=await Be(Je);if(!n)return{updated:!1};let e=await _t(Mt(n,"package.json"));if(!e?.name||!e.version)return{updated:!1};let r=await Xe(e.name,t);if(!r||!Ze(r,e.version))return{updated:!1};let i=await Qe(n,e.name);if(!i)return{updated:!1};try{await Ge(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 Be(t){let n=N(ze(import.meta.url));for(;;){if((await _t(Mt(n,"package.json")))?.name===t)return z(n)==="dist"?N(n):n;let r=N(n);if(r===n)return;n=r}}async function Qe(t,n){let e=N(t),r=z(e).startsWith("@")?N(e):e;if(z(r)!=="node_modules")return;let i=N(r),o=await _t(Mt(i,"package.json")),a=Ve(i,n)??o?.dependencies?.[n];if(!(!a||!Ye(a)))return i}function Ve(t,n){if(n.startsWith("@")){let[i,o]=n.split("/");if(!i||!o||z(N(t))!==i)return;let a=`${o}@`,l=z(t);return l.startsWith(a)?l.slice(a.length):void 0}let e=`${n}@`,r=z(t);return r.startsWith(e)?r.slice(e.length):void 0}function Ye(t){let n=t.trim();return n?!!(n==="latest"||n==="*"||/^[~^]/.test(n)||/^(?:>=|>|<=|<)/.test(n)||/\s+(?:\|\||-|[<>=])\s+/.test(n)):!1}async function _t(t){try{let n=JSON.parse(await He(t,"utf-8"));return n&&typeof n=="object"?n:void 0}catch{return}}async function Xe(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 Ze(t,n){let e=ae(t),r=ae(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 o=e.pre[i],a=r.pre[i];if(o===void 0)return!1;if(a===void 0)return!0;if(o===a)continue;let l=/^\d+$/.test(o)?Number(o):void 0,u=/^\d+$/.test(a)?Number(a):void 0;return l!==void 0&&u!==void 0?l>u:l!==void 0?!1:u!==void 0?!0:o>a}return!1}function ae(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 tn="2026-06-03 15:16:50",ce=!1;function en(t){return t.type==="text"&&t.ignored!==!0}var $i=async t=>{await Tt(),ce||(ce=!0,await s.debug(`[HaimatiPlugin] \u4EE3\u7801\u6700\u540E\u4FEE\u6539\u65E5\u671F: ${tn}`));let n=Y(t.directory),e=oe(),r=new Set,i=new Set,o=new Set,a=new Map,l=1e4,u=new Set,g=new Map;function d(c){let f=g.get(c);return f||(f=new Map,g.set(c,f)),f}return se(t,n.autoUpdate!==!1),ie(t.directory).then(c=>{c>0&&s.info(`[HaimatiPlugin] \u542F\u52A8\u65F6\u6E05\u7406\u4E86 ${c} \u4E2A\u4E0D\u5B58\u5728\u7684\u6587\u4EF6\u5173\u8054`)}).catch(c=>{s.warn(`[HaimatiPlugin] \u6E05\u7406\u8FC7\u671F\u6587\u4EF6\u5173\u8054\u5931\u8D25: ${c instanceof Error?c.message:String(c)}`)}),{tool:e,event:async({event:c})=>{if(c.type==="message.updated"&&c.properties.info.role==="assistant"){let f=c.properties.info;if(f.finish==="stop"&&!r.has(f.id)){if(r.add(f.id),o.has(f.id)){o.delete(f.id);return}if(i.has(f.sessionID))return;let h=a.get(f.sessionID);if(h&&Date.now()<h)return;n.autoWrite===!0&&(i.add(f.sessionID),s.info(`[autoWrite] \u5F00\u59CB\u5F02\u6B65\u8BB0\u5FC6\u5199\u5165 session=${f.sessionID}`),t.client.session.prompt({path:{id:f.sessionID},body:{parts:[{type:"text",text:`\u56DE\u987E\u5F53\u524D\u4F1A\u8BDD\uFF0C\u5BF9\u6D77\u9A6C\u4F53\u8BB0\u5FC6\u8FDB\u884C\u7EF4\u62A4\u3002
121
+ ${a}`),await s.info("[haimati_list] \u5217\u51FA\u6210\u529F: \u5168\u90E8"),a}catch(i){return await R(i,"haimati_list")}}})}}import{readFile as He,rm as Ge}from"node:fs/promises";import{basename as z,dirname as N,join as Mt}from"node:path";import{fileURLToPath as ze}from"node:url";var Je="opencode-haimati";function se(t,n){if(!n)return;let e=new AbortController,r=setTimeout(()=>e.abort(),1e4);Ke(e.signal).then(i=>{i.updated&&(s.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 Ke(t){let n=await Be(Je);if(!n)return{updated:!1};let e=await _t(Mt(n,"package.json"));if(!e?.name||!e.version)return{updated:!1};let r=await Xe(e.name,t);if(!r||!Ze(r,e.version))return{updated:!1};let i=await Qe(n,e.name);if(!i)return{updated:!1};try{await Ge(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 Be(t){let n=N(ze(import.meta.url));for(;;){if((await _t(Mt(n,"package.json")))?.name===t)return z(n)==="dist"?N(n):n;let r=N(n);if(r===n)return;n=r}}async function Qe(t,n){let e=N(t),r=z(e).startsWith("@")?N(e):e;if(z(r)!=="node_modules")return;let i=N(r),o=await _t(Mt(i,"package.json")),a=Ve(i,n)??o?.dependencies?.[n];if(!(!a||!Ye(a)))return i}function Ve(t,n){if(n.startsWith("@")){let[i,o]=n.split("/");if(!i||!o||z(N(t))!==i)return;let a=`${o}@`,l=z(t);return l.startsWith(a)?l.slice(a.length):void 0}let e=`${n}@`,r=z(t);return r.startsWith(e)?r.slice(e.length):void 0}function Ye(t){let n=t.trim();return n?!!(n==="latest"||n==="*"||/^[~^]/.test(n)||/^(?:>=|>|<=|<)/.test(n)||/\s+(?:\|\||-|[<>=])\s+/.test(n)):!1}async function _t(t){try{let n=JSON.parse(await He(t,"utf-8"));return n&&typeof n=="object"?n:void 0}catch{return}}async function Xe(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 Ze(t,n){let e=ae(t),r=ae(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 o=e.pre[i],a=r.pre[i];if(o===void 0)return!1;if(a===void 0)return!0;if(o===a)continue;let l=/^\d+$/.test(o)?Number(o):void 0,u=/^\d+$/.test(a)?Number(a):void 0;return l!==void 0&&u!==void 0?l>u:l!==void 0?!1:u!==void 0?!0:o>a}return!1}function ae(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 tn="2026-06-03 15:29:12",ce=!1;function en(t){return t.type==="text"&&t.ignored!==!0}var $i=async t=>{await Tt(),ce||(ce=!0,await s.debug(`[HaimatiPlugin] \u4EE3\u7801\u6700\u540E\u4FEE\u6539\u65E5\u671F: ${tn}`));let n=Y(t.directory),e=oe(),r=new Set,i=new Set,o=new Set,a=new Map,l=1e4,u=new Set,g=new Map;function d(c){let f=g.get(c);return f||(f=new Map,g.set(c,f)),f}return se(t,n.autoUpdate!==!1),ie(t.directory).then(c=>{c>0&&s.info(`[HaimatiPlugin] \u542F\u52A8\u65F6\u6E05\u7406\u4E86 ${c} \u4E2A\u4E0D\u5B58\u5728\u7684\u6587\u4EF6\u5173\u8054`)}).catch(c=>{s.warn(`[HaimatiPlugin] \u6E05\u7406\u8FC7\u671F\u6587\u4EF6\u5173\u8054\u5931\u8D25: ${c instanceof Error?c.message:String(c)}`)}),{tool:e,event:async({event:c})=>{if(c.type==="message.updated"&&c.properties.info.role==="assistant"){let f=c.properties.info;if(f.finish==="stop"&&!r.has(f.id)){if(r.add(f.id),o.has(f.id)){o.delete(f.id);return}if(i.has(f.sessionID))return;let h=a.get(f.sessionID);if(h&&Date.now()<h)return;n.autoWrite===!0&&(i.add(f.sessionID),s.info(`[autoWrite] \u5F00\u59CB\u5F02\u6B65\u8BB0\u5FC6\u5199\u5165 session=${f.sessionID}`),t.client.session.prompt({path:{id:f.sessionID},body:{parts:[{type:"text",text:`\u56DE\u987E\u5F53\u524D\u4F1A\u8BDD\uFF0C\u5BF9\u6D77\u9A6C\u4F53\u8BB0\u5FC6\u8FDB\u884C\u7EF4\u62A4\u3002
122
122
 
123
123
  \u4F60\u7684\u804C\u8D23\uFF1A
124
124
  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
@@ -159,4 +159,4 @@ ${le}`),_.set(O,q.updatedAt)}if(C.length>0){f.output+=`
159
159
  ${C.join(`
160
160
 
161
161
  `)}
162
- </system-reminder>`,await s.debug(`[tool.execute.after] \u6CE8\u5165${C.length}\u6761\u8BB0\u5FC6: ${y}`);let O=St.map(I=>`#${I.padStart(3,"0")}`).join("\u3001");t.client.session.prompt({path:{id:p},body:{noReply:!0,parts:[{type:"text",text:`\u6D77\u9A6C\u4F53: \u6587\u4EF6 ${y} \u5173\u8054\u4E86\u8BB0\u5FC6 ${O}\uFF0C\u5DF2\u81EA\u52A8\u6CE8\u5165\u5230 read \u8F93\u51FA\u4E2D`,ignored:!0}]}}).catch(I=>{s.warn(`[tool.execute.after] \u53D1\u9001\u7528\u6237\u901A\u77E5\u5931\u8D25: ${I instanceof Error?I.message:String(I)}`)})}}catch(m){await s.warn(`[tool.execute.after] \u68C0\u67E5\u6587\u4EF6\u5173\u8054\u5931\u8D25: ${m instanceof Error?m.message:String(m)}`)}}}};export{$i as HaimatiPlugin};
162
+ </system-reminder>`,await s.debug(`[tool.execute.after] \u6CE8\u5165${C.length}\u6761\u8BB0\u5FC6: ${y}`);let O=St.map(I=>`#${I.padStart(3,"0")}`).join("\u3001");t.client.session.prompt({path:{id:p},body:{noReply:!0,parts:[{type:"text",text:`\u6D77\u9A6C\u4F53: \u8BFB\u53D6\u6587\u4EF6 ${y} \uFF0C\u672C\u6B21\u6CE8\u5165\u4E86 ${O}\uFF08\u4E4B\u524D\u5DF2\u6CE8\u5165\u8FC7\u7684\u4E0D\u518D\u91CD\u590D\u6CE8\u5165\uFF09`,ignored:!0}]}}).catch(I=>{s.warn(`[tool.execute.after] \u53D1\u9001\u7528\u6237\u901A\u77E5\u5931\u8D25: ${I instanceof Error?I.message:String(I)}`)})}}catch(m){await s.warn(`[tool.execute.after] \u68C0\u67E5\u6587\u4EF6\u5173\u8054\u5931\u8D25: ${m instanceof Error?m.message:String(m)}`)}}}};export{$i as HaimatiPlugin};
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencode-haimati",
3
- "version": "2.0.4",
3
+ "version": "2.1.0",
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": "2.0.4",
3
+ "version": "2.1.0",
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",