@ushiradineth/veil 0.7.1 → 0.7.3
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/bin.js +21 -21
- package/package.json +1 -1
- package/skills/SKILL.md +22 -7
package/dist/bin.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { createRequire as __createRequire } from "node:module"; import { fileURLToPath as __fileURLToPath } from "node:url"; import { dirname as __pathDirname } from "node:path"; const require = __createRequire(import.meta.url); const __filename = __fileURLToPath(import.meta.url); const __dirname = __pathDirname(__filename);
|
|
2
|
-
import{resolve as
|
|
3
|
-
`),this.dirty=!1,this.lastPersistMs=Date.now()}catch{}}schedulePersist(){this.dirty=!0,Date.now()-this.lastPersistMs>=this.persistIntervalMs&&this.persistNow()}recordCacheHit(){this.ensureLoaded(),this.queryCacheHits++,this.schedulePersist()}recordCacheMiss(){this.ensureLoaded(),this.queryCacheMisses++,this.schedulePersist()}recordQuery(t){this.ensureLoaded(),this.totalQueries++,this.latencies.push(t),this.latencies.length>1e3&&this.latencies.shift(),this.schedulePersist()}recordIndexBuild(){this.ensureLoaded(),this.indexBuilds++,this.schedulePersist()}recordBuildLatency(t){this.ensureLoaded(),this.buildLatencies.push(t),this.buildLatencies.length>200&&this.buildLatencies.shift(),this.schedulePersist()}recordCacheInvalidation(){this.ensureLoaded(),this.cacheInvalidations++,this.schedulePersist()}updateCacheSizes(t,n){this.ensureLoaded(),!(this.indexCacheSize===t&&this.statusCacheSize===n)&&(this.indexCacheSize=t,this.statusCacheSize=n,this.schedulePersist())}recordGitCall(t,n,r,s=!1){this.ensureLoaded(),this.gitCalls++,s?(this.ghCalls++,this.ghLatencies.push(t),this.ghLatencies.length>300&&this.ghLatencies.shift()):(this.gitLatencies.push(t),this.gitLatencies.length>300&&this.gitLatencies.shift()),n||this.gitFailures++,r&&this.gitTimeouts++,this.schedulePersist()}percentile(t,n){if(t.length===0)return 0;let r=[...t].sort((i,o)=>i-o),s=Math.min(r.length-1,Math.max(0,Math.ceil(n/100*r.length)-1));return r[s]??0}createLatencyBuckets(){let t=[{min:0,max:1,count:0},{min:1,max:5,count:0},{min:5,max:10,count:0},{min:10,max:50,count:0},{min:50,max:100,count:0},{min:100,max:500,count:0},{min:500,max:1/0,count:0}];for(let n of this.latencies)for(let r of t)if(n>=r.min&&n<r.max){r.count++;break}return t}getDiagnostics(){this.ensureLoaded(),this.persistNow();let t=this.queryCacheHits+this.queryCacheMisses>0?this.queryCacheHits/(this.queryCacheHits+this.queryCacheMisses):0,n=process.memoryUsage();return{cache:{index_cache_size:this.indexCacheSize,status_cache_size:this.statusCacheSize,query_cache_hits:this.queryCacheHits,query_cache_misses:this.queryCacheMisses,query_cache_hit_rate:Number((t*100).toFixed(2))},latency:{buckets:this.createLatencyBuckets(),p50_ms:Number(this.percentile(this.latencies,50).toFixed(4)),p95_ms:Number(this.percentile(this.latencies,95).toFixed(4)),p99_ms:Number(this.percentile(this.latencies,99).toFixed(4)),max_ms:this.latencies.length>0?Number(Math.max(...this.latencies).toFixed(4)):0,build_p95_ms:Number(this.percentile(this.buildLatencies,95).toFixed(4)),build_max_ms:this.buildLatencies.length>0?Number(Math.max(...this.buildLatencies).toFixed(4)):0,git_p95_ms:Number(this.percentile(this.gitLatencies,95).toFixed(4)),git_max_ms:this.gitLatencies.length>0?Number(Math.max(...this.gitLatencies).toFixed(4)):0,gh_p95_ms:Number(this.percentile(this.ghLatencies,95).toFixed(4)),gh_max_ms:this.ghLatencies.length>0?Number(Math.max(...this.ghLatencies).toFixed(4)):0},memory:{heap_used_mb:Number((n.heapUsed/1024/1024).toFixed(2)),heap_total_mb:Number((n.heapTotal/1024/1024).toFixed(2)),external_mb:Number((n.external/1024/1024).toFixed(2)),rss_mb:Number((n.rss/1024/1024).toFixed(2))},operations:{total_queries:this.totalQueries,index_builds:this.indexBuilds,cache_invalidations:this.cacheInvalidations,git_calls:this.gitCalls,git_failures:this.gitFailures,git_timeouts:this.gitTimeouts,gh_calls:this.ghCalls}}}reset(){this.ensureLoaded(),this.queryCacheHits=0,this.queryCacheMisses=0,this.totalQueries=0,this.indexBuilds=0,this.cacheInvalidations=0,this.gitCalls=0,this.gitFailures=0,this.gitTimeouts=0,this.ghCalls=0,this.latencies=[],this.buildLatencies=[],this.gitLatencies=[],this.ghLatencies=[],this.indexCacheSize=0,this.statusCacheSize=0,this.dirty=!0,this.persistNow()}},P=new
|
|
4
|
-
`)}},
|
|
2
|
+
import{resolve as ps}from"node:path";import{fileURLToPath as Ga}from"node:url";import{createServer as Sa}from"node:http";import{sep as ft}from"node:path";import{fileURLToPath as va}from"node:url";import{McpServer as Ra}from"@modelcontextprotocol/sdk/server/mcp.js";import{StdioServerTransport as Pa}from"@modelcontextprotocol/sdk/server/stdio.js";import{StreamableHTTPServerTransport as Ta}from"@modelcontextprotocol/sdk/server/streamableHttp.js";import{z as d}from"zod";function V(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:{value:e}}function ue(e){return Array.isArray(e)?e:[]}function ks(e){let t=V(e.meta);return typeof t.ok=="boolean"?t.ok:!0}function ws(e){let t=ue(e.items).length,n=ue(e.files).length,r=ue(e.symbols).length,s=ue(e.chunks).length,i=V(e.data),o=ue(i.results).length,a=ue(i.entries).length;if(t+n+r+s+o+a>0)return t+n+r+s+o+a;if(typeof i.text=="string"&&i.text.trim().length>0)return 1;let l=i.content;return typeof l=="string"&&l.length>0?1:0}function xs(e){let t=ue(e?.suggestions),n=!1,r=!1;for(let s of t){let i=V(s).reason;i==="parser-disabled"&&(n=!0),i==="runtime-missing"&&(r=!0)}return n&&r?["grammar_install","grammar_runtime_install"]:n?["grammar_install"]:r?["grammar_runtime_install"]:["grammar_runtime_install","grammar_install"]}function ze(e,t){switch(e){case"discover":return["lookup"];case"chunk":return["lookup"];case"lookup":return["search"];case"files":return["lookup"];case"symbols":return["lookup"];case"search":return["lookup"];case"web_search":return["fetch_url"];case"fetch_url":return["web_search"];case"git_status":return["git_diff"];case"git_log":return["git_show"];case"git_diff":return["git_show"];case"git_show":return["git_log"];case"gh_lookup":return["lookup"];case"status":return["lookup"];case"update_check":return["status"];case"refresh":return["lookup"];case"diagnostics":return["status"];case"grammar_recommend":return xs(t);case"grammar_runtime_install":return["refresh"];default:return["lookup"]}}function dn(e){switch(e){case"web_search":return["No web hits"];case"fetch_url":return["No URL content"];case"git_status":case"git_log":case"git_diff":case"git_show":case"gh_lookup":return["No git/github context"];default:return["No indexed matches"]}}function Ss(e,t){if(e==="git_status"){let r=V(t.data).branch;return typeof r=="string"&&r.length>0}if(e==="git_log"){let n=V(t.data);return Array.isArray(n.entries)&&typeof n.limit=="number"}if(e==="git_diff"){let n=V(t.data);return typeof n.mode=="string"&&typeof n.staged=="boolean"&&typeof n.name_only=="boolean"&&typeof n.text=="string"}if(e==="git_show"){let n=V(t.data);return typeof n.rev=="string"&&typeof n.patch=="boolean"&&typeof n.text=="string"}return e==="status"?typeof t.exists=="boolean":e==="update_check"?typeof V(t.mcp).current=="string":e==="refresh"?typeof t.ok=="boolean":e==="diagnostics"?t.cache!==void 0||t.operations!==void 0:!1}var vs=new Set(["a","an","and","are","as","be","by","for","from","help","how","i","in","is","it","me","need","of","on","or","please","show","that","the","this","to","use","what","where","with"]);function Rs(e){return e.length<=1?!1:/[._/:#@+-]/.test(e)||/[A-Z]/.test(e)||new RegExp("\\p{N}","u").test(e)?!0:!vs.has(e.toLowerCase())}function mn(e){return e.replace(/^[^\p{L}\p{N}_./:#@+-]+|[^\p{L}\p{N}_./:#@+-]+$/gu,"")}function fn(e){if(!e||e.trim().length===0)return;let t=e.trim().replace(/\s+/g," "),n=t.split(" ").map(mn).filter(r=>r.length>0).filter(r=>Rs(r));if(n.length===0){let r=t.split(" ").map(mn).filter(s=>s.length>0).slice(0,6).join(" ");return r.length>0?r:void 0}return n.slice(0,8).join(" ")}function Ps(e,t,n){let r=V(t),s=ks(r),i=ws(r);return s?i===0?Ss(e,r)?{next_calls:ze(e,r),confidence:"high",coverage:"full"}:{next_calls:ze(e,r),confidence:"medium",coverage:"partial",missing_context:dn(e),recommended_query:fn(n?.query)}:{next_calls:ze(e,r),confidence:"high",coverage:"full"}:{next_calls:ze(e,r),confidence:"low",coverage:"none",missing_context:dn(e),recommended_query:fn(n?.query)}}function A(e,t,n){let r=V(t),s=Ps(e,r,n);return s.confidence!=="high"||s.coverage!=="full"?{...r,guidance:s}:r}import{existsSync as Cs,mkdirSync as Is,readFileSync as Es,writeFileSync as Ls}from"node:fs";import{dirname as Ns,join as As}from"node:path";import{isAbsolute as gn,join as Ge,normalize as pn,relative as Ts}from"node:path";var hn=".veil";function re(e,t){let n=(t??hn).trim();return n?gn(n)?pn(n):pn(Ge(e,n)):Ge(e,hn)}function j(e,t){return Ge(re(e,t),"index")}function xe(e,t){let n=re(e,t),r=Ts(e,n);return!r||r==="."?"":r.startsWith("..")||gn(r)?null:r.replace(/\\/g,"/")}function _n(e,t){return Ge(j(e,t),"diagnostics-state.json")}var _t=class{queryCacheHits=0;queryCacheMisses=0;totalQueries=0;indexBuilds=0;cacheInvalidations=0;gitCalls=0;gitFailures=0;gitTimeouts=0;ghCalls=0;latencies=[];buildLatencies=[];gitLatencies=[];ghLatencies=[];indexCacheSize=0;statusCacheSize=0;loaded=!1;hooksInstalled=!1;dirty=!1;lastPersistMs=0;persistIntervalMs;statePath;registerHook;exitFn;constructor(t){this.persistIntervalMs=t?.persistIntervalMs??1e3,this.statePath=t?.statePath??As(j(process.cwd()),"diagnostics-state.json"),this.registerHook=t?.registerHook??((n,r)=>{process.on(n,r)}),this.exitFn=t?.exitFn??(n=>{process.exit(n)})}configureStatePath(t){t.trim()&&t!==this.statePath&&(this.statePath=t,this.loaded=!1)}installExitHooks(){if(this.hooksInstalled)return;this.hooksInstalled=!0;let t=()=>{this.persistNow()};this.registerHook("beforeExit",t),this.registerHook("exit",t),this.registerHook("SIGINT",()=>{t(),this.exitFn(130)}),this.registerHook("SIGTERM",()=>{t(),this.exitFn(143)})}ensureLoaded(){if(!this.loaded&&(this.loaded=!0,this.installExitHooks(),!!Cs(this.statePath)))try{let t=Es(this.statePath,"utf-8"),n=JSON.parse(t);this.queryCacheHits=Number(n.queryCacheHits??0),this.queryCacheMisses=Number(n.queryCacheMisses??0),this.totalQueries=Number(n.totalQueries??0),this.indexBuilds=Number(n.indexBuilds??0),this.cacheInvalidations=Number(n.cacheInvalidations??0),this.gitCalls=Number(n.gitCalls??0),this.gitFailures=Number(n.gitFailures??0),this.gitTimeouts=Number(n.gitTimeouts??0),this.ghCalls=Number(n.ghCalls??0),this.latencies=Array.isArray(n.latencies)?n.latencies.map(r=>Number(r)).filter(r=>Number.isFinite(r)):[],this.buildLatencies=Array.isArray(n.buildLatencies)?n.buildLatencies.map(r=>Number(r)).filter(r=>Number.isFinite(r)):[],this.gitLatencies=Array.isArray(n.gitLatencies)?n.gitLatencies.map(r=>Number(r)).filter(r=>Number.isFinite(r)):[],this.ghLatencies=Array.isArray(n.ghLatencies)?n.ghLatencies.map(r=>Number(r)).filter(r=>Number.isFinite(r)):[],this.indexCacheSize=Number(n.indexCacheSize??0),this.statusCacheSize=Number(n.statusCacheSize??0)}catch{this.loaded=!0}}persistNow(){if(!(!this.loaded||!this.dirty))try{Is(Ns(this.statePath),{recursive:!0}),Ls(this.statePath,`${JSON.stringify({queryCacheHits:this.queryCacheHits,queryCacheMisses:this.queryCacheMisses,totalQueries:this.totalQueries,indexBuilds:this.indexBuilds,cacheInvalidations:this.cacheInvalidations,gitCalls:this.gitCalls,gitFailures:this.gitFailures,gitTimeouts:this.gitTimeouts,ghCalls:this.ghCalls,latencies:this.latencies.slice(-1e3),buildLatencies:this.buildLatencies.slice(-200),gitLatencies:this.gitLatencies.slice(-300),ghLatencies:this.ghLatencies.slice(-300),indexCacheSize:this.indexCacheSize,statusCacheSize:this.statusCacheSize},null,2)}
|
|
3
|
+
`),this.dirty=!1,this.lastPersistMs=Date.now()}catch{}}schedulePersist(){this.dirty=!0,Date.now()-this.lastPersistMs>=this.persistIntervalMs&&this.persistNow()}recordCacheHit(){this.ensureLoaded(),this.queryCacheHits++,this.schedulePersist()}recordCacheMiss(){this.ensureLoaded(),this.queryCacheMisses++,this.schedulePersist()}recordQuery(t){this.ensureLoaded(),this.totalQueries++,this.latencies.push(t),this.latencies.length>1e3&&this.latencies.shift(),this.schedulePersist()}recordIndexBuild(){this.ensureLoaded(),this.indexBuilds++,this.schedulePersist()}recordBuildLatency(t){this.ensureLoaded(),this.buildLatencies.push(t),this.buildLatencies.length>200&&this.buildLatencies.shift(),this.schedulePersist()}recordCacheInvalidation(){this.ensureLoaded(),this.cacheInvalidations++,this.schedulePersist()}updateCacheSizes(t,n){this.ensureLoaded(),!(this.indexCacheSize===t&&this.statusCacheSize===n)&&(this.indexCacheSize=t,this.statusCacheSize=n,this.schedulePersist())}recordGitCall(t,n,r,s=!1){this.ensureLoaded(),this.gitCalls++,s?(this.ghCalls++,this.ghLatencies.push(t),this.ghLatencies.length>300&&this.ghLatencies.shift()):(this.gitLatencies.push(t),this.gitLatencies.length>300&&this.gitLatencies.shift()),n||this.gitFailures++,r&&this.gitTimeouts++,this.schedulePersist()}percentile(t,n){if(t.length===0)return 0;let r=[...t].sort((i,o)=>i-o),s=Math.min(r.length-1,Math.max(0,Math.ceil(n/100*r.length)-1));return r[s]??0}createLatencyBuckets(){let t=[{min:0,max:1,count:0},{min:1,max:5,count:0},{min:5,max:10,count:0},{min:10,max:50,count:0},{min:50,max:100,count:0},{min:100,max:500,count:0},{min:500,max:1/0,count:0}];for(let n of this.latencies)for(let r of t)if(n>=r.min&&n<r.max){r.count++;break}return t}getDiagnostics(){this.ensureLoaded(),this.persistNow();let t=this.queryCacheHits+this.queryCacheMisses>0?this.queryCacheHits/(this.queryCacheHits+this.queryCacheMisses):0,n=process.memoryUsage();return{cache:{index_cache_size:this.indexCacheSize,status_cache_size:this.statusCacheSize,query_cache_hits:this.queryCacheHits,query_cache_misses:this.queryCacheMisses,query_cache_hit_rate:Number((t*100).toFixed(2))},latency:{buckets:this.createLatencyBuckets(),p50_ms:Number(this.percentile(this.latencies,50).toFixed(4)),p95_ms:Number(this.percentile(this.latencies,95).toFixed(4)),p99_ms:Number(this.percentile(this.latencies,99).toFixed(4)),max_ms:this.latencies.length>0?Number(Math.max(...this.latencies).toFixed(4)):0,build_p95_ms:Number(this.percentile(this.buildLatencies,95).toFixed(4)),build_max_ms:this.buildLatencies.length>0?Number(Math.max(...this.buildLatencies).toFixed(4)):0,git_p95_ms:Number(this.percentile(this.gitLatencies,95).toFixed(4)),git_max_ms:this.gitLatencies.length>0?Number(Math.max(...this.gitLatencies).toFixed(4)):0,gh_p95_ms:Number(this.percentile(this.ghLatencies,95).toFixed(4)),gh_max_ms:this.ghLatencies.length>0?Number(Math.max(...this.ghLatencies).toFixed(4)):0},memory:{heap_used_mb:Number((n.heapUsed/1024/1024).toFixed(2)),heap_total_mb:Number((n.heapTotal/1024/1024).toFixed(2)),external_mb:Number((n.external/1024/1024).toFixed(2)),rss_mb:Number((n.rss/1024/1024).toFixed(2))},operations:{total_queries:this.totalQueries,index_builds:this.indexBuilds,cache_invalidations:this.cacheInvalidations,git_calls:this.gitCalls,git_failures:this.gitFailures,git_timeouts:this.gitTimeouts,gh_calls:this.ghCalls}}}reset(){this.ensureLoaded(),this.queryCacheHits=0,this.queryCacheMisses=0,this.totalQueries=0,this.indexBuilds=0,this.cacheInvalidations=0,this.gitCalls=0,this.gitFailures=0,this.gitTimeouts=0,this.ghCalls=0,this.latencies=[],this.buildLatencies=[],this.gitLatencies=[],this.ghLatencies=[],this.indexCacheSize=0,this.statusCacheSize=0,this.dirty=!0,this.persistNow()}},P=new _t,bt=class{markers=[];enabled=!1;enable(){this.enabled=!0}disable(){this.enabled=!1}isEnabled(){return this.enabled}mark(t){if(!this.enabled)return;let n=typeof Bun<"u"&&typeof Bun.nanoseconds=="function"?Bun.nanoseconds()/1e6:Date.now();this.markers.push({name:t,start:n})}measure(t){if(!this.enabled)return;let n=typeof Bun<"u"&&typeof Bun.nanoseconds=="function"?Bun.nanoseconds()/1e6:Date.now();for(let r=this.markers.length-1;r>=0;r--){let s=this.markers[r];if(s.name===t&&!s.end){s.end=n,s.duration=n-s.start;break}}}getMarkers(){return this.markers.filter(t=>t.duration!==void 0)}reset(){this.markers=[]}report(){let t=this.getMarkers();if(t.length===0)return"No profiling data available";let n=["=== Profiling Report ==="];for(let r of t)r.duration!==void 0&&n.push(`${r.name}: ${r.duration.toFixed(4)}ms`);return n.join(`
|
|
4
|
+
`)}},Xa=new bt;import{isIP as Os}from"node:net";import{NodeHtmlMarkdown as Fs}from"node-html-markdown";function qe(e){return e instanceof Error?e.message:String(e)}function Be(e,t){let n=t.toLowerCase();return e||t.includes("AbortError")||n.includes("aborted")||n.includes("timeout")}function z(e,t,n,r){let s=typeof e=="number"&&Number.isFinite(e)?Math.trunc(e):r;return Math.min(n,Math.max(t,s))}function yn(e){return(e??"").trim()}var R={files_limit:{min:1,max:200,default:16},symbols_limit:{min:1,max:200,default:16},search_limit:{min:1,max:100,default:8},lookup_files_limit:{min:1,max:200,default:6},lookup_symbols_limit:{min:1,max:200,default:10},lookup_search_limit:{min:1,max:100,default:6},chunk_content_max_chars:{min:40,max:2e4,default:240},web_search_limit:{min:1,max:25,default:8},web_search_timeout_ms:{min:100,max:2e4,default:5e3}};function He(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:{value:e}}function bn(e){return typeof e=="string"?e:void 0}function yt(e){let t=He(e);if(He(t.meta).ok===!1){let r=He(t.error),s=bn(r.message);return s?.trim()?s:"Tool execution failed"}if(t.ok===!1){let r=He(t.error),s=bn(r.message);return s?.trim()?s:"Tool execution failed"}return null}function Ms(e){return z(e,R.chunk_content_max_chars.min,R.chunk_content_max_chars.max,R.chunk_content_max_chars.default)}function Se(e){if(!(typeof e!="number"||!Number.isFinite(e)||e<=0))return Ms(e)}function je(e){return z(e,R.web_search_limit.min,R.web_search_limit.max,R.web_search_limit.default)}function Ve(e){return z(e,R.web_search_timeout_ms.min,R.web_search_timeout_ms.max,R.web_search_timeout_ms.default)}function kt(e){return z(e,R.files_limit.min,R.files_limit.max,R.files_limit.default)}function wt(e){return z(e,R.symbols_limit.min,R.symbols_limit.max,R.symbols_limit.default)}function xt(e){return z(e,R.search_limit.min,R.search_limit.max,R.search_limit.default)}function kn(e){if(!(typeof e!="number"||!Number.isFinite(e)))return z(e,R.lookup_files_limit.min,R.lookup_files_limit.max,R.lookup_files_limit.default)}function wn(e){if(!(typeof e!="number"||!Number.isFinite(e)))return z(e,R.lookup_symbols_limit.min,R.lookup_symbols_limit.max,R.lookup_symbols_limit.default)}function xn(e){if(!(typeof e!="number"||!Number.isFinite(e)))return z(e,R.lookup_search_limit.min,R.lookup_search_limit.max,R.lookup_search_limit.default)}function Y(e=typeof Bun>"u"?void 0:Bun){return e&&typeof e.nanoseconds=="function"?e.nanoseconds()/1e6:Date.now()}function Rn(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"').replace(/'/g,"'").replace(/ /g," ")}function Pn(e){return e.replace(/<[^>]+>/g," ")}function St(e){return e.replace(/\r/g,"").replace(/\t/g," ").replace(/\n{3,}/g,`
|
|
5
5
|
|
|
6
|
-
`).replace(/[ ]{2,}/g," ").trim()}var
|
|
7
|
-
`).map(i=>i.trim()).filter(i=>!
|
|
8
|
-
`,"utf-8")}function
|
|
6
|
+
`).replace(/[ ]{2,}/g," ").trim()}var Ds=new Fs({maxConsecutiveNewlines:3});function Us(e){try{return St(Ds.translate(e))}catch{return St(Rn(Pn(e)))}}function Ws(e){let t=Rn(Pn(e));return St(t)}function $s(e){return e==="html"?"text/html, application/xhtml+xml;q=0.9, text/plain;q=0.5, */*;q=0.1":e==="text"?"text/plain, text/markdown;q=0.9, text/html;q=0.7, */*;q=0.1":"text/markdown, text/plain;q=0.9, text/html;q=0.8, application/xhtml+xml;q=0.7, */*;q=0.1"}function zs(e){return(e.headers.get("content-type")??"").toLowerCase()}function Gs(e){if(!e)return null;let t=Number(e);return!Number.isFinite(t)||t<0?null:Math.floor(t)}function Sn(e){return e.includes("text/html")||e.includes("application/xhtml+xml")}function qs(e){return e.includes("text/markdown")||e.includes("text/x-markdown")||e.includes("markdown")}function Bs(e,t){if(Buffer.byteLength(e,"utf-8")<=t)return{value:e,truncated:!1};let r=0,s=e.length;for(;r<s;){let i=Math.floor((r+s+1)/2),o=e.slice(0,i);Buffer.byteLength(o,"utf-8")<=t?r=i:s=i-1}return{value:e.slice(0,r),truncated:!0}}function Hs(e){try{let t=new URL(e);return t.protocol!=="https:"&&t.protocol!=="http:"?null:t}catch{return null}}function Tn(e){let t=e.split(".").map(s=>Number(s));if(t.length!==4||t.some(s=>!Number.isInteger(s)||s<0||s>255))return!1;let[n,r]=t;return n===10||n===127||n===0||n===169&&r===254||n===172&&r>=16&&r<=31||n===192&&r===168||n===100&&r>=64&&r<=127||n>=224}function js(e){let t=e.toLowerCase();if(t==="::"||t==="::1"||t==="0:0:0:0:0:0:0:1")return!0;if(t.startsWith("::ffff:")){let n=t.slice(7);return Tn(n)}return!!(/^fc[0-9a-f]{2}:/.test(t)||/^fd[0-9a-f]{2}:/.test(t)||/^fe[89ab][0-9a-f]:/.test(t))}function Vs(e){let t=e.trim().toLowerCase().replace(/\.$/,"");if(!t||t==="localhost"||t.endsWith(".localhost")||t==="metadata.google.internal"||t==="metadata")return!0;let n=Os(t);return n===4?Tn(t):n===6?js(t):!1}function vn(e,t){return t?null:Vs(e.hostname)?`Refusing private or local host: ${e.hostname}`:null}function Qs(e){return e===301||e===302||e===303||e===307||e===308}async function Cn(e){let t=Y(),n=Hs(e.url.trim()),r=e.format??"markdown",s=z(e.timeout_ms,100,2e4,8e3),i=z(e.max_bytes,100,2e6,8e4),o=e.include_error_content??!1,a=e.allow_private_network??!1;if(!n)return{meta:{ok:!1,duration_ms:Number((Y()-t).toFixed(4)),truncated:!1},data:null,error:{code:"invalid-url",message:"URL must be a valid http(s) URL"}};let l=vn(n,a);if(l)return{meta:{ok:!1,duration_ms:Number((Y()-t).toFixed(4)),truncated:!1},data:null,error:{code:"blocked-host",message:l}};let u=e.fetch_impl??fetch,c=new AbortController,m=setTimeout(()=>{c.abort("timeout")},s);try{let f=n,p=null;for(let C=0;C<=5&&(p=await u(f.toString(),{method:"GET",headers:{accept:$s(r),"user-agent":"veil-fetch-url/1.0"},redirect:"manual",signal:c.signal}),!!Qs(p.status));C+=1){let M=p.headers.get("location");if(!M)break;let E=new URL(M,f),D=vn(E,a);if(D)return{meta:{ok:!1,duration_ms:Number((Y()-t).toFixed(4)),truncated:!1},data:null,error:{code:"blocked-host",message:D}};if(f=E,C===5)return{meta:{ok:!1,duration_ms:Number((Y()-t).toFixed(4)),truncated:!1},data:null,error:{code:"fetch-failed",message:"Too many redirects"}}}if(!p)return{meta:{ok:!1,duration_ms:Number((Y()-t).toFixed(4)),truncated:!1},data:null,error:{code:"fetch-failed",message:"No response from fetch"}};let b=zs(p),x=p.status,_=Gs(p.headers.get("x-markdown-tokens")),k=p.headers.get("content-signal"),w=p.headers.get("vary"),h=await p.text(),y=h;r==="markdown"?Sn(b)&&(y=Us(h)):r==="text"&&(Sn(b)||qs(b))&&(y=Ws(h));let N=Bs(y,i);if(!p.ok){let C=o?N.value:"";return{meta:{ok:!1,duration_ms:Number((Y()-t).toFixed(4)),truncated:o?N.truncated:!1},data:{url:n.toString(),final_url:p.url||f.toString(),status:x,content_type:b,format:r,markdown_tokens:_,content_signal:k,vary:w,content:C},error:{code:"fetch-failed",message:`HTTP ${String(x)}`}}}return{meta:{ok:!0,duration_ms:Number((Y()-t).toFixed(4)),truncated:N.truncated},data:{url:n.toString(),final_url:p.url||f.toString(),status:x,content_type:b,format:r,markdown_tokens:_,content_signal:k,vary:w,content:N.value},error:null}}catch(f){let p=qe(f),b=Be(c.signal.aborted,p);return{meta:{ok:!1,duration_ms:Number((Y()-t).toFixed(4)),truncated:!1},data:null,error:{code:b?"timeout":"internal-error",message:p}}}finally{clearTimeout(m)}}import{encode as Ks}from"@toon-format/toon";function vt(e){try{return Ks(e)}catch{return typeof e=="string"?e:String(e)}}import{spawn as Fo}from"node:child_process";import{existsSync as Wr,mkdirSync as Do,readFileSync as Uo,realpathSync as Oe,writeFileSync as Wo}from"node:fs";import{basename as $r,dirname as $o,isAbsolute as Me,join as rt,normalize as zo,relative as st,resolve as _e}from"node:path";import{spawn as Ki}from"node:child_process";import{createHash as Xi}from"node:crypto";import{existsSync as Rr}from"node:fs";import{mkdir as Ji,readdir as Ol,readFile as Cr,stat as Yi,writeFile as qt}from"node:fs/promises";import{join as Ee,relative as Dl}from"node:path";var fe=class{heap=[];k;nextSeq=0;constructor(t){this.k=t}parent(t){return Math.floor((t-1)/2)}left(t){return 2*t+1}right(t){return 2*t+2}swap(t,n){let r=this.heap[t];this.heap[t]=this.heap[n],this.heap[n]=r}heapifyUp(t){for(;t>0;){let n=this.parent(t);if(this.compare(this.heap[t],this.heap[n])>=0)break;this.swap(t,n),t=n}}heapifyDown(t){for(;;){let n=t,r=this.left(t),s=this.right(t);if(r<this.heap.length&&this.compare(this.heap[r],this.heap[n])<0&&(n=r),s<this.heap.length&&this.compare(this.heap[s],this.heap[n])<0&&(n=s),n===t)break;this.swap(t,n),t=n}}compare(t,n){return t.score!==n.score?t.score-n.score:n.seq-t.seq}insert(t,n){if(this.k<=0)return;let r={item:t,score:n,seq:this.nextSeq++};this.heap.length<this.k?(this.heap.push(r),this.heapifyUp(this.heap.length-1)):this.compare(r,this.heap[0])>0&&(this.heap[0]=r,this.heapifyDown(0))}toSortedArray(){return[...this.heap].sort((n,r)=>n.score!==r.score?r.score-n.score:n.seq-r.seq).map(n=>n.item)}};function In(e,t){let n=e.get(t);if(n!==void 0)return e.delete(t),e.set(t,n),n}function En(e,t,n,r){for(e.has(t)&&e.delete(t),e.set(t,n);e.size>r;){let s=e.keys().next().value;if(s===void 0)break;e.delete(s)}}import{spawn as Xs}from"node:child_process";import{readdir as Js,readFile as Ys}from"node:fs/promises";import{join as Ln,relative as Zs}from"node:path";import ei from"ignore";async function ti(e,t,n=5e3){return await new Promise(r=>{let s=!1,i=!1,o=null,a=Xs("git",["-C",e,...t],{stdio:["ignore","pipe","pipe"]}),l="",u=m=>{s||(s=!0,r(m))};a.stdout.setEncoding("utf-8"),a.stdout.on("data",m=>{l+=m});let c=setTimeout(()=>{i=!0,a.kill("SIGTERM"),o=setTimeout(()=>{a.kill("SIGKILL")},150)},n);a.on("error",()=>{clearTimeout(c),o&&clearTimeout(o),u({ok:!1,timedOut:i})}),a.on("close",m=>{if(clearTimeout(c),o&&clearTimeout(o),i||m!==0){u({ok:!1,timedOut:i});return}u({ok:!0,stdout:l.trim()})})})}function Nn(e){return[...new Set(e.filter(Boolean))].sort((t,n)=>t.localeCompare(n))}function An(e,t){return!!(!e||e.startsWith(".git/")||e.startsWith("node_modules/")||t&&(e===t||e.startsWith(`${t}/`)))}async function ni(e,t){let n=[],r=xe(e,t),s=ei();s.add([".git","node_modules"]),r&&s.add([r]);try{let o=await Ys(Ln(e,".gitignore"),"utf-8");s.add(o)}catch{}async function i(o){let a=await Js(o,{withFileTypes:!0});for(let l of a){let u=Ln(o,l.name),c=Zs(e,u).replace(/\\/g,"/");if(c&&!An(c,r)){if(l.isDirectory()){if(s.ignores(`${c}/`))continue;await i(u);continue}l.isFile()&&(s.ignores(c)||n.push(c))}}}return await i(e),Nn(n)}async function Mn(e,t){let n=xe(e,t),r=await ti(e,["ls-files","--cached","--others","--exclude-standard"]);if(r.ok){let s=r.stdout.split(`
|
|
7
|
+
`).map(i=>i.trim()).filter(i=>!An(i,n));return Nn(s)}return ni(e,t)}import{existsSync as On}from"node:fs";import{mkdir as Fn,readFile as ri,writeFile as si}from"node:fs/promises";import{spawn as ii}from"node:child_process";import{createRequire as Dn}from"node:module";import{join as Rt}from"node:path";var oi="grammars.json",ai="grammars-runtime",li=Dn(import.meta.url),ui=12e4,Qe=2e6,Ke=new Map,ee=[{id:"javascript",aliases:["js","javascript"],label:"JavaScript",default_enabled:!0,runtime_package:"tree-sitter-javascript",core_default:!0},{id:"typescript",aliases:["ts","typescript"],label:"TypeScript",default_enabled:!0,runtime_package:"tree-sitter-typescript",core_default:!0},{id:"python",aliases:["py","python"],label:"Python",default_enabled:!1,runtime_package:"tree-sitter-python",core_default:!1},{id:"json",aliases:["json"],label:"JSON",default_enabled:!0,runtime_package:null,core_default:!0},{id:"bash",aliases:["bash","sh","shell"],label:"Bash",default_enabled:!1,runtime_package:"tree-sitter-bash",core_default:!1},{id:"go",aliases:["go","golang"],label:"Go",default_enabled:!1,runtime_package:"tree-sitter-go",core_default:!1},{id:"rust",aliases:["rust","rs"],label:"Rust",default_enabled:!1,runtime_package:"tree-sitter-rust",core_default:!1},{id:"nix",aliases:["nix"],label:"Nix",default_enabled:!1,runtime_package:"tree-sitter-nix",core_default:!1},{id:"elixir",aliases:["elixir","ex"],label:"Elixir",default_enabled:!1,runtime_package:"tree-sitter-elixir",core_default:!1},{id:"zig",aliases:["zig"],label:"Zig",default_enabled:!1,runtime_package:"tree-sitter-zig",core_default:!1},{id:"c",aliases:["c"],label:"C",default_enabled:!1,runtime_package:"tree-sitter-c",core_default:!1},{id:"cpp",aliases:["cpp","c++","cplusplus"],label:"C++",default_enabled:!1,runtime_package:"tree-sitter-cpp",core_default:!1},{id:"c-sharp",aliases:["c-sharp","c#","csharp","cs"],label:"C#",default_enabled:!1,runtime_package:"tree-sitter-c-sharp",core_default:!1},{id:"markdown",aliases:["markdown","md"],label:"Markdown",default_enabled:!1,runtime_package:"tree-sitter-markdown",core_default:!1},{id:"java",aliases:["java"],label:"Java",default_enabled:!1,runtime_package:"tree-sitter-java",core_default:!1},{id:"php",aliases:["php"],label:"PHP",default_enabled:!1,runtime_package:"tree-sitter-php",core_default:!1},{id:"ruby",aliases:["ruby","rb"],label:"Ruby",default_enabled:!1,runtime_package:"tree-sitter-ruby",core_default:!1},{id:"lua",aliases:["lua"],label:"Lua",default_enabled:!1,runtime_package:"tree-sitter-lua",core_default:!1},{id:"kotlin",aliases:["kotlin","kt"],label:"Kotlin",default_enabled:!1,runtime_package:"tree-sitter-kotlin",core_default:!1},{id:"swift",aliases:["swift"],label:"Swift",default_enabled:!1,runtime_package:"tree-sitter-swift",core_default:!1}],Un=[{id:"javascript",parser_id:"javascript",runtime_package:"tree-sitter-javascript",extensions:[".js",".jsx",".mjs",".cjs"],installable:!1,core_default:!0},{id:"typescript",parser_id:"typescript",runtime_package:"tree-sitter-typescript",extensions:[".ts",".tsx"],installable:!1,core_default:!0},{id:"json",parser_id:"json",runtime_package:null,extensions:[".json"],installable:!1,core_default:!0},{id:"python",parser_id:"python",runtime_package:"tree-sitter-python",extensions:[".py"],installable:!0,core_default:!1},{id:"shell",parser_id:"bash",runtime_package:"tree-sitter-bash",extensions:[".sh"],installable:!0,core_default:!1},{id:"go",parser_id:"go",runtime_package:"tree-sitter-go",extensions:[".go"],installable:!0,core_default:!1},{id:"rust",parser_id:"rust",runtime_package:"tree-sitter-rust",extensions:[".rs"],installable:!0,core_default:!1},{id:"nix",parser_id:"nix",runtime_package:"tree-sitter-nix",extensions:[".nix"],installable:!0,core_default:!1},{id:"elixir",parser_id:"elixir",runtime_package:"tree-sitter-elixir",extensions:[".ex",".exs"],installable:!0,core_default:!1},{id:"zig",parser_id:"zig",runtime_package:"tree-sitter-zig",extensions:[".zig"],installable:!0,core_default:!1},{id:"c",parser_id:"c",runtime_package:"tree-sitter-c",extensions:[".c",".h"],installable:!0,core_default:!1},{id:"cpp",parser_id:"cpp",runtime_package:"tree-sitter-cpp",extensions:[".cc",".cpp",".cxx",".hpp",".hh",".hxx"],installable:!0,core_default:!1},{id:"c-sharp",parser_id:"c-sharp",runtime_package:"tree-sitter-c-sharp",extensions:[".cs"],installable:!0,core_default:!1},{id:"markdown",parser_id:"markdown",runtime_package:"tree-sitter-markdown",extensions:[".md",".markdown",".mdown"],installable:!0,core_default:!1},{id:"java",parser_id:"java",runtime_package:"tree-sitter-java",extensions:[".java"],installable:!0,core_default:!1},{id:"php",parser_id:"php",runtime_package:"tree-sitter-php",extensions:[".php",".phtml"],installable:!0,core_default:!1},{id:"ruby",parser_id:"ruby",runtime_package:"tree-sitter-ruby",extensions:[".rb"],installable:!0,core_default:!1},{id:"lua",parser_id:"lua",runtime_package:"tree-sitter-lua",extensions:[".lua"],installable:!0,core_default:!1},{id:"kotlin",parser_id:"kotlin",runtime_package:"tree-sitter-kotlin",extensions:[".kt",".kts"],installable:!0,core_default:!1},{id:"swift",parser_id:"swift",runtime_package:"tree-sitter-swift",extensions:[".swift"],installable:!0,core_default:!1}],ci=new Map(Un.map(e=>[e.id,e])),di=new Map(ee.filter(e=>e.runtime_package).map(e=>[e.id,e.runtime_package])),mi=new Set(ee.map(e=>e.id)),fi=new Map([["c#","c-sharp"],["csharp","c-sharp"],["c sharp","c-sharp"],["md","markdown"]]);function Ct(e,t){return`${re(e,t)}/${oi}`}async function ve(e,t,n){let r=Ct(e,t),s=Ke.get(r)??Promise.resolve(),i,o=new Promise(l=>{i=l}),a=s.then(()=>o);Ke.set(r,a),await s;try{return await n()}finally{let l=i;l&&l(),Ke.get(r)===a&&Ke.delete(r)}}function Pt(){let e=ee.filter(t=>t.default_enabled).map(t=>t.id);return{version:1,enabled:e,installed:e,runtime_install_failed:[]}}function pi(e){let t=Pt();if(!e||typeof e!="object")return t;let n=e,r=l=>{if(!Array.isArray(l))return[];let u=[];for(let c of l){if(typeof c!="string")continue;let m=ce(c);m&&(u.includes(m)||u.push(m))}return u},s=r(n.enabled),i=r(n.installed),o=r(n.runtime_install_failed);return{version:(n.version===1,1),enabled:s.length>0?s:t.enabled,installed:i.length>0?i:t.installed,runtime_install_failed:o}}function hi(e,t){if(t.length===0)return e;let n=new Set(t);return{...e,runtime_install_failed:e.runtime_install_failed.filter(r=>!n.has(r))}}function gi(e,t){return t.length===0?e:{...e,runtime_install_failed:[...new Set([...e.runtime_install_failed,...t])]}}function Re(e){return{enabled:e.enabled,installed:e.installed}}function Tt(e,t){let n=t.map(i=>ce(i)).filter(i=>!!i),r=[...new Set([...e.installed,...n])],s=[...new Set([...e.enabled,...n])];return hi({version:1,enabled:s,installed:r,runtime_install_failed:e.runtime_install_failed},n)}function _i(e,t){let n=new Set(t.map(i=>ce(i)).filter(Boolean)),r=e.enabled.filter(i=>!n.has(i)),s=e.installed.filter(i=>!n.has(i));return{version:1,enabled:r,installed:s,runtime_install_failed:e.runtime_install_failed.filter(i=>!n.has(i))}}async function Z(e,t){let n=Ct(e,t);if(!On(n))return Pt();try{let r=await ri(n,"utf-8");return pi(JSON.parse(r))}catch{return Pt()}}async function Pe(e,t,n){let r=re(e,n);await Fn(r,{recursive:!0}),await si(Ct(e,n),`${JSON.stringify(t,null,2)}
|
|
8
|
+
`,"utf-8")}function ce(e){let t=e.trim().toLowerCase();if(!t)return null;let n=fi.get(t);if(n)return n;for(let r of ee)if(r.id===t||r.aliases.includes(t))return r.id;if(t.startsWith("tree-sitter-")){let r=t.slice(12);return/^[a-z0-9][a-z0-9-]*$/.test(r)?r:null}return/^[a-z0-9][a-z0-9-]*$/.test(t)?t:null}function Xe(e){let t=e.split(",").map(n=>ce(n)).filter(n=>!!n);return[...new Set(t)]}async function It(e,t){let n=await Z(e,t);return{enabled:n.enabled,installed:n.installed}}async function Et(e,t){return(await Z(e,t)).runtime_install_failed}async function Wn(e,t,n){return ve(e,n,async()=>{let r=await Z(e,n),s=Tt(r,t);return await Pe(e,s,n),Re(s)})}async function $n(e,t,n){return ve(e,n,async()=>{let r=await Z(e,n),s=_i(r,t);return await Pe(e,s,n),Re(s)})}async function zn(e,t,n){let r=await Z(e,n),s=t==="all"?r.installed:r.installed.filter(i=>t.includes(i));return{enabled:r.enabled,installed:r.installed,updated:s}}async function Gn(e,t){let n=await Z(e,t),r=new Set(n.enabled),s=new Set(n.installed);return ee.map(i=>({...i,enabled:r.has(i.id),installed:s.has(i.id)}))}function qn(e){let t=ce(e);return t?mi.has(t)?di.get(t)??null:`tree-sitter-${t}`:null}function pe(e,t){return Rt(re(e,t),ai)}function Lt(e,t=new Set){let n=ce(e);if(!n)return!1;if(t.has(n))return!0;let r=ee.find(s=>s.id===n);return r?r.runtime_package===null:!0}function bi(e,t){try{return Dn(Rt(t,"__veil_runtime_loader__.cjs")).resolve(e),!0}catch{return On(Rt(t,"node_modules",e,"package.json"))}}function Bn(e,t,n,r={}){let s=qn(e);if(!s)return!0;if(t){let i=pe(t,n);if(bi(s,i))return!0}if(r.allow_global_fallback!==!0)return!1;try{return li.resolve(s),!0}catch{return!1}}function Hn(e){let t=e.trim().toLowerCase();return ci.get(t)??null}function yi(e){let t=Un.find(n=>n.parser_id===e);return t?t.installable?t.runtime_package:null:qn(e)}async function ki(e,t,n,r){return await new Promise(s=>{let i=!1,o=!1,a=ii(e,t,{cwd:n,stdio:["ignore","pipe","pipe"]}),l="",u="",c=0,m=0,f=null,p=(_,k,w)=>{if(w>=Qe)return{next:k,bytes:w};let h=Buffer.byteLength(_,"utf-8"),y=w+h;if(y<=Qe)return{next:k+_,bytes:y};let N=Qe-w,C=Buffer.from(_,"utf-8").subarray(0,N).toString("utf-8");return{next:k+C,bytes:Qe}},b=_=>{i||(i=!0,s(_))};a.stdout.setEncoding("utf-8"),a.stderr.setEncoding("utf-8"),a.stdout.on("data",_=>{let k=p(_,l,c);l=k.next,c=k.bytes}),a.stderr.on("data",_=>{let k=p(_,u,m);u=k.next,m=k.bytes});let x=setTimeout(()=>{o=!0,a.kill("SIGTERM"),f=setTimeout(()=>{a.kill("SIGKILL")},150)},r);a.on("error",_=>{clearTimeout(x),f&&clearTimeout(f),b({ok:!1,stdout:l,stderr:u,timed_out:o,exit_code:null,error:_.message})}),a.on("close",_=>{clearTimeout(x),f&&clearTimeout(f),b({ok:_===0&&!o,stdout:l,stderr:u,timed_out:o,exit_code:_})})})}function Nt(e,t={}){let n=[...new Set(e.map(i=>ce(i)).filter(Boolean))],r=n.map(i=>yi(i)).filter(i=>!!i),s=t.install_root?.trim();return{parser_ids:n,packages:r,command:"npm",args:["install","--no-save","--no-package-lock","--ignore-scripts","--no-fund","--no-audit",...s?["--prefix",s]:[],...r]}}async function jn(e,t,n,r=ui,s=ki){let i=pe(e,n);await Fn(i,{recursive:!0});let o=Nt(t,{install_root:i});if(o.packages.length===0){let u=await ve(e,n,async()=>{let c=await Z(e,n),m=Tt(c,o.parser_ids);return await Pe(e,m,n),Re(m)});return{ok:!0,parser_ids:o.parser_ids,packages:[],command:o.command,args:o.args,timed_out:!1,exit_code:0,stdout:"No runtime packages required",stderr:"",install_root:i,reuse_scope:"workspace-state-root",enabled:u.enabled,installed:u.installed}}let a=await s(o.command,o.args,e,r);if(!a.ok){let u=await ve(e,n,async()=>{let c=await Z(e,n),m=gi(c,o.parser_ids);return await Pe(e,m,n),Re(m)});return{ok:!1,parser_ids:o.parser_ids,packages:o.packages,command:o.command,args:o.args,timed_out:a.timed_out,exit_code:a.exit_code,stdout:a.stdout,stderr:a.stderr,error:a.error,install_root:i,reuse_scope:"workspace-state-root",enabled:u.enabled,installed:u.installed}}let l=await ve(e,n,async()=>{let u=await Z(e,n),c=Tt(u,o.parser_ids);return await Pe(e,c,n),Re(c)});return{ok:!0,parser_ids:o.parser_ids,packages:o.packages,command:o.command,args:o.args,timed_out:a.timed_out,exit_code:a.exit_code,stdout:a.stdout,stderr:a.stderr,install_root:i,reuse_scope:"workspace-state-root",enabled:l.enabled,installed:l.installed}}import{existsSync as q}from"node:fs";import{mkdir as wi,readFile as xi,rename as Si,rm as vi,stat as Ri,writeFile as Pi}from"node:fs/promises";import{createRequire as Ti}from"node:module";var se="index-db-corrupt",Te=class extends Error{code=se;reason=se;db_path;constructor(t){super(se),this.name="IndexDbCorruptError",this.db_path=t}};function Ci(e){if(e instanceof Te)return!0;if(!e||typeof e!="object")return!1;let t=e,n=t.code;if(typeof n=="string"&&n===se)return!0;let r=t.reason;return typeof r=="string"&&r===se}var Ii=Ti(import.meta.url),Ei="index.sqlite",Li=(async()=>{let e=Ii.resolve("sql.js/dist/sql-wasm.wasm"),n=(await import("sql.js")).default;return n({locateFile:()=>e})})(),At=new Map;function B(e,t){return`${j(e,t)}/${Ei}`}async function Qn(e){try{return(await Ri(e)).mtimeMs}catch{return null}}function G(e){if(e.length===0)return[];let t=e[0],n=[];for(let r of t.values){let s={};for(let i=0;i<t.columns.length;i++){let o=t.columns[i];o&&(s[o]=r[i])}n.push(s)}return n}function Vn(e){e.run(`
|
|
9
9
|
CREATE TABLE IF NOT EXISTS files (
|
|
10
10
|
path TEXT PRIMARY KEY,
|
|
11
11
|
language TEXT NOT NULL,
|
|
@@ -34,21 +34,21 @@ import{resolve as os}from"node:path";import{fileURLToPath as Sa}from"node:url";i
|
|
|
34
34
|
CREATE INDEX IF NOT EXISTS idx_symbols_name ON symbols(name);
|
|
35
35
|
CREATE INDEX IF NOT EXISTS idx_symbols_path ON symbols(path);
|
|
36
36
|
CREATE INDEX IF NOT EXISTS idx_chunks_path ON chunks(path);
|
|
37
|
-
`)}async function
|
|
38
|
-
${e.content??""}`),r=
|
|
39
|
-
`)){let a=o.trim();a&&n.add(a)}};return t&&s(await
|
|
40
|
-
`),r=[],s=0;for(;s<n.length;){let i=Math.min(n.length,s
|
|
41
|
-
`)}),i===n.length)break;s=Math.max(i-
|
|
42
|
-
`),s=[],i=[];t==="nix"&&i.push(/^\s*([A-Za-z0-9_-]+)\s*=\s*(?:\{|\()/);for(let o=0;o<r.length;o++){let a=r[o]??"";for(let l of i){let u=a.match(l);if(!u?.[1])continue;let
|
|
43
|
-
`),"utf-8");let i=new Set(["README.md","AGENTS.md","flake.nix","package.json","tsconfig.json","Cargo.toml","go.mod"]),o=["# Entrypoints","","High-signal files for navigation:",""];for(let a of t.filter(l=>i.has(l.path.split("/").at(-1)??"")||l.path.includes("/commands/")).map(l=>l.path).slice(0,200))o.push(`- ${a}`);o.push(""),await
|
|
44
|
-
`),"utf-8")}async function
|
|
45
|
-
`,"utf-8"),b){let k=await
|
|
46
|
-
${
|
|
47
|
-
`)){if(s.length<4)continue;let i=s[0],o=s[1],a=s.slice(3).trim();if(a){if(i==="?"&&o==="?"){r.add(a);continue}i!==" "&&t.add(a),o!==" "&&n.add(a)}}return{staged:[...t],unstaged:[...n],untracked:[...r]}}function
|
|
48
|
-
`).map(t=>t.trim()).filter(Boolean).map(t=>{let[n,r,s,i,o]=t.split(" ");return{commit:n,author:r,date:s,subject:i,parents:(typeof o=="string"?o:"").split(" ").filter(Boolean)}})}function
|
|
49
|
-
`,"utf-8");else{if(!
|
|
37
|
+
`)}async function Kn(e,t){let n=e.export(),r=t.slice(0,t.lastIndexOf("/")),s=`${t}.tmp-${String(process.pid)}-${String(Date.now())}-${Math.random().toString(16).slice(2)}`;await wi(r,{recursive:!0});try{await Pi(s,Buffer.from(n)),await Si(s,t)}catch(o){try{await vi(s,{force:!0})}catch{}throw o}let i=await Qn(t);At.set(t,{db:e,mtimeMs:i})}function Xn(e){try{e.run("ROLLBACK")}catch{}}async function te(e){return Yn(e,!1)}async function Jn(e){return Yn(e,!0)}async function Yn(e,t){let n=await Qn(e),r=At.get(e);if(r?.mtimeMs===n)return r.db;let s=await Li,i;if(q(e))try{i=new s.Database(new Uint8Array(await xi(e)))}catch{if(!t)throw new Te(e);i=new s.Database}else i=new s.Database;try{Vn(i)}catch{if(!t&&q(e))throw new Te(e);i=new s.Database,Vn(i)}return At.set(e,{db:i,mtimeMs:n}),i}function Mt(e,t){let n=[t,...e].map(r=>r.trim().toLowerCase()).filter(r=>r.length>=2).slice(0,20);return[...new Set(n)]}function Zn(e){return e.replaceAll("\\","\\\\").replaceAll("%","\\%").replaceAll("_","\\_")}function Ot(e,t){let n=[],r=[];for(let s of t){let i=`%${Zn(s)}%`;for(let o of e)n.push(`${o} LIKE ? ESCAPE '\\'`),r.push(i)}return n.length===0?{clause:"1=1",params:[]}:{clause:`(${n.join(" OR ")})`,params:r}}function Ft(e,t){return q(B(e,t))}async function er(e,t){let n=B(e,t);if(!q(n))return[];let r=await te(n);return G(r.exec("SELECT path FROM files ORDER BY path ASC")).map(i=>i.path)}async function Je(e,t,n){let r=B(e,n),s=await Jn(r);s.run("BEGIN TRANSACTION");try{s.run("DELETE FROM files"),s.run("DELETE FROM symbols"),s.run("DELETE FROM chunks");for(let i of t.files)s.run("INSERT INTO files(path, language, size, hash, top_level) VALUES (?, ?, ?, ?, ?)",[i.path,i.language,i.size,i.hash,i.top_level]);for(let i of t.symbols)s.run("INSERT INTO symbols(path, line, kind, name, signature_hint) VALUES (?, ?, ?, ?, ?)",[i.path,i.line,i.kind,i.name,i.signature_hint??null]);for(let i of t.chunks)s.run("INSERT INTO chunks(id, path, start_line, end_line, content) VALUES (?, ?, ?, ?, ?)",[i.id,i.path,i.start_line,i.end_line,i.content]);s.run("COMMIT")}catch(i){throw Xn(s),i}await Kn(s,r)}async function tr(e,t,n,r){let s=B(e,r),i=await Jn(s);i.run("BEGIN TRANSACTION");try{for(let o of t)i.run("DELETE FROM files WHERE path = ?",[o]),i.run("DELETE FROM symbols WHERE path = ?",[o]),i.run("DELETE FROM chunks WHERE path = ?",[o]);for(let o of n.files)i.run("INSERT INTO files(path, language, size, hash, top_level) VALUES (?, ?, ?, ?, ?)",[o.path,o.language,o.size,o.hash,o.top_level]);for(let o of n.symbols)i.run("INSERT INTO symbols(path, line, kind, name, signature_hint) VALUES (?, ?, ?, ?, ?)",[o.path,o.line,o.kind,o.name,o.signature_hint??null]);for(let o of n.chunks)i.run("INSERT INTO chunks(id, path, start_line, end_line, content) VALUES (?, ?, ?, ?, ?)",[o.id,o.path,o.start_line,o.end_line,o.content]);i.run("COMMIT")}catch(o){throw Xn(i),o}await Kn(i,s)}async function nr(e,t){let n=B(e,t);if(!q(n))return{files:[],symbols:[],chunks:[]};let r=await te(n),s=G(r.exec("SELECT path, language, size, hash, top_level FROM files ORDER BY path ASC")),i=G(r.exec("SELECT path, line, kind, name, signature_hint FROM symbols ORDER BY path ASC, line ASC, name ASC")),o=G(r.exec("SELECT id, path, start_line, end_line, content FROM chunks ORDER BY path ASC, start_line ASC"));return{files:s,symbols:i,chunks:o}}async function rr(e,t,n){let r=B(e,n);if(!q(r))return[];let s=await te(r),i=Math.max(50,Math.min(2e3,t.limit*16)),o=Mt(t.tokens,t.normalized),a=Ot(["path","top_level"],o);return G(s.exec(`SELECT path, language, size, hash, top_level FROM files WHERE ${a.clause} ORDER BY path ASC LIMIT ${String(i)}`,a.params))}async function sr(e,t,n){let r=B(e,n);if(!q(r))return[];let s=await te(r),i=Math.max(100,Math.min(4e3,t.limit*24)),o=Mt(t.tokens,t.normalized),a=Ot(["name","path","kind"],o);return G(s.exec(`SELECT path, line, kind, name, signature_hint FROM symbols WHERE ${a.clause} ORDER BY path ASC, line ASC, name ASC LIMIT ${String(i)}`,a.params))}async function ir(e,t,n){let r=B(e,n);if(!q(r))return[];let s=await te(r),i=Math.max(120,Math.min(5e3,t.limit*30)),o=Mt(t.tokens,t.normalized),a=Ot(["path","content"],o),l=[a.clause],u=[...a.params];if(t.pathPrefix&&t.pathPrefix.trim()!==""){let f=Zn(t.pathPrefix.trim().toLowerCase());l.push("path LIKE ? ESCAPE '\\'"),u.push(`${f}%`)}let c=l.join(" AND ");return G(s.exec(`SELECT id, path, start_line, end_line, content FROM chunks WHERE ${c} ORDER BY path ASC, start_line ASC LIMIT ${String(i)}`,u))}async function or(e,t,n){let r=B(e,n);if(!q(r))return null;let s=await te(r),i=G(s.exec("SELECT id, path, start_line, end_line, content FROM chunks WHERE id = ? LIMIT 1",[t]));return i.length>0?i[0]:null}async function ar(e,t){let n=B(e,t);if(!q(n))return!1;try{return await te(n),!1}catch(r){return Ci(r)}}async function lr(e,t){let n=B(e,t);if(!q(n))return{file_count:0,symbol_count:0,chunk_count:0};let r=await te(n),s=G(r.exec("SELECT COUNT(*) AS c FROM files")),i=G(r.exec("SELECT COUNT(*) AS c FROM symbols")),o=G(r.exec("SELECT COUNT(*) AS c FROM chunks"));return{file_count:s.length>0?s[0].c:0,symbol_count:i.length>0?i[0].c:0,chunk_count:o.length>0?o[0].c:0}}async function ur(e,t){let n=B(e,t);if(!q(n))return[];let r=await te(n);return G(r.exec("SELECT language, COUNT(*) AS count FROM files GROUP BY language ORDER BY count DESC, language ASC"))}function cr(e,t,n){return{schema_version:"2",workspace:e,git_head:t,generated_at:new Date().toISOString(),stale_after_hours:24,file_count:n.file_count,symbol_count:n.symbol_count,chunk_count:n.chunk_count}}function Ce(e){return e.toLowerCase()}function Ni(e){return e>=8?"high":e>=4?"medium":"low"}function dr(e,t){let n=Ce(e),r=n.includes(t.normalized)?8:2,s=[];n.includes(t.normalized)&&s.push({label:"exact-path-match",detail:"Path contains the full normalized query"});for(let i of t.tokens)n.includes(i)&&(r+=1.5,s.push({label:"token-path-match",detail:`Path contains token '${i}'`}));return{score:r,reasons:s}}function mr(e,t){let n=Ce(e.name),r=Ce(e.path),s=n.includes(t.normalized)?9:3,i=[];n.includes(t.normalized)&&i.push({label:"exact-symbol-match",detail:"Symbol name contains the full query"});for(let o of t.tokens)n.includes(o)&&(s+=2,i.push({label:"token-symbol-match",detail:`Symbol name contains token '${o}'`})),r.includes(o)&&(s+=.8,i.push({label:"token-path-context",detail:`Symbol path contains token '${o}'`}));return{score:s,reasons:i}}function fr(e,t){let n=Ce(`${e.path}
|
|
38
|
+
${e.content??""}`),r=Ce(e.path),s=n.includes(t.normalized)?7:2,i=[];n.includes(t.normalized)&&i.push({label:"exact-content-match",detail:"Chunk content contains the full query"});for(let o of t.tokens)n.includes(o)&&(s+=1.3,i.push({label:"token-content-match",detail:`Chunk content contains token '${o}'`})),r.includes(o)&&(s+=1,i.push({label:"token-path-match",detail:`Chunk path contains token '${o}'`}));return{score:s,reasons:i}}function Ai(e,t,n){return e.length>0?e:[{label:t,detail:n}]}function Ye(e,t,n){return e.map(r=>{let s=t(r),i=Ai(s.reasons,n.label,n.detail);return{item:r,score:s.score,confidence:Ni(s.score),reasons:i}}).sort((r,s)=>s.score-r.score)}import{copyFileSync as Mi,existsSync as Oi,mkdirSync as Fi,symlinkSync as Di}from"node:fs";import{createRequire as _r}from"node:module";import{dirname as Ui,join as Ze,relative as Wi}from"node:path";var br=_r(import.meta.url),pr=new Map,$i={attempted:!1,ok:!1,reason:"not-bun"};function hr(e){if(!e||typeof e!="object")return!1;let t=e.code;return t==="EACCES"||t==="EPERM"||t==="EROFS"}function zi(e){if(!e.isBun)return{attempted:!1,ok:!1,reason:"not-bun"};try{let t=e.resolvePackage(),n=Ui(t),r=Ze(n,"prebuilds",`${e.platform}-${e.arch}`),s=Ze(r,"tree-sitter.node");if(e.exists(s))return{attempted:!0,ok:!0,reason:"already-present"};let i=Ze(n,"build","Release","tree_sitter_runtime_binding.node");if(!e.exists(i))return{attempted:!0,ok:!1,reason:"missing-candidate"};try{e.mkdir(r)}catch(o){if(hr(o))return{attempted:!0,ok:!1,reason:"readonly"};throw o}try{return e.symlink(e.relativePath(r,i),s),{attempted:!0,ok:!0,reason:"linked"}}catch{try{return e.exists(s)?{attempted:!0,ok:!0,reason:"already-present"}:(e.copy(i,s),{attempted:!0,ok:!0,reason:"copied"})}catch(o){if(hr(o))return{attempted:!0,ok:!1,reason:"readonly"};throw o}}}catch{return{attempted:!0,ok:!1,reason:"resolution-failed"}}}function Gi(){let e=zi({isBun:typeof process.versions.bun=="string",platform:process.platform,arch:process.arch,resolvePackage:()=>br.resolve("tree-sitter/package.json"),exists:Oi,mkdir:t=>Fi(t,{recursive:!0}),symlink:Di,copy:Mi,relativePath:Wi});return $i=e,e}function qi(){let e=ne("tree-sitter");return e||(Gi(),e=ne("tree-sitter"),e)}function ne(e,t=[],n=!0){for(let r of t){let s=pr.get(r);s||(s=_r(Ze(r,"__veil_runtime_loader__.cjs")),pr.set(r,s));try{return s(e)}catch{continue}}if(n)try{return br(e)}catch{return}}function Bi(e=[],t=!0){return ne("tree-sitter-typescript",e,t)?.typescript??null}var yr={javascript:{loader:(e,t)=>ne("tree-sitter-javascript",e,t),parserId:"javascript",symbolKinds:{function_declaration:"function",class_declaration:"class",method_definition:"method"}},typescript:{loader:Bi,parserId:"typescript",symbolKinds:{function_declaration:"function",class_declaration:"class",method_definition:"method",interface_declaration:"interface",type_alias_declaration:"type",enum_declaration:"type"}},python:{loader:(e,t)=>ne("tree-sitter-python",e,t),parserId:"python",symbolKinds:{function_definition:"function",class_definition:"class"}},shell:{loader:(e,t)=>ne("tree-sitter-bash",e,t),parserId:"bash",symbolKinds:{function_definition:"function"}},go:{loader:(e,t)=>ne("tree-sitter-go",e,t),parserId:"go",symbolKinds:{function_declaration:"function",method_declaration:"method",type_declaration:"type"}},rust:{loader:(e,t)=>ne("tree-sitter-rust",e,t),parserId:"rust",symbolKinds:{function_item:"function",struct_item:"type",enum_item:"type",trait_item:"interface",impl_item:"type"}}},Dt=qi(),gr=new Map;function kr(e,t,n){if(!Dt)return null;let r=`${e}\0${n}`,s=gr.get(r);if(s)return s;let i=new Dt;return i.setLanguage(t),gr.set(r,i),i}function Ut(e,t){return e.slice(t.startIndex,t.endIndex)}function wr(e,t){let n=e.childForFieldName("name");if(n){let r=Ut(t,n).trim();if(r)return r}for(let r of e.namedChildren)if(r.type==="identifier"||r.type==="property_identifier"||r.type==="type_identifier"||r.type==="field_identifier"){let s=Ut(t,r).trim();if(s)return s}return null}function xr(e,t){let n=e.childForFieldName("parameters");return n&&Ut(t,n).trim()||void 0}function Hi(e,t){let n=[],r=[e];for(;r.length>0;){let s=r.pop();if(s){t.has(s.type)&&n.push(s);for(let i of s.namedChildren)r.push(i)}}return n}function ji(e,t=[],n=!0){return!e||e==="text"?null:ne(`tree-sitter-${e}`,t,n)}function Vi(e){return e.includes("function")||e.includes("lambda")?"function":e.includes("method")?"method":e.includes("class")?"class":e.includes("interface")||e.includes("trait")?"interface":e.includes("type")||e.includes("struct")||e.includes("enum")||e.includes("module")?"type":null}function Qi(e,t,n,r,s){let i=kr(t,r,s);if(!i)return null;try{let a=[i.parse(n).rootNode],l=new Set,u=[];for(;a.length>0;){let c=a.pop();if(!c)continue;let m=Vi(c.type);if(m){let f=wr(c,n);if(f){let p=`${f}:${String(c.startPosition.row)}:${m}`;l.has(p)||(l.add(p),u.push({path:e,line:c.startPosition.row+1,kind:m,name:f,signature_hint:xr(c,n)}))}}for(let f of c.namedChildren)a.push(f)}return u}catch{return null}}function Sr(e,t,n,r,s=[],i=new Set){let o=s.join("\0");if(t==="json")return r.has("json")?[]:null;let a=yr[t];if(!a){if(!r.has(t))return null;let f=i.has(t),p=`${o}\0${f?"1":"0"}`,b=ji(t,s,f);return b?Qi(e,t,n,b,p):null}if(!r.has(a.parserId))return null;let l=i.has(a.parserId),u=`${o}\0${l?"1":"0"}`,c=a.loader(s,l);if(!c)return null;let m=kr(t,c,u);if(!m)return null;try{let f=m.parse(n),p=new Set(Object.keys(a.symbolKinds)),b=Hi(f.rootNode,p),x=[];for(let _ of b){let k=a.symbolKinds[_.type];if(!k)continue;let w=wr(_,n);w&&x.push({path:e,line:_.startPosition.row+1,kind:k,name:w,signature_hint:xr(_,n)})}return x}catch{return null}}function vr(e,t=[],n=new Set){let r=Object.values(yr).filter(i=>!!i),s=[];if(!Dt){for(let i of r){let o=i.parserId;e.has(o)&&(s.includes(o)||s.push(o))}return s}for(let i of r){if(!e.has(i.parserId))continue;i.loader(t,n.has(i.parserId))||s.push(i.parserId)}return s}var Ir="2",Zi=24,eo=512*1024,to=120,no=20,Pr=20,ro=100,so=1500,io=64,oo=256,ao=240;function Bt(e){return e.content_mode==="none"||e.content_mode==="preview"||e.content_mode==="full"?e.content_mode:e.include_content===!0?"full":"preview"}function Wt(e){return e.map(t=>({...t,reasons:t.reasons.length>0?[{label:t.reasons[0]?.label??"",detail:""}]:[]}))}var U=new Map,Ie=new Map,H=new Map,et=new Map,tt=new Map,lo=new Set(["the","and","for","with","from","that","this","are","not","use","using","into","only","then","just","have","has","had","please","show","find","need","want","where","which","what","help","code","file","files","repo","project"]),uo=new Set(["doc","docs","readme","markdown","guide","documentation"]),co=new Set(["symbol","symbols","function","class","method","type","interface"]),Er=new Set(["src","lib","app","server","cmd","pkg","modules","hosts","outputs","scripts"]);function he(e,t){return`${e}::${j(e,t)}`}function Lr(e,t){return he(e,t)}async function mo(e,t,n){let r=Lr(e,t),s=et.get(r)??Promise.resolve(),i,o=new Promise(l=>{i=l}),a=s.then(()=>o);et.set(r,a),await s;try{return await n()}finally{let l=i;l&&l(),et.get(r)===a&&et.delete(r)}}async function fo(e,t,n){let r=Lr(e,n),s=tt.get(r);if(s)return s;let i=ge(e,t,{state_root:n}).finally(()=>{tt.get(r)===i&&tt.delete(r)});return tt.set(r,i),i}function $t(e,t){if(U.set(e,{value:t,ts:Date.now()}),U.size>io){let n=U.keys().next().value;n&&U.delete(n)}}function K(){return typeof Bun<"u"&&typeof Bun.nanoseconds=="function"?Bun.nanoseconds()/1e6:Date.now()}async function de(e,t,n=5e3){return await new Promise(r=>{let s=!1,i=!1,o=null,a=Ki("git",["-C",e,...t],{stdio:["ignore","pipe","pipe"]}),l="",u=m=>{s||(s=!0,r(m))};a.stdout.setEncoding("utf-8"),a.stdout.on("data",m=>{l+=m});let c=setTimeout(()=>{i=!0,a.kill("SIGTERM"),o=setTimeout(()=>{a.kill("SIGKILL")},150)},n);a.on("error",()=>{clearTimeout(c),o&&clearTimeout(o),u({ok:!1,timedOut:i})}),a.on("close",m=>{if(clearTimeout(c),o&&clearTimeout(o),i||m!==0){u({ok:!1,timedOut:i});return}u({ok:!0,stdout:l.trim()})})})}async function zt(e){let t=await de(e,["status","--porcelain"]);return t.ok?{dirty:t.stdout.length>0,degraded:!1}:{dirty:!0,degraded:!0}}async function po(e,t){let n=new Set,r=!1,s=i=>{if(!i.ok){r=!0;return}for(let o of i.stdout.split(`
|
|
39
|
+
`)){let a=o.trim();a&&n.add(a)}};return t&&s(await de(e,["diff","--name-only",`${t}..HEAD`])),s(await de(e,["diff","--name-only"])),s(await de(e,["diff","--cached","--name-only"])),s(await de(e,["ls-files","--others","--exclude-standard"])),{files:n,degraded:r}}function Q(e){return e.toLowerCase()}function ho(e){let n=Q(e).split(/[^a-z0-9_./-]+/).map(r=>r.trim()).filter(r=>r.length>=3&&r.length<=64).filter(r=>!lo.has(r));return[...new Set(n)]}function go(e){return Q(e).replace(/\s+/g," ").trim()}function _o(e,t,n="auto"){return n!=="auto"?n:t.some(r=>uo.has(r))||e.includes("readme")||e.includes("docs")?"docs":t.some(r=>co.has(r))?"symbols":"code"}function bo(e,t){if(Ie.set(e,t),Ie.size>oo){let n=Ie.keys().next().value;n&&Ie.delete(n)}return t}function ie(e,t="auto"){let n=`${t}\0${e}`,r=Ie.get(n);if(r)return r;let s=go(e),i=ho(s);i.length===0&&s&&(i=[...new Set(s.split(/\s+/).filter(a=>a.length>=2))]);let o={normalized:s,tokens:i,pathTokens:i.filter(a=>a.includes("/")||a.includes(".")),intent:_o(s,i,t)};return bo(n,o)}function Ht(e){let t=[e.normalized,...e.tokens].map(n=>n.trim().toLowerCase()).filter(n=>n.length>=2).slice(0,20);return[...new Set(t)]}function yo(e){let t=0;return e.endsWith(".md")&&(t-=1.5),e.endsWith(".lock")&&(t-=2),e.includes("/docs/")&&(t-=1),e.endsWith(".nix")&&(t+=1),(e.startsWith("src/")||e.includes("/src/"))&&(t+=1.5),(e.startsWith("lib/")||e.includes("/lib/"))&&(t+=1.2),t}function Nr(e){let t=0;return e.endsWith(".md")&&(t+=2),e.includes("/docs/")&&(t+=2),(e.endsWith("/readme.md")||e==="readme.md")&&(t+=3),t}function ko(e,t){return t?t==="nix"?e.endsWith(".nix"):t==="elixir"?e.endsWith(".ex")||e.endsWith(".exs"):t==="zig"?e.endsWith(".zig"):t==="c-sharp"?e.endsWith(".cs"):t==="cpp"?e.endsWith(".cc")||e.endsWith(".cpp")||e.endsWith(".cxx")||e.endsWith(".hpp")||e.endsWith(".hh")||e.endsWith(".hxx"):t==="c"?e.endsWith(".c")||e.endsWith(".h"):t==="java"?e.endsWith(".java"):t==="php"?e.endsWith(".php")||e.endsWith(".phtml"):t==="ruby"?e.endsWith(".rb"):t==="lua"?e.endsWith(".lua"):t==="kotlin"?e.endsWith(".kt")||e.endsWith(".kts"):t==="swift"?e.endsWith(".swift"):t==="typescript"?e.endsWith(".ts")||e.endsWith(".tsx"):t==="javascript"?e.endsWith(".js")||e.endsWith(".jsx")||e.endsWith(".mjs")||e.endsWith(".cjs"):t==="markdown"?e.endsWith(".md")||e.endsWith(".markdown")||e.endsWith(".mdown"):e.endsWith(`.${t}`):!0}function wo(e){return Xi("sha1").update(e).digest("hex")}var xo={ex:"elixir",exs:"elixir",cs:"c-sharp",csharp:"c-sharp",cjs:"javascript",mjs:"javascript",jsx:"javascript",tsx:"typescript",md:"markdown",markdown:"markdown",mdown:"markdown",cc:"cpp",cxx:"cpp",hpp:"cpp",hh:"cpp",hxx:"cpp",rb:"ruby",kts:"kotlin"};function So(e,t){let n=e.toLowerCase();if(n.endsWith(".ts")||n.endsWith(".tsx"))return"typescript";if(n.endsWith(".js")||n.endsWith(".jsx")||n.endsWith(".mjs")||n.endsWith(".cjs"))return"javascript";if(n.endsWith(".ex")||n.endsWith(".exs"))return"elixir";if(n.endsWith(".zig"))return"zig";if(n.endsWith(".cc")||n.endsWith(".cpp")||n.endsWith(".cxx")||n.endsWith(".hpp")||n.endsWith(".hh")||n.endsWith(".hxx"))return"cpp";if(n.endsWith(".cs"))return"c-sharp";if(n.endsWith(".java"))return"java";if(n.endsWith(".php")||n.endsWith(".phtml"))return"php";if(n.endsWith(".rb"))return"ruby";if(n.endsWith(".lua"))return"lua";if(n.endsWith(".kt")||n.endsWith(".kts"))return"kotlin";if(n.endsWith(".swift"))return"swift";if(n.endsWith(".c")||n.endsWith(".h"))return"c";if(n.endsWith(".nix"))return"nix";if(n.endsWith(".md")||n.endsWith(".markdown")||n.endsWith(".mdown"))return"markdown";if(n.endsWith(".json"))return"json";if(n.endsWith(".yaml")||n.endsWith(".yml"))return"yaml";if(n.endsWith(".sh"))return"shell";if(n.endsWith(".py"))return"python";if(n.endsWith(".go"))return"go";if(n.endsWith(".rs"))return"rust";let r=n.includes(".")?n.split(".").at(-1)??"":"";if(r){let s=xo[r]??r;if(t.has(s))return s}return"text"}function vo(e){return e.split("/")[0]||"."}function Ro(e,t){let n=t.split(`
|
|
40
|
+
`),r=[],s=0;for(;s<n.length;){let i=Math.min(n.length,s+to);if(r.push({id:`${e}:${String(s+1)}-${String(i)}`,path:e,start_line:s+1,end_line:i,content:n.slice(s,i).join(`
|
|
41
|
+
`)}),i===n.length)break;s=Math.max(i-no,s+1)}return r}function Po(e,t,n){let r=n.split(`
|
|
42
|
+
`),s=[],i=[];t==="nix"&&i.push(/^\s*([A-Za-z0-9_-]+)\s*=\s*(?:\{|\()/);for(let o=0;o<r.length;o++){let a=r[o]??"";for(let l of i){let u=a.match(l);if(!u?.[1])continue;let c=u[1],m=a.includes("class")?"class":/type|interface/.test(a)?"type":"function";s.push({path:e,line:o+1,kind:m,name:c,signature_hint:a.trim().slice(0,120)});break}}return s}function To(e,t,n,r,s,i){let o=Sr(e,t,n,r,s,i);return o!==null?o:Po(e,t,n)}async function Co(e,t,n,r,s,i){let o=xe(e,i);if(o&&(t===o||t.startsWith(`${o}/`)))return{file:null,symbols:[],chunks:[]};if(t.startsWith(".git/"))return{file:null,symbols:[],chunks:[]};let a=Ee(e,t),l;try{l=await Yi(a)}catch{return{file:null,symbols:[],chunks:[]}}if(!l.isFile())return{file:null,symbols:[],chunks:[]};if(l.size>eo)return{file:null,symbols:[],chunks:[]};let u="";try{u=await Cr(a,"utf-8")}catch{return{file:null,symbols:[],chunks:[]}}if(u.includes("\0"))return{file:null,symbols:[],chunks:[]};let c=So(t,n);return{file:{path:t,language:c,size:l.size,hash:wo(u),top_level:vo(t)},symbols:To(t,c,u,n,r,s),chunks:Ro(t,u)}}async function nt(e,t,n,r,s,i){let o=[],a=[],l=[];for(let u=0;u<t.length;u+=Pr){let c=t.slice(u,u+Pr),m=await Promise.all(c.map(f=>Co(e,f,n,r,s,i)));for(let f of m)f.file&&(o.push(f.file),a.push(...f.symbols),l.push(...f.chunks))}return o.sort((u,c)=>u.path.localeCompare(c.path)),a.sort((u,c)=>u.path.localeCompare(c.path)||u.line-c.line||u.name.localeCompare(c.name)),l.sort((u,c)=>u.path.localeCompare(c.path)||u.start_line-c.start_line),{files:o,symbols:a,chunks:l}}function Ar(e,t){let n=he(e,t),r=H.get(n);return r||(r=new Map,H.set(n,r)),r}function jt(e,t,n){let r=Ar(e,t),s=In(r,n);return s?(P.recordCacheHit(),s):(P.recordCacheMiss(),null)}function Vt(e,t,n,r){let s=Ar(e,t);En(s,n,r,ro)}async function Io(e,t,n){let r=new Map;for(let a of t)r.set(a.top_level,(r.get(a.top_level)??0)+1);let s=["# Directory Map","","Top-level directories by indexed file count:",""];for(let[a,l]of[...r.entries()].sort((u,c)=>c[1]-u[1]))s.push(`- ${a}: ${String(l)}`);s.push(""),await qt(Ee(j(e,n),"dirs.md"),s.join(`
|
|
43
|
+
`),"utf-8");let i=new Set(["README.md","AGENTS.md","flake.nix","package.json","tsconfig.json","Cargo.toml","go.mod"]),o=["# Entrypoints","","High-signal files for navigation:",""];for(let a of t.filter(l=>i.has(l.path.split("/").at(-1)??"")||l.path.includes("/commands/")).map(l=>l.path).slice(0,200))o.push(`- ${a}`);o.push(""),await qt(Ee(j(e,n),"entrypoints.md"),o.join(`
|
|
44
|
+
`),"utf-8")}async function Eo(e,t){if(!Ft(e,t))return[];let n=await It(e,t),r=new Set(n.enabled),s=new Set(await Et(e,t)),i=await ur(e,t),o=[];for(let a of i){if(o.length>=5)break;let l=a.language.trim().toLowerCase(),u=Hn(l);if(!u||!u.installable)continue;let c=u.parser_id,m=r.has(c),f=Bn(c,e,t,{allow_global_fallback:Lt(c,s)}),p=m?f?null:"runtime-missing":"parser-disabled";p&&o.push({language:l,parser_id:c,files:a.count,reason:p,runtime_package:u.runtime_package,install_tool:"veil_grammar_runtime_install",install_args:{parsers:[c]}})}return o}async function Gt(e,t,n){if(!t.exists)return{...t,grammar_suggestions:[]};try{let r=await Eo(e,n);return{...t,grammar_suggestions:r}}catch{return{...t,grammar_suggestions:[]}}}async function Lo(e,t="full",n={}){let r=K(),s=j(e,n.state_root);await Ji(s,{recursive:!0});let i=await It(e,n.state_root),o=new Set(i.enabled),a=new Set(await Et(e,n.state_root)),l=new Set([...o].filter(k=>Lt(k,a))),u=[pe(e,n.state_root)],c=vr(o,u,l);if(c.length>0)throw new Error(`Missing required parser runtimes for enabled built-ins: ${c.join(", ")}. Reinstall dependencies and rerun build.`);let m=await Mn(e,n.state_root),f=await de(e,["rev-parse","HEAD"]),p=f.ok?f.stdout:null,b=t==="full";if(t==="full"){let k=await nt(e,m,o,u,l,n.state_root);await Je(e,k,n.state_root)}else{let k=await X(e,n);if(!k.exists||!k.manifest?.git_head||k.reasons.includes(se)){let w=await nt(e,m,o,u,l,n.state_root);await Je(e,w,n.state_root),b=!0}else{let w=await po(e,k.manifest.git_head),h=new Set(m);for(let y of await er(e,n.state_root))h.has(y)||w.files.add(y);if(w.degraded){let y=await nt(e,m,o,u,l,n.state_root);await Je(e,y,n.state_root),b=!0}else if(w.files.size>0){let y=await nt(e,[...w.files],o,u,l,n.state_root);await tr(e,w.files,y,n.state_root),b=!0}}}let x=await lr(e,n.state_root),_=cr(e,p,x);if(_.schema_version=Ir,_.stale_after_hours=Zi,await qt(Ee(s,"manifest.json"),`${JSON.stringify(_,null,2)}
|
|
45
|
+
`,"utf-8"),b){let k=await nr(e,n.state_root);await Io(e,k.files,n.state_root)}return U.delete(he(e,n.state_root)),H.delete(he(e,n.state_root)),P.recordIndexBuild(),P.recordBuildLatency(K()-r),P.recordCacheInvalidation(),P.updateCacheSizes(H.size,U.size),_}async function ge(e,t="full",n={}){return mo(e,n.state_root,async()=>Lo(e,t,n))}async function X(e,t={}){let n=he(e,t.state_root),r=U.get(n);if(!t.bypass_cache&&r&&Date.now()-r.ts<so)return P.updateCacheSizes(H.size,U.size),r.value;let s=await de(e,["rev-parse","HEAD"]),i=s.ok?s.stdout:null,o=Ee(j(e,t.state_root),"manifest.json"),a=Ft(e,t.state_root);if(!Rr(o)||!a){let _=[Rr(o)?"index-db-missing":"manifest-missing"];(await zt(e)).dirty&&_.push("workspace-dirty");let h=await Gt(e,{exists:!1,stale:!0,reasons:_,manifest:null,current_git_head:i},t.state_root);return $t(n,h),P.updateCacheSizes(H.size,U.size),h}let l;try{l=JSON.parse(await Cr(o,"utf-8"))}catch{let _={exists:!0,stale:!0,reasons:["manifest-invalid-json"],manifest:null,current_git_head:i};(await zt(e)).dirty&&_.reasons.push("workspace-dirty");let w=await Gt(e,_,t.state_root);return $t(n,w),P.updateCacheSizes(H.size,U.size),w}let u=[];await ar(e,t.state_root)&&u.push(se),l.schema_version!==Ir&&u.push("schema-version-mismatch"),l.git_head!==i&&u.push("git-head-mismatch"),(await zt(e)).dirty&&u.push("workspace-dirty");let m=Date.parse(l.generated_at),f=Date.now()-m,p=l.stale_after_hours*60*60*1e3;Number.isFinite(m)&&f>p&&u.push("ttl-expired");let b={exists:!0,stale:u.length>0,reasons:u,manifest:l,current_git_head:i},x=await Gt(e,b,t.state_root);return $t(n,x),P.updateCacheSizes(H.size,U.size),x}function No(e){return e.stale?e.reasons.some(t=>t!=="workspace-dirty"):!1}async function Qt(e,t={}){let n=t.strict_query_freshness===!0,r=await X(e,{state_root:t.state_root,bypass_cache:n}),s=t.refresh_if_stale??!0,i=t.mode??"changed";if(!s)return{workspace:e,refreshed:!1,reason:"refresh-disabled",mode:null,status_before:r,status_after:r,manifest:r.manifest};if(!r.stale)return{workspace:e,refreshed:!1,reason:"fresh",mode:null,status_before:r,status_after:r,manifest:r.manifest};if(!n&&!No(r))return{workspace:e,refreshed:!1,reason:"dirty-only",mode:null,status_before:r,status_after:r,manifest:r.manifest};let o=await fo(e,i,t.state_root);U.delete(he(e,t.state_root));let a=await X(e,{state_root:t.state_root,bypass_cache:n});return{workspace:e,refreshed:!0,reason:"refreshed",mode:i,status_before:r,status_after:a,manifest:o}}function Ao(e,t,n){let r=new fe(Math.max(0,n));for(let s=0;s<e.length;s++){let i=Q(e[s]?.path??""),o=i.includes(t.normalized)?8:0;for(let l of t.tokens)i.includes(l)&&(o+=l.includes("/")?3:1.5);let a=Q(e[s]?.top_level??"");t.intent==="code"&&Er.has(a)&&(o+=.6),t.intent==="docs"&&(o+=Nr(i)),o>.5&&r.insert(s,o)}return r.toSortedArray().map(s=>e[s]).filter(s=>!!s)}function Mo(e,t,n){let r=new fe(Math.max(0,n));for(let[s,i]of e.entries()){let o=Q(i.name),a=Q(i.path),l=o.includes(t.normalized)?7:0;for(let u of t.tokens)o.includes(u)&&(l+=2),a.includes(u)&&(l+=1);t.intent==="symbols"&&(l+=1.5),t.intent==="docs"&&(l-=1),l>=1.5&&r.insert(s,l)}return r.toSortedArray().map(s=>e[s]).filter(s=>!!s)}function Oo(e,t,n,r){let s=r.language?Q(r.language):"",i=r.path_prefix?Q(r.path_prefix):"",o=r.prefer_code??t.intent!=="docs",a=new fe(Math.max(0,n)),l=new Set;for(let u of t.tokens)Er.has(u)&&l.add(u),u.includes("/")&&l.add(u.split("/")[0]??"");for(let[u,c]of e.entries()){let m=Q(c.path);if(i&&!m.startsWith(i)||!ko(m,s))continue;let f=Q(`${c.path}
|
|
46
|
+
${c.content??""}`),p=f.includes(t.normalized)?6:0;m.includes(t.normalized)&&(p+=3);for(let b of t.tokens)f.includes(b)&&(p+=1.5);for(let b of t.pathTokens)m.includes(b)&&(p+=3.5);l.has(m.split("/")[0]??"")&&(p+=2.5),o&&(p+=yo(m)),t.intent==="docs"&&(p+=Nr(m)),p>=2&&a.insert(u,p)}return a.toSortedArray().map(u=>e[u]).filter(u=>!!u)}function Tr(e){return typeof e!="number"||!Number.isFinite(e)||e<=0?ao:Math.max(40,Math.min(2e4,Math.floor(e)))}function Mr(e,t,n){let r=e.content??"",s=r.length;if(t==="full"){if(typeof n=="number"&&Number.isFinite(n)&&n>0){let a=Tr(n);if(s>a)return{...e,content:r.slice(0,a),content_truncated:!0,content_chars:s}}return{...e,content_truncated:!1,content_chars:s}}if(t==="none")return{id:e.id,path:e.path,start_line:e.start_line,end_line:e.end_line,content_truncated:!0,content_chars:s};let i=Tr(n),o=s>i;return{...e,content:o?r.slice(0,i):r,content_truncated:o,content_chars:s}}function Or(e,t,n){return e.map(r=>Mr(r,t,n))}async function Le(e,t,n=20,r={}){let s=K();if(n<=0)return[];let i=ie(t);if(!i.normalized)return[];let o=`files\0${i.intent}\0${i.normalized}\0${String(n)}`,a=jt(e,r.state_root,o);if(a)return a;let l=Ao(await rr(e,{normalized:i.normalized,tokens:Ht(i),limit:Math.min(n,200)},r.state_root),i,Math.min(n,200));return Vt(e,r.state_root,o,l),P.recordQuery(K()-s),P.updateCacheSizes(H.size,U.size),l}async function Ne(e,t,n=20,r={}){let s=K();if(n<=0)return[];let i=ie(t);if(!i.normalized)return[];let o=`symbols\0${i.intent}\0${i.normalized}\0${String(n)}`,a=jt(e,r.state_root,o);if(a)return a;let l=Mo(await sr(e,{normalized:i.normalized,tokens:Ht(i),limit:Math.min(n,200)},r.state_root),i,Math.min(n,200));return Vt(e,r.state_root,o,l),P.recordQuery(K()-s),P.updateCacheSizes(H.size,U.size),l}async function Ae(e,t,n=10,r={}){let s=K();if(n<=0)return[];let i=ie(t,r.intent);if(!i.normalized)return[];let o=["chunks",i.intent,i.normalized,String(n),String(r.prefer_code??""),Bt(r),String(r.content_max_chars??""),r.path_prefix??"",r.language??""].join("\0"),a=jt(e,r.state_root,o);if(a)return a;let l=Oo(await ir(e,{normalized:i.normalized,tokens:Ht(i),limit:Math.min(n,100),pathPrefix:r.path_prefix},r.state_root),i,Math.min(n,100),r),u=Or(l,Bt(r),r.content_max_chars);return Vt(e,r.state_root,o,u),P.recordQuery(K()-s),P.updateCacheSizes(H.size,U.size),u}async function Fr(e,t,n={}){let r=ie(t,n.intent),s=await Le(e,t,n.files_limit??16,{state_root:n.state_root}),i=await Ne(e,t,n.symbols_limit??(r.intent==="symbols"?32:16),{state_root:n.state_root}),o=await Ae(e,t,n.search_limit??8,{prefer_code:n.prefer_code,path_prefix:n.path_prefix,language:n.language,intent:r.intent,content_mode:n.content_mode,include_content:n.include_content,content_max_chars:n.content_max_chars,state_root:n.state_root});return{intent:r.intent,files:s,symbols:i,chunks:o}}async function Dr(e,t,n={}){let r=K(),s=ie(t,n.intent),i=n.files_limit??6,o=n.symbols_limit??(s.intent==="symbols"?16:10),a=n.search_limit??(s.intent==="docs"?8:6),l=n.prefer_code??s.intent!=="docs",u=s,c=s,m=s,f=await Le(e,t,i,{state_root:n.state_root}),p=await Ne(e,t,o,{state_root:n.state_root}),b=await Ae(e,t,a,{prefer_code:l,path_prefix:n.path_prefix,language:n.language,intent:s.intent,content_mode:"full",include_content:!0,state_root:n.state_root}),x="none",_="Primary lookup strategy returned complete result groups";p.length===0&&s.intent!=="docs"&&(c=ie(t,"symbols"),p=await Ne(e,t,o,{state_root:n.state_root}),p.length>0&&(x="symbols",_="Primary strategy had no symbol hits, retried with symbol-focused routing")),b.length===0&&s.intent!=="docs"&&(m=ie(t,"code"),b=await Ae(e,t,a,{prefer_code:!0,path_prefix:n.path_prefix,language:n.language,intent:"code",content_mode:"full",include_content:!0,state_root:n.state_root}),b.length>0&&(x=x==="none"?"chunks":"all",_="Primary strategy had no chunk hits, retried with code-focused routing")),f.length===0&&(u=ie(t,"code"),f=await Le(e,t,i,{state_root:n.state_root}),f.length>0&&(x=x==="none"?"files":"all",_="Primary strategy had no file hits, retried with broad path routing"));let k=Or(b,Bt(n),n.content_max_chars),w=new Map;for(let y of b)w.set(y.id,y);let h={intent:s.intent,files:Ye(f,y=>dr(y.path,u),{label:"fallback-file-match",detail:"File returned by fallback retrieval path"}),symbols:Ye(p,y=>mr(y,c),{label:"fallback-symbol-match",detail:"Symbol returned by fallback retrieval path"}),chunks:Ye(k,y=>fr(w.get(y.id)??y,m),{label:"fallback-chunk-match",detail:"Chunk returned by fallback retrieval path"}),fallback:{used:x!=="none",stage:x,detail:_}};return n.response_mode==="compact"&&(h.files=Wt(h.files),h.symbols=Wt(h.symbols),h.chunks=Wt(h.chunks)),P.recordQuery(K()-r),P.updateCacheSizes(H.size,U.size),h}async function Ur(e,t,n={}){let r=await or(e,t,n.state_root);return r?Mr(r,n.include_content===!1?"preview":"full",n.content_max_chars):null}var zr=2e4,Go=5e5,qo=".veil-repo-context",be=2e6,Bo=150;function oe(e){let t=e??globalThis.Bun;return t&&typeof t.nanoseconds=="function"?t.nanoseconds()/1e6:Date.now()}async function O(e,t,n,r){return await new Promise(s=>{let i=!1,o=!1,a=Fo(e,t,{cwd:n,stdio:["ignore","pipe","pipe"]}),l="",u="",c=0,m=0,f=!1,p=!1,b=null,x=w=>{i||(i=!0,s(w))},_=(w,h,y)=>{if(y>=be)return{next:h,bytes:y,truncated:!0};let N=Buffer.byteLength(w,"utf-8"),C=y+N;if(C<=be)return{next:h+w,bytes:C,truncated:!1};let M=be-y,E=Buffer.from(w,"utf-8").subarray(0,M).toString("utf-8");return{next:h+E,bytes:be,truncated:!0}};a.stdout.setEncoding("utf-8"),a.stderr.setEncoding("utf-8"),a.stdout.on("data",w=>{let h=_(w,l,c);l=h.next,c=h.bytes,h.truncated&&(f=!0)}),a.stderr.on("data",w=>{let h=_(w,u,m);u=h.next,m=h.bytes,h.truncated&&(p=!0)});let k=setTimeout(()=>{o=!0,a.kill("SIGTERM"),b=setTimeout(()=>{a.kill("SIGKILL")},Bo)},r);a.on("error",w=>{clearTimeout(k),b&&clearTimeout(b),x({ok:!1,stdout:l,stderr:u,code:null,timedOut:o,stdoutTruncated:f,stderrTruncated:p,error:w.message,errorCode:w.code})}),a.on("close",w=>{clearTimeout(k),b&&clearTimeout(b),x({ok:w===0&&!o,stdout:l,stderr:u,code:w,timedOut:o,stdoutTruncated:f,stderrTruncated:p})})})}function Kt(e){return e.errorCode==="ENOENT"?!0:e.error?e.error.includes("ENOENT")||e.error.includes("Executable not found in $PATH")||e.error.includes("No such file or directory"):!1}function Ho(e,t,n,r,s){return{ok:!0,workspace:e,tool:t,git_available:!0,duration_ms:Number((oe()-n).toFixed(4)),truncated:r,warnings:s}}function I(e,t,n,r,s=!0){return{meta:{ok:!1,workspace:e,tool:t,git_available:s,duration_ms:Number((oe()-n).toFixed(4)),truncated:!1,warnings:[]},data:null,error:r}}function Jt(e,t){let n=Math.max(1024,Math.min(t??zr,Go));return Buffer.byteLength(e,"utf-8")<=n?{text:e.trim(),truncated:!1}:{text:Buffer.from(e,"utf-8").subarray(0,n).toString("utf-8").trim(),truncated:!0,warning:`output truncated to ${String(n)} bytes`}}function Gr(e,t){if(!t)return{ok:!0};if(t.includes("\0"))return{ok:!1,error:{code:"invalid-path",message:"Path contains null bytes"}};if(t.startsWith("-"))return{ok:!1,error:{code:"invalid-path",message:"Path cannot start with hyphen"}};if(Me(t))return{ok:!1,error:{code:"invalid-path",message:"Path must be a relative path inside workspace"}};let n=zo(t),r=_e(e,n),s=st(e,r);if(s.startsWith("..")||Me(s))return{ok:!1,error:{code:"invalid-path",message:"Path escapes workspace"}};try{let i=Oe(e),o=r;try{o=Oe(r)}catch{let l=$o(r);try{let u=Oe(l);o=_e(u,$r(r))}catch{o=r}}let a=st(i,o);if(a.startsWith("..")||Me(a))return{ok:!1,error:{code:"invalid-path",message:"Path escapes workspace via symlink"}}}catch{let i=_e(e),o=_e(e,n),a=st(i,o);if(a.startsWith("..")||Me(a))return{ok:!1,error:{code:"invalid-path",message:"Path escapes workspace"}}}return{ok:!0,value:n}}function Xt(e){return e?e.length>200?{ok:!1,error:{code:"invalid-revision",message:"Revision string too long (max 200 characters)"}}:e.startsWith("-")?{ok:!1,error:{code:"invalid-revision",message:"Revision cannot start with hyphen"}}:Array.from(e).some(r=>{let s=r.charCodeAt(0);return s===0||s>=1&&s<=31})?{ok:!1,error:{code:"invalid-revision",message:"Revision contains null bytes or control characters"}}:/\s/.test(e)?{ok:!1,error:{code:"invalid-revision",message:"Revision contains whitespace"}}:/[;|&$`(){}[\]<>!\\'"]/.test(e)?{ok:!1,error:{code:"invalid-revision",message:"Revision contains shell metacharacters"}}:/^[A-Za-z0-9._/\-~^]+(\.{2,3}[A-Za-z0-9._/\-~^]+)?$/.test(e)?{ok:!0,value:e}:{ok:!1,error:{code:"invalid-revision",message:"Revision contains unsafe characters"}}:{ok:!0}}async function it(e,t){let n=await O(t.command??"git",["-C",e,"rev-parse","--is-inside-work-tree"],e,t.timeoutMs);if(Kt(n))return{ok:!1,error:{code:"git-unavailable",message:"git is not available in PATH"},gitAvailable:!1};if(!n.ok)return{ok:!1,error:{code:"not-a-repo",message:"Workspace is not a git repository"},gitAvailable:!0};let r=await O(t.command??"git",["-C",e,"rev-parse","--show-toplevel"],e,t.timeoutMs);if(!r.ok)return{ok:!1,error:{code:"not-a-repo",message:"Workspace is not a git repository"},gitAvailable:!0};let s=e,i=r.stdout.trim();try{s=Oe(e),i=Oe(i)}catch{s=_e(e),i=_e(i)}let o=st(i,s);return o.startsWith("..")||Me(o)?{ok:!1,error:{code:"not-a-repo",message:"Workspace is outside git repository root"},gitAvailable:!0}:{ok:!0}}function jo(e){let t=new Set,n=new Set,r=new Set;for(let s of e.split(`
|
|
47
|
+
`)){if(s.length<4)continue;let i=s[0],o=s[1],a=s.slice(3).trim();if(a){if(i==="?"&&o==="?"){r.add(a);continue}i!==" "&&t.add(a),o!==" "&&n.add(a)}}return{staged:[...t],unstaged:[...n],untracked:[...r]}}function Vo(e){return typeof e!="number"||!Number.isFinite(e)||e<=0?null:Math.max(1,Math.min(2e3,Math.floor(e)))}function Qo(e,t){if(t===null)return{paths:e,warnings:[]};let n=[],r=(s,i)=>s.length<=t?s:(n.push(`${i} paths truncated to ${String(t)} of ${String(s.length)}`),s.slice(0,t));return{paths:{staged:r(e.staged,"staged"),unstaged:r(e.unstaged,"unstaged"),untracked:r(e.untracked,"untracked")},warnings:n}}function Ko(e){return e.split(`
|
|
48
|
+
`).map(t=>t.trim()).filter(Boolean).map(t=>{let[n,r,s,i,o]=t.split(" ");return{commit:n,author:r,date:s,subject:i,parents:(typeof o=="string"?o:"").split(" ").filter(Boolean)}})}function ye(e,t,n,r,s,i=[]){let o=s.warning?[s.warning,...i]:i;return{meta:Ho(e,t,n,s.truncated,o),data:r,error:null}}function Fe(e){let t=[];return e.stdoutTruncated&&t.push(`stdout capture capped at ${String(be)} bytes`),e.stderrTruncated&&t.push(`stderr capture capped at ${String(be)} bytes`),t}function S(e,t,n,r){let s=oe()-t,i=e==="gh_lookup";P.recordGitCall(s,n,r,i)}async function qr(e,t){let n=oe(),r=Math.min(1e4,Math.max(500,t?.timeout_ms??5e3)),s={timeoutMs:r,command:t?.command},i=await it(e,s);if(!i.ok)return S("git_status",n,!1,!1),I(e,"git_status",n,i.error,i.gitAvailable);let o=await O(s.command??"git",["-C",e,"rev-parse","--abbrev-ref","HEAD"],e,r),a=await O(s.command??"git",["-C",e,"rev-parse","HEAD"],e,r),l=await O(s.command??"git",["-C",e,"rev-parse","--abbrev-ref","--symbolic-full-name","@{upstream}"],e,r),u=await O(s.command??"git",["-C",e,"rev-list","--left-right","--count","HEAD...@{upstream}"],e,r),c=await O(s.command??"git",["-C",e,"status","--porcelain"],e,r);if(!o.ok||!a.ok||!c.ok){let k=o.timedOut||a.timedOut||c.timedOut;return S("git_status",n,!1,k),I(e,"git_status",n,{code:k?"timeout":"command-failed",message:`Failed to gather git status: ${(o.stderr||a.stderr||c.stderr||"unknown").trim()}`})}let m=jo(c.stdout),f=Qo(m,Vo(t?.paths_limit)),p=t?.include_paths??!1,[b,x]=(u.stdout.trim()||"0 0").split(" "),_={branch:o.stdout.trim(),head:a.stdout.trim(),upstream:l.ok?l.stdout.trim():null,ahead:Number(x||"0")||0,behind:Number(b||"0")||0,dirty:m.staged.length+m.unstaged.length+m.untracked.length>0,changed:{staged:m.staged.length,unstaged:m.unstaged.length,untracked:m.untracked.length},paths:p?f.paths:void 0};return S("git_status",n,!0,!1),ye(e,"git_status",n,_,{truncated:!1},f.warnings)}async function Br(e,t){let n=oe(),r=Math.min(12e3,Math.max(500,t?.timeout_ms??8e3)),s={timeoutMs:r,command:t?.command},i=await it(e,s);if(!i.ok)return S("git_log",n,!1,!1),I(e,"git_log",n,i.error,i.gitAvailable);let o=Math.min(200,Math.max(1,t?.limit??30)),a=["-C",e,"log",`-n${String(o)}`,"--date=iso-strict","--pretty=format:%H%x09%an%x09%ad%x09%s%x09%P"];t?.since&&a.push(`--since=${t.since}`),t?.author&&a.push(`--author=${t.author}`),t?.grep&&a.push(`--grep=${t.grep}`);let l=await O(s.command??"git",a,e,r);if(!l.ok)return S("git_log",n,!1,l.timedOut),I(e,"git_log",n,{code:l.timedOut?"timeout":"command-failed",message:`git log failed: ${l.stderr.trim()!==""?l.stderr.trim():l.error??"unknown"}`});let u=Ko(l.stdout);return S("git_log",n,!0,!1),ye(e,"git_log",n,{limit:o,entries:u},{truncated:!1},Fe(l))}async function Hr(e,t){let n=oe(),r=Math.min(1e4,Math.max(500,t?.timeout_ms??5e3)),s={timeoutMs:r,command:t?.command},i=await it(e,s);if(!i.ok)return S("git_diff",n,!1,!1),I(e,"git_diff",n,i.error,i.gitAvailable);let o=Xt(t?.base);if(!o.ok)return S("git_diff",n,!1,!1),I(e,"git_diff",n,o.error);let a=Xt(t?.head);if(!a.ok)return S("git_diff",n,!1,!1),I(e,"git_diff",n,a.error);let l=Gr(e,t?.path);if(!l.ok)return S("git_diff",n,!1,!1),I(e,"git_diff",n,l.error);let u=["-C",e,"diff"];t?.staged&&u.push("--cached"),t?.name_only&&u.push("--name-only");let c=o.value,m=a.value,f=!!(c&&m);c&&m?u.push(`${c}..${m}`):c&&u.push(c),l.value&&u.push("--",l.value);let p=await O(s.command??"git",u,e,r);if(!p.ok)return S("git_diff",n,!1,p.timedOut),I(e,"git_diff",n,{code:p.timedOut?"timeout":"command-failed",message:`git diff failed: ${p.stderr.trim()!==""?p.stderr.trim():p.error??"unknown"}`});let b=Jt(p.stdout,t?.max_bytes),x={mode:f?"range":"working",staged:!!t?.staged,name_only:!!t?.name_only,base:o.value??null,head:a.value??null,path:l.value??null,text:b.text};return S("git_diff",n,!0,!1),ye(e,"git_diff",n,x,b,Fe(p))}async function jr(e,t){let n=oe(),r=Math.min(12e3,Math.max(500,t?.timeout_ms??8e3)),s={timeoutMs:r,command:t?.command},i=await it(e,s);if(!i.ok)return S("git_show",n,!1,!1),I(e,"git_show",n,i.error,i.gitAvailable);let o=Xt(t?.rev);if(!o.ok||!o.value)return S("git_show",n,!1,!1),I(e,"git_show",n,o.ok?{code:"invalid-revision",message:"Revision is required"}:o.error);let a=Gr(e,t?.path);if(!a.ok)return S("git_show",n,!1,!1),I(e,"git_show",n,a.error);let l=["-C",e,"show",o.value,"--date=iso-strict","--pretty=fuller"];t?.patch===!1&&l.push("--no-patch"),a.value&&l.push("--",a.value);let u=await O(s.command??"git",l,e,r);if(!u.ok){let f=u.stderr.includes("bad revision")||u.stderr.includes("unknown revision");return S("git_show",n,!1,u.timedOut),I(e,"git_show",n,{code:u.timedOut?"timeout":f?"invalid-revision":"command-failed",message:`git show failed: ${u.stderr.trim()!==""?u.stderr.trim():u.error??"unknown"}`})}let c=Jt(u.stdout,t?.max_bytes),m={rev:o.value,path:a.value??null,patch:t?.patch!==!1,text:c.text};return S("git_show",n,!0,!1),ye(e,"git_show",n,m,c,Fe(u))}async function Vr(e,t){let n=oe(),r=Math.min(2e4,Math.max(500,t.timeout_ms??12e3)),s=t.command??"gh",i=await O(s,["--version"],e,r);if(Kt(i))return S("gh_lookup",n,!1,!1),I(e,"gh_lookup",n,{code:"gh-unavailable",message:"gh is not available in PATH"},!0);if(!i.ok)return S("gh_lookup",n,!1,i.timedOut),I(e,"gh_lookup",n,{code:i.timedOut?"timeout":"gh-unavailable",message:"gh command is unavailable"});let o=await O(s,["auth","status"],e,r);if(!o.ok)return S("gh_lookup",n,!1,o.timedOut),I(e,"gh_lookup",n,{code:o.timedOut?"timeout":"gh-unauthenticated",message:"gh is unauthenticated or cannot access GitHub"});let l=(_=>{let k=_.trim();if(!k)return null;if(k.startsWith("http://")||k.startsWith("https://"))try{let M=new URL(k).pathname.replace(/^\/+/,"").replace(/\.git$/,"").split("/").filter(Boolean);if(M.length<2)return null;let E=M[0]??"",D=M[1]??"";return!E||!D?null:{repo:`${E}/${D}`,owner:E,name:D,url:`https://github.com/${E}/${D}.git`}}catch{return null}let h=k.replace(/\.git$/,"").split("/").filter(Boolean);if(h.length!==2)return null;let y=h[0]??"",N=h[1]??"";return!y||!N?null:{repo:`${y}/${N}`,owner:y,name:N,url:`https://github.com/${y}/${N}.git`}})(t.repo);if(!l)return S("gh_lookup",n,!1,!1),I(e,"gh_lookup",n,{code:"command-failed",message:"repo must be 'owner/repo' or a GitHub URL"});if(t.kind==="repo_context"){let _=await O("git",["--version"],e,r);if(Kt(_))return S("gh_lookup",n,!1,!1),I(e,"gh_lookup",n,{code:"git-unavailable",message:"git is not available in PATH"},!1);if(!_.ok)return S("gh_lookup",n,!1,_.timedOut),I(e,"gh_lookup",n,{code:_.timedOut?"timeout":"command-failed",message:"git command is unavailable"},!1);let k=t.temp_root?.trim()?t.temp_root.trim():"/tmp",w=rt(k,l.owner),h=rt(w,$r(l.name));Do(w,{recursive:!0});let y=rt(h,".git"),N=rt(h,qo),C;if(!Wr(y))C=await O("git",["clone","--depth","1",l.url,h],e,r),C.ok&&Wo(N,`${l.repo}
|
|
49
|
+
`,"utf-8");else{if(!Wr(N))return S("gh_lookup",n,!1,!1),I(e,"gh_lookup",n,{code:"command-failed",message:`existing clone target ${h} is unmanaged, refusing hard reset`});let M=Uo(N,"utf-8").trim();if(M!==l.repo)return S("gh_lookup",n,!1,!1),I(e,"gh_lookup",n,{code:"command-failed",message:`existing clone target ${h} belongs to ${M||"unknown"}, refusing hard reset`});let E=await O("git",["-C",h,"remote","set-url","origin",l.url],e,r),D=await O("git",["-C",h,"fetch","--depth","1","origin"],e,r),cn=await O("git",["-C",h,"symbolic-ref","refs/remotes/origin/HEAD"],e,r),ys=cn.ok?cn.stdout.trim().replace(/^refs\/remotes\//,""):"origin/main",le=await O("git",["-C",h,"reset","--hard",ys],e,r);C=!E.ok||!D.ok||!le.ok?{ok:!1,stdout:`${E.stdout}
|
|
50
50
|
${D.stdout}
|
|
51
51
|
${le.stdout}`,stderr:`${E.stderr}
|
|
52
52
|
${D.stderr}
|
|
53
|
-
${le.stderr}`,code:1,timedOut:E.timedOut||D.timedOut||le.timedOut,stdoutTruncated:E.stdoutTruncated||D.stdoutTruncated||le.stdoutTruncated,stderrTruncated:E.stderrTruncated||D.stderrTruncated||le.stderrTruncated}:le}if(!C.ok)return v("gh_lookup",n,!1,C.timedOut),I(e,"gh_lookup",n,{code:C.timedOut?"timeout":"command-failed",message:`failed to sync repo ${l.repo}: ${C.stderr.trim()!==""?C.stderr.trim():C.error??"unknown"}`});try{await he(h,"changed",{state_root:t.state_root});let M=await K(h,{state_root:t.state_root}),E=ne(h,t.state_root),D={repo:l.repo,kind:"repo_context",query:t.query??"",limit:0,text:`repo indexed at ${h}`,repo_url:l.url,cloned_workspace:h,state_root:E,status_exists:M.exists};return v("gh_lookup",n,!0,!1),be(e,"gh_lookup",n,D,{truncated:!1},Ae(C))}catch(M){return v("gh_lookup",n,!1,!1),I(e,"gh_lookup",n,{code:"command-failed",message:`failed to index cloned repo: ${String(M)}`})}}let u=Math.min(50,Math.max(1,t.limit??10)),d=t.query??"",m="issue",f;t.kind==="issues"?(m="issue",f=["search",d||"is:open","--repo",l.repo,"--limit",String(u)]):t.kind==="prs"?(m="pr",f=["list","--repo",l.repo,"--limit",String(u)],d&&f.push("--search",d)):(m="run",f=["list","--repo",l.repo,"--limit",String(u)]);let p=await O(s,[m,...f],e,r);if(!p.ok)return v("gh_lookup",n,!1,p.timedOut),I(e,"gh_lookup",n,{code:p.timedOut?"timeout":"command-failed",message:`gh lookup failed: ${p.stderr.trim()!==""?p.stderr.trim():p.error??"unknown"}`});let b=Ht(p.stdout,Ar),x={repo:l.repo,kind:t.kind,query:d,limit:u,text:b.text,repo_url:l.url};return v("gh_lookup",n,!0,!1),be(e,"gh_lookup",n,x,b,Ae(p))}var T={veil_status:"Use when you need index status or staleness.",veil_update_check:"Use when you need MCP package and skill update status.",veil_refresh:"Use when you need to rebuild index state.",veil_build:"Use when you need a full index rebuild.",veil_files:"Use when you need file path matches.",veil_symbols:"Use when you need symbol name matches.",veil_search:"Use when you need indexed keyword matches.",veil_lookup:"Use when you need ranked natural-language code context. Defaults are compact.",veil_discover:"Use when you need one broad first retrieval call.",veil_chunk:"Use when you need full content for one chunk id.",veil_grammar_list:"Use when you need parser availability and enabled state.",veil_grammar_install:"Use when you need to enable parser IDs.",veil_grammar_remove:"Use when you need to disable parser IDs.",veil_grammar_update:"Use when you need parser metadata refresh.",veil_grammar_recommend:"Use when you need parser improvement suggestions for unsupported or disabled language coverage.",veil_grammar_runtime_install:"Use when you need explicit, approved runtime package install for parser IDs.",veil_web_search:"Use when you need external docs or web references.",veil_fetch_url:"Use when you need markdown-first page content from a URL.",veil_git_status:"Use when you need branch or dirty-tree context.",veil_git_log:"Use when you need commit history context.",veil_git_diff:"Use when you need diff content for changes.",veil_git_show:"Use when you need commit details for one revision.",veil_gh_lookup:"Use when you need GitHub issues, PRs, checks, or repo bootstrap.",veil_diagnostics:"Use when you need cache or latency diagnostics."};import{readFileSync as Gr}from"node:fs";import{dirname as qr,resolve as rt}from"node:path";import{fileURLToPath as Br}from"node:url";var st=/^\d+\.\d+\.\d+$/,Hr=2e3,No=600*1e3,Ao="@ushiradineth/veil",Mo=(e,t)=>fetch(e,t),$r,jr=new Map;function Oo(e){let t=qr(Br(e)),n=[rt(t,"../package.json"),rt(t,"../../package.json")];for(let r of n)try{let s=JSON.parse(Gr(r,"utf8"));if(typeof s.version=="string"&&st.test(s.version))return s.version}catch{}return null}function Fo(e){let t=e.match(/^version:\s*([0-9]+\.[0-9]+\.[0-9]+)\s*$/m);if(!t)return null;let n=t[1]??"";return st.test(n)?n:null}function Do(e){let t=qr(Br(e)),n=[rt(t,"../skills/SKILL.md"),rt(t,"../../skills/SKILL.md")];for(let r of n)try{let s=Gr(r,"utf8"),i=Fo(s);if(i)return i}catch{}return null}function zr(e){if(!st.test(e))return null;let[t,n,r]=e.split(".").map(s=>Number.parseInt(s,10));return!Number.isFinite(t)||!Number.isFinite(n)||!Number.isFinite(r)?null:[t,n,r]}function Vr(e,t){let n=zr(e),r=zr(t);if(!n||!r)return null;for(let s=0;s<3;s++){if(n[s]>r[s])return 1;if(n[s]<r[s])return-1}return 0}function Uo(){return $r!==void 0?$r:Bo}async function Wo(e,t){let n=Number.isFinite(t)?Math.max(250,t):Hr,r=new AbortController,s=setTimeout(()=>{r.abort()},n);try{let i=`https://registry.npmjs.org/${encodeURIComponent(e)}/latest`,o=await Mo(i,{signal:r.signal,headers:{accept:"application/json"}});if(!o.ok)throw new Error(`npm lookup failed with status ${String(o.status)}`);let a=await o.json(),l=typeof a.version=="string"?a.version:null;if(!l||!st.test(l))throw new Error("npm lookup returned invalid version");return l}finally{clearTimeout(s)}}function Qr(e,t){return`${e}\0${t}`}function $o(e,t){let n=Qr(e,t),r=jr.get(n);return!r||Date.now()-r.ts>No?null:{...r.value,source:"cache"}}function zo(e,t,n){let r=Qr(e,t);jr.set(r,{ts:Date.now(),value:n})}async function Go(e={}){let t=e.package_name??Ao,n=e.current_version??jt,r=e.allow_network??!0,s=e.force_refresh===!0,i=e.timeout_ms??Hr;if(!s){let o=$o(t,n);if(o)return o}if(!r){let o=new Date().toISOString();return{package_name:t,current:n,latest:null,outdated:null,source:"unavailable",checked_at:o,warning:"network-check-disabled"}}try{let o=await Wo(t,i),a=Vr(n,o),l=new Date().toISOString(),u={package_name:t,current:n,latest:o,outdated:a===null?null:a<0,source:"network",checked_at:l};return a===null&&(u.warning="version-compare-failed"),zo(t,n,u),u}catch(o){let a=o instanceof Error?o.message:String(o),l=new Date().toISOString();return{package_name:t,current:n,latest:null,outdated:null,source:"unavailable",checked_at:l,warning:a}}}function qo(e){let t=Uo(),n=e?.trim()?e.trim():null;if(!t)return{expected:null,reported:n,outdated:null,reason:"expected-version-missing"};if(!n)return{expected:t,reported:null,outdated:null,reason:"reported-version-missing"};let r=Vr(n,t);return r===null?{expected:t,reported:n,outdated:null,reason:"invalid-version"}:{expected:t,reported:n,outdated:r<0,reason:null}}async function it(e={}){let t=await Go({allow_network:e.allow_network,force_refresh:e.force_refresh,timeout_ms:e.timeout_ms}),n=qo(e.reported_skill_version);return{mcp:t,skill:n}}var jt=Oo(import.meta.url)??"0.0.0",Bo=Do(import.meta.url);var ye=["google","duckduckgo","wikipedia","github","reddit","deepwiki"],Ho={google:10,duckduckgo:9,wikipedia:6,github:7,reddit:5,deepwiki:8},jo=new Set(["utm_source","utm_medium","utm_campaign","utm_term","utm_content","gclid","fbclid","ref"]);function X(){return typeof Bun<"u"&&typeof Bun.nanoseconds=="function"?Bun.nanoseconds()/1e6:Date.now()}function F(e){return e.replace(/\s+/g," ").trim()}function Vt(e){return e.replace(/<[^>]+>/g," ")}function Oe(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"').replace(/'/g,"'")}function ot(e){let t=F(e);if(!t)return"";try{let n=new URL(t),r=[];for(let[o,a]of n.searchParams.entries())jo.has(o.toLowerCase())||r.push([o,a]);r.sort(([o,a],[l,u])=>{let d=o.localeCompare(l);return d!==0?d:a.localeCompare(u)});let s=r.map(([o,a])=>`${encodeURIComponent(o)}=${encodeURIComponent(a)}`).join("&"),i=n.pathname||"/";return i.length>1&&(i=i.replace(/\/+$/,"")),`${n.protocol.toLowerCase()}//${n.host.toLowerCase()}${i}${s?`?${s}`:""}`}catch{return t.replace(/\/+$/,"").toLowerCase()}}function Qt(e){let t=F(Oe(e));if(!t)return"";let n=t.startsWith("//")?`https:${t}`:t;try{let r=new URL(n);if(r.host.includes("duckduckgo.com")&&r.pathname==="/l/"){let s=r.searchParams.get("uddg");if(s)return F(decodeURIComponent(s))}return n}catch{return n}}function Vo(e){try{return new URL(Qt(e)).host.toLowerCase()}catch{return""}}function Qo(e,t){return Number((Ho[e]-t*.01).toFixed(4))}function Ko(e){let t=new Set(["a","an","the","to","from","for","of","in","on","with","how","do","i"]),n=e.toLowerCase().replace(/[^a-z0-9\s]+/g," ").split(/\s+/).map(r=>r.trim()).filter(r=>r.length>=2&&!t.has(r));return Array.from(new Set(n))}function Xo(e,t){let n=Ko(e);if(n.length===0)return 0;let r=e.toLowerCase(),s=t.title.toLowerCase(),i=t.snippet.toLowerCase(),o=t.url.toLowerCase(),a=0;for(let l of n)s.includes(l)&&(a+=6),i.includes(l)&&(a+=3),o.includes(l)&&(a+=1);return s.includes(r)&&(a+=8),i.includes(r)&&(a+=4),a}function Jo(e,t){let n=[],r=/<a href="\/url\?q=([^"&]+)[^"]*"[^>]*>([\s\S]*?)<\/a>/g,s=r.exec(e);for(;s&&n.length<t;){let i=F(decodeURIComponent(Oe(s[1])));if(!i||i.includes("webcache.googleusercontent.com")){s=r.exec(e);continue}let o=s[2],a=/<h3[^>]*>([\s\S]*?)<\/h3>/.exec(o),l=F(Oe(Vt(a?.[1]??"")));if(!l){s=r.exec(e);continue}n.push({title:l,url:i,snippet:""}),s=r.exec(e)}return n}function Yr(e){if(!e)return[];let t=[];for(let n of e){if(Array.isArray(n.Topics)&&n.Topics.length>0){t.push(...Yr(n.Topics));continue}t.push(n)}return t}function Kr(e,t){let n=[],r=Yr(e.RelatedTopics);for(let s of r){let i=F(s.Text??""),o=F(s.FirstURL??"");if(!(!i||!o)&&(n.push({title:i.split(" - ")[0]??i,url:o,snippet:i}),n.length>=t))break}return n}function Xr(e,t){let n=[],r=/<a[^>]*class="[^"]*result__a[^"]*"[^>]*href="([^"]+)"[^>]*>([\s\S]*?)<\/a>/g,s=r.exec(e);for(;s&&n.length<t;){let i=Qt(s[1]),o=F(Oe(Vt(s[2])));if(!i||!o){s=r.exec(e);continue}n.push({title:o,url:i,snippet:""}),s=r.exec(e)}return n}function Yo(e,t){let n=[],r=/<a[^>]*class="[^"]*result__a[^"]*"[^>]*href="([^"]+)"[^>]*>([\s\S]*?)<\/a>/g,s=r.exec(e);for(;s&&n.length<t;){let i=Qt(s[1]),o=F(Oe(Vt(s[2]))),a=ot(i);if(!o||!a.includes("deepwiki.com/")){s=r.exec(e);continue}n.push({title:o,url:i,snippet:""}),s=r.exec(e)}return n}function Zo(e,t){if(!Array.isArray(e))return[];let n=Array.isArray(e[1])?e[1]:[],r=Array.isArray(e[2])?e[2]:[],s=Array.isArray(e[3])?e[3]:[],i=[];for(let o=0;o<n.length;o+=1){let a=F(String(n[o]??"")),l=F(String(s[o]??""));if(!(!a||!l)&&(i.push({title:a,url:l,snippet:F(String(r[o]??""))}),i.length>=t))break}return i}function ea(e,t){let n=Array.isArray(e.items)?e.items:[],r=[];for(let s of n){let i=F(s.full_name??""),o=F(s.html_url??"");if(!(!i||!o)&&(r.push({title:i,url:o,snippet:F(s.description??"")}),r.length>=t))break}return r}function ta(e,t){let n=Array.isArray(e.data?.children)?e.data.children:[],r=[];for(let s of n){let i=s.data;if(!i)continue;let o=F(i.title??""),a=F(i.permalink??"");if(!o||!a)continue;let l=a.startsWith("http")?a:`https://www.reddit.com${a}`,u=F(i.selftext??i.url??"");if(r.push({title:o,url:l,snippet:u}),r.length>=t)break}return r}async function Me(e){try{return await e.json()}catch{throw new Error("invalid-json")}}async function na(e,t,n,r,s){let i=X();try{let o=await e.run(t,n,r,s);return{provider:e.provider,ok:o.length>0,duration_ms:Number((X()-i).toFixed(4)),results:o,warning:o.length>0?null:"no-parseable-results"}}catch(o){let a=$e(o),l=ze(s.aborted||a==="timeout",a);return{provider:e.provider,ok:!1,duration_ms:Number((X()-i).toFixed(4)),results:[],warning:l?"timeout":a}}}function ra(e,t,n){let r=[...e].sort((u,d)=>ye.indexOf(u.provider)-ye.indexOf(d.provider)),s=new Map;for(let u of r)for(let d=0;d<u.results.length;d+=1){let m=u.results[d],f=ot(m.url);if(!f)continue;let p=Xo(n,m),b=Number((p*100+Qo(u.provider,d+1)).toFixed(4)),x={provider:u.provider,title:m.title,url:m.url,snippet:m.snippet,score:b,reasons:[{label:`${u.provider}-rank`,detail:`Provider ${u.provider} rank ${String(d+1)}`}]},_=s.get(f);if(!_){s.set(f,x);continue}if(x.score>_.score){x.reasons.push({label:"dedupe",detail:`Duplicate URL also seen in ${_.provider}`}),s.set(f,x);continue}_.reasons.push({label:"dedupe",detail:`Duplicate URL also seen in ${x.provider}`})}let i=[...s.values()].sort((u,d)=>{let m=d.score-u.score;if(m!==0)return m;let f=ye.indexOf(u.provider)-ye.indexOf(d.provider);return f!==0?f:ot(u.url).localeCompare(ot(d.url))}),o=new Map,a=[];for(let u of i){let d=Vo(u.url),m=o.get(d)??0;if(!(d&&m>=2)&&(d&&o.set(d,m+1),a.push(u),a.length>=t))break}return{primary_provider:a.length>0?a[0].provider:r.find(u=>u.ok)?.provider??"google",detailed_results:a.map(u=>({title:u.title,url:u.url,snippet:u.snippet,score:u.score,reasons:u.reasons}))}}var sa=[{provider:"google",run:async(e,t,n,r)=>{let s=`https://www.google.com/search?q=${encodeURIComponent(t)}&hl=en&num=${String(n)}`,i=await e(s,{method:"GET",headers:{accept:"text/html","user-agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36"},signal:r});if(i.ok){let p=await i.text(),b=Jo(p,n);if(b.length>0)return b}let o=`https://html.duckduckgo.com/html/?q=${encodeURIComponent(t)}`,a=await e(o,{method:"GET",headers:{accept:"text/html","user-agent":"Mozilla/5.0 (compatible; veil-web-search)"},signal:r});if(!a.ok)throw new Error(`http-${String(i.status||a.status)}`);let l=await a.text(),u=Xr(l,n);if(u.length>0)return u;let d=`https://api.duckduckgo.com/?q=${encodeURIComponent(t)}&format=json&no_redirect=1&no_html=1`,m=await e(d,{method:"GET",headers:{accept:"application/json"},signal:r});if(!m.ok)return[];let f=await Me(m);return Kr(f,n)}},{provider:"duckduckgo",run:async(e,t,n,r)=>{let s=`https://html.duckduckgo.com/html/?q=${encodeURIComponent(t)}`,i=await e(s,{method:"GET",headers:{accept:"text/html","user-agent":"Mozilla/5.0 (compatible; veil-web-search)"},signal:r});if(i.ok){let u=await i.text(),d=Xr(u,n);if(d.length>0)return d}let o=`https://api.duckduckgo.com/?q=${encodeURIComponent(t)}&format=json&no_redirect=1&no_html=1`,a=await e(o,{method:"GET",headers:{accept:"application/json"},signal:r});if(!a.ok)throw new Error(`http-${String(a.status)}`);let l=await Me(a);return Kr(l,n)}},{provider:"wikipedia",run:async(e,t,n,r)=>{let s=`https://en.wikipedia.org/w/api.php?action=opensearch&search=${encodeURIComponent(t)}&limit=${String(n)}&namespace=0&format=json&origin=*`,i=await e(s,{method:"GET",headers:{accept:"application/json"},signal:r});if(!i.ok)throw new Error(`http-${String(i.status)}`);let o=await Me(i);return Zo(o,n)}},{provider:"github",run:async(e,t,n,r)=>{let s=`https://api.github.com/search/repositories?q=${encodeURIComponent(t)}&per_page=${String(n)}&sort=stars&order=desc`,i=await e(s,{method:"GET",headers:{accept:"application/vnd.github+json","user-agent":"veil-web-search"},signal:r});if(!i.ok)throw new Error(`http-${String(i.status)}`);let o=await Me(i);return ea(o,n)}},{provider:"reddit",run:async(e,t,n,r)=>{let s=`https://www.reddit.com/search.json?q=${encodeURIComponent(t)}&limit=${String(n)}&sort=relevance&type=link`,i=await e(s,{method:"GET",headers:{accept:"application/json","user-agent":"veil-web-search"},signal:r});if(!i.ok)throw new Error(`http-${String(i.status)}`);let o=await Me(i);return ta(o,n)}},{provider:"deepwiki",run:async(e,t,n,r)=>{let s=`site:deepwiki.com ${t}`,i=`https://html.duckduckgo.com/html/?q=${encodeURIComponent(s)}`,o=await e(i,{method:"GET",headers:{accept:"text/html","user-agent":"Mozilla/5.0 (compatible; veil-web-search)"},signal:r});if(!o.ok)throw new Error(`http-${String(o.status)}`);let a=await o.text();return Yo(a,n)}}];function Jr(e,t,n){return{provider:e,ok:!1,duration_ms:Number(t.toFixed(4)),result_count:0,warning:n}}async function Zr(e,t){let n=X(),r=mn(t.query),s=qe(t.limit),i=Be(t.timeout_ms),o=t.debug??!1;if(!r)return{meta:{ok:!1,duration_ms:Number((X()-n).toFixed(4))},data:null,error:{code:"invalid-query",message:"Query is required"}};let a=new AbortController,l=setTimeout(()=>{a.abort("timeout")},i),u=t.fetch_impl??fetch,d=!1;try{let m=sa.map((h,y)=>na(h,u,r,s,a.signal).then(N=>({idx:y,outcome:N}))),f=new Set(m.map((h,y)=>y)),p=[];for(;f.size>0;){let h=X()-n,y=i-h;if(y<=0){d=!0;break}let N=[...f].map(E=>m[E]),C=new Promise(E=>{setTimeout(()=>{E(null)},y)}),M=await Promise.race([...N,C]);if(!M){d=!0;break}f.delete(M.idx),p.push(M.outcome)}f.size>0&&!a.signal.aborted&&a.abort("timeout");let b=ra(p,s,r),x=new Map;for(let h of p)x.set(h.provider,{provider:h.provider,ok:h.ok,duration_ms:h.duration_ms,result_count:h.results.length,warning:h.warning});let _=X()-n;for(let h of f){let y=ye[h]??"google";x.set(y,Jr(y,_,d?"timeout":"cancelled"))}let k=ye.map(h=>x.get(h)??Jr(h,_,d?"timeout":"not-run")),w=k.filter(h=>!h.ok&&h.warning).map(h=>`${h.provider}: ${h.warning??"unknown"}`);if(b.detailed_results.length>0){let h=b.detailed_results.map(y=>({title:y.title,url:y.url}));return{meta:{ok:!0,duration_ms:Number((X()-n).toFixed(4))},data:{results:h,...o?{debug:{query:r,provider:b.primary_provider,warnings:w,provider_trace:k,detailed_results:b.detailed_results}}:{}},error:null}}return{meta:{ok:!1,duration_ms:Number((X()-n).toFixed(4))},data:null,error:{code:d?"timeout":"provider-unavailable",message:d?"Global timeout budget reached before providers returned results":"No provider returned parseable results"}}}catch(m){return{meta:{ok:!1,duration_ms:Number((X()-n).toFixed(4))},data:null,error:{code:"internal-error",message:m instanceof Error?m.message:String(m)}}}finally{clearTimeout(l)}}var $={readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},ke={readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},at={readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},ca={readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},rs=1024*1024,ce=class extends Error{constructor(t){super(t),this.name="HttpBodyTooLargeError"}};function es(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:{value:e}}function g(e){return typeof e=="string"?e:void 0}function S(e){return typeof e=="number"?e:void 0}function L(e){return typeof e=="boolean"?e:void 0}function ts(e){if(!e||typeof e!="object"||Array.isArray(e))return{exists:!1,stale:!0,reasons:["unknown"]};let t=e,n={exists:t.exists===!0,stale:t.stale===!0,reasons:Array.isArray(t.reasons)?t.reasons:[]},r=Array.isArray(t.grammar_suggestions)?t.grammar_suggestions:[];return r.length>0&&(n.grammar_suggestions=r),n}function lt(e){if(Array.isArray(e)){let t=e.filter(n=>typeof n=="string").join(",");return Qe(t)}return typeof e=="string"?Qe(e):[]}function da(e){return Z.find(n=>n.id===e)?.label??e}function ma(e){if(!e||typeof e!="object"||Array.isArray(e))return 0;let t=e;return(Array.isArray(t.items)?t.items.length:0)+(Array.isArray(t.files)?t.files.length:0)+(Array.isArray(t.symbols)?t.symbols.length:0)+(Array.isArray(t.chunks)?t.chunks.length:0)}function Yt(e,t){if(!t||t.trim()==="")return!0;let n=t.toLowerCase();if(n.includes(e.language.toLowerCase()))return!0;let r=Z.find(s=>s.id===e.parser_id);return r?n.includes(r.id.toLowerCase())?!0:r.aliases.some(s=>n.includes(s.toLowerCase())):!1}async function ut(e,t,n,r){if(ma(n)>0)return n;let o=((await K(e,{state_root:t})).grammar_suggestions??[]).filter(a=>Yt(a,r));return o.length===0?n:{...n,grammar_suggestions:o}}function fa(e){return{content:[{type:"text",text:wt(e)}],isError:!1}}function Kt(e,t){let n=es(t),r=es(n.error),i={ok:!1,error:{code:g(r.code)??"tool-error",message:e}};return{content:[{type:"text",text:wt(i)}],isError:!0}}function pa(e){if(!e||typeof e!="object")return null;let t=e,n=g(t.code);if(n&&n.trim().length>0)return n;let r=g(t.reason);return r&&r.trim().length>0?r:null}function W(e,t){let n=e??process.cwd();return P.configureStatePath(cn(n,t)),n}async function Fe(e){let t=W(e.workspace,e.state_root);return await Gt(t,{state_root:e.state_root,refresh_if_stale:e.refresh_if_stale??!0,strict_query_freshness:!0}),t}var Zt=[{name:"veil_status",title:"Veil Index Status",description:T.veil_status,inputSchema:{workspace:c.string().optional(),state_root:c.string().optional(),reported_skill_version:c.string().optional()},annotations:$,handler:async e=>{let t=g(e.workspace),n=g(e.state_root),r=W(t,n),s=await K(r,{state_root:n,bypass_cache:!0}),i=await it({allow_network:!1,reported_skill_version:g(e.reported_skill_version)});return A("status",{...s,updates:i})}},{name:"veil_update_check",title:"Veil Update Check",description:T.veil_update_check,inputSchema:{workspace:c.string().optional(),state_root:c.string().optional(),reported_skill_version:c.string().optional(),force_refresh:c.boolean().optional(),timeout_ms:c.number().int().positive().max(1e4).optional()},annotations:at,handler:async e=>{W(g(e.workspace),g(e.state_root));let t=await it({reported_skill_version:g(e.reported_skill_version),force_refresh:L(e.force_refresh),timeout_ms:S(e.timeout_ms)});return A("update_check",t)}},{name:"veil_refresh",title:"Veil Refresh Index",description:T.veil_refresh,inputSchema:{workspace:c.string().optional(),mode:c.enum(["full","changed"]).optional(),state_root:c.string().optional()},annotations:ke,handler:async e=>{let t=g(e.workspace),n=g(e.state_root),r=e.mode==="full"?"full":"changed",s=W(t,n),i=await he(s,r,{state_root:n});return A("refresh",{ok:!0,mode:r,manifest:i})}},{name:"veil_build",title:"Veil Build Index",description:T.veil_build,inputSchema:{workspace:c.string().optional(),state_root:c.string().optional()},annotations:ke,handler:async e=>{let t=g(e.workspace),n=g(e.state_root),r=W(t,n);return{ok:!0,mode:"full",manifest:await he(r,"full",{state_root:n})}}},{name:"veil_grammar_list",title:"Veil Grammar List",description:T.veil_grammar_list,inputSchema:{workspace:c.string().optional(),state_root:c.string().optional()},annotations:$,handler:async e=>{let t=g(e.workspace),n=g(e.state_root),r=W(t,n);return{parsers:await Fn(r,n)}}},{name:"veil_grammar_install",title:"Veil Grammar Install",description:T.veil_grammar_install,inputSchema:{workspace:c.string().optional(),state_root:c.string().optional(),parsers:c.array(c.string()).optional()},annotations:ke,handler:async e=>{let t=g(e.workspace),n=g(e.state_root),r=W(t,n),s=await Ve(r,lt(e.parsers),n);return{ok:!0,installed:s.installed,enabled:s.enabled}}},{name:"veil_grammar_remove",title:"Veil Grammar Remove",description:T.veil_grammar_remove,inputSchema:{workspace:c.string().optional(),state_root:c.string().optional(),parsers:c.array(c.string()).optional()},annotations:ke,handler:async e=>{let t=g(e.workspace),n=g(e.state_root),r=W(t,n),s=await Mn(r,lt(e.parsers),n);return{ok:!0,installed:s.installed,enabled:s.enabled}}},{name:"veil_grammar_update",title:"Veil Grammar Update",description:T.veil_grammar_update,inputSchema:{workspace:c.string().optional(),state_root:c.string().optional(),parsers:c.array(c.string()).optional(),all:c.boolean().optional()},annotations:ke,handler:async e=>{let t=g(e.workspace),n=g(e.state_root),r=W(t,n),s=L(e.all)?"all":lt(e.parsers),i=await On(r,s,n);return{ok:!0,updated:i.updated,installed:i.installed}}},{name:"veil_grammar_recommend",title:"Veil Grammar Recommend",description:T.veil_grammar_recommend,inputSchema:{workspace:c.string().optional(),state_root:c.string().optional(),query:c.string().optional(),limit:c.number().int().positive().max(10).optional()},annotations:$,handler:async e=>{let t=g(e.workspace),n=g(e.state_root),r=g(e.query),s=W(t,n),i=await K(s,{state_root:n}),o=Math.max(1,Math.min(S(e.limit)??5,10)),a=(i.grammar_suggestions??[]).filter(l=>Yt(l,r)).slice(0,o).map(l=>{let u=Qe(l.parser_id),d=Pt(u,{install_root:pe(s,n)});return{...l,parser_label:da(l.parser_id),install_plan:d,note:l.reason==="parser-disabled"?"Parser is available but disabled. Installing runtime and enabling parser improves symbol extraction accuracy.":"Parser runtime package is missing. Installing runtime restores symbol extraction accuracy."}});return A("grammar_recommend",{query:r??null,suggestions:a})}},{name:"veil_grammar_runtime_install",title:"Veil Grammar Runtime Install",description:T.veil_grammar_runtime_install,inputSchema:{workspace:c.string().optional(),state_root:c.string().optional(),parsers:c.array(c.string()).optional(),timeout_ms:c.number().int().positive().max(3e5).optional()},annotations:ke,handler:async e=>{let t=g(e.workspace),n=g(e.state_root),r=W(t,n),s=lt(e.parsers),i=await $n(r,s,n,S(e.timeout_ms)),o=await K(r,{state_root:n,bypass_cache:!0}),a=o.grammar_suggestions??[],l={...i,status:ts(o)};return a.length>0&&(l.grammar_suggestions=a),A("grammar_runtime_install",{...l})}},{name:"veil_files",title:"Veil Find Files",description:T.veil_files,inputSchema:{workspace:c.string().optional(),query:c.string(),limit:c.number().int().positive().max(200).optional(),refresh_if_stale:c.boolean().optional(),state_root:c.string().optional()},annotations:$,handler:async e=>{let t=g(e.query)??"",n=g(e.workspace),r=g(e.state_root),s=L(e.refresh_if_stale),i=S(e.limit),o=await Fe({workspace:n,state_root:r,refresh_if_stale:s}),a=await Ce(o,t,_t(i),{state_root:r}),l=await ut(o,r,{items:a},t);return A("files",l,{query:t})}},{name:"veil_symbols",title:"Veil Find Symbols",description:T.veil_symbols,inputSchema:{workspace:c.string().optional(),query:c.string(),limit:c.number().int().positive().max(200).optional(),refresh_if_stale:c.boolean().optional(),state_root:c.string().optional()},annotations:$,handler:async e=>{let t=g(e.query)??"",n=g(e.workspace),r=g(e.state_root),s=L(e.refresh_if_stale),i=S(e.limit),o=await Fe({workspace:n,state_root:r,refresh_if_stale:s}),a=await Ie(o,t,bt(i),{state_root:r}),l=await ut(o,r,{items:a},t);return A("symbols",l,{query:t})}},{name:"veil_search",title:"Veil Search Chunks",description:T.veil_search,inputSchema:{workspace:c.string().optional(),query:c.string(),limit:c.number().int().positive().optional(),content_mode:c.enum(["none","preview","full"]).optional(),include_content:c.boolean().optional(),content_max_chars:c.number().int().positive().optional(),prefer_code:c.boolean().optional(),path_prefix:c.string().optional(),language:c.string().optional(),intent:c.enum(["auto","code","docs","symbols"]).optional(),refresh_if_stale:c.boolean().optional(),state_root:c.string().optional()},annotations:$,handler:async e=>{let t=g(e.query)??"",n=g(e.workspace),r=g(e.state_root),s=L(e.refresh_if_stale),i=await Fe({workspace:n,state_root:r,refresh_if_stale:s}),o=await Ee(i,t,yt(S(e.limit)),{content_mode:e.content_mode==="none"||e.content_mode==="full"||e.content_mode==="preview"?e.content_mode:void 0,include_content:L(e.include_content),content_max_chars:xe(S(e.content_max_chars)),prefer_code:L(e.prefer_code),path_prefix:g(e.path_prefix),language:g(e.language),intent:e.intent==="code"||e.intent==="docs"||e.intent==="symbols"?e.intent:"auto",state_root:r}),a=await ut(i,r,{items:o},t);return A("search",a,{query:t})}},{name:"veil_lookup",title:"Veil Lookup Context",description:T.veil_lookup,inputSchema:{workspace:c.string().optional(),query:c.string(),files_limit:c.number().int().positive().optional(),symbols_limit:c.number().int().positive().optional(),search_limit:c.number().int().positive().optional(),content_mode:c.enum(["none","preview","full"]).optional(),include_content:c.boolean().optional(),content_max_chars:c.number().int().positive().optional(),prefer_code:c.boolean().optional(),path_prefix:c.string().optional(),language:c.string().optional(),intent:c.enum(["auto","code","docs","symbols"]).optional(),response_mode:c.enum(["full","compact"]).optional(),refresh_if_stale:c.boolean().optional(),state_root:c.string().optional()},annotations:$,handler:async e=>{let t=g(e.query)??"",n=g(e.workspace),r=g(e.state_root),s=L(e.refresh_if_stale),i=await Fe({workspace:n,state_root:r,refresh_if_stale:s}),o=await Ir(i,t,{files_limit:fn(S(e.files_limit)),symbols_limit:pn(S(e.symbols_limit)),search_limit:hn(S(e.search_limit)),content_mode:e.content_mode==="none"||e.content_mode==="full"||e.content_mode==="preview"?e.content_mode:void 0,include_content:L(e.include_content),content_max_chars:xe(S(e.content_max_chars)),prefer_code:L(e.prefer_code),path_prefix:g(e.path_prefix),language:g(e.language),intent:e.intent==="code"||e.intent==="docs"||e.intent==="symbols"?e.intent:"auto",response_mode:e.response_mode==="full"?"full":"compact",state_root:r}),a=await ut(i,r,o,t);return A("lookup",a,{query:t})}},{name:"veil_discover",title:"Veil Discover Context",description:T.veil_discover,inputSchema:{workspace:c.string().optional(),query:c.string(),files_limit:c.number().int().positive().optional(),symbols_limit:c.number().int().positive().optional(),search_limit:c.number().int().positive().optional(),content_mode:c.enum(["none","preview","full"]).optional(),include_content:c.boolean().optional(),content_max_chars:c.number().int().positive().optional(),refresh_if_stale:c.boolean().optional(),prefer_code:c.boolean().optional(),path_prefix:c.string().optional(),language:c.string().optional(),intent:c.enum(["auto","code","docs","symbols"]).optional(),state_root:c.string().optional(),reported_skill_version:c.string().optional()},annotations:$,handler:async e=>{let t=g(e.query)??"",n=g(e.workspace),r=g(e.state_root),s=W(n,r),i=await Gt(s,{state_root:r,refresh_if_stale:L(e.refresh_if_stale)??!0,strict_query_freshness:!0}),o=await Cr(s,t,{files_limit:_t(S(e.files_limit)),symbols_limit:bt(S(e.symbols_limit)),search_limit:yt(S(e.search_limit)),content_mode:e.content_mode==="none"||e.content_mode==="full"||e.content_mode==="preview"?e.content_mode:void 0,include_content:L(e.include_content),content_max_chars:xe(S(e.content_max_chars)),prefer_code:L(e.prefer_code),path_prefix:g(e.path_prefix),language:g(e.language),intent:e.intent==="code"||e.intent==="docs"||e.intent==="symbols"?e.intent:"auto",state_root:r}),a=(i.status_after.grammar_suggestions??[]).filter(d=>Yt(d,t)),l=await it({allow_network:!1,reported_skill_version:g(e.reported_skill_version)}),u={status:ts(i.status_after),updates:l,intent:o.intent,files:o.files,symbols:o.symbols,chunks:o.chunks};return a.length>0&&(u.grammar_suggestions=a),A("discover",u,{query:t})}},{name:"veil_chunk",title:"Veil Fetch Chunk",description:T.veil_chunk,inputSchema:{workspace:c.string().optional(),id:c.string(),content_max_chars:c.number().int().positive().optional(),refresh_if_stale:c.boolean().optional(),state_root:c.string().optional()},annotations:$,handler:async e=>{let t=g(e.workspace),n=g(e.state_root),r=await Fe({workspace:t,state_root:n,refresh_if_stale:L(e.refresh_if_stale)??!0}),s=g(e.id)??"",i=await Er(r,s,{state_root:n,include_content:!0,content_max_chars:xe(S(e.content_max_chars))});return A("chunk",{item:i},{query:s})}},{name:"veil_web_search",title:"Veil Web Search",description:T.veil_web_search,inputSchema:{workspace:c.string().optional(),query:c.string(),limit:c.number().int().positive().optional(),timeout_ms:c.number().int().positive().optional(),debug:c.boolean().optional()},annotations:at,handler:async e=>{let t=g(e.query)??"",n=g(e.workspace)??process.cwd();return A("web_search",await Zr(n,{query:t,limit:qe(S(e.limit)),timeout_ms:Be(S(e.timeout_ms)),debug:L(e.debug)}),{query:t})}},{name:"veil_fetch_url",title:"Veil Fetch URL",description:T.veil_fetch_url,inputSchema:{url:c.string(),format:c.enum(["markdown","text","html"]).optional(),timeout_ms:c.number().int().positive().max(2e4).optional(),max_bytes:c.number().int().positive().max(2e6).optional(),include_error_content:c.boolean().optional(),allow_private_network:c.boolean().optional()},annotations:at,handler:async e=>{let t=g(e.url)??"";return A("fetch_url",await wn({url:t,format:e.format==="text"||e.format==="html"||e.format==="markdown"?e.format:void 0,timeout_ms:S(e.timeout_ms),max_bytes:S(e.max_bytes),include_error_content:L(e.include_error_content),allow_private_network:L(e.allow_private_network)}),{query:t})}},{name:"veil_git_status",title:"Veil Git Status",description:T.veil_git_status,inputSchema:{workspace:c.string().optional(),timeout_ms:c.number().int().positive().max(1e4).optional(),include_paths:c.boolean().optional(),paths_limit:c.number().int().positive().max(2e3).optional()},annotations:$,handler:async e=>A("git_status",await Or(g(e.workspace)??process.cwd(),{timeout_ms:S(e.timeout_ms),include_paths:L(e.include_paths),paths_limit:S(e.paths_limit)}))},{name:"veil_git_log",title:"Veil Git Log",description:T.veil_git_log,inputSchema:{workspace:c.string().optional(),limit:c.number().int().positive().max(200).optional(),since:c.string().optional(),author:c.string().optional(),grep:c.string().optional(),timeout_ms:c.number().int().positive().max(12e3).optional()},annotations:$,handler:async e=>A("git_log",await Fr(g(e.workspace)??process.cwd(),{limit:S(e.limit),since:g(e.since),author:g(e.author),grep:g(e.grep),timeout_ms:S(e.timeout_ms)}))},{name:"veil_git_diff",title:"Veil Git Diff",description:T.veil_git_diff,inputSchema:{workspace:c.string().optional(),staged:c.boolean().optional(),path:c.string().optional(),base:c.string().optional(),head:c.string().optional(),name_only:c.boolean().optional(),timeout_ms:c.number().int().positive().max(1e4).optional(),max_bytes:c.number().int().positive().max(5e5).optional()},annotations:$,handler:async e=>A("git_diff",await Dr(g(e.workspace)??process.cwd(),{staged:L(e.staged),path:g(e.path),base:g(e.base),head:g(e.head),name_only:L(e.name_only),timeout_ms:S(e.timeout_ms),max_bytes:S(e.max_bytes)}))},{name:"veil_git_show",title:"Veil Git Show",description:T.veil_git_show,inputSchema:{workspace:c.string().optional(),rev:c.string(),path:c.string().optional(),patch:c.boolean().optional(),timeout_ms:c.number().int().positive().max(12e3).optional(),max_bytes:c.number().int().positive().max(5e5).optional()},annotations:$,handler:async e=>A("git_show",await Ur(g(e.workspace)??process.cwd(),{rev:g(e.rev)??"",path:g(e.path),patch:L(e.patch),timeout_ms:S(e.timeout_ms),max_bytes:S(e.max_bytes)}))},{name:"veil_gh_lookup",title:"Veil GitHub Lookup",description:T.veil_gh_lookup,inputSchema:{workspace:c.string().optional(),repo:c.string(),kind:c.enum(["repo_context","issues","prs","checks"]),query:c.string().optional(),limit:c.number().int().positive().max(50).optional(),timeout_ms:c.number().int().positive().max(2e4).optional(),temp_root:c.string().optional(),state_root:c.string().optional()},annotations:at,handler:async e=>{let t=g(e.workspace),n=g(e.state_root),r=W(t,n),s=g(e.repo)??"",i=e.kind==="issues"||e.kind==="prs"||e.kind==="checks"?e.kind:"repo_context",o=g(e.query);return A("gh_lookup",await Wr(r,{repo:s,kind:i,query:o,limit:S(e.limit),timeout_ms:S(e.timeout_ms),temp_root:g(e.temp_root),state_root:n}),{query:o??s})}},{name:"veil_diagnostics",title:"Veil Diagnostics",description:T.veil_diagnostics,inputSchema:{workspace:c.string().optional(),state_root:c.string().optional(),reset:c.boolean().optional()},annotations:ca,handler:e=>{W(g(e.workspace),g(e.state_root)),L(e.reset)&&P.reset();let t=P.getDiagnostics();return A("diagnostics",t)}}];async function ha(e,t){try{let n=await e.handler(t),r=gt(n);return r?Kt(r,n):fa(n)}catch(n){let r=pa(n),s=n instanceof Error?n.message:String(n);return r?Kt(s,{error:{code:r}}):Kt(s)}}function tn(){let e=new aa({name:"veil-mcp-server",version:jt});for(let t of Zt)e.registerTool(t.name,{title:t.title,description:t.description,inputSchema:t.inputSchema,annotations:t.annotations},async n=>ha(t,n));return e}function De(e){let t=e.trim().toLowerCase();return t?t.startsWith("[")&&t.endsWith("]")?t.slice(1,-1):t:""}function ga(e){let t=e?.trim()??"";if(!t)return"";if(t.startsWith("[")){let r=t.indexOf("]");return De(r!==-1?t.slice(0,r+1):t)}let n=t.split(":")[0]??"";return De(n)}function Xt(e){return e==="localhost"||e==="127.0.0.1"||e==="::1"}function _a(e){if(!e)return"";try{return De(new URL(e).hostname)}catch{return""}}function ba(e,t,n){if(n)return null;let r=ga(e.headers.host);if(!r||!Xt(r))return"Request host is not allowed for local-only mode";let s=_a(g(e.headers.origin));return s&&!Xt(s)?"Origin is not allowed for local-only mode":Xt(De(t))?null:"Server host must be loopback unless allow_remote is true"}async function ss(e,t=rs){if(e.method!=="POST")return;let n=[],r=0;for await(let i of e){if(typeof i=="string"){let a=Buffer.from(i);if(r+=a.byteLength,r>t)throw new ce(`Request body exceeds ${String(t)} bytes maximum`);n.push(a);continue}if(Buffer.isBuffer(i)){if(r+=i.byteLength,r>t)throw new ce(`Request body exceeds ${String(t)} bytes maximum`);n.push(i);continue}if(i instanceof Uint8Array){let a=Buffer.from(i);if(r+=a.byteLength,r>t)throw new ce(`Request body exceeds ${String(t)} bytes maximum`);n.push(a);continue}let o=Buffer.from(String(i));if(r+=o.byteLength,r>t)throw new ce(`Request body exceeds ${String(t)} bytes maximum`);n.push(o)}if(n.length===0)return;let s=Buffer.concat(n).toString("utf-8").trim();if(s)try{return JSON.parse(s)}catch{return}}var ns=!1,Jt=null;async function nn(){ns||(Jt??=(async()=>{let e=tn(),t=new la;await e.connect(t),ns=!0})().catch(e=>{throw Jt=null,e}),await Jt)}var en=!1,ae=null,dt=null,mt=null,ft=null;async function ya(){if(ae)try{await ae}catch{}let e=dt,t=mt,n=ft;ae=null,en=!1,dt=null,mt=null,ft=null,e&&await new Promise((r,s)=>{e.close(i=>{if(i){s(i);return}r()})}),t&&await t.close(),n&&await n.close()}async function is(e={}){if(en)return;if(ae){await ae;return}let t=e.host?.trim()??"127.0.0.1",n=Number.isFinite(e.port)?Number(e.port):8765,r=e.path?.trim()??"/mcp",s=e.allow_remote===!0,i=tn(),o=new ua({sessionIdGenerator:void 0,enableJsonResponse:!0});await i.connect(o),mt=o,ft=i;let a=ia(async(l,u)=>{try{if((l.url??"")!==r){u.statusCode=404,u.end("Not Found");return}if(l.method!=="GET"&&l.method!=="POST"&&l.method!=="DELETE"){u.statusCode=405,u.end("Method Not Allowed");return}let d=ba(l,t,s);if(d){u.statusCode=403,u.end(d);return}let m=await ss(l);await o.handleRequest(l,u,m)}catch(d){if(d instanceof ce){u.headersSent||(u.statusCode=413,u.end(d.message));return}if(!u.headersSent){u.statusCode=500;let m=d instanceof Error?d.message:String(d);u.end(m)}}});dt=a,ae=new Promise((l,u)=>{a.on("error",u),a.listen(n,t,()=>{en=!0,l()})});try{await ae}catch(l){throw dt=null,mt=null,ft=null,ae=null,await o.close(),await i.close(),l}}var uu={createMcpServer:tn,toolNames:Zt.map(e=>e.name),toolDefinitions:Zt,responseErrorMessage:gt,parseRequestBody:ss,maxHttpRequestBodyBytes:rs,stopHttpServer:ya},ka=import.meta,wa=`${ct}src${ct}server.ts`,xa=oa(import.meta.url).endsWith(wa),va=process.argv.some(e=>e.endsWith(`${ct}src${ct}server.ts`)||e==="src/server.ts");xa&&(ka.main===!0||va)&&await nn();async function as(e=process.argv){if(ls(e)){await is();return}await nn()}function ls(e){return process.env.VEIL_HTTP==="1"?!0:e.includes("--http")}async function us(e=()=>as()){try{await e()}catch(t){process.stderr.write(String(t)+`
|
|
54
|
-
`),process.exitCode=1}}function
|
|
53
|
+
${le.stderr}`,code:1,timedOut:E.timedOut||D.timedOut||le.timedOut,stdoutTruncated:E.stdoutTruncated||D.stdoutTruncated||le.stdoutTruncated,stderrTruncated:E.stderrTruncated||D.stderrTruncated||le.stderrTruncated}:le}if(!C.ok)return S("gh_lookup",n,!1,C.timedOut),I(e,"gh_lookup",n,{code:C.timedOut?"timeout":"command-failed",message:`failed to sync repo ${l.repo}: ${C.stderr.trim()!==""?C.stderr.trim():C.error??"unknown"}`});try{await ge(h,"changed",{state_root:t.state_root});let M=await X(h,{state_root:t.state_root}),E=re(h,t.state_root),D={repo:l.repo,kind:"repo_context",query:t.query??"",limit:0,text:`repo indexed at ${h}`,repo_url:l.url,cloned_workspace:h,state_root:E,status_exists:M.exists};return S("gh_lookup",n,!0,!1),ye(e,"gh_lookup",n,D,{truncated:!1},Fe(C))}catch(M){return S("gh_lookup",n,!1,!1),I(e,"gh_lookup",n,{code:"command-failed",message:`failed to index cloned repo: ${String(M)}`})}}let u=Math.min(50,Math.max(1,t.limit??10)),c=t.query??"",m="issue",f;t.kind==="issues"?(m="issue",f=["search",c||"is:open","--repo",l.repo,"--limit",String(u)]):t.kind==="prs"?(m="pr",f=["list","--repo",l.repo,"--limit",String(u)],c&&f.push("--search",c)):(m="run",f=["list","--repo",l.repo,"--limit",String(u)]);let p=await O(s,[m,...f],e,r);if(!p.ok)return S("gh_lookup",n,!1,p.timedOut),I(e,"gh_lookup",n,{code:p.timedOut?"timeout":"command-failed",message:`gh lookup failed: ${p.stderr.trim()!==""?p.stderr.trim():p.error??"unknown"}`});let b=Jt(p.stdout,zr),x={repo:l.repo,kind:t.kind,query:c,limit:u,text:b.text,repo_url:l.url};return S("gh_lookup",n,!0,!1),ye(e,"gh_lookup",n,x,b,Fe(p))}var T={veil_status:"Use when you need index status or staleness.",veil_update_check:"Use when you need MCP package and skill update status.",veil_refresh:"Use when you need to rebuild index state.",veil_build:"Use when you need a full index rebuild.",veil_files:"Use when you need file path matches.",veil_symbols:"Use when you need symbol name matches.",veil_search:"Use when you need exact indexed text or keyword matches.",veil_lookup:"Use when you need ranked natural-language context across files, symbols, and code chunks.",veil_discover:"Use when you need one broad triage pass because intent is unclear before narrowing.",veil_chunk:"Use when you need full content for one chunk id.",veil_grammar_list:"Use when you need parser availability and enabled state.",veil_grammar_install:"Use when you need to enable parser IDs.",veil_grammar_remove:"Use when you need to disable parser IDs.",veil_grammar_update:"Use when you need parser metadata refresh.",veil_grammar_recommend:"Use when you need parser improvement suggestions for unsupported or disabled language coverage.",veil_grammar_runtime_install:"Use when you need explicit, approved runtime package install for parser IDs.",veil_web_search:"Use when you need external docs or web references.",veil_fetch_url:"Use when you need markdown-first page content from a URL.",veil_git_status:"Use when you need branch or dirty-tree context.",veil_git_log:"Use when you need commit history context.",veil_git_diff:"Use when you need diff content for changes.",veil_git_show:"Use when you need commit details for one revision.",veil_gh_lookup:"Use when you need GitHub issues, PRs, checks, or repo bootstrap.",veil_diagnostics:"Use when you need cache or latency diagnostics."};import{readFileSync as Xr}from"node:fs";import{dirname as Jr,resolve as ot}from"node:path";import{fileURLToPath as Yr}from"node:url";var at=/^\d+\.\d+\.\d+$/,Zr=2e3,Xo=600*1e3,Jo="@ushiradineth/veil",Yo=(e,t)=>fetch(e,t),Qr,es=new Map;function Zo(e){let t=Jr(Yr(e)),n=[ot(t,"../package.json"),ot(t,"../../package.json")];for(let r of n)try{let s=JSON.parse(Xr(r,"utf8"));if(typeof s.version=="string"&&at.test(s.version))return s.version}catch{}return null}function ea(e){let t=e.match(/^version:\s*([0-9]+\.[0-9]+\.[0-9]+)\s*$/m);if(!t)return null;let n=t[1]??"";return at.test(n)?n:null}function ta(e){let t=Jr(Yr(e)),n=[ot(t,"../skills/SKILL.md"),ot(t,"../../skills/SKILL.md")];for(let r of n)try{let s=Xr(r,"utf8"),i=ea(s);if(i)return i}catch{}return null}function Kr(e){if(!at.test(e))return null;let[t,n,r]=e.split(".").map(s=>Number.parseInt(s,10));return!Number.isFinite(t)||!Number.isFinite(n)||!Number.isFinite(r)?null:[t,n,r]}function ts(e,t){let n=Kr(e),r=Kr(t);if(!n||!r)return null;for(let s=0;s<3;s++){if(n[s]>r[s])return 1;if(n[s]<r[s])return-1}return 0}function na(){return Qr!==void 0?Qr:la}async function ra(e,t){let n=Number.isFinite(t)?Math.max(250,t):Zr,r=new AbortController,s=setTimeout(()=>{r.abort()},n);try{let i=`https://registry.npmjs.org/${encodeURIComponent(e)}/latest`,o=await Yo(i,{signal:r.signal,headers:{accept:"application/json"}});if(!o.ok)throw new Error(`npm lookup failed with status ${String(o.status)}`);let a=await o.json(),l=typeof a.version=="string"?a.version:null;if(!l||!at.test(l))throw new Error("npm lookup returned invalid version");return l}finally{clearTimeout(s)}}function ns(e,t){return`${e}\0${t}`}function sa(e,t){let n=ns(e,t),r=es.get(n);return!r||Date.now()-r.ts>Xo?null:{...r.value,source:"cache"}}function ia(e,t,n){let r=ns(e,t);es.set(r,{ts:Date.now(),value:n})}async function oa(e={}){let t=e.package_name??Jo,n=e.current_version??Yt,r=e.allow_network??!0,s=e.force_refresh===!0,i=e.timeout_ms??Zr;if(!s){let o=sa(t,n);if(o)return o}if(!r){let o=new Date().toISOString();return{package_name:t,current:n,latest:null,outdated:null,source:"unavailable",checked_at:o,warning:"network-check-disabled"}}try{let o=await ra(t,i),a=ts(n,o),l=new Date().toISOString(),u={package_name:t,current:n,latest:o,outdated:a===null?null:a<0,source:"network",checked_at:l};return a===null&&(u.warning="version-compare-failed"),ia(t,n,u),u}catch(o){let a=o instanceof Error?o.message:String(o),l=new Date().toISOString();return{package_name:t,current:n,latest:null,outdated:null,source:"unavailable",checked_at:l,warning:a}}}function aa(e){let t=na(),n=e?.trim()?e.trim():null;if(!t)return{expected:null,reported:n,outdated:null,reason:"expected-version-missing"};if(!n)return{expected:t,reported:null,outdated:null,reason:"reported-version-missing"};let r=ts(n,t);return r===null?{expected:t,reported:n,outdated:null,reason:"invalid-version"}:{expected:t,reported:n,outdated:r<0,reason:null}}async function lt(e={}){let t=await oa({allow_network:e.allow_network,force_refresh:e.force_refresh,timeout_ms:e.timeout_ms}),n=aa(e.reported_skill_version);return{mcp:t,skill:n}}var Yt=Zo(import.meta.url)??"0.0.0",la=ta(import.meta.url);var ke=["google","duckduckgo","wikipedia","github","reddit","deepwiki"],ua={google:10,duckduckgo:9,wikipedia:6,github:7,reddit:5,deepwiki:8},ca=new Set(["utm_source","utm_medium","utm_campaign","utm_term","utm_content","gclid","fbclid","ref"]);function J(){return typeof Bun<"u"&&typeof Bun.nanoseconds=="function"?Bun.nanoseconds()/1e6:Date.now()}function F(e){return e.replace(/\s+/g," ").trim()}function Zt(e){return e.replace(/<[^>]+>/g," ")}function Ue(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"').replace(/'/g,"'")}function ut(e){let t=F(e);if(!t)return"";try{let n=new URL(t),r=[];for(let[o,a]of n.searchParams.entries())ca.has(o.toLowerCase())||r.push([o,a]);r.sort(([o,a],[l,u])=>{let c=o.localeCompare(l);return c!==0?c:a.localeCompare(u)});let s=r.map(([o,a])=>`${encodeURIComponent(o)}=${encodeURIComponent(a)}`).join("&"),i=n.pathname||"/";return i.length>1&&(i=i.replace(/\/+$/,"")),`${n.protocol.toLowerCase()}//${n.host.toLowerCase()}${i}${s?`?${s}`:""}`}catch{return t.replace(/\/+$/,"").toLowerCase()}}function en(e){let t=F(Ue(e));if(!t)return"";let n=t.startsWith("//")?`https:${t}`:t;try{let r=new URL(n);if(r.host.includes("duckduckgo.com")&&r.pathname==="/l/"){let s=r.searchParams.get("uddg");if(s)return F(decodeURIComponent(s))}return n}catch{return n}}function da(e){try{return new URL(en(e)).host.toLowerCase()}catch{return""}}function ma(e,t){return Number((ua[e]-t*.01).toFixed(4))}function fa(e){let t=new Set(["a","an","the","to","from","for","of","in","on","with","how","do","i"]),n=e.toLowerCase().replace(/[^a-z0-9\s]+/g," ").split(/\s+/).map(r=>r.trim()).filter(r=>r.length>=2&&!t.has(r));return Array.from(new Set(n))}function pa(e,t){let n=fa(e);if(n.length===0)return 0;let r=e.toLowerCase(),s=t.title.toLowerCase(),i=t.snippet.toLowerCase(),o=t.url.toLowerCase(),a=0;for(let l of n)s.includes(l)&&(a+=6),i.includes(l)&&(a+=3),o.includes(l)&&(a+=1);return s.includes(r)&&(a+=8),i.includes(r)&&(a+=4),a}function ha(e,t){let n=[],r=/<a href="\/url\?q=([^"&]+)[^"]*"[^>]*>([\s\S]*?)<\/a>/g,s=r.exec(e);for(;s&&n.length<t;){let i=F(decodeURIComponent(Ue(s[1])));if(!i||i.includes("webcache.googleusercontent.com")){s=r.exec(e);continue}let o=s[2],a=/<h3[^>]*>([\s\S]*?)<\/h3>/.exec(o),l=F(Ue(Zt(a?.[1]??"")));if(!l){s=r.exec(e);continue}n.push({title:l,url:i,snippet:""}),s=r.exec(e)}return n}function os(e){if(!e)return[];let t=[];for(let n of e){if(Array.isArray(n.Topics)&&n.Topics.length>0){t.push(...os(n.Topics));continue}t.push(n)}return t}function rs(e,t){let n=[],r=os(e.RelatedTopics);for(let s of r){let i=F(s.Text??""),o=F(s.FirstURL??"");if(!(!i||!o)&&(n.push({title:i.split(" - ")[0]??i,url:o,snippet:i}),n.length>=t))break}return n}function ss(e,t){let n=[],r=/<a[^>]*class="[^"]*result__a[^"]*"[^>]*href="([^"]+)"[^>]*>([\s\S]*?)<\/a>/g,s=r.exec(e);for(;s&&n.length<t;){let i=en(s[1]),o=F(Ue(Zt(s[2])));if(!i||!o){s=r.exec(e);continue}n.push({title:o,url:i,snippet:""}),s=r.exec(e)}return n}function ga(e,t){let n=[],r=/<a[^>]*class="[^"]*result__a[^"]*"[^>]*href="([^"]+)"[^>]*>([\s\S]*?)<\/a>/g,s=r.exec(e);for(;s&&n.length<t;){let i=en(s[1]),o=F(Ue(Zt(s[2]))),a=ut(i);if(!o||!a.includes("deepwiki.com/")){s=r.exec(e);continue}n.push({title:o,url:i,snippet:""}),s=r.exec(e)}return n}function _a(e,t){if(!Array.isArray(e))return[];let n=Array.isArray(e[1])?e[1]:[],r=Array.isArray(e[2])?e[2]:[],s=Array.isArray(e[3])?e[3]:[],i=[];for(let o=0;o<n.length;o+=1){let a=F(String(n[o]??"")),l=F(String(s[o]??""));if(!(!a||!l)&&(i.push({title:a,url:l,snippet:F(String(r[o]??""))}),i.length>=t))break}return i}function ba(e,t){let n=Array.isArray(e.items)?e.items:[],r=[];for(let s of n){let i=F(s.full_name??""),o=F(s.html_url??"");if(!(!i||!o)&&(r.push({title:i,url:o,snippet:F(s.description??"")}),r.length>=t))break}return r}function ya(e,t){let n=Array.isArray(e.data?.children)?e.data.children:[],r=[];for(let s of n){let i=s.data;if(!i)continue;let o=F(i.title??""),a=F(i.permalink??"");if(!o||!a)continue;let l=a.startsWith("http")?a:`https://www.reddit.com${a}`,u=F(i.selftext??i.url??"");if(r.push({title:o,url:l,snippet:u}),r.length>=t)break}return r}async function De(e){try{return await e.json()}catch{throw new Error("invalid-json")}}async function ka(e,t,n,r,s){let i=J();try{let o=await e.run(t,n,r,s);return{provider:e.provider,ok:o.length>0,duration_ms:Number((J()-i).toFixed(4)),results:o,warning:o.length>0?null:"no-parseable-results"}}catch(o){let a=qe(o),l=Be(s.aborted||a==="timeout",a);return{provider:e.provider,ok:!1,duration_ms:Number((J()-i).toFixed(4)),results:[],warning:l?"timeout":a}}}function wa(e,t,n){let r=[...e].sort((u,c)=>ke.indexOf(u.provider)-ke.indexOf(c.provider)),s=new Map;for(let u of r)for(let c=0;c<u.results.length;c+=1){let m=u.results[c],f=ut(m.url);if(!f)continue;let p=pa(n,m),b=Number((p*100+ma(u.provider,c+1)).toFixed(4)),x={provider:u.provider,title:m.title,url:m.url,snippet:m.snippet,score:b,reasons:[{label:`${u.provider}-rank`,detail:`Provider ${u.provider} rank ${String(c+1)}`}]},_=s.get(f);if(!_){s.set(f,x);continue}if(x.score>_.score){x.reasons.push({label:"dedupe",detail:`Duplicate URL also seen in ${_.provider}`}),s.set(f,x);continue}_.reasons.push({label:"dedupe",detail:`Duplicate URL also seen in ${x.provider}`})}let i=[...s.values()].sort((u,c)=>{let m=c.score-u.score;if(m!==0)return m;let f=ke.indexOf(u.provider)-ke.indexOf(c.provider);return f!==0?f:ut(u.url).localeCompare(ut(c.url))}),o=new Map,a=[];for(let u of i){let c=da(u.url),m=o.get(c)??0;if(!(c&&m>=2)&&(c&&o.set(c,m+1),a.push(u),a.length>=t))break}return{primary_provider:a.length>0?a[0].provider:r.find(u=>u.ok)?.provider??"google",detailed_results:a.map(u=>({title:u.title,url:u.url,snippet:u.snippet,score:u.score,reasons:u.reasons}))}}var xa=[{provider:"google",run:async(e,t,n,r)=>{let s=`https://www.google.com/search?q=${encodeURIComponent(t)}&hl=en&num=${String(n)}`,i=await e(s,{method:"GET",headers:{accept:"text/html","user-agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36"},signal:r});if(i.ok){let p=await i.text(),b=ha(p,n);if(b.length>0)return b}let o=`https://html.duckduckgo.com/html/?q=${encodeURIComponent(t)}`,a=await e(o,{method:"GET",headers:{accept:"text/html","user-agent":"Mozilla/5.0 (compatible; veil-web-search)"},signal:r});if(!a.ok)throw new Error(`http-${String(i.status||a.status)}`);let l=await a.text(),u=ss(l,n);if(u.length>0)return u;let c=`https://api.duckduckgo.com/?q=${encodeURIComponent(t)}&format=json&no_redirect=1&no_html=1`,m=await e(c,{method:"GET",headers:{accept:"application/json"},signal:r});if(!m.ok)return[];let f=await De(m);return rs(f,n)}},{provider:"duckduckgo",run:async(e,t,n,r)=>{let s=`https://html.duckduckgo.com/html/?q=${encodeURIComponent(t)}`,i=await e(s,{method:"GET",headers:{accept:"text/html","user-agent":"Mozilla/5.0 (compatible; veil-web-search)"},signal:r});if(i.ok){let u=await i.text(),c=ss(u,n);if(c.length>0)return c}let o=`https://api.duckduckgo.com/?q=${encodeURIComponent(t)}&format=json&no_redirect=1&no_html=1`,a=await e(o,{method:"GET",headers:{accept:"application/json"},signal:r});if(!a.ok)throw new Error(`http-${String(a.status)}`);let l=await De(a);return rs(l,n)}},{provider:"wikipedia",run:async(e,t,n,r)=>{let s=`https://en.wikipedia.org/w/api.php?action=opensearch&search=${encodeURIComponent(t)}&limit=${String(n)}&namespace=0&format=json&origin=*`,i=await e(s,{method:"GET",headers:{accept:"application/json"},signal:r});if(!i.ok)throw new Error(`http-${String(i.status)}`);let o=await De(i);return _a(o,n)}},{provider:"github",run:async(e,t,n,r)=>{let s=`https://api.github.com/search/repositories?q=${encodeURIComponent(t)}&per_page=${String(n)}&sort=stars&order=desc`,i=await e(s,{method:"GET",headers:{accept:"application/vnd.github+json","user-agent":"veil-web-search"},signal:r});if(!i.ok)throw new Error(`http-${String(i.status)}`);let o=await De(i);return ba(o,n)}},{provider:"reddit",run:async(e,t,n,r)=>{let s=`https://www.reddit.com/search.json?q=${encodeURIComponent(t)}&limit=${String(n)}&sort=relevance&type=link`,i=await e(s,{method:"GET",headers:{accept:"application/json","user-agent":"veil-web-search"},signal:r});if(!i.ok)throw new Error(`http-${String(i.status)}`);let o=await De(i);return ya(o,n)}},{provider:"deepwiki",run:async(e,t,n,r)=>{let s=`site:deepwiki.com ${t}`,i=`https://html.duckduckgo.com/html/?q=${encodeURIComponent(s)}`,o=await e(i,{method:"GET",headers:{accept:"text/html","user-agent":"Mozilla/5.0 (compatible; veil-web-search)"},signal:r});if(!o.ok)throw new Error(`http-${String(o.status)}`);let a=await o.text();return ga(a,n)}}];function is(e,t,n){return{provider:e,ok:!1,duration_ms:Number(t.toFixed(4)),result_count:0,warning:n}}async function as(e,t){let n=J(),r=yn(t.query),s=je(t.limit),i=Ve(t.timeout_ms),o=t.debug??!1;if(!r)return{meta:{ok:!1,duration_ms:Number((J()-n).toFixed(4))},data:null,error:{code:"invalid-query",message:"Query is required"}};let a=new AbortController,l=setTimeout(()=>{a.abort("timeout")},i),u=t.fetch_impl??fetch,c=!1;try{let m=xa.map((h,y)=>ka(h,u,r,s,a.signal).then(N=>({idx:y,outcome:N}))),f=new Set(m.map((h,y)=>y)),p=[];for(;f.size>0;){let h=J()-n,y=i-h;if(y<=0){c=!0;break}let N=[...f].map(E=>m[E]),C=new Promise(E=>{setTimeout(()=>{E(null)},y)}),M=await Promise.race([...N,C]);if(!M){c=!0;break}f.delete(M.idx),p.push(M.outcome)}f.size>0&&!a.signal.aborted&&a.abort("timeout");let b=wa(p,s,r),x=new Map;for(let h of p)x.set(h.provider,{provider:h.provider,ok:h.ok,duration_ms:h.duration_ms,result_count:h.results.length,warning:h.warning});let _=J()-n;for(let h of f){let y=ke[h]??"google";x.set(y,is(y,_,c?"timeout":"cancelled"))}let k=ke.map(h=>x.get(h)??is(h,_,c?"timeout":"not-run")),w=k.filter(h=>!h.ok&&h.warning).map(h=>`${h.provider}: ${h.warning??"unknown"}`);if(b.detailed_results.length>0){let h=b.detailed_results.map(y=>({title:y.title,url:y.url}));return{meta:{ok:!0,duration_ms:Number((J()-n).toFixed(4))},data:{results:h,...o?{debug:{query:r,provider:b.primary_provider,warnings:w,provider_trace:k,detailed_results:b.detailed_results}}:{}},error:null}}return{meta:{ok:!1,duration_ms:Number((J()-n).toFixed(4))},data:null,error:{code:c?"timeout":"provider-unavailable",message:c?"Global timeout budget reached before providers returned results":"No provider returned parseable results"}}}catch(m){return{meta:{ok:!1,duration_ms:Number((J()-n).toFixed(4))},data:null,error:{code:"internal-error",message:m instanceof Error?m.message:String(m)}}}finally{clearTimeout(l)}}var $={readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},we={readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},ct={readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},Ca={readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},ds=1024*1024,me=class extends Error{constructor(t){super(t),this.name="HttpBodyTooLargeError"}};function ls(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:{value:e}}function g(e){return typeof e=="string"?e:void 0}function v(e){return typeof e=="number"?e:void 0}function L(e){return typeof e=="boolean"?e:void 0}function us(e){if(!e||typeof e!="object"||Array.isArray(e))return{exists:!1,stale:!0,reasons:["unknown"]};let t=e,n={exists:t.exists===!0,stale:t.stale===!0,reasons:Array.isArray(t.reasons)?t.reasons:[]},r=Array.isArray(t.grammar_suggestions)?t.grammar_suggestions:[];return r.length>0&&(n.grammar_suggestions=r),n}function dt(e){if(Array.isArray(e)){let t=e.filter(n=>typeof n=="string").join(",");return Xe(t)}return typeof e=="string"?Xe(e):[]}function Ia(e){return ee.find(n=>n.id===e)?.label??e}function Ea(e){if(!e||typeof e!="object"||Array.isArray(e))return 0;let t=e;return(Array.isArray(t.items)?t.items.length:0)+(Array.isArray(t.files)?t.files.length:0)+(Array.isArray(t.symbols)?t.symbols.length:0)+(Array.isArray(t.chunks)?t.chunks.length:0)}function sn(e,t){if(!t||t.trim()==="")return!0;let n=t.toLowerCase();if(n.includes(e.language.toLowerCase()))return!0;let r=ee.find(s=>s.id===e.parser_id);return r?n.includes(r.id.toLowerCase())?!0:r.aliases.some(s=>n.includes(s.toLowerCase())):!1}async function mt(e,t,n,r){if(Ea(n)>0)return n;let o=((await X(e,{state_root:t})).grammar_suggestions??[]).filter(a=>sn(a,r));return o.length===0?n:{...n,grammar_suggestions:o}}function La(e){return{content:[{type:"text",text:vt(e)}],isError:!1}}function tn(e,t){let n=ls(t),r=ls(n.error),i={ok:!1,error:{code:g(r.code)??"tool-error",message:e}};return{content:[{type:"text",text:vt(i)}],isError:!0}}function Na(e){if(!e||typeof e!="object")return null;let t=e,n=g(t.code);if(n&&n.trim().length>0)return n;let r=g(t.reason);return r&&r.trim().length>0?r:null}function W(e,t){let n=e??process.cwd();return P.configureStatePath(_n(n,t)),n}async function We(e){let t=W(e.workspace,e.state_root);return await Qt(t,{state_root:e.state_root,refresh_if_stale:e.refresh_if_stale??!0,strict_query_freshness:!0}),t}var on=[{name:"veil_status",title:"Veil Index Status",description:T.veil_status,inputSchema:{workspace:d.string().optional(),state_root:d.string().optional(),reported_skill_version:d.string().optional()},annotations:$,handler:async e=>{let t=g(e.workspace),n=g(e.state_root),r=W(t,n),s=await X(r,{state_root:n,bypass_cache:!0}),i=await lt({allow_network:!1,reported_skill_version:g(e.reported_skill_version)});return A("status",{...s,updates:i})}},{name:"veil_update_check",title:"Veil Update Check",description:T.veil_update_check,inputSchema:{workspace:d.string().optional(),state_root:d.string().optional(),reported_skill_version:d.string().optional(),force_refresh:d.boolean().optional(),timeout_ms:d.number().int().positive().max(1e4).optional()},annotations:ct,handler:async e=>{W(g(e.workspace),g(e.state_root));let t=await lt({reported_skill_version:g(e.reported_skill_version),force_refresh:L(e.force_refresh),timeout_ms:v(e.timeout_ms)});return A("update_check",t)}},{name:"veil_refresh",title:"Veil Refresh Index",description:T.veil_refresh,inputSchema:{workspace:d.string().optional(),mode:d.enum(["full","changed"]).optional(),state_root:d.string().optional()},annotations:we,handler:async e=>{let t=g(e.workspace),n=g(e.state_root),r=e.mode==="full"?"full":"changed",s=W(t,n),i=await ge(s,r,{state_root:n});return A("refresh",{ok:!0,mode:r,manifest:i})}},{name:"veil_build",title:"Veil Build Index",description:T.veil_build,inputSchema:{workspace:d.string().optional(),state_root:d.string().optional()},annotations:we,handler:async e=>{let t=g(e.workspace),n=g(e.state_root),r=W(t,n);return{ok:!0,mode:"full",manifest:await ge(r,"full",{state_root:n})}}},{name:"veil_grammar_list",title:"Veil Grammar List",description:T.veil_grammar_list,inputSchema:{workspace:d.string().optional(),state_root:d.string().optional()},annotations:$,handler:async e=>{let t=g(e.workspace),n=g(e.state_root),r=W(t,n);return{parsers:await Gn(r,n)}}},{name:"veil_grammar_install",title:"Veil Grammar Install",description:T.veil_grammar_install,inputSchema:{workspace:d.string().optional(),state_root:d.string().optional(),parsers:d.array(d.string()).optional()},annotations:we,handler:async e=>{let t=g(e.workspace),n=g(e.state_root),r=W(t,n),s=await Wn(r,dt(e.parsers),n);return{ok:!0,installed:s.installed,enabled:s.enabled}}},{name:"veil_grammar_remove",title:"Veil Grammar Remove",description:T.veil_grammar_remove,inputSchema:{workspace:d.string().optional(),state_root:d.string().optional(),parsers:d.array(d.string()).optional()},annotations:we,handler:async e=>{let t=g(e.workspace),n=g(e.state_root),r=W(t,n),s=await $n(r,dt(e.parsers),n);return{ok:!0,installed:s.installed,enabled:s.enabled}}},{name:"veil_grammar_update",title:"Veil Grammar Update",description:T.veil_grammar_update,inputSchema:{workspace:d.string().optional(),state_root:d.string().optional(),parsers:d.array(d.string()).optional(),all:d.boolean().optional()},annotations:we,handler:async e=>{let t=g(e.workspace),n=g(e.state_root),r=W(t,n),s=L(e.all)?"all":dt(e.parsers),i=await zn(r,s,n);return{ok:!0,updated:i.updated,installed:i.installed}}},{name:"veil_grammar_recommend",title:"Veil Grammar Recommend",description:T.veil_grammar_recommend,inputSchema:{workspace:d.string().optional(),state_root:d.string().optional(),query:d.string().optional(),limit:d.number().int().positive().max(10).optional()},annotations:$,handler:async e=>{let t=g(e.workspace),n=g(e.state_root),r=g(e.query),s=W(t,n),i=await X(s,{state_root:n}),o=Math.max(1,Math.min(v(e.limit)??5,10)),a=(i.grammar_suggestions??[]).filter(l=>sn(l,r)).slice(0,o).map(l=>{let u=Xe(l.parser_id),c=Nt(u,{install_root:pe(s,n)});return{...l,parser_label:Ia(l.parser_id),install_plan:c,note:l.reason==="parser-disabled"?"Parser is available but disabled. Installing runtime and enabling parser improves symbol extraction accuracy.":"Parser runtime package is missing. Installing runtime restores symbol extraction accuracy."}});return A("grammar_recommend",{query:r??null,suggestions:a})}},{name:"veil_grammar_runtime_install",title:"Veil Grammar Runtime Install",description:T.veil_grammar_runtime_install,inputSchema:{workspace:d.string().optional(),state_root:d.string().optional(),parsers:d.array(d.string()).optional(),timeout_ms:d.number().int().positive().max(3e5).optional()},annotations:we,handler:async e=>{let t=g(e.workspace),n=g(e.state_root),r=W(t,n),s=dt(e.parsers),i=await jn(r,s,n,v(e.timeout_ms)),o=await X(r,{state_root:n,bypass_cache:!0}),a=o.grammar_suggestions??[],l={...i,status:us(o)};return a.length>0&&(l.grammar_suggestions=a),A("grammar_runtime_install",{...l})}},{name:"veil_files",title:"Veil Find Files",description:T.veil_files,inputSchema:{workspace:d.string().optional(),query:d.string(),limit:d.number().int().positive().max(200).optional(),refresh_if_stale:d.boolean().optional(),state_root:d.string().optional()},annotations:$,handler:async e=>{let t=g(e.query)??"",n=g(e.workspace),r=g(e.state_root),s=L(e.refresh_if_stale),i=v(e.limit),o=await We({workspace:n,state_root:r,refresh_if_stale:s}),a=await Le(o,t,kt(i),{state_root:r}),l=await mt(o,r,{items:a},t);return A("files",l,{query:t})}},{name:"veil_symbols",title:"Veil Find Symbols",description:T.veil_symbols,inputSchema:{workspace:d.string().optional(),query:d.string(),limit:d.number().int().positive().max(200).optional(),refresh_if_stale:d.boolean().optional(),state_root:d.string().optional()},annotations:$,handler:async e=>{let t=g(e.query)??"",n=g(e.workspace),r=g(e.state_root),s=L(e.refresh_if_stale),i=v(e.limit),o=await We({workspace:n,state_root:r,refresh_if_stale:s}),a=await Ne(o,t,wt(i),{state_root:r}),l=await mt(o,r,{items:a},t);return A("symbols",l,{query:t})}},{name:"veil_search",title:"Veil Search Chunks",description:T.veil_search,inputSchema:{workspace:d.string().optional(),query:d.string(),limit:d.number().int().positive().optional(),content_mode:d.enum(["none","preview","full"]).optional(),include_content:d.boolean().optional(),content_max_chars:d.number().int().positive().optional(),prefer_code:d.boolean().optional(),path_prefix:d.string().optional(),language:d.string().optional(),intent:d.enum(["auto","code","docs","symbols"]).optional(),refresh_if_stale:d.boolean().optional(),state_root:d.string().optional()},annotations:$,handler:async e=>{let t=g(e.query)??"",n=g(e.workspace),r=g(e.state_root),s=L(e.refresh_if_stale),i=await We({workspace:n,state_root:r,refresh_if_stale:s}),o=await Ae(i,t,xt(v(e.limit)),{content_mode:e.content_mode==="none"||e.content_mode==="full"||e.content_mode==="preview"?e.content_mode:void 0,include_content:L(e.include_content),content_max_chars:Se(v(e.content_max_chars)),prefer_code:L(e.prefer_code),path_prefix:g(e.path_prefix),language:g(e.language),intent:e.intent==="code"||e.intent==="docs"||e.intent==="symbols"?e.intent:"auto",state_root:r}),a=await mt(i,r,{items:o},t);return A("search",a,{query:t})}},{name:"veil_lookup",title:"Veil Lookup Context",description:T.veil_lookup,inputSchema:{workspace:d.string().optional(),query:d.string(),files_limit:d.number().int().positive().optional(),symbols_limit:d.number().int().positive().optional(),search_limit:d.number().int().positive().optional(),content_mode:d.enum(["none","preview","full"]).optional(),include_content:d.boolean().optional(),content_max_chars:d.number().int().positive().optional(),prefer_code:d.boolean().optional(),path_prefix:d.string().optional(),language:d.string().optional(),intent:d.enum(["auto","code","docs","symbols"]).optional(),response_mode:d.enum(["full","compact"]).optional(),refresh_if_stale:d.boolean().optional(),state_root:d.string().optional()},annotations:$,handler:async e=>{let t=g(e.query)??"",n=g(e.workspace),r=g(e.state_root),s=L(e.refresh_if_stale),i=await We({workspace:n,state_root:r,refresh_if_stale:s}),o=await Dr(i,t,{files_limit:kn(v(e.files_limit)),symbols_limit:wn(v(e.symbols_limit)),search_limit:xn(v(e.search_limit)),content_mode:e.content_mode==="none"||e.content_mode==="full"||e.content_mode==="preview"?e.content_mode:void 0,include_content:L(e.include_content),content_max_chars:Se(v(e.content_max_chars)),prefer_code:L(e.prefer_code),path_prefix:g(e.path_prefix),language:g(e.language),intent:e.intent==="code"||e.intent==="docs"||e.intent==="symbols"?e.intent:"auto",response_mode:e.response_mode==="full"?"full":"compact",state_root:r}),a=await mt(i,r,o,t);return A("lookup",a,{query:t})}},{name:"veil_discover",title:"Veil Discover Context",description:T.veil_discover,inputSchema:{workspace:d.string().optional(),query:d.string(),files_limit:d.number().int().positive().optional(),symbols_limit:d.number().int().positive().optional(),search_limit:d.number().int().positive().optional(),content_mode:d.enum(["none","preview","full"]).optional(),include_content:d.boolean().optional(),content_max_chars:d.number().int().positive().optional(),refresh_if_stale:d.boolean().optional(),prefer_code:d.boolean().optional(),path_prefix:d.string().optional(),language:d.string().optional(),intent:d.enum(["auto","code","docs","symbols"]).optional(),state_root:d.string().optional(),reported_skill_version:d.string().optional()},annotations:$,handler:async e=>{let t=g(e.query)??"",n=g(e.workspace),r=g(e.state_root),s=W(n,r),i=await Qt(s,{state_root:r,refresh_if_stale:L(e.refresh_if_stale)??!0,strict_query_freshness:!0}),o=await Fr(s,t,{files_limit:kt(v(e.files_limit)),symbols_limit:wt(v(e.symbols_limit)),search_limit:xt(v(e.search_limit)),content_mode:e.content_mode==="none"||e.content_mode==="full"||e.content_mode==="preview"?e.content_mode:void 0,include_content:L(e.include_content),content_max_chars:Se(v(e.content_max_chars)),prefer_code:L(e.prefer_code),path_prefix:g(e.path_prefix),language:g(e.language),intent:e.intent==="code"||e.intent==="docs"||e.intent==="symbols"?e.intent:"auto",state_root:r}),a=(i.status_after.grammar_suggestions??[]).filter(c=>sn(c,t)),l=await lt({allow_network:!1,reported_skill_version:g(e.reported_skill_version)}),u={status:us(i.status_after),updates:l,intent:o.intent,files:o.files,symbols:o.symbols,chunks:o.chunks};return a.length>0&&(u.grammar_suggestions=a),A("discover",u,{query:t})}},{name:"veil_chunk",title:"Veil Fetch Chunk",description:T.veil_chunk,inputSchema:{workspace:d.string().optional(),id:d.string(),content_max_chars:d.number().int().positive().optional(),refresh_if_stale:d.boolean().optional(),state_root:d.string().optional()},annotations:$,handler:async e=>{let t=g(e.workspace),n=g(e.state_root),r=await We({workspace:t,state_root:n,refresh_if_stale:L(e.refresh_if_stale)??!0}),s=g(e.id)??"",i=await Ur(r,s,{state_root:n,include_content:!0,content_max_chars:Se(v(e.content_max_chars))});return A("chunk",{item:i},{query:s})}},{name:"veil_web_search",title:"Veil Web Search",description:T.veil_web_search,inputSchema:{workspace:d.string().optional(),query:d.string(),limit:d.number().int().positive().optional(),timeout_ms:d.number().int().positive().optional(),debug:d.boolean().optional()},annotations:ct,handler:async e=>{let t=g(e.query)??"",n=g(e.workspace)??process.cwd();return A("web_search",await as(n,{query:t,limit:je(v(e.limit)),timeout_ms:Ve(v(e.timeout_ms)),debug:L(e.debug)}),{query:t})}},{name:"veil_fetch_url",title:"Veil Fetch URL",description:T.veil_fetch_url,inputSchema:{url:d.string(),format:d.enum(["markdown","text","html"]).optional(),timeout_ms:d.number().int().positive().max(2e4).optional(),max_bytes:d.number().int().positive().max(2e6).optional(),include_error_content:d.boolean().optional(),allow_private_network:d.boolean().optional()},annotations:ct,handler:async e=>{let t=g(e.url)??"";return A("fetch_url",await Cn({url:t,format:e.format==="text"||e.format==="html"||e.format==="markdown"?e.format:void 0,timeout_ms:v(e.timeout_ms),max_bytes:v(e.max_bytes),include_error_content:L(e.include_error_content),allow_private_network:L(e.allow_private_network)}),{query:t})}},{name:"veil_git_status",title:"Veil Git Status",description:T.veil_git_status,inputSchema:{workspace:d.string().optional(),timeout_ms:d.number().int().positive().max(1e4).optional(),include_paths:d.boolean().optional(),paths_limit:d.number().int().positive().max(2e3).optional()},annotations:$,handler:async e=>A("git_status",await qr(g(e.workspace)??process.cwd(),{timeout_ms:v(e.timeout_ms),include_paths:L(e.include_paths),paths_limit:v(e.paths_limit)}))},{name:"veil_git_log",title:"Veil Git Log",description:T.veil_git_log,inputSchema:{workspace:d.string().optional(),limit:d.number().int().positive().max(200).optional(),since:d.string().optional(),author:d.string().optional(),grep:d.string().optional(),timeout_ms:d.number().int().positive().max(12e3).optional()},annotations:$,handler:async e=>A("git_log",await Br(g(e.workspace)??process.cwd(),{limit:v(e.limit),since:g(e.since),author:g(e.author),grep:g(e.grep),timeout_ms:v(e.timeout_ms)}))},{name:"veil_git_diff",title:"Veil Git Diff",description:T.veil_git_diff,inputSchema:{workspace:d.string().optional(),staged:d.boolean().optional(),path:d.string().optional(),base:d.string().optional(),head:d.string().optional(),name_only:d.boolean().optional(),timeout_ms:d.number().int().positive().max(1e4).optional(),max_bytes:d.number().int().positive().max(5e5).optional()},annotations:$,handler:async e=>A("git_diff",await Hr(g(e.workspace)??process.cwd(),{staged:L(e.staged),path:g(e.path),base:g(e.base),head:g(e.head),name_only:L(e.name_only),timeout_ms:v(e.timeout_ms),max_bytes:v(e.max_bytes)}))},{name:"veil_git_show",title:"Veil Git Show",description:T.veil_git_show,inputSchema:{workspace:d.string().optional(),rev:d.string(),path:d.string().optional(),patch:d.boolean().optional(),timeout_ms:d.number().int().positive().max(12e3).optional(),max_bytes:d.number().int().positive().max(5e5).optional()},annotations:$,handler:async e=>A("git_show",await jr(g(e.workspace)??process.cwd(),{rev:g(e.rev)??"",path:g(e.path),patch:L(e.patch),timeout_ms:v(e.timeout_ms),max_bytes:v(e.max_bytes)}))},{name:"veil_gh_lookup",title:"Veil GitHub Lookup",description:T.veil_gh_lookup,inputSchema:{workspace:d.string().optional(),repo:d.string(),kind:d.enum(["repo_context","issues","prs","checks"]),query:d.string().optional(),limit:d.number().int().positive().max(50).optional(),timeout_ms:d.number().int().positive().max(2e4).optional(),temp_root:d.string().optional(),state_root:d.string().optional()},annotations:ct,handler:async e=>{let t=g(e.workspace),n=g(e.state_root),r=W(t,n),s=g(e.repo)??"",i=e.kind==="issues"||e.kind==="prs"||e.kind==="checks"?e.kind:"repo_context",o=g(e.query);return A("gh_lookup",await Vr(r,{repo:s,kind:i,query:o,limit:v(e.limit),timeout_ms:v(e.timeout_ms),temp_root:g(e.temp_root),state_root:n}),{query:o??s})}},{name:"veil_diagnostics",title:"Veil Diagnostics",description:T.veil_diagnostics,inputSchema:{workspace:d.string().optional(),state_root:d.string().optional(),reset:d.boolean().optional()},annotations:Ca,handler:e=>{W(g(e.workspace),g(e.state_root)),L(e.reset)&&P.reset();let t=P.getDiagnostics();return A("diagnostics",t)}}];async function Aa(e,t){try{let n=await e.handler(t),r=yt(n);return r?tn(r,n):La(n)}catch(n){let r=Na(n),s=n instanceof Error?n.message:String(n);return r?tn(s,{error:{code:r}}):tn(s)}}function ln(){let e=new Ra({name:"veil-mcp-server",version:Yt});for(let t of on)e.registerTool(t.name,{title:t.title,description:t.description,inputSchema:t.inputSchema,annotations:t.annotations},async n=>Aa(t,n));return e}function $e(e){let t=e.trim().toLowerCase();return t?t.startsWith("[")&&t.endsWith("]")?t.slice(1,-1):t:""}function Ma(e){let t=e?.trim()??"";if(!t)return"";if(t.startsWith("[")){let r=t.indexOf("]");return $e(r!==-1?t.slice(0,r+1):t)}let n=t.split(":")[0]??"";return $e(n)}function nn(e){return e==="localhost"||e==="127.0.0.1"||e==="::1"}function Oa(e){if(!e)return"";try{return $e(new URL(e).hostname)}catch{return""}}function Fa(e,t,n){if(n)return null;let r=Ma(e.headers.host);if(!r||!nn(r))return"Request host is not allowed for local-only mode";let s=Oa(g(e.headers.origin));return s&&!nn(s)?"Origin is not allowed for local-only mode":nn($e(t))?null:"Server host must be loopback unless allow_remote is true"}async function ms(e,t=ds){if(e.method!=="POST")return;let n=[],r=0;for await(let i of e){if(typeof i=="string"){let a=Buffer.from(i);if(r+=a.byteLength,r>t)throw new me(`Request body exceeds ${String(t)} bytes maximum`);n.push(a);continue}if(Buffer.isBuffer(i)){if(r+=i.byteLength,r>t)throw new me(`Request body exceeds ${String(t)} bytes maximum`);n.push(i);continue}if(i instanceof Uint8Array){let a=Buffer.from(i);if(r+=a.byteLength,r>t)throw new me(`Request body exceeds ${String(t)} bytes maximum`);n.push(a);continue}let o=Buffer.from(String(i));if(r+=o.byteLength,r>t)throw new me(`Request body exceeds ${String(t)} bytes maximum`);n.push(o)}if(n.length===0)return;let s=Buffer.concat(n).toString("utf-8").trim();if(s)try{return JSON.parse(s)}catch{return}}var cs=!1,rn=null;async function un(){cs||(rn??=(async()=>{let e=ln(),t=new Pa;await e.connect(t),cs=!0})().catch(e=>{throw rn=null,e}),await rn)}var an=!1,ae=null,pt=null,ht=null,gt=null;async function Da(){if(ae)try{await ae}catch{}let e=pt,t=ht,n=gt;ae=null,an=!1,pt=null,ht=null,gt=null,e&&await new Promise((r,s)=>{e.close(i=>{if(i){s(i);return}r()})}),t&&await t.close(),n&&await n.close()}async function fs(e={}){if(an)return;if(ae){await ae;return}let t=e.host?.trim()??"127.0.0.1",n=Number.isFinite(e.port)?Number(e.port):8765,r=e.path?.trim()??"/mcp",s=e.allow_remote===!0,i=ln(),o=new Ta({sessionIdGenerator:void 0,enableJsonResponse:!0});await i.connect(o),ht=o,gt=i;let a=Sa(async(l,u)=>{try{if((l.url??"")!==r){u.statusCode=404,u.end("Not Found");return}if(l.method!=="GET"&&l.method!=="POST"&&l.method!=="DELETE"){u.statusCode=405,u.end("Method Not Allowed");return}let c=Fa(l,t,s);if(c){u.statusCode=403,u.end(c);return}let m=await ms(l);await o.handleRequest(l,u,m)}catch(c){if(c instanceof me){u.headersSent||(u.statusCode=413,u.end(c.message));return}if(!u.headersSent){u.statusCode=500;let m=c instanceof Error?c.message:String(c);u.end(m)}}});pt=a,ae=new Promise((l,u)=>{a.on("error",u),a.listen(n,t,()=>{an=!0,l()})});try{await ae}catch(l){throw pt=null,ht=null,gt=null,ae=null,await o.close(),await i.close(),l}}var Tu={createMcpServer:ln,toolNames:on.map(e=>e.name),toolDefinitions:on,responseErrorMessage:yt,parseRequestBody:ms,maxHttpRequestBodyBytes:ds,stopHttpServer:Da},Ua=import.meta,Wa=`${ft}src${ft}server.ts`,$a=va(import.meta.url).endsWith(Wa),za=process.argv.some(e=>e.endsWith(`${ft}src${ft}server.ts`)||e==="src/server.ts");$a&&(Ua.main===!0||za)&&await un();async function hs(e=process.argv){if(gs(e)){await fs();return}await un()}function gs(e){return process.env.VEIL_HTTP==="1"?!0:e.includes("--http")}async function _s(e=()=>hs()){try{await e()}catch(t){process.stderr.write(String(t)+`
|
|
54
|
+
`),process.exitCode=1}}function bs(e){let t=import.meta;if(typeof t.main=="boolean")return t.main;let n=process.argv[1];return n?ps(n)===ps(Ga(e)):!1}var Nu={main:hs,runMain:_s,isMainModule:bs,shouldStartHttp:gs},qa=bs(import.meta.url);qa&&_s();export{Nu as __internalBin};
|
package/package.json
CHANGED
package/skills/SKILL.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: veil
|
|
3
|
-
version: 2.2.
|
|
3
|
+
version: 2.2.4
|
|
4
4
|
description: Use this skill whenever Veil MCP tools are available and the task involves repository retrieval, git context, web references, or GitHub context. Trigger on direct or indirect phrasing like "find where", "investigate", "what changed", "summarize from web", or "check PR context", even when the user suggests shell-style discovery.
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -25,7 +25,7 @@ Veil MCP responses are compact TOON payloads. Guidance fields appear only on low
|
|
|
25
25
|
## Your Task
|
|
26
26
|
|
|
27
27
|
1. Route discovery and context gathering through Veil MCP tools first.
|
|
28
|
-
2.
|
|
28
|
+
2. Start with one best-fit retrieval call, not multiple broad calls.
|
|
29
29
|
3. Add git, web, or GitHub branches only when they change the answer.
|
|
30
30
|
4. Return concise findings with file paths or URLs, then continue implementation.
|
|
31
31
|
|
|
@@ -33,12 +33,24 @@ Veil MCP responses are compact TOON payloads. Guidance fields appear only on low
|
|
|
33
33
|
|
|
34
34
|
Retrieval query tools refresh index state on stale or dirty worktrees by default.
|
|
35
35
|
|
|
36
|
-
1.
|
|
37
|
-
|
|
36
|
+
1. Pick one primary retrieval tool first:
|
|
37
|
+
- `veil_lookup` for natural-language implementation questions (`where is`, `how does`, `what changed in code path`).
|
|
38
|
+
- `veil_search` for exact text or keyword hunting (error strings, flags, literals, log lines).
|
|
39
|
+
- `veil_files` or `veil_symbols` when file-name or symbol intent is already clear.
|
|
40
|
+
- `veil_discover` only when intent is unclear or you need one broad triage pass.
|
|
41
|
+
2. Do not auto-run `discover` and `search` together. Run a second retrieval call only if the first call has low confidence or missing context.
|
|
38
42
|
3. Fetch full code only when needed with `veil_chunk` using chunk ids from prior results.
|
|
39
43
|
4. Add context branches only as needed: git, web, or GitHub.
|
|
40
44
|
5. Return concise findings with paths or URLs, then continue implementation.
|
|
41
45
|
|
|
46
|
+
## Query shaping rules
|
|
47
|
+
|
|
48
|
+
- Do not paste the full user prompt into retrieval queries by default.
|
|
49
|
+
- Prefer compact query strings with entity + intent (usually 3-8 terms).
|
|
50
|
+
- Preserve high-signal identifiers exactly: file names, symbols, error codes, config keys.
|
|
51
|
+
- Drop filler phrasing (`please`, `help`, long narrative context) unless it changes retrieval intent.
|
|
52
|
+
- If first query misses, refine once with nearby synonyms or adjacent identifiers.
|
|
53
|
+
|
|
42
54
|
## Skill version drift signal
|
|
43
55
|
|
|
44
56
|
- Read local installed Veil skill frontmatter version once per session.
|
|
@@ -55,7 +67,7 @@ Prefer compact defaults (`veil_lookup` compact reasons, git path lists off unles
|
|
|
55
67
|
- Web context: `veil_web_search`, then `veil_fetch_url`.
|
|
56
68
|
- GitHub context: `veil_gh_lookup`.
|
|
57
69
|
- Setup and operations (non-retrieval): `veil_status`, `veil_update_check`, `veil_build`, `veil_grammar_list|install|remove|update`, `veil_diagnostics` with `reset`.
|
|
58
|
-
- Grammar improvement loop: `veil_grammar_recommend
|
|
70
|
+
- Grammar improvement loop: `veil_grammar_recommend`, then choose follow-up by reason (enable parser via `veil_grammar_install` when disabled, or `veil_grammar_runtime_install` when runtime is missing).
|
|
59
71
|
- Grammar runtime installs are workspace and state-root scoped (`<state_root>/grammars-runtime`) and reused by
|
|
60
72
|
later MCP server instances targeting the same workspace.
|
|
61
73
|
- For known installable parsers, treat runtime fallback as strict by default. Only rely on fallback paths when
|
|
@@ -63,8 +75,10 @@ Prefer compact defaults (`veil_lookup` compact reasons, git path lists off unles
|
|
|
63
75
|
|
|
64
76
|
## Anti-pattern Corrections
|
|
65
77
|
|
|
66
|
-
- Shell-first discovery with ad hoc tools ->
|
|
78
|
+
- Shell-first discovery with ad hoc tools -> pick the best-fit retrieval tool first, use `veil_discover` only when intent is unclear.
|
|
79
|
+
- Running both `discover` and `search` on every prompt -> choose one best-fit tool first, then escalate only if needed.
|
|
67
80
|
- Repeating broad retrieval calls -> rewrite query with entity + intent, then run one focused follow-up.
|
|
81
|
+
- Copy-pasting full user prompts as queries -> compress to identifiers and intent words.
|
|
68
82
|
- Asking for full code in broad calls -> keep compact defaults and fetch only selected chunk ids with `veil_chunk`.
|
|
69
83
|
- Jumping to `veil_fetch_url` without candidates -> use `veil_web_search` first.
|
|
70
84
|
- Raw `git` reads for normal context -> use `veil_git_status|veil_git_log|veil_git_diff|veil_git_show`.
|
|
@@ -78,6 +92,7 @@ Prefer compact defaults (`veil_lookup` compact reasons, git path lists off unles
|
|
|
78
92
|
|
|
79
93
|
## Quick Examples
|
|
80
94
|
|
|
81
|
-
- `Find implementation points for a feature request` -> `veil_discover`
|
|
95
|
+
- `Find implementation points for a feature request` -> `veil_lookup`; use `veil_discover` only if intent is broad or unclear.
|
|
96
|
+
- `Find exact error string handling` -> `veil_search` with the error text.
|
|
82
97
|
- `Check what changed on this branch before editing` -> `veil_git_status`, `veil_git_log`, then `veil_git_diff`.
|
|
83
98
|
- `Summarize dependency docs with source links` -> `veil_web_search`, then `veil_fetch_url`.
|