MCPcopy
hub / github.com/mksglu/context-mode / d9

Function d9

cli.bundle.mjs:1193–1193  ·  view source on GitHub ↗
(t)

Source from the content-addressed store, hash-verified

1191`)}catch{}return null}return i[1]}catch{return null}}uo();Rn();function Q4(t,e){return e==="darwin"?[{cmd:"open",args:[t]}]:e==="win32"?[{cmd:"cmd",args:["/c","start","",t]}]:[{cmd:"xdg-open",args:[t]},{cmd:"sensible-browser",args:[t]}]}var e9={"claude-code":{pretooluse:"hooks/pretooluse.mjs",posttooluse:"hooks/posttooluse.mjs",precompact:"hooks/precompact.mjs",sessionstart:"hooks/sessionstart.mjs",userpromptsubmit:"hooks/userpromptsubmit.mjs",stop:"hooks/stop.mjs"},"gemini-cli":{beforeagent:"hooks/gemini-cli/beforeagent.mjs",beforetool:"hooks/gemini-cli/beforetool.mjs",aftertool:"hooks/gemini-cli/aftertool.mjs",precompress:"hooks/gemini-cli/precompress.mjs",sessionstart:"hooks/gemini-cli/sessionstart.mjs"},"vscode-copilot":{pretooluse:"hooks/vscode-copilot/pretooluse.mjs",posttooluse:"hooks/vscode-copilot/posttooluse.mjs",precompact:"hooks/vscode-copilot/precompact.mjs",sessionstart:"hooks/vscode-copilot/sessionstart.mjs"},cursor:{pretooluse:"hooks/cursor/pretooluse.mjs",posttooluse:"hooks/cursor/posttooluse.mjs",sessionstart:"hooks/cursor/sessionstart.mjs",stop:"hooks/cursor/stop.mjs",afteragentresponse:"hooks/cursor/afteragentresponse.mjs"},codex:{pretooluse:"hooks/codex/pretooluse.mjs",posttooluse:"hooks/codex/posttooluse.mjs",precompact:"hooks/codex/precompact.mjs",sessionstart:"hooks/codex/sessionstart.mjs",userpromptsubmit:"hooks/codex/userpromptsubmit.mjs",stop:"hooks/codex/stop.mjs"},kiro:{pretooluse:"hooks/kiro/pretooluse.mjs",posttooluse:"hooks/kiro/posttooluse.mjs"},"jetbrains-copilot":{pretooluse:"hooks/jetbrains-copilot/pretooluse.mjs",posttooluse:"hooks/jetbrains-copilot/posttooluse.mjs",precompact:"hooks/jetbrains-copilot/precompact.mjs",sessionstart:"hooks/jetbrains-copilot/sessionstart.mjs"},"copilot-cli":{pretooluse:"hooks/copilot-cli/pretooluse.mjs",posttooluse:"hooks/copilot-cli/posttooluse.mjs",precompact:"hooks/copilot-cli/precompact.mjs",sessionstart:"hooks/copilot-cli/sessionstart.mjs",userpromptsubmit:"hooks/copilot-cli/userpromptsubmit.mjs",stop:"hooks/copilot-cli/stop.mjs"},"antigravity-cli":{pretooluse:"hooks/antigravity-cli/pretooluse.mjs",posttooluse:"hooks/antigravity-cli/posttooluse.mjs",stop:"hooks/antigravity-cli/stop.mjs"},kimi:{pretooluse:"hooks/kimi/pretooluse.mjs",posttooluse:"hooks/kimi/posttooluse.mjs",precompact:"hooks/kimi/precompact.mjs",sessionstart:"hooks/kimi/sessionstart.mjs",sessionend:"hooks/kimi/sessionend.mjs",userpromptsubmit:"hooks/kimi/userpromptsubmit.mjs",stop:"hooks/kimi/stop.mjs"},"qwen-code":{pretooluse:"hooks/pretooluse.mjs",posttooluse:"hooks/posttooluse.mjs",precompact:"hooks/precompact.mjs",sessionstart:"hooks/sessionstart.mjs",userpromptsubmit:"hooks/userpromptsubmit.mjs"}};async function t9(t,e){try{Z4(2),B4(X4,"w")}catch{process.stderr.write=(()=>!0)}let n=e9[t]?.[e];n||process.exit(0);let r=bi();await import(Rd(dc(r,n)).href)}var ft=process.argv.slice(2);function n9(){console.log(["Usage:"," context-mode Start MCP server (stdio)"," context-mode index <path> Index a file or directory into the FTS5 knowledge base"," context-mode search <query...> Search the current project's FTS5 knowledge base"," context-mode doctor Diagnose runtime issues, hooks, FTS5, version"," context-mode upgrade Fix hooks, permissions, and settings"," context-mode hook <platform> <event> Dispatch a configured hook script"," context-mode statusline Print Claude Code status line","","Index options:"," --source <label> Source label (default: project:<directory-name> or path)"," --project <path> Project identity for the content DB (default: indexed dir or cwd)"," --max-depth <n> Directory recursion depth (default: 5)"," --max-files <n> Directory file cap (default: 200)"," --ext <.ts,.md> Comma-separated extension allowlist"," --include <glob> Directory include pattern (repeatable)"," --exclude <glob> Directory exclude pattern (repeatable)"," --no-gitignore Do not apply .gitignore during directory walks"," --follow-symlinks Follow directory symlinks inside the root","","Search options:"," --project <path> Project identity for the content DB (default: cwd)"," --source <label> Filter to a source label (partial match)"," --limit <n> Results to show (default: 3)"," --type <code|prose> Filter by content type","","Environment:"," CONTEXT_MODE_DIR=/absolute/path Override sessions/content storage root; empty is ignored, non-empty must be absolute"].join(`
1192`))}if(ft[0]==="--help"||ft[0]==="-h"||ft[0]==="help")n9();else if(ft[0]==="index")l9(ft.slice(1)).then(t=>process.exit(t));else if(ft[0]==="search")d9(ft.slice(1)).then(t=>process.exit(t));else if(ft[0]==="doctor")p9().then(t=>process.exit(t));else if(ft[0]==="upgrade"){let t=ft.indexOf("--platform"),e=t>=0&&ft[t+1]?ft[t+1]:void 0;f9(e?{platform:e}:void 0).catch(n=>{let r=n instanceof Error?n.message:String(n);O.error(k.default.red(r)),process.exit(1)})}else ft[0]==="hook"?t9(ft[1],ft[2]):ft[0]==="insight"?m9():ft[0]==="statusline"?h9():Promise.resolve().then(()=>(fC(),mC));function XQ(t){return t.replace(/\\/g,"/")}var Cd=process.platform==="win32";function Ed(t,e={}){_i(Cd?"npm.cmd":"npm",t,{...e,...Cd?{shell:!0}:{}})}function YQ(t,e={}){let n={...e,...Cd?{shell:!0}:{}};H4(Cd?t.replace(/^npm /,"npm.cmd "):t,n)}function r9(t,e=process.platform,n=U4){let r={stdio:"ignore"},o=()=>console.error(`
1193Could not auto-open browser. Open manually: ${t}`),s=Q4(t,e),i=!1;for(let{cmd:a,args:c}of s)try{n(a,c,r),i=!0;break}catch{}i||o()}function o9(){let t=Y4(import.meta.url),e=zC(t);return e.endsWith("/build")||e.endsWith("\\build")||e.endsWith("/src")||e.endsWith("\\src")?Q(e,".."):e}function s9(t){let e=["packages","context-mode@latest","node_modules","context-mode"];if(process.platform==="win32"){let n=process.env.LOCALAPPDATA;return n?Q(n,t,...e):Q(Pd(),"AppData","Local",t,...e)}return Q(Pd(),".cache",t,...e)}function bi(){let t=Qe().platform;return Jr(t)?s9(t):o9()}function HC(){try{return JSON.parse(Bn(Q(bi(),"package.json"),"utf-8")).version??"unknown"}catch{return"unknown"}}async function i9(){return new Promise(t=>{let e=W4("https://registry.npmjs.org/context-mode/latest",{headers:{Connection:"close"}},n=>{let r="";n.on("data",o=>{r+=o}),n.on("end",()=>{try{let o=JSON.parse(r);t(o.version??"unknown")}catch{t("unknown")}})});e.on("error",()=>t("unknown")),e.setTimeout(5e3,()=>{e.destroy(),t("unknown")}),e.end()})}function Td(t){return t.envVar?t.envVar:"adapter default"}function UC(t){let e=[],n={};for(let r=0;r<t.length;r++){let o=t[r];if(!o.startsWith("--")||o==="--"){e.push(o);continue}let s=o.slice(2),i=s.indexOf("="),a=i>=0?s.slice(0,i):s,c=i>=0?s.slice(i+1):void 0,u=t[r+1],l=c!==void 0?c:u&&!u.startsWith("--")?(r++,u):!0;if(a==="include"||a==="exclude"){let d=n[a];n[a]=Array.isArray(d)?[...d,String(l)]:[String(l)]}else n[a]=l}return{positional:e,flags:n}}function Gr(t,e){let n=t[e];if(typeof n=="string"&&n.length>0)return n}function NC(t,e){return t[e]===!0||t[e]==="true"}function MC(t,e){let n=t[e];if(Array.isArray(n))return n.filter(Boolean);if(typeof n=="string"&&n.length>0)return[n]}function Eb(t,e,n={}){let r=Gr(t,e);if(!r)return;let o=Number(r),s=n.min??1;if(!Number.isInteger(o)||o<s)throw new Error(`--${e} must be an integer >= ${s}`);return o}function a9(t){let e=Gr(t,"ext")??Gr(t,"extensions");if(!e)return;let n=e.split(",").map(r=>r.trim()).filter(Boolean).map(r=>r.startsWith(".")?r:`.${r}`);return n.length>0?n:void 0}function FC(t,e){return t?Q(t):Q(e)}async function ZC(t){let e=await Ui(Qe().platform),n=Yr(()=>e.getSessionDir()),r=br(n),{resolveContentStorePath:o}=await Promise.resolve().then(()=>(Jt(),kx)),s=o({projectDir:t,contentDir:r});return{store:new Ss(s),dbPath:s,contentDir:r}}function c9(t){try{if(jC(t).isDirectory())return`project:${K4(t)||t}`}catch{}return t}function u9(t,e){let n=po("Read",e);if(Tr(t,n,process.platform==="win32",e).denied)throw new Error(`Read denied by policy: ${t}`)}async function l9(t){try{let e=UC(t),n=e.positional[0];if(!n||n==="-h"||n==="--help")return console.log("Usage: context-mode index <path> [--source label] [--project path] [--max-files n] [--max-depth n] [--ext .ts,.md]"),n?0:1;let r=G4(n)?Q(n):Q(process.cwd(),n);if(!Be(r))throw new Error(`Path does not exist: ${r}`);let o=jC(r),s=FC(Gr(e.flags,"project"),o.isDirectory()?r:zC(r)),i=Gr(e.flags,"source")??c9(r),{store:a,dbPath:c}=await ZC(s);try{if(u9(r,s),o.isDirectory()){let u=po("Read",s),l=a.indexDirectory({path:r,source:i,include:MC(e.flags,"include"),exclude:MC(e.flags,"exclude"),maxDepth:Eb(e.flags,"max-depth",{min:0}),maxFiles:Eb(e.flags,"max-files"),extensions:a9(e.flags),respectGitignore:!NC(e.flags,"no-gitignore"),followSymlinks:NC(e.flags,"follow-symlinks"),perFileDeny:m=>{try{return Tr(m,u,process.platform==="win32",s).denied}catch{return!1}}}),d=l.capped?` (cap reached at ${l.filesIndexed} files)`:"",p=l.denied>0?`; ${l.denied} denied`:"",f=l.failed>0?`; ${l.failed} failed`:"";console.log(`Indexed ${l.filesIndexed} files (${l.totalChunks} sections) from ${r}${d}${p}${f}`)}else{let u=a.index({path:r,source:i});console.log(`Indexed ${u.totalChunks} sections (${u.codeChunks} with code) from ${r}`)}return console.log(`Source: ${i}`),console.log(`Project: ${s}`),console.log(`DB: ${c}`),0}finally{a.close()}}catch(e){let n=e instanceof Error?e.message:String(e);return console.error(`context-mode index: ${n}`),1}}async function d9(t){try{let e=UC(t),n=e.positional.join(" ").trim();if(!n||n==="-h"||n==="--help")return console.log("Usage: context-mode search <query...> [--source label] [--project path] [--limit n] [--type code|prose]"),n?0:1;let r=FC(Gr(e.flags,"project"),process.cwd()),{store:o,dbPath:s}=await ZC(r);try{let i=Eb(e.flags,"limit")??3,a=Gr(e.flags,"type");if(a&&a!=="code"&&a!=="prose")throw new Error("--type must be code or prose");let c=o.searchWithFallback(n,i,Gr(e.flags,"source"),a);if(c.length===0)return console.log(`No matches for: ${n}`),console.log(`Project: ${r}`),console.log(`DB: ${s}`),0;for(let[u,l]of c.entries()){let d=l.content.replace(/\s+/g," ").trim(),p=d.length>500?`${d.slice(0,500)}...`:d;console.log(`## ${u+1}. ${l.title}`),console.log(`Source: ${l.source}`),console.log(`Type: ${l.contentType}`),console.log(p),console.log("")}return 0}finally{o.close()}}catch(e){let n=e instanceof Error?e.message:String(e);return console.error(`context-mode search: ${n}`),1}}function wb(t){try{return br(t),O.success(k.default.green(`Storage ${t.kind}: PASS`)+k.default.dim(` \u2014 ${t.path} (${Td(t)})`)),0}catch(e){if(e instanceof Kt)return O.error(k.default.red(`Storage ${t.kind}: FAIL`)+k.default.dim(` \u2014 ${cs(e)}`)),1;throw e}}async function p9(){process.stdout.isTTY&&console.clear();let t=Qe(),e=await Ui(t.platform);Fd(k.default.bgMagenta(k.default.white(" context-mode doctor "))),O.info(`Platform: ${k.default.cyan(e.name)}`+k.default.dim(` (${t.confidence} confidence \u2014 ${t.reason})`));let n=0;try{let y=_r(()=>e.getSessionDir()),_=Yr(()=>y.path),b=as(()=>y.path);gc([`sessions: ${y.path} (${Td(y)})`,`content: ${_.path} (${Td(_)})`,`stats: ${b.path} (${Td(b)})`].join(`
1194`),"Storage paths"),n+=wb(y),n+=wb(_),n+=wb(b)}catch(y){if(y instanceof Kt)n++,O.error(k.default.red(`Storage ${y.kind}: FAIL`)+k.default.dim(` \u2014 ${cs(y)}`));else throw y}let r=Zd();r.start("Running diagnostics");let o,s;try{o=Xr(),s=Ti(o)}catch{return r.stop("Diagnostics partial"),O.warn(k.default.yellow("Could not detect runtimes")+k.default.dim(" \u2014 module may be missing, restart session after upgrade")),hc(k.default.yellow("Doctor could not fully run \u2014 try again after restarting")),1}r.stop("Diagnostics complete"),gc(Ei(o),"Runtimes");{let{hasModernSqlite:y}=await Promise.resolve().then(()=>(hr(),tp));process.platform==="linux"&&!y()&&!mr()&&(n++,O.error(k.default.red("Node version: FAIL")+` \u2014 Linux + Node ${process.versions.node} is unsafe (SIGSEGV)`+k.default.dim(`
1195 context-mode requires Node.js >= 22.5 (or Bun) on Linux to avoid the
1196 V8 madvise(MADV_DONTNEED) SIGSEGV in better-sqlite3 (1-4/hour).

Callers 1

cli.bundle.mjsFile · 0.85

Calls 9

UCFunction · 0.85
FCFunction · 0.85
GrFunction · 0.85
ZCFunction · 0.85
EbFunction · 0.85
trimMethod · 0.45
searchWithFallbackMethod · 0.45
closeMethod · 0.45
errorMethod · 0.45

Tested by

no test coverage detected