@ushiradineth/veil 0.7.0 → 0.7.2
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 +7 -1
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 fs}from"node:path";import{fileURLToPath as Ua}from"node:url";import{createServer as ya}from"node:http";import{sep as ft}from"node:path";import{fileURLToPath as ka}from"node:url";import{McpServer as wa}from"@modelcontextprotocol/sdk/server/mcp.js";import{StdioServerTransport as xa}from"@modelcontextprotocol/sdk/server/stdio.js";import{StreamableHTTPServerTransport as va}from"@modelcontextprotocol/sdk/server/streamableHttp.js";import{z as d}from"zod";function J(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:{value:e}}function me(e){return Array.isArray(e)?e:[]}function ys(e){let t=J(e.meta);return typeof t.ok=="boolean"?t.ok:!0}function ks(e){let t=me(e.items).length,n=me(e.files).length,r=me(e.symbols).length,s=me(e.chunks).length,i=J(e.data),o=me(i.results).length,a=me(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 ze(e){switch(e){case"discover":return["lookup","search"];case"chunk":return["lookup","search"];case"lookup":return["discover","search"];case"files":return["search","lookup"];case"symbols":return["lookup","search"];case"search":return["lookup","files"];case"web_search":return["fetch_url","discover"];case"fetch_url":return["web_search","discover"];case"git_status":return["git_diff","git_log"];case"git_log":return["git_show","git_diff"];case"git_diff":return["git_show","git_status"];case"git_show":return["git_log","git_diff"];case"gh_lookup":return["discover","lookup"];case"status":return["discover","lookup"];case"update_check":return["status","discover"];case"refresh":return["discover","lookup"];case"diagnostics":return["status","discover"];case"grammar_recommend":return["grammar_runtime_install","grammar_install"];case"grammar_runtime_install":return["refresh","discover"];default:return["discover","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 ws(e,t){if(e==="git_status"){let r=J(t.data).branch;return typeof r=="string"&&r.length>0}if(e==="git_log"){let n=J(t.data);return Array.isArray(n.entries)&&typeof n.limit=="number"}if(e==="git_diff"){let n=J(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=J(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 J(t.mcp).current=="string":e==="refresh"?typeof t.ok=="boolean":e==="diagnostics"?t.cache!==void 0||t.operations!==void 0:!1}function mn(e){return!e||e.trim().length===0?void 0:`broaden ${e.trim().replace(/\s+/g," ")}`}function xs(e,t,n){let r=J(t),s=ys(r),i=ks(r);return s?i===0?ws(e,r)?{next_calls:ze(e),confidence:"high",coverage:"full"}:{next_calls:ze(e),confidence:"medium",coverage:"partial",missing_context:dn(e),recommended_query:mn(n?.query)}:{next_calls:ze(e),confidence:"high",coverage:"full"}:{next_calls:ze(e),confidence:"low",coverage:"none",missing_context:dn(e),recommended_query:mn(n?.query)}}function A(e,t,n){let r=J(t),s=xs(e,r,n);return s.confidence!=="high"||s.coverage!=="full"?{...r,guidance:s}:r}import{existsSync as Ss,mkdirSync as Rs,readFileSync as Ps,writeFileSync as Ts}from"node:fs";import{dirname as Cs,join as Is}from"node:path";import{isAbsolute as hn,join as Ge,normalize as fn,relative as vs}from"node:path";var pn=".veil";function re(e,t){let n=(t??pn).trim();return n?hn(n)?fn(n):fn(Ge(e,n)):Ge(e,pn)}function j(e,t){return Ge(re(e,t),"index")}function xe(e,t){let n=re(e,t),r=vs(e,n);return!r||r==="."?"":r.startsWith("..")||hn(r)?null:r.replace(/\\/g,"/")}function gn(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??Is(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(),!!Ss(this.statePath)))try{let t=Ps(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{Rs(Cs(this.statePath),{recursive:!0}),Ts(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
|
+
`)}},ja=new bt;import{isIP as Ls}from"node:net";import{NodeHtmlMarkdown as Ns}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 bn(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 _n(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=_n(r.message);return s?.trim()?s:"Tool execution failed"}if(t.ok===!1){let r=He(t.error),s=_n(r.message);return s?.trim()?s:"Tool execution failed"}return null}function Es(e){return z(e,R.chunk_content_max_chars.min,R.chunk_content_max_chars.max,R.chunk_content_max_chars.default)}function ve(e){if(!(typeof e!="number"||!Number.isFinite(e)||e<=0))return Es(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 yn(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 kn(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 wn(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 Sn(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,'"').replace(/'/g,"'").replace(/ /g," ")}function Rn(e){return e.replace(/<[^>]+>/g," ")}function vt(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 As=new Ns({maxConsecutiveNewlines:3});function Ms(e){try{return vt(As.translate(e))}catch{return vt(Sn(Rn(e)))}}function Os(e){let t=Sn(Rn(e));return vt(t)}function Fs(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 Ds(e){return(e.headers.get("content-type")??"").toLowerCase()}function Us(e){if(!e)return null;let t=Number(e);return!Number.isFinite(t)||t<0?null:Math.floor(t)}function xn(e){return e.includes("text/html")||e.includes("application/xhtml+xml")}function Ws(e){return e.includes("text/markdown")||e.includes("text/x-markdown")||e.includes("markdown")}function $s(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 zs(e){try{let t=new URL(e);return t.protocol!=="https:"&&t.protocol!=="http:"?null:t}catch{return null}}function Pn(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 Gs(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 Pn(n)}return!!(/^fc[0-9a-f]{2}:/.test(t)||/^fd[0-9a-f]{2}:/.test(t)||/^fe[89ab][0-9a-f]:/.test(t))}function qs(e){let t=e.trim().toLowerCase().replace(/\.$/,"");if(!t||t==="localhost"||t.endsWith(".localhost")||t==="metadata.google.internal"||t==="metadata")return!0;let n=Ls(t);return n===4?Pn(t):n===6?Gs(t):!1}function vn(e,t){return t?null:qs(e.hostname)?`Refusing private or local host: ${e.hostname}`:null}function Bs(e){return e===301||e===302||e===303||e===307||e===308}async function Tn(e){let t=Y(),n=zs(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:Fs(r),"user-agent":"veil-fetch-url/1.0"},redirect:"manual",signal:c.signal}),!!Bs(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=Ds(p),x=p.status,_=Us(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"?xn(b)&&(y=Ms(h)):r==="text"&&(xn(b)||Ws(b))&&(y=Os(h));let N=$s(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 Hs}from"@toon-format/toon";function St(e){try{return Hs(e)}catch{return typeof e=="string"?e:String(e)}}import{spawn as No}from"node:child_process";import{existsSync as Ur,mkdirSync as Ao,readFileSync as Mo,realpathSync as Oe,writeFileSync as Oo}from"node:fs";import{basename as Wr,dirname as Fo,isAbsolute as Me,join as rt,normalize as Do,relative as st,resolve as _e}from"node:path";import{spawn as Hi}from"node:child_process";import{createHash as ji}from"node:crypto";import{existsSync as Sr}from"node:fs";import{mkdir as Vi,readdir as Ll,readFile as Tr,stat as Qi,writeFile as qt}from"node:fs/promises";import{join as Ee,relative as Al}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 Cn(e,t){let n=e.get(t);if(n!==void 0)return e.delete(t),e.set(t,n),n}function In(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 js}from"node:child_process";import{readdir as Vs,readFile as Qs}from"node:fs/promises";import{join as En,relative as Ks}from"node:path";import Xs from"ignore";async function Js(e,t,n=5e3){return await new Promise(r=>{let s=!1,i=!1,o=null,a=js("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 Ln(e){return[...new Set(e.filter(Boolean))].sort((t,n)=>t.localeCompare(n))}function Nn(e,t){return!!(!e||e.startsWith(".git/")||e.startsWith("node_modules/")||t&&(e===t||e.startsWith(`${t}/`)))}async function Ys(e,t){let n=[],r=xe(e,t),s=Xs();s.add([".git","node_modules"]),r&&s.add([r]);try{let o=await Qs(En(e,".gitignore"),"utf-8");s.add(o)}catch{}async function i(o){let a=await Vs(o,{withFileTypes:!0});for(let l of a){let u=En(o,l.name),c=Ks(e,u).replace(/\\/g,"/");if(c&&!Nn(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),Ln(n)}async function An(e,t){let n=xe(e,t),r=await Js(e,["ls-files","--cached","--others","--exclude-standard"]);if(r.ok){let s=r.stdout.split(`
|
|
7
|
+
`).map(i=>i.trim()).filter(i=>!Nn(i,n));return Ln(s)}return Ys(e,t)}import{existsSync as Mn}from"node:fs";import{mkdir as On,readFile as Zs,writeFile as ei}from"node:fs/promises";import{spawn as ti}from"node:child_process";import{createRequire as Fn}from"node:module";import{join as Rt}from"node:path";var ni="grammars.json",ri="grammars-runtime",si=Fn(import.meta.url),ii=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}],Dn=[{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}],oi=new Map(Dn.map(e=>[e.id,e])),ai=new Map(ee.filter(e=>e.runtime_package).map(e=>[e.id,e.runtime_package])),li=new Set(ee.map(e=>e.id)),ui=new Map([["c#","c-sharp"],["csharp","c-sharp"],["c sharp","c-sharp"],["md","markdown"]]);function Ct(e,t){return`${re(e,t)}/${ni}`}async function Se(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 ci(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=ue(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 di(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 mi(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=>ue(i)).filter(i=>!!i),r=[...new Set([...e.installed,...n])],s=[...new Set([...e.enabled,...n])];return di({version:1,enabled:s,installed:r,runtime_install_failed:e.runtime_install_failed},n)}function fi(e,t){let n=new Set(t.map(i=>ue(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(!Mn(n))return Pt();try{let r=await Zs(n,"utf-8");return ci(JSON.parse(r))}catch{return Pt()}}async function Pe(e,t,n){let r=re(e,n);await On(r,{recursive:!0}),await ei(Ct(e,n),`${JSON.stringify(t,null,2)}
|
|
8
|
+
`,"utf-8")}function ue(e){let t=e.trim().toLowerCase();if(!t)return null;let n=ui.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=>ue(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 Un(e,t,n){return Se(e,n,async()=>{let r=await Z(e,n),s=Tt(r,t);return await Pe(e,s,n),Re(s)})}async function Wn(e,t,n){return Se(e,n,async()=>{let r=await Z(e,n),s=fi(r,t);return await Pe(e,s,n),Re(s)})}async function $n(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 zn(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 Gn(e){let t=ue(e);return t?li.has(t)?ai.get(t)??null:`tree-sitter-${t}`:null}function pe(e,t){return Rt(re(e,t),ri)}function Lt(e,t=new Set){let n=ue(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 pi(e,t){try{return Fn(Rt(t,"__veil_runtime_loader__.cjs")).resolve(e),!0}catch{return Mn(Rt(t,"node_modules",e,"package.json"))}}function qn(e,t,n,r={}){let s=Gn(e);if(!s)return!0;if(t){let i=pe(t,n);if(pi(s,i))return!0}if(r.allow_global_fallback!==!0)return!1;try{return si.resolve(s),!0}catch{return!1}}function Bn(e){let t=e.trim().toLowerCase();return oi.get(t)??null}function hi(e){let t=Dn.find(n=>n.parser_id===e);return t?t.installable?t.runtime_package:null:Gn(e)}async function gi(e,t,n,r){return await new Promise(s=>{let i=!1,o=!1,a=ti(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=>ue(i)).filter(Boolean))],r=n.map(i=>hi(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 Hn(e,t,n,r=ii,s=gi){let i=pe(e,n);await On(i,{recursive:!0});let o=Nt(t,{install_root:i});if(o.packages.length===0){let u=await Se(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 Se(e,n,async()=>{let c=await Z(e,n),m=mi(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 Se(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 _i,readFile as bi,rename as yi,rm as ki,stat as wi,writeFile as xi}from"node:fs/promises";import{createRequire as vi}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 Si(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 Ri=vi(import.meta.url),Pi="index.sqlite",Ti=(async()=>{let e=Ri.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)}/${Pi}`}async function Vn(e){try{return(await wi(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 jn(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 Qn(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 _i(r,{recursive:!0});try{await xi(s,Buffer.from(n)),await yi(s,t)}catch(o){try{await ki(s,{force:!0})}catch{}throw o}let i=await Vn(t);At.set(t,{db:e,mtimeMs:i})}function Kn(e){try{e.run("ROLLBACK")}catch{}}async function te(e){return Jn(e,!1)}async function Xn(e){return Jn(e,!0)}async function Jn(e,t){let n=await Vn(e),r=At.get(e);if(r?.mtimeMs===n)return r.db;let s=await Ti,i;if(q(e))try{i=new s.Database(new Uint8Array(await bi(e)))}catch{if(!t)throw new Te(e);i=new s.Database}else i=new s.Database;try{jn(i)}catch{if(!t&&q(e))throw new Te(e);i=new s.Database,jn(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 Yn(e){return e.replaceAll("\\","\\\\").replaceAll("%","\\%").replaceAll("_","\\_")}function Ot(e,t){let n=[],r=[];for(let s of t){let i=`%${Yn(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 Zn(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 Xn(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 Kn(s),i}await Qn(s,r)}async function er(e,t,n,r){let s=B(e,r),i=await Xn(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 Kn(i),o}await Qn(i,s)}async function tr(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 nr(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 rr(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 sr(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=Yn(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 ir(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 or(e,t){let n=B(e,t);if(!q(n))return!1;try{return await te(n),!1}catch(r){return Si(r)}}async function ar(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 lr(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 ur(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 Ci(e){return e>=8?"high":e>=4?"medium":"low"}function cr(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 dr(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 mr(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 Ii(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=Ii(s.reasons,n.label,n.detail);return{item:r,score:s.score,confidence:Ci(s.score),reasons:i}}).sort((r,s)=>s.score-r.score)}import{copyFileSync as Ei,existsSync as Li,mkdirSync as Ni,symlinkSync as Ai}from"node:fs";import{createRequire as gr}from"node:module";import{dirname as Mi,join as Ze,relative as Oi}from"node:path";var _r=gr(import.meta.url),fr=new Map,Fi={attempted:!1,ok:!1,reason:"not-bun"};function pr(e){if(!e||typeof e!="object")return!1;let t=e.code;return t==="EACCES"||t==="EPERM"||t==="EROFS"}function Di(e){if(!e.isBun)return{attempted:!1,ok:!1,reason:"not-bun"};try{let t=e.resolvePackage(),n=Mi(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(pr(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(pr(o))return{attempted:!0,ok:!1,reason:"readonly"};throw o}}}catch{return{attempted:!0,ok:!1,reason:"resolution-failed"}}}function Ui(){let e=Di({isBun:typeof process.versions.bun=="string",platform:process.platform,arch:process.arch,resolvePackage:()=>_r.resolve("tree-sitter/package.json"),exists:Li,mkdir:t=>Ni(t,{recursive:!0}),symlink:Ai,copy:Ei,relativePath:Oi});return Fi=e,e}function Wi(){let e=ne("tree-sitter");return e||(Ui(),e=ne("tree-sitter"),e)}function ne(e,t=[],n=!0){for(let r of t){let s=fr.get(r);s||(s=gr(Ze(r,"__veil_runtime_loader__.cjs")),fr.set(r,s));try{return s(e)}catch{continue}}if(n)try{return _r(e)}catch{return}}function $i(e=[],t=!0){return ne("tree-sitter-typescript",e,t)?.typescript??null}var br={javascript:{loader:(e,t)=>ne("tree-sitter-javascript",e,t),parserId:"javascript",symbolKinds:{function_declaration:"function",class_declaration:"class",method_definition:"method"}},typescript:{loader:$i,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=Wi(),hr=new Map;function yr(e,t,n){if(!Dt)return null;let r=`${e}\0${n}`,s=hr.get(r);if(s)return s;let i=new Dt;return i.setLanguage(t),hr.set(r,i),i}function Ut(e,t){return e.slice(t.startIndex,t.endIndex)}function kr(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 wr(e,t){let n=e.childForFieldName("parameters");return n&&Ut(t,n).trim()||void 0}function zi(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 Gi(e,t=[],n=!0){return!e||e==="text"?null:ne(`tree-sitter-${e}`,t,n)}function qi(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 Bi(e,t,n,r,s){let i=yr(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=qi(c.type);if(m){let f=kr(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:wr(c,n)}))}}for(let f of c.namedChildren)a.push(f)}return u}catch{return null}}function xr(e,t,n,r,s=[],i=new Set){let o=s.join("\0");if(t==="json")return r.has("json")?[]:null;let a=br[t];if(!a){if(!r.has(t))return null;let f=i.has(t),p=`${o}\0${f?"1":"0"}`,b=Gi(t,s,f);return b?Bi(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=yr(t,c,u);if(!m)return null;try{let f=m.parse(n),p=new Set(Object.keys(a.symbolKinds)),b=zi(f.rootNode,p),x=[];for(let _ of b){let k=a.symbolKinds[_.type];if(!k)continue;let w=kr(_,n);w&&x.push({path:e,line:_.startPosition.row+1,kind:k,name:w,signature_hint:wr(_,n)})}return x}catch{return null}}function vr(e,t=[],n=new Set){let r=Object.values(br).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 Cr="2",Ki=24,Xi=512*1024,Ji=120,Yi=20,Rr=20,Zi=100,eo=1500,to=64,no=256,ro=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,so=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"]),io=new Set(["doc","docs","readme","markdown","guide","documentation"]),oo=new Set(["symbol","symbols","function","class","method","type","interface"]),Ir=new Set(["src","lib","app","server","cmd","pkg","modules","hosts","outputs","scripts"]);function he(e,t){return`${e}::${j(e,t)}`}function Er(e,t){return he(e,t)}async function ao(e,t,n){let r=Er(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 lo(e,t,n){let r=Er(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>to){let n=U.keys().next().value;n&&U.delete(n)}}function Q(){return typeof Bun<"u"&&typeof Bun.nanoseconds=="function"?Bun.nanoseconds()/1e6:Date.now()}async function ce(e,t,n=5e3){return await new Promise(r=>{let s=!1,i=!1,o=null,a=Hi("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 ce(e,["status","--porcelain"]);return t.ok?{dirty:t.stdout.length>0,degraded:!1}:{dirty:!0,degraded:!0}}async function uo(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 ce(e,["diff","--name-only",`${t}..HEAD`])),s(await ce(e,["diff","--name-only"])),s(await ce(e,["diff","--cached","--name-only"])),s(await ce(e,["ls-files","--others","--exclude-standard"])),{files:n,degraded:r}}function V(e){return e.toLowerCase()}function co(e){let n=V(e).split(/[^a-z0-9_./-]+/).map(r=>r.trim()).filter(r=>r.length>=3&&r.length<=64).filter(r=>!so.has(r));return[...new Set(n)]}function mo(e){return V(e).replace(/\s+/g," ").trim()}function fo(e,t,n="auto"){return n!=="auto"?n:t.some(r=>io.has(r))||e.includes("readme")||e.includes("docs")?"docs":t.some(r=>oo.has(r))?"symbols":"code"}function po(e,t){if(Ie.set(e,t),Ie.size>no){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=mo(e),i=co(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:fo(s,i,t)};return po(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 ho(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 Lr(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 go(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 _o(e){return ji("sha1").update(e).digest("hex")}var bo={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 yo(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=bo[r]??r;if(t.has(s))return s}return"text"}function ko(e){return e.split("/")[0]||"."}function wo(e,t){let n=t.split(`
|
|
40
|
+
`),r=[],s=0;for(;s<n.length;){let i=Math.min(n.length,s+Ji);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-Yi,s+1)}return r}function xo(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 vo(e,t,n,r,s,i){let o=xr(e,t,n,r,s,i);return o!==null?o:xo(e,t,n)}async function So(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 Qi(a)}catch{return{file:null,symbols:[],chunks:[]}}if(!l.isFile())return{file:null,symbols:[],chunks:[]};if(l.size>Xi)return{file:null,symbols:[],chunks:[]};let u="";try{u=await Tr(a,"utf-8")}catch{return{file:null,symbols:[],chunks:[]}}if(u.includes("\0"))return{file:null,symbols:[],chunks:[]};let c=yo(t,n);return{file:{path:t,language:c,size:l.size,hash:_o(u),top_level:ko(t)},symbols:vo(t,c,u,n,r,s),chunks:wo(t,u)}}async function nt(e,t,n,r,s,i){let o=[],a=[],l=[];for(let u=0;u<t.length;u+=Rr){let c=t.slice(u,u+Rr),m=await Promise.all(c.map(f=>So(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 Nr(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=Nr(e,t),s=Cn(r,n);return s?(P.recordCacheHit(),s):(P.recordCacheMiss(),null)}function Vt(e,t,n,r){let s=Nr(e,t);In(s,n,r,Zi)}async function Ro(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 Po(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 lr(e,t),o=[];for(let a of i){if(o.length>=5)break;let l=a.language.trim().toLowerCase(),u=Bn(l);if(!u||!u.installable)continue;let c=u.parser_id,m=r.has(c),f=qn(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 Po(e,n);return{...t,grammar_suggestions:r}}catch{return{...t,grammar_suggestions:[]}}}async function To(e,t="full",n={}){let r=Q(),s=j(e,n.state_root);await Vi(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 An(e,n.state_root),f=await ce(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 K(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 uo(e,k.manifest.git_head),h=new Set(m);for(let y of await Zn(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 er(e,w.files,y,n.state_root),b=!0}}}let x=await ar(e,n.state_root),_=ur(e,p,x);if(_.schema_version=Cr,_.stale_after_hours=Ki,await qt(Ee(s,"manifest.json"),`${JSON.stringify(_,null,2)}
|
|
45
|
+
`,"utf-8"),b){let k=await tr(e,n.state_root);await Ro(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(Q()-r),P.recordCacheInvalidation(),P.updateCacheSizes(H.size,U.size),_}async function ge(e,t="full",n={}){return ao(e,n.state_root,async()=>To(e,t,n))}async function K(e,t={}){let n=he(e,t.state_root),r=U.get(n);if(!t.bypass_cache&&r&&Date.now()-r.ts<eo)return P.updateCacheSizes(H.size,U.size),r.value;let s=await ce(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(!Sr(o)||!a){let _=[Sr(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 Tr(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 or(e,t.state_root)&&u.push(se),l.schema_version!==Cr&&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 Co(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 K(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&&!Co(r))return{workspace:e,refreshed:!1,reason:"dirty-only",mode:null,status_before:r,status_after:r,manifest:r.manifest};let o=await lo(e,i,t.state_root);U.delete(he(e,t.state_root));let a=await K(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 Io(e,t,n){let r=new fe(Math.max(0,n));for(let s=0;s<e.length;s++){let i=V(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=V(e[s]?.top_level??"");t.intent==="code"&&Ir.has(a)&&(o+=.6),t.intent==="docs"&&(o+=Lr(i)),o>.5&&r.insert(s,o)}return r.toSortedArray().map(s=>e[s]).filter(s=>!!s)}function Eo(e,t,n){let r=new fe(Math.max(0,n));for(let[s,i]of e.entries()){let o=V(i.name),a=V(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 Lo(e,t,n,r){let s=r.language?V(r.language):"",i=r.path_prefix?V(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)Ir.has(u)&&l.add(u),u.includes("/")&&l.add(u.split("/")[0]??"");for(let[u,c]of e.entries()){let m=V(c.path);if(i&&!m.startsWith(i)||!go(m,s))continue;let f=V(`${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+=ho(m)),t.intent==="docs"&&(p+=Lr(m)),p>=2&&a.insert(u,p)}return a.toSortedArray().map(u=>e[u]).filter(u=>!!u)}function Pr(e){return typeof e!="number"||!Number.isFinite(e)||e<=0?ro:Math.max(40,Math.min(2e4,Math.floor(e)))}function Ar(e,t,n){let r=e.content??"",s=r.length;if(t==="full"){if(typeof n=="number"&&Number.isFinite(n)&&n>0){let a=Pr(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=Pr(n),o=s>i;return{...e,content:o?r.slice(0,i):r,content_truncated:o,content_chars:s}}function Mr(e,t,n){return e.map(r=>Ar(r,t,n))}async function Le(e,t,n=20,r={}){let s=Q();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=Io(await nr(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(Q()-s),P.updateCacheSizes(H.size,U.size),l}async function Ne(e,t,n=20,r={}){let s=Q();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=Eo(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(Q()-s),P.updateCacheSizes(H.size,U.size),l}async function Ae(e,t,n=10,r={}){let s=Q();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=Lo(await sr(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=Mr(l,Bt(r),r.content_max_chars);return Vt(e,r.state_root,o,u),P.recordQuery(Q()-s),P.updateCacheSizes(H.size,U.size),u}async function Or(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 Fr(e,t,n={}){let r=Q(),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=Mr(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=>cr(y.path,u),{label:"fallback-file-match",detail:"File returned by fallback retrieval path"}),symbols:Ye(p,y=>dr(y,c),{label:"fallback-symbol-match",detail:"Symbol returned by fallback retrieval path"}),chunks:Ye(k,y=>mr(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(Q()-r),P.updateCacheSizes(H.size,U.size),h}async function Dr(e,t,n={}){let r=await ir(e,t,n.state_root);return r?Ar(r,n.include_content===!1?"preview":"full",n.content_max_chars):null}var $r=2e4,Uo=5e5,Wo=".veil-repo-context",be=2e6,$o=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=No(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")},$o)},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 zo(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??$r,Uo));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 zr(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=Do(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=Fo(r);try{let u=Oe(l);o=_e(u,Wr(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 Go(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 qo(e){return typeof e!="number"||!Number.isFinite(e)||e<=0?null:Math.max(1,Math.min(2e3,Math.floor(e)))}function Bo(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 Ho(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:zo(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 v(e,t,n,r){let s=oe()-t,i=e==="gh_lookup";P.recordGitCall(s,n,r,i)}async function Gr(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 v("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 v("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=Go(c.stdout),f=Bo(m,qo(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 v("git_status",n,!0,!1),ye(e,"git_status",n,_,{truncated:!1},f.warnings)}async function qr(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 v("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 v("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=Ho(l.stdout);return v("git_log",n,!0,!1),ye(e,"git_log",n,{limit:o,entries:u},{truncated:!1},Fe(l))}async function Br(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 v("git_diff",n,!1,!1),I(e,"git_diff",n,i.error,i.gitAvailable);let o=Xt(t?.base);if(!o.ok)return v("git_diff",n,!1,!1),I(e,"git_diff",n,o.error);let a=Xt(t?.head);if(!a.ok)return v("git_diff",n,!1,!1),I(e,"git_diff",n,a.error);let l=zr(e,t?.path);if(!l.ok)return v("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 v("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 v("git_diff",n,!0,!1),ye(e,"git_diff",n,x,b,Fe(p))}async function Hr(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 v("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 v("git_show",n,!1,!1),I(e,"git_show",n,o.ok?{code:"invalid-revision",message:"Revision is required"}:o.error);let a=zr(e,t?.path);if(!a.ok)return v("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 v("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 v("git_show",n,!0,!1),ye(e,"git_show",n,m,c,Fe(u))}async function jr(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 v("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 v("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 v("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 v("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 v("gh_lookup",n,!1,!1),I(e,"gh_lookup",n,{code:"git-unavailable",message:"git is not available in PATH"},!1);if(!_.ok)return v("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,Wr(l.name));Ao(w,{recursive:!0});let y=rt(h,".git"),N=rt(h,Wo),C;if(!Ur(y))C=await O("git",["clone","--depth","1",l.url,h],e,r),C.ok&&Oo(N,`${l.repo}
|
|
49
|
+
`,"utf-8");else{if(!Ur(N))return v("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=Mo(N,"utf-8").trim();if(M!==l.repo)return v("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),bs=cn.ok?cn.stdout.trim().replace(/^refs\/remotes\//,""):"origin/main",le=await O("git",["-C",h,"reset","--hard",bs],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=Bt(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 Ht(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 it(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=it(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=it(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:it(u.url).localeCompare(it(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},ot={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 at(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 lt(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:kt(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:kt(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 zt(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()},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 Ht({allow_network:!1});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:ot,handler:async e=>{W(g(e.workspace),g(e.state_root));let t=await Ht({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,at(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,at(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":at(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=Rt(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=at(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,gt(i),{state_root:r}),l=await lt(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,_t(i),{state_root:r}),l=await lt(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,bt(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 lt(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 lt(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()},annotations:$,handler:async e=>{let t=g(e.query)??"",n=g(e.workspace),r=g(e.state_root),s=W(n,r),i=await zt(s,{state_root:r,refresh_if_stale:L(e.refresh_if_stale)??!0,strict_query_freshness:!0}),o=await Cr(s,t,{files_limit:gt(S(e.files_limit)),symbols_limit:_t(S(e.symbols_limit)),search_limit:bt(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(u=>Yt(u,t)),l={status:ts(i.status_after),intent:o.intent,files:o.files,symbols:o.symbols,chunks:o.chunks};return a.length>0&&(l.grammar_suggestions=a),A("discover",l,{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:ot,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:ot,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:ot,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=ht(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,ct=null,dt=null,mt=null;async function ya(){if(ae)try{await ae}catch{}let e=ct,t=dt,n=mt;ae=null,en=!1,ct=null,dt=null,mt=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),dt=o,mt=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)}}});ct=a,ae=new Promise((l,u)=>{a.on("error",u),a.listen(n,t,()=>{en=!0,l()})});try{await ae}catch(l){throw ct=null,dt=null,mt=null,ae=null,await o.close(),await i.close(),l}}var uu={createMcpServer:tn,toolNames:Zt.map(e=>e.name),toolDefinitions:Zt,responseErrorMessage:ht,parseRequestBody:ss,maxHttpRequestBodyBytes:rs,stopHttpServer:ya},ka=import.meta,wa=`${ut}src${ut}server.ts`,xa=oa(import.meta.url).endsWith(wa),va=process.argv.some(e=>e.endsWith(`${ut}src${ut}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 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 ge(h,"changed",{state_root:t.state_root});let M=await K(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 v("gh_lookup",n,!0,!1),ye(e,"gh_lookup",n,D,{truncated:!1},Fe(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)),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 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=Jt(p.stdout,$r),x={repo:l.repo,kind:t.kind,query:c,limit:u,text:b.text,repo_url:l.url};return v("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 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 Kr}from"node:fs";import{dirname as Xr,resolve as ot}from"node:path";import{fileURLToPath as Jr}from"node:url";var at=/^\d+\.\d+\.\d+$/,Yr=2e3,jo=600*1e3,Vo="@ushiradineth/veil",Qo=(e,t)=>fetch(e,t),Vr,Zr=new Map;function Ko(e){let t=Xr(Jr(e)),n=[ot(t,"../package.json"),ot(t,"../../package.json")];for(let r of n)try{let s=JSON.parse(Kr(r,"utf8"));if(typeof s.version=="string"&&at.test(s.version))return s.version}catch{}return null}function Xo(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 Jo(e){let t=Xr(Jr(e)),n=[ot(t,"../skills/SKILL.md"),ot(t,"../../skills/SKILL.md")];for(let r of n)try{let s=Kr(r,"utf8"),i=Xo(s);if(i)return i}catch{}return null}function Qr(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 es(e,t){let n=Qr(e),r=Qr(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 Yo(){return Vr!==void 0?Vr:sa}async function Zo(e,t){let n=Number.isFinite(t)?Math.max(250,t):Yr,r=new AbortController,s=setTimeout(()=>{r.abort()},n);try{let i=`https://registry.npmjs.org/${encodeURIComponent(e)}/latest`,o=await Qo(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 ts(e,t){return`${e}\0${t}`}function ea(e,t){let n=ts(e,t),r=Zr.get(n);return!r||Date.now()-r.ts>jo?null:{...r.value,source:"cache"}}function ta(e,t,n){let r=ts(e,t);Zr.set(r,{ts:Date.now(),value:n})}async function na(e={}){let t=e.package_name??Vo,n=e.current_version??Yt,r=e.allow_network??!0,s=e.force_refresh===!0,i=e.timeout_ms??Yr;if(!s){let o=ea(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 Zo(t,i),a=es(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"),ta(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 ra(e){let t=Yo(),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=es(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 na({allow_network:e.allow_network,force_refresh:e.force_refresh,timeout_ms:e.timeout_ms}),n=ra(e.reported_skill_version);return{mcp:t,skill:n}}var Yt=Ko(import.meta.url)??"0.0.0",sa=Jo(import.meta.url);var ke=["google","duckduckgo","wikipedia","github","reddit","deepwiki"],ia={google:10,duckduckgo:9,wikipedia:6,github:7,reddit:5,deepwiki:8},oa=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 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())oa.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 aa(e){try{return new URL(en(e)).host.toLowerCase()}catch{return""}}function la(e,t){return Number((ia[e]-t*.01).toFixed(4))}function ua(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 ca(e,t){let n=ua(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 da(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 is(e){if(!e)return[];let t=[];for(let n of e){if(Array.isArray(n.Topics)&&n.Topics.length>0){t.push(...is(n.Topics));continue}t.push(n)}return t}function ns(e,t){let n=[],r=is(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 rs(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 ma(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 fa(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 pa(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 ha(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 ga(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=qe(o),l=Be(s.aborted||a==="timeout",a);return{provider:e.provider,ok:!1,duration_ms:Number((X()-i).toFixed(4)),results:[],warning:l?"timeout":a}}}function _a(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=ca(n,m),b=Number((p*100+la(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=aa(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 ba=[{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=da(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=rs(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 ns(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=rs(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 ns(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 fa(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 pa(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 ha(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 ma(a,n)}}];function ss(e,t,n){return{provider:e,ok:!1,duration_ms:Number(t.toFixed(4)),result_count:0,warning:n}}async function os(e,t){let n=X(),r=bn(t.query),s=je(t.limit),i=Ve(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,c=!1;try{let m=ba.map((h,y)=>ga(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){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=_a(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=ke[h]??"google";x.set(y,ss(y,_,c?"timeout":"cancelled"))}let k=ke.map(h=>x.get(h)??ss(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((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: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((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},we={readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},ct={readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},Sa={readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},cs=1024*1024,de=class extends Error{constructor(t){super(t),this.name="HttpBodyTooLargeError"}};function as(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 ls(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 Ra(e){return ee.find(n=>n.id===e)?.label??e}function Pa(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(Pa(n)>0)return n;let o=((await K(e,{state_root:t})).grammar_suggestions??[]).filter(a=>sn(a,r));return o.length===0?n:{...n,grammar_suggestions:o}}function Ta(e){return{content:[{type:"text",text:St(e)}],isError:!1}}function tn(e,t){let n=as(t),r=as(n.error),i={ok:!1,error:{code:g(r.code)??"tool-error",message:e}};return{content:[{type:"text",text:St(i)}],isError:!0}}function Ca(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(gn(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 K(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:S(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 zn(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 Un(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 Wn(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 $n(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 K(s,{state_root:n}),o=Math.max(1,Math.min(S(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:Ra(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 Hn(r,s,n,S(e.timeout_ms)),o=await K(r,{state_root:n,bypass_cache:!0}),a=o.grammar_suggestions??[],l={...i,status:ls(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=S(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=S(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(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:ve(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 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 Fr(i,t,{files_limit:yn(S(e.files_limit)),symbols_limit:kn(S(e.symbols_limit)),search_limit:wn(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:ve(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 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 Or(s,t,{files_limit:kt(S(e.files_limit)),symbols_limit:wt(S(e.symbols_limit)),search_limit:xt(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:ve(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(c=>sn(c,t)),l=await lt({allow_network:!1,reported_skill_version:g(e.reported_skill_version)}),u={status:ls(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 Dr(r,s,{state_root:n,include_content:!0,content_max_chars:ve(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: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 os(n,{query:t,limit:je(S(e.limit)),timeout_ms:Ve(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: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 Tn({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: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 Gr(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: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 qr(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: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 Br(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: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 Hr(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: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 jr(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:d.string().optional(),state_root:d.string().optional(),reset:d.boolean().optional()},annotations:Sa,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 Ia(e,t){try{let n=await e.handler(t),r=yt(n);return r?tn(r,n):Ta(n)}catch(n){let r=Ca(n),s=n instanceof Error?n.message:String(n);return r?tn(s,{error:{code:r}}):tn(s)}}function ln(){let e=new wa({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=>Ia(t,n));return e}function $e(e){let t=e.trim().toLowerCase();return t?t.startsWith("[")&&t.endsWith("]")?t.slice(1,-1):t:""}function Ea(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 La(e){if(!e)return"";try{return $e(new URL(e).hostname)}catch{return""}}function Na(e,t,n){if(n)return null;let r=Ea(e.headers.host);if(!r||!nn(r))return"Request host is not allowed for local-only mode";let s=La(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 ds(e,t=cs){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 de(`Request body exceeds ${String(t)} bytes maximum`);n.push(a);continue}if(Buffer.isBuffer(i)){if(r+=i.byteLength,r>t)throw new de(`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 de(`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 de(`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 us=!1,rn=null;async function un(){us||(rn??=(async()=>{let e=ln(),t=new xa;await e.connect(t),us=!0})().catch(e=>{throw rn=null,e}),await rn)}var an=!1,ae=null,pt=null,ht=null,gt=null;async function Aa(){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 ms(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 va({sessionIdGenerator:void 0,enableJsonResponse:!0});await i.connect(o),ht=o,gt=i;let a=ya(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=Na(l,t,s);if(c){u.statusCode=403,u.end(c);return}let m=await ds(l);await o.handleRequest(l,u,m)}catch(c){if(c instanceof de){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 vu={createMcpServer:ln,toolNames:on.map(e=>e.name),toolDefinitions:on,responseErrorMessage:yt,parseRequestBody:ds,maxHttpRequestBodyBytes:cs,stopHttpServer:Aa},Ma=import.meta,Oa=`${ft}src${ft}server.ts`,Fa=ka(import.meta.url).endsWith(Oa),Da=process.argv.some(e=>e.endsWith(`${ft}src${ft}server.ts`)||e==="src/server.ts");Fa&&(Ma.main===!0||Da)&&await un();async function ps(e=process.argv){if(hs(e)){await ms();return}await un()}function hs(e){return process.env.VEIL_HTTP==="1"?!0:e.includes("--http")}async function gs(e=()=>ps()){try{await e()}catch(t){process.stderr.write(String(t)+`
|
|
54
|
+
`),process.exitCode=1}}function _s(e){let t=import.meta;if(typeof t.main=="boolean")return t.main;let n=process.argv[1];return n?fs(n)===fs(Ua(e)):!1}var Cu={main:ps,runMain:gs,isMainModule:_s,shouldStartHttp:hs},Wa=_s(import.meta.url);Wa&&gs();export{Cu 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.3
|
|
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
|
|
|
@@ -39,6 +39,12 @@ Retrieval query tools refresh index state on stale or dirty worktrees by default
|
|
|
39
39
|
4. Add context branches only as needed: git, web, or GitHub.
|
|
40
40
|
5. Return concise findings with paths or URLs, then continue implementation.
|
|
41
41
|
|
|
42
|
+
## Skill version drift signal
|
|
43
|
+
|
|
44
|
+
- Read local installed Veil skill frontmatter version once per session.
|
|
45
|
+
- Send that value as `reported_skill_version` on `veil_discover` and `veil_status` calls.
|
|
46
|
+
- Re-send when session state is uncertain or local skill file changes.
|
|
47
|
+
|
|
42
48
|
Prefer required args only by default. Add optional args only when you need behavior different from defaults.
|
|
43
49
|
Prefer compact defaults (`veil_lookup` compact reasons, git path lists off unless asked, bounded `veil_fetch_url` output).
|
|
44
50
|
|