opencode-haimati 1.4.5 → 1.5.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
@@ -298,18 +298,18 @@ ${h}`),await u.info(`[haimati_list] \u5217\u51FA\u6210\u529F: ${t.category}${t.d
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 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
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-18 23:49:00",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
305
305
  2. \u4FEE\u6539\u9519\u8BEF - \u53D1\u73B0\u5DF2\u6709\u8BB0\u5FC6\u6709\u8BEF\u65F6\uFF0C\u5219\u4FEE\u6B63
306
306
  3. \u5220\u9664\u8FC7\u671F - \u53D1\u73B0\u8FC7\u65F6\u6216\u65E0\u6548\u7684\u4FE1\u606F\uFF0C\u5219\u5220\u9664
307
307
  4. \u6574\u5408\u91CD\u590D - \u5185\u5BB9\u91CD\u590D\u7684\u8BB0\u5FC6\uFF0C\u5408\u5E76\u540E\u5220\u9664\u5197\u4F59
308
- 5. \u8C03\u6574\u5206\u7C7B - \u5982\u679C\u5B58\u5728\u672A\u4EE5\u9879\u76EE\u540D\u4F5C\u4E3A\u6839\u8282\u70B9\u7684\u6D77\u9A6C\u4F53\u6761\u76EE\uFF0C\u5219\u8C03\u6574
308
+ 5. \u8C03\u6574\u5206\u7C7B - \u5982\u679C\u5206\u7C7B\u4E0D\u5408\u7406\u7684\uFF0C\u5219\u8C03\u6574
309
309
 
310
310
  \u9075\u5FAA\u539F\u5219\uFF1A
311
311
  - \u8BB0\u5FC6\u5185\u5BB9\u4E0D\u91CD\u590D
312
- - \u5206\u7C7B\u7ED3\u6784\u4FDD\u6301\u4E00\u81F4\uFF0C\u6839\u8282\u70B9\u4F7F\u7528\u9879\u76EE\u540D
312
+ - \u5206\u7C7B\u7ED3\u6784\u4FDD\u6301\u4E00\u81F4
313
313
  - \u8282\u7EA6TOKEN\uFF0C\u7CBE\u7B80\u63CF\u8FF0
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
@@ -329,5 +329,5 @@ ${o}`),await u.info("[haimati_list] \u5217\u51FA\u6210\u529F: \u5168\u90E8"),o}c
329
329
  - \u4FEE\u6539\u9519\u8BEF\u7684\u6D77\u9A6C\u4F53\u8BB0\u5FC6
330
330
  - \u5220\u9664\u8FC7\u671F\u7684\u4FE1\u606F
331
331
  - \u6574\u5408\u91CD\u590D\u7684\u8BB0\u5FC6
332
- - \u5982\u679C\u5B58\u5728\u672A\u4EE5\u9879\u76EE\u540D\u4F5C\u4E3A\u6839\u8282\u70B9\u7684\u6D77\u9A6C\u4F53\u6761\u76EE\uFF0C\u5219\u8C03\u6574
332
+ - \u5982\u679C\u5B58\u5728\u5206\u7C7B\u4E0D\u5408\u7406\u7684\uFF0C\u5219\u8C03\u6574
333
333
  </\u6D77\u9A6C\u4F53\u81EA\u52A8\u63D0\u793A>`,synthetic:!0}),await u.debug("[chat.message] \u6CE8\u5165\u5DE5\u4F5C\u89C4\u5219\u63D0\u793A")}}}};export{kn as HaimatiPlugin};
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencode-haimati",
3
- "version": "1.4.5",
3
+ "version": "1.5.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": "1.4.5",
3
+ "version": "1.5.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",