8 lines
2.6 KiB
JavaScript
Executable File
8 lines
2.6 KiB
JavaScript
Executable File
#!/usr/bin/env node
|
|
import C from"path";import{stdin as l}from"process";import y from"path";import{homedir as D}from"os";import{existsSync as R,readFileSync as E}from"fs";import{join as o,dirname as x,basename as b}from"path";import{homedir as f}from"os";import{fileURLToPath as k}from"url";function S(){return typeof __dirname<"u"?__dirname:x(k(import.meta.url))}var U=S(),c=process.env.CLAUDE_MEM_DATA_DIR||o(f(),".claude-mem"),d=process.env.CLAUDE_CONFIG_DIR||o(f(),".claude"),W=o(c,"archives"),M=o(c,"logs"),N=o(c,"trash"),H=o(c,"backups"),F=o(c,"settings.json"),G=o(c,"claude-mem.db"),K=o(c,"vector-db"),B=o(d,"settings.json"),J=o(d,"commands"),q=o(d,"CLAUDE.md");function g(){try{let t=y.join(D(),".claude-mem","settings.json");if(R(t)){let e=JSON.parse(E(t,"utf-8")),r=parseInt(e.env?.CLAUDE_MEM_WORKER_PORT,10);if(!isNaN(r))return r}}catch{}return parseInt(process.env.CLAUDE_MEM_WORKER_PORT||"37777",10)}import{appendFileSync as P}from"fs";import{homedir as T}from"os";import{join as A}from"path";var I=A(T(),".claude-mem","silent.log");function m(t,e,r=""){let s=new Date().toISOString(),p=((new Error().stack||"").split(`
|
|
`)[2]||"").match(/at\s+(?:.*\s+)?\(?([^:]+):(\d+):(\d+)\)?/),w=p?`${p[1].split("/").pop()}:${p[2]}`:"unknown",a=`[${s}] [${w}] ${t}`;if(e!==void 0)try{a+=` ${JSON.stringify(e)}`}catch(u){a+=` [stringify error: ${u}]`}a+=`
|
|
`;try{P(I,a)}catch(u){console.error("[silent-debug] Failed to write to log:",u)}return r}async function h(t,e,r){let s=r?"&colors=true":"",n=await fetch(`http://127.0.0.1:${e}/api/context/inject?project=${encodeURIComponent(t)}${s}`,{method:"GET",signal:AbortSignal.timeout(5e3)});if(!n.ok){let i=await n.text();throw new Error(`Worker error ${n.status}: ${i}`)}return n.text()}async function _(t){let e=t?.cwd??process.cwd(),r=e?C.basename(e):"unknown-project",s=g();m("[context-hook] Requesting context from worker",{project:r,workerPort:s});try{let[n,i]=await Promise.all([h(r,s,!1),h(r,s,!0)]);return m("[context-hook] Context received",{unformattedLength:n.length,formattedLength:i.length}),{unformatted:n,formatted:i}}catch(n){m("[context-hook] Worker not reachable",{error:n.message});let i=`# [${r}] recent context
|
|
|
|
Worker not available. Start with: pm2 start claude-mem-worker`;return{unformatted:i,formatted:i}}}if(l.isTTY)_(void 0).then(({formatted:t})=>{console.log(t),process.exit(0)});else{let t="";l.on("data",e=>t+=e),l.on("end",async()=>{let e=t.trim()?JSON.parse(t):void 0,{unformatted:r,formatted:s}=await _(e);process.stderr.write(s+`
|
|
`),console.log(JSON.stringify({hookSpecificOutput:{hookEventName:"SessionStart",additionalContext:r}})),process.exit(0)})}export{_ as contextHook};
|