@ushiradineth/veil 0.6.1 → 0.7.1

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/README.md CHANGED
@@ -62,6 +62,7 @@ Add to `~/.config/opencode/opencode.json`:
62
62
  | Capability | MCP tool |
63
63
  | ----------------------------------- | ----------------------------------------------------------------------------------------- |
64
64
  | Index status | `veil_status` |
65
+ | MCP and skill update check | `veil_update_check` |
65
66
  | Incremental refresh | `veil_refresh` |
66
67
  | Full rebuild | `veil_build` |
67
68
  | Discover files/symbols/chunks | `veil_discover` |
@@ -79,6 +80,26 @@ Add to `~/.config/opencode/opencode.json`:
79
80
  | GitHub context lookup | `veil_gh_lookup` |
80
81
  | Diagnostics | `veil_diagnostics` |
81
82
 
83
+ ## Optional parser runtimes
84
+
85
+ - Core defaults stay minimal: `javascript`, `typescript`, `json`.
86
+ - Additional languages are optional and install only after explicit user approval via
87
+ `veil_grammar_runtime_install`.
88
+ - Common optional coverage includes:
89
+ - `nix`, `elixir`, `zig`, `go`, `rust`
90
+ - `c`, `cpp`, `c-sharp`
91
+ - `markdown`
92
+ - `java`, `php`, `ruby`, `lua`, `kotlin`, `swift`
93
+
94
+ ### Runtime install reuse semantics
95
+
96
+ - Parser enable or install state is persisted in `<state_root>/grammars.json` (default state root: `.veil`).
97
+ - Runtime packages are installed into `<state_root>/grammars-runtime` for that workspace.
98
+ - Separate MCP server instances reuse the same runtime install location when they target the same workspace and
99
+ state root.
100
+ - Fallback policy is strict for known installable parsers: global fallback is only allowed when runtime install is
101
+ recorded as failed (`runtime_install_failed`) or when no known runtime package mapping exists.
102
+
82
103
  ## Note
83
104
 
84
105
  > Veil is still experimental and under active development. Please report any issues or suggestions.
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 Ur}from"node:path";import{fileURLToPath as jo}from"node:url";import{createServer as Co}from"node:http";import{sep as rt}from"node:path";import{fileURLToPath as Lo}from"node:url";import{McpServer as Eo}from"@modelcontextprotocol/sdk/server/mcp.js";import{StdioServerTransport as Io}from"@modelcontextprotocol/sdk/server/stdio.js";import{StreamableHTTPServerTransport as No}from"@modelcontextprotocol/sdk/server/streamableHttp.js";import{z as c}from"zod";function ge(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:{value:e}}function le(e){return Array.isArray(e)?e:[]}function Hr(e){let t=ge(e.meta);return typeof t.ok=="boolean"?t.ok:!0}function jr(e){let t=le(e.items).length,n=le(e.files).length,r=le(e.symbols).length,s=le(e.chunks).length,i=ge(e.data),o=le(i.results).length,a=le(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 De(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"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 Vt(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 Qr(e,t){if(e==="git_status"){let r=ge(t.data).branch;return typeof r=="string"&&r.length>0}return e==="status"?typeof t.exists=="boolean":e==="refresh"?typeof t.ok=="boolean":e==="diagnostics"?t.cache!==void 0||t.operations!==void 0:!1}function Kt(e){return!e||e.trim().length===0?void 0:`broaden ${e.trim().replace(/\s+/g," ")}`}function Vr(e,t,n){let r=ge(t),s=Hr(r),i=jr(r);return s?i===0?Qr(e,r)?{next_calls:De(e),confidence:"high",coverage:"full"}:{next_calls:De(e),confidence:"medium",coverage:"partial",missing_context:Vt(e),recommended_query:Kt(n?.query)}:{next_calls:De(e),confidence:"high",coverage:"full"}:{next_calls:De(e),confidence:"low",coverage:"none",missing_context:Vt(e),recommended_query:Kt(n?.query)}}function M(e,t,n){let r=ge(t),s=Vr(e,r,n);return s.confidence!=="high"||s.coverage!=="full"?{...r,guidance:s}:r}import{existsSync as Xr,mkdirSync as Jr,readFileSync as Yr,writeFileSync as Zr}from"node:fs";import{dirname as es,join as ts}from"node:path";import{isAbsolute as Yt,join as $e,normalize as Xt,relative as Kr}from"node:path";var Jt=".veil";function ie(e,t){let n=(t??Jt).trim();return n?Yt(n)?Xt(n):Xt($e(e,n)):$e(e,Jt)}function j(e,t){return $e(ie(e,t),"index")}function _e(e,t){let n=ie(e,t),r=Kr(e,n);return!r||r==="."?"":r.startsWith("..")||Yt(r)?null:r.replace(/\\/g,"/")}function Zt(e,t){return $e(j(e,t),"diagnostics-state.json")}var at=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??ts(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(),!!Xr(this.statePath)))try{let t=Yr(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{Jr(es(this.statePath),{recursive:!0}),Zr(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 at,lt=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
- `)}},ea=new lt;import{isIP as rs}from"node:net";import{NodeHtmlMarkdown as ss}from"node-html-markdown";function Ue(e){return e instanceof Error?e.message:String(e)}function qe(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 tn(e){return(e??"").trim()}var R={files_limit:{min:1,max:200,default:20},symbols_limit:{min:1,max:200,default:20},search_limit:{min:1,max:100,default:10},lookup_files_limit:{min:1,max:200,default:8},lookup_symbols_limit:{min:1,max:200,default:12},lookup_search_limit:{min:1,max:100,default:8},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 ze(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:{value:e}}function en(e){return typeof e=="string"?e:void 0}function ut(e){let t=ze(e);if(ze(t.meta).ok===!1){let r=ze(t.error),s=en(r.message);return s?.trim()?s:"Tool execution failed"}if(t.ok===!1){let r=ze(t.error),s=en(r.message);return s?.trim()?s:"Tool execution failed"}return null}function ns(e){return z(e,R.chunk_content_max_chars.min,R.chunk_content_max_chars.max,R.chunk_content_max_chars.default)}function be(e){if(!(typeof e!="number"||!Number.isFinite(e)||e<=0))return ns(e)}function Ge(e){return z(e,R.web_search_limit.min,R.web_search_limit.max,R.web_search_limit.default)}function Be(e){return z(e,R.web_search_timeout_ms.min,R.web_search_timeout_ms.max,R.web_search_timeout_ms.default)}function ct(e){return z(e,R.files_limit.min,R.files_limit.max,R.files_limit.default)}function dt(e){return z(e,R.symbols_limit.min,R.symbols_limit.max,R.symbols_limit.default)}function mt(e){return z(e,R.search_limit.min,R.search_limit.max,R.search_limit.default)}function nn(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 rn(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 sn(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 J(e=typeof Bun>"u"?void 0:Bun){return e&&typeof e.nanoseconds=="function"?e.nanoseconds()/1e6:Date.now()}function ln(e){return e.replace(/&amp;/g,"&").replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/&#39;/g,"'").replace(/&nbsp;/g," ")}function un(e){return e.replace(/<[^>]+>/g," ")}function ft(e){return e.replace(/\r/g,"").replace(/\t/g," ").replace(/\n{3,}/g,`
2
+ import{resolve as os}from"node:path";import{fileURLToPath as Sa}from"node:url";import{createServer as ia}from"node:http";import{sep as ct}from"node:path";import{fileURLToPath as oa}from"node:url";import{McpServer as aa}from"@modelcontextprotocol/sdk/server/mcp.js";import{StdioServerTransport as la}from"@modelcontextprotocol/sdk/server/stdio.js";import{StreamableHTTPServerTransport as ua}from"@modelcontextprotocol/sdk/server/streamableHttp.js";import{z as c}from"zod";function J(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:{value:e}}function de(e){return Array.isArray(e)?e:[]}function ms(e){let t=J(e.meta);return typeof t.ok=="boolean"?t.ok:!0}function fs(e){let t=de(e.items).length,n=de(e.files).length,r=de(e.symbols).length,s=de(e.chunks).length,i=J(e.data),o=de(i.results).length,a=de(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 Ue(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 sn(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 ps(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 on(e){return!e||e.trim().length===0?void 0:`broaden ${e.trim().replace(/\s+/g," ")}`}function hs(e,t,n){let r=J(t),s=ms(r),i=fs(r);return s?i===0?ps(e,r)?{next_calls:Ue(e),confidence:"high",coverage:"full"}:{next_calls:Ue(e),confidence:"medium",coverage:"partial",missing_context:sn(e),recommended_query:on(n?.query)}:{next_calls:Ue(e),confidence:"high",coverage:"full"}:{next_calls:Ue(e),confidence:"low",coverage:"none",missing_context:sn(e),recommended_query:on(n?.query)}}function A(e,t,n){let r=J(t),s=hs(e,r,n);return s.confidence!=="high"||s.coverage!=="full"?{...r,guidance:s}:r}import{existsSync as _s,mkdirSync as bs,readFileSync as ys,writeFileSync as ks}from"node:fs";import{dirname as ws,join as xs}from"node:path";import{isAbsolute as un,join as We,normalize as an,relative as gs}from"node:path";var ln=".veil";function ne(e,t){let n=(t??ln).trim();return n?un(n)?an(n):an(We(e,n)):We(e,ln)}function j(e,t){return We(ne(e,t),"index")}function we(e,t){let n=ne(e,t),r=gs(e,n);return!r||r==="."?"":r.startsWith("..")||un(r)?null:r.replace(/\\/g,"/")}function cn(e,t){return We(j(e,t),"diagnostics-state.json")}var pt=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??xs(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(),!!_s(this.statePath)))try{let t=ys(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{bs(ws(this.statePath),{recursive:!0}),ks(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 pt,ht=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
+ `)}},Na=new ht;import{isIP as Ss}from"node:net";import{NodeHtmlMarkdown as Rs}from"node-html-markdown";function $e(e){return e instanceof Error?e.message:String(e)}function ze(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 mn(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 Ge(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:{value:e}}function dn(e){return typeof e=="string"?e:void 0}function gt(e){let t=Ge(e);if(Ge(t.meta).ok===!1){let r=Ge(t.error),s=dn(r.message);return s?.trim()?s:"Tool execution failed"}if(t.ok===!1){let r=Ge(t.error),s=dn(r.message);return s?.trim()?s:"Tool execution failed"}return null}function vs(e){return z(e,R.chunk_content_max_chars.min,R.chunk_content_max_chars.max,R.chunk_content_max_chars.default)}function xe(e){if(!(typeof e!="number"||!Number.isFinite(e)||e<=0))return vs(e)}function qe(e){return z(e,R.web_search_limit.min,R.web_search_limit.max,R.web_search_limit.default)}function Be(e){return z(e,R.web_search_timeout_ms.min,R.web_search_timeout_ms.max,R.web_search_timeout_ms.default)}function _t(e){return z(e,R.files_limit.min,R.files_limit.max,R.files_limit.default)}function bt(e){return z(e,R.symbols_limit.min,R.symbols_limit.max,R.symbols_limit.default)}function yt(e){return z(e,R.search_limit.min,R.search_limit.max,R.search_limit.default)}function fn(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 pn(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 hn(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 bn(e){return e.replace(/&amp;/g,"&").replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/&#39;/g,"'").replace(/&nbsp;/g," ")}function yn(e){return e.replace(/<[^>]+>/g," ")}function kt(e){return e.replace(/\r/g,"").replace(/\t/g," ").replace(/\n{3,}/g,`
5
5
 
6
- `).replace(/[ ]{2,}/g," ").trim()}var is=new ss({maxConsecutiveNewlines:3});function os(e){try{return ft(is.translate(e))}catch{return ft(ln(un(e)))}}function as(e){let t=ln(un(e));return ft(t)}function ls(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 us(e){return(e.headers.get("content-type")??"").toLowerCase()}function cs(e){if(!e)return null;let t=Number(e);return!Number.isFinite(t)||t<0?null:Math.floor(t)}function on(e){return e.includes("text/html")||e.includes("application/xhtml+xml")}function ds(e){return e.includes("text/markdown")||e.includes("text/x-markdown")||e.includes("markdown")}function ms(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 fs(e){try{let t=new URL(e);return t.protocol!=="https:"&&t.protocol!=="http:"?null:t}catch{return null}}function cn(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 ps(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 cn(n)}return!!(/^fc[0-9a-f]{2}:/.test(t)||/^fd[0-9a-f]{2}:/.test(t)||/^fe[89ab][0-9a-f]:/.test(t))}function hs(e){let t=e.trim().toLowerCase().replace(/\.$/,"");if(!t||t==="localhost"||t.endsWith(".localhost")||t==="metadata.google.internal"||t==="metadata")return!0;let n=rs(t);return n===4?cn(t):n===6?ps(t):!1}function an(e,t){return t?null:hs(e.hostname)?`Refusing private or local host: ${e.hostname}`:null}function gs(e){return e===301||e===302||e===303||e===307||e===308}async function dn(e){let t=J(),n=fs(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((J()-t).toFixed(4)),truncated:!1},data:null,error:{code:"invalid-url",message:"URL must be a valid http(s) URL"}};let l=an(n,a);if(l)return{meta:{ok:!1,duration_ms:Number((J()-t).toFixed(4)),truncated:!1},data:null,error:{code:"blocked-host",message:l}};let u=e.fetch_impl??fetch,d=new AbortController,m=setTimeout(()=>{d.abort("timeout")},s);try{let h=n,f=null;for(let T=0;T<=5&&(f=await u(h.toString(),{method:"GET",headers:{accept:ls(r),"user-agent":"veil-fetch-url/1.0"},redirect:"manual",signal:d.signal}),!!gs(f.status));T+=1){let A=f.headers.get("location");if(!A)break;let E=new URL(A,h),D=an(E,a);if(D)return{meta:{ok:!1,duration_ms:Number((J()-t).toFixed(4)),truncated:!1},data:null,error:{code:"blocked-host",message:D}};if(h=E,T===5)return{meta:{ok:!1,duration_ms:Number((J()-t).toFixed(4)),truncated:!1},data:null,error:{code:"fetch-failed",message:"Too many redirects"}}}if(!f)return{meta:{ok:!1,duration_ms:Number((J()-t).toFixed(4)),truncated:!1},data:null,error:{code:"fetch-failed",message:"No response from fetch"}};let _=us(f),y=f.status,b=cs(f.headers.get("x-markdown-tokens")),w=f.headers.get("content-signal"),v=f.headers.get("vary"),p=await f.text(),k=p;r==="markdown"?on(_)&&(k=os(p)):r==="text"&&(on(_)||ds(_))&&(k=as(p));let I=ms(k,i);if(!f.ok){let T=o?I.value:"";return{meta:{ok:!1,duration_ms:Number((J()-t).toFixed(4)),truncated:o?I.truncated:!1},data:{url:n.toString(),final_url:f.url||h.toString(),status:y,content_type:_,format:r,markdown_tokens:b,content_signal:w,vary:v,content:T},error:{code:"fetch-failed",message:`HTTP ${String(y)}`}}}return{meta:{ok:!0,duration_ms:Number((J()-t).toFixed(4)),truncated:I.truncated},data:{url:n.toString(),final_url:f.url||h.toString(),status:y,content_type:_,format:r,markdown_tokens:b,content_signal:w,vary:v,content:I.value},error:null}}catch(h){let f=Ue(h),_=qe(d.signal.aborted,f);return{meta:{ok:!1,duration_ms:Number((J()-t).toFixed(4)),truncated:!1},data:null,error:{code:_?"timeout":"internal-error",message:f}}}finally{clearTimeout(m)}}import{encode as _s}from"@toon-format/toon";function pt(e){try{return _s(e)}catch{return typeof e=="string"?e:String(e)}}import{spawn as Ki}from"node:child_process";import{existsSync as gr,mkdirSync as Xi,readFileSync as Ji,realpathSync as Ie,writeFileSync as Yi}from"node:fs";import{basename as _r,dirname as Zi,isAbsolute as Ee,join as Je,normalize as eo,relative as Ye,resolve as de}from"node:path";import{spawn as mi}from"node:child_process";import{createHash as fi}from"node:crypto";import{existsSync as rr}from"node:fs";import{mkdir as pi,readdir as $a,readFile as or,stat as hi,writeFile as Ct}from"node:fs/promises";import{join as Re,relative as qa}from"node:path";var ue=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 mn(e,t){let n=e.get(t);if(n!==void 0)return e.delete(t),e.set(t,n),n}function fn(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 bs}from"node:child_process";import{readdir as ys,readFile as ks}from"node:fs/promises";import{join as pn,relative as ws}from"node:path";import vs from"ignore";async function xs(e,t,n=5e3){return await new Promise(r=>{let s=!1,i=!1,o=null,a=bs("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 d=setTimeout(()=>{i=!0,a.kill("SIGTERM"),o=setTimeout(()=>{a.kill("SIGKILL")},150)},n);a.on("error",()=>{clearTimeout(d),o&&clearTimeout(o),u({ok:!1,timedOut:i})}),a.on("close",m=>{if(clearTimeout(d),o&&clearTimeout(o),i||m!==0){u({ok:!1,timedOut:i});return}u({ok:!0,stdout:l.trim()})})})}function hn(e){return[...new Set(e.filter(Boolean))].sort((t,n)=>t.localeCompare(n))}function gn(e,t){return!!(!e||e.startsWith(".git/")||e.startsWith("node_modules/")||t&&(e===t||e.startsWith(`${t}/`)))}async function Ss(e,t){let n=[],r=_e(e,t),s=vs();s.add([".git","node_modules"]),r&&s.add([r]);try{let o=await ks(pn(e,".gitignore"),"utf-8");s.add(o)}catch{}async function i(o){let a=await ys(o,{withFileTypes:!0});for(let l of a){let u=pn(o,l.name),d=ws(e,u).replace(/\\/g,"/");if(d&&!gn(d,r)){if(l.isDirectory()){if(s.ignores(`${d}/`))continue;await i(u);continue}l.isFile()&&(s.ignores(d)||n.push(d))}}}return await i(e),hn(n)}async function _n(e,t){let n=_e(e,t),r=await xs(e,["ls-files","--cached","--others","--exclude-standard"]);if(r.ok){let s=r.stdout.split(`
7
- `).map(i=>i.trim()).filter(i=>!gn(i,n));return hn(s)}return Ss(e,t)}import{existsSync as Rs}from"node:fs";import{mkdir as Ps,readFile as Ts,writeFile as Cs}from"node:fs/promises";import{spawn as Ls}from"node:child_process";import{createRequire as Es}from"node:module";var Is="grammars.json",Ns=Es(import.meta.url),As=12e4,We=2e6,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}],bn=[{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}],Ms=new Map(bn.map(e=>[e.id,e])),Os=new Map(ee.filter(e=>e.runtime_package).map(e=>[e.id,e.runtime_package])),Fs=new Set(ee.map(e=>e.id));function yn(e,t){return`${ie(e,t)}/${Is}`}function ht(){let e=ee.filter(t=>t.default_enabled).map(t=>t.id);return{version:1,enabled:e,installed:e}}function Ds(e){let t=ht();if(!e||typeof e!="object")return t;let n=e,r=a=>{if(!Array.isArray(a))return[];let l=[];for(let u of a){if(typeof u!="string")continue;let d=ke(u);d&&(l.includes(d)||l.push(d))}return l},s=r(n.enabled),i=r(n.installed);return{version:(n.version===1,1),enabled:s.length>0?s:t.enabled,installed:i.length>0?i:t.installed}}async function ye(e,t){let n=yn(e,t);if(!Rs(n))return ht();try{let r=await Ts(n,"utf-8");return Ds(JSON.parse(r))}catch{return ht()}}async function kn(e,t,n){let r=ie(e,n);await Ps(r,{recursive:!0}),await Cs(yn(e,n),`${JSON.stringify(t,null,2)}
8
- `,"utf-8")}function ke(e){let t=e.trim().toLowerCase();if(!t)return null;for(let n of ee)if(n.id===t||n.aliases.includes(t))return n.id;if(t.startsWith("tree-sitter-")){let n=t.slice(12);return/^[a-z0-9][a-z0-9-]*$/.test(n)?n:null}return/^[a-z0-9][a-z0-9-]*$/.test(t)?t:null}function je(e){let t=e.split(",").map(n=>ke(n)).filter(n=>!!n);return[...new Set(t)]}async function Qe(e,t){let n=await ye(e,t);return{enabled:n.enabled,installed:n.installed}}async function He(e,t,n){let r=await ye(e,n),s=t.map(l=>ke(l)).filter(l=>!!l),i=[...new Set([...r.installed,...s])],a={version:1,enabled:[...new Set([...r.enabled,...s])],installed:i};return await kn(e,a,n),{enabled:a.enabled,installed:a.installed}}async function wn(e,t,n){let r=await ye(e,n),s=new Set(t),i=r.enabled.filter(l=>!s.has(l)),o=r.installed.filter(l=>!s.has(l)),a={version:1,enabled:i,installed:o};return await kn(e,a,n),{enabled:a.enabled,installed:a.installed}}async function vn(e,t,n){let r=await ye(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 xn(e,t){let n=await ye(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 Sn(e){let t=ke(e);return t?Fs.has(t)?Os.get(t)??null:`tree-sitter-${t}`:null}function Rn(e){let t=Sn(e);if(!t)return!0;try{return Ns.resolve(t),!0}catch{return!1}}function Pn(e){let t=e.trim().toLowerCase();return Ms.get(t)??null}function $s(e){let t=bn.find(n=>n.parser_id===e);return t?t.installable?t.runtime_package:null:Sn(e)}async function Us(e,t,n,r){return await new Promise(s=>{let i=!1,o=!1,a=Ls(e,t,{cwd:n,stdio:["ignore","pipe","pipe"]}),l="",u="",d=0,m=0,h=null,f=(b,w,v)=>{if(v>=We)return{next:w,bytes:v};let p=Buffer.byteLength(b,"utf-8"),k=v+p;if(k<=We)return{next:w+b,bytes:k};let I=We-v,T=Buffer.from(b,"utf-8").subarray(0,I).toString("utf-8");return{next:w+T,bytes:We}},_=b=>{i||(i=!0,s(b))};a.stdout.setEncoding("utf-8"),a.stderr.setEncoding("utf-8"),a.stdout.on("data",b=>{let w=f(b,l,d);l=w.next,d=w.bytes}),a.stderr.on("data",b=>{let w=f(b,u,m);u=w.next,m=w.bytes});let y=setTimeout(()=>{o=!0,a.kill("SIGTERM"),h=setTimeout(()=>{a.kill("SIGKILL")},150)},r);a.on("error",b=>{clearTimeout(y),h&&clearTimeout(h),_({ok:!1,stdout:l,stderr:u,timed_out:o,exit_code:null,error:b.message})}),a.on("close",b=>{clearTimeout(y),h&&clearTimeout(h),_({ok:b===0&&!o,stdout:l,stderr:u,timed_out:o,exit_code:b})})})}function gt(e){let t=[...new Set(e.map(r=>ke(r)).filter(Boolean))],n=t.map(r=>$s(r)).filter(r=>!!r);return{parser_ids:t,packages:n,command:"npm",args:["install","--no-save","--no-package-lock","--ignore-scripts","--no-fund","--no-audit",...n]}}async function Tn(e,t,n,r=As){let s=gt(t);if(s.packages.length===0){let a=await He(e,s.parser_ids,n);return{ok:!0,parser_ids:s.parser_ids,packages:[],command:s.command,args:s.args,timed_out:!1,exit_code:0,stdout:"No runtime packages required",stderr:"",enabled:a.enabled,installed:a.installed}}let i=await Us(s.command,s.args,e,r);if(!i.ok){let a=await Qe(e,n);return{ok:!1,parser_ids:s.parser_ids,packages:s.packages,command:s.command,args:s.args,timed_out:i.timed_out,exit_code:i.exit_code,stdout:i.stdout,stderr:i.stderr,error:i.error,enabled:a.enabled,installed:a.installed}}let o=await He(e,s.parser_ids,n);return{ok:!0,parser_ids:s.parser_ids,packages:s.packages,command:s.command,args:s.args,timed_out:i.timed_out,exit_code:i.exit_code,stdout:i.stdout,stderr:i.stderr,enabled:o.enabled,installed:o.installed}}import{existsSync as B}from"node:fs";import{mkdir as qs,readFile as zs,stat as Gs,writeFile as Bs}from"node:fs/promises";import{createRequire as Ws}from"node:module";var we="index-db-corrupt",ve=class extends Error{reason=we;constructor(t){super(`${we}: ${t}`),this.name="IndexDbCorruptError"}},Hs=Ws(import.meta.url),js="index.sqlite",Qs=(async()=>{let e=Hs.resolve("sql.js/dist/sql-wasm.wasm"),n=(await import("sql.js")).default;return n({locateFile:()=>e})})(),_t=new Map;function W(e,t){return`${j(e,t)}/${js}`}async function Ln(e){try{return(await Gs(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 Cn(e){e.run(`
6
+ `).replace(/[ ]{2,}/g," ").trim()}var Ps=new Rs({maxConsecutiveNewlines:3});function Ts(e){try{return kt(Ps.translate(e))}catch{return kt(bn(yn(e)))}}function Cs(e){let t=bn(yn(e));return kt(t)}function Is(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 Es(e){return(e.headers.get("content-type")??"").toLowerCase()}function Ls(e){if(!e)return null;let t=Number(e);return!Number.isFinite(t)||t<0?null:Math.floor(t)}function gn(e){return e.includes("text/html")||e.includes("application/xhtml+xml")}function Ns(e){return e.includes("text/markdown")||e.includes("text/x-markdown")||e.includes("markdown")}function As(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 Ms(e){try{let t=new URL(e);return t.protocol!=="https:"&&t.protocol!=="http:"?null:t}catch{return null}}function kn(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 Os(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 kn(n)}return!!(/^fc[0-9a-f]{2}:/.test(t)||/^fd[0-9a-f]{2}:/.test(t)||/^fe[89ab][0-9a-f]:/.test(t))}function Fs(e){let t=e.trim().toLowerCase().replace(/\.$/,"");if(!t||t==="localhost"||t.endsWith(".localhost")||t==="metadata.google.internal"||t==="metadata")return!0;let n=Ss(t);return n===4?kn(t):n===6?Os(t):!1}function _n(e,t){return t?null:Fs(e.hostname)?`Refusing private or local host: ${e.hostname}`:null}function Ds(e){return e===301||e===302||e===303||e===307||e===308}async function wn(e){let t=Y(),n=Ms(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=_n(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,d=new AbortController,m=setTimeout(()=>{d.abort("timeout")},s);try{let f=n,p=null;for(let C=0;C<=5&&(p=await u(f.toString(),{method:"GET",headers:{accept:Is(r),"user-agent":"veil-fetch-url/1.0"},redirect:"manual",signal:d.signal}),!!Ds(p.status));C+=1){let M=p.headers.get("location");if(!M)break;let E=new URL(M,f),D=_n(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=Es(p),x=p.status,_=Ls(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"?gn(b)&&(y=Ts(h)):r==="text"&&(gn(b)||Ns(b))&&(y=Cs(h));let N=As(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=$e(f),b=ze(d.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 Us}from"@toon-format/toon";function wt(e){try{return Us(e)}catch{return typeof e=="string"?e:String(e)}}import{spawn as bo}from"node:child_process";import{existsSync as Lr,mkdirSync as yo,readFileSync as ko,realpathSync as Ne,writeFileSync as wo}from"node:fs";import{basename as Nr,dirname as xo,isAbsolute as Le,join as et,normalize as vo,relative as tt,resolve as ge}from"node:path";import{spawn as Mi}from"node:child_process";import{createHash as Oi}from"node:crypto";import{existsSync as br}from"node:fs";import{mkdir as Fi,readdir as _l,readFile as wr,stat as Di,writeFile as Dt}from"node:fs/promises";import{join as Pe,relative as yl}from"node:path";var me=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 xn(e,t){let n=e.get(t);if(n!==void 0)return e.delete(t),e.set(t,n),n}function vn(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 Ws}from"node:child_process";import{readdir as $s,readFile as zs}from"node:fs/promises";import{join as Sn,relative as Gs}from"node:path";import qs from"ignore";async function Bs(e,t,n=5e3){return await new Promise(r=>{let s=!1,i=!1,o=null,a=Ws("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 d=setTimeout(()=>{i=!0,a.kill("SIGTERM"),o=setTimeout(()=>{a.kill("SIGKILL")},150)},n);a.on("error",()=>{clearTimeout(d),o&&clearTimeout(o),u({ok:!1,timedOut:i})}),a.on("close",m=>{if(clearTimeout(d),o&&clearTimeout(o),i||m!==0){u({ok:!1,timedOut:i});return}u({ok:!0,stdout:l.trim()})})})}function Rn(e){return[...new Set(e.filter(Boolean))].sort((t,n)=>t.localeCompare(n))}function Pn(e,t){return!!(!e||e.startsWith(".git/")||e.startsWith("node_modules/")||t&&(e===t||e.startsWith(`${t}/`)))}async function Hs(e,t){let n=[],r=we(e,t),s=qs();s.add([".git","node_modules"]),r&&s.add([r]);try{let o=await zs(Sn(e,".gitignore"),"utf-8");s.add(o)}catch{}async function i(o){let a=await $s(o,{withFileTypes:!0});for(let l of a){let u=Sn(o,l.name),d=Gs(e,u).replace(/\\/g,"/");if(d&&!Pn(d,r)){if(l.isDirectory()){if(s.ignores(`${d}/`))continue;await i(u);continue}l.isFile()&&(s.ignores(d)||n.push(d))}}}return await i(e),Rn(n)}async function Tn(e,t){let n=we(e,t),r=await Bs(e,["ls-files","--cached","--others","--exclude-standard"]);if(r.ok){let s=r.stdout.split(`
7
+ `).map(i=>i.trim()).filter(i=>!Pn(i,n));return Rn(s)}return Hs(e,t)}import{existsSync as Cn}from"node:fs";import{mkdir as In,readFile as js,writeFile as Vs}from"node:fs/promises";import{spawn as Qs}from"node:child_process";import{createRequire as En}from"node:module";import{join as xt}from"node:path";var Ks="grammars.json",Xs="grammars-runtime",Js=En(import.meta.url),Ys=12e4,He=2e6,Z=[{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}],Ln=[{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}],Zs=new Map(Ln.map(e=>[e.id,e])),ei=new Map(Z.filter(e=>e.runtime_package).map(e=>[e.id,e.runtime_package])),ti=new Set(Z.map(e=>e.id)),ni=new Map([["c#","c-sharp"],["csharp","c-sharp"],["c sharp","c-sharp"],["md","markdown"]]);function Nn(e,t){return`${ne(e,t)}/${Ks}`}function vt(){let e=Z.filter(t=>t.default_enabled).map(t=>t.id);return{version:1,enabled:e,installed:e,runtime_install_failed:[]}}function ri(e){let t=vt();if(!e||typeof e!="object")return t;let n=e,r=l=>{if(!Array.isArray(l))return[];let u=[];for(let d of l){if(typeof d!="string")continue;let m=fe(d);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 An(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 si(e,t){return t.length===0?e:{...e,runtime_install_failed:[...new Set([...e.runtime_install_failed,...t])]}}async function re(e,t){let n=Nn(e,t);if(!Cn(n))return vt();try{let r=await js(n,"utf-8");return ri(JSON.parse(r))}catch{return vt()}}async function je(e,t,n){let r=ne(e,n);await In(r,{recursive:!0}),await Vs(Nn(e,n),`${JSON.stringify(t,null,2)}
8
+ `,"utf-8")}function fe(e){let t=e.trim().toLowerCase();if(!t)return null;let n=ni.get(t);if(n)return n;for(let r of Z)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 Qe(e){let t=e.split(",").map(n=>fe(n)).filter(n=>!!n);return[...new Set(t)]}async function Ke(e,t){let n=await re(e,t);return{enabled:n.enabled,installed:n.installed}}async function St(e,t){return(await re(e,t)).runtime_install_failed}async function Ve(e,t,n){let r=await re(e,n),s=t.map(l=>fe(l)).filter(l=>!!l),i=[...new Set([...r.installed,...s])],o=[...new Set([...r.enabled,...s])],a=An({version:1,enabled:o,installed:i,runtime_install_failed:r.runtime_install_failed},s);return await je(e,a,n),{enabled:a.enabled,installed:a.installed}}async function Mn(e,t,n){let r=await re(e,n),s=new Set(t),i=r.enabled.filter(l=>!s.has(l)),o=r.installed.filter(l=>!s.has(l)),a={version:1,enabled:i,installed:o,runtime_install_failed:r.runtime_install_failed.filter(l=>!s.has(l))};return await je(e,a,n),{enabled:a.enabled,installed:a.installed}}async function On(e,t,n){let r=await re(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 Fn(e,t){let n=await re(e,t),r=new Set(n.enabled),s=new Set(n.installed);return Z.map(i=>({...i,enabled:r.has(i.id),installed:s.has(i.id)}))}function Dn(e){let t=fe(e);return t?ti.has(t)?ei.get(t)??null:`tree-sitter-${t}`:null}function pe(e,t){return xt(ne(e,t),Xs)}function Rt(e,t=new Set){let n=fe(e);if(!n)return!1;if(t.has(n))return!0;let r=Z.find(s=>s.id===n);return r?r.runtime_package===null:!0}function ii(e,t){try{return En(xt(t,"__veil_runtime_loader__.cjs")).resolve(e),!0}catch{return Cn(xt(t,"node_modules",e,"package.json"))}}function Un(e,t,n,r={}){let s=Dn(e);if(!s)return!0;if(t){let i=pe(t,n);if(ii(s,i))return!0}if(r.allow_global_fallback!==!0)return!1;try{return Js.resolve(s),!0}catch{return!1}}function Wn(e){let t=e.trim().toLowerCase();return Zs.get(t)??null}function oi(e){let t=Ln.find(n=>n.parser_id===e);return t?t.installable?t.runtime_package:null:Dn(e)}async function ai(e,t,n,r){return await new Promise(s=>{let i=!1,o=!1,a=Qs(e,t,{cwd:n,stdio:["ignore","pipe","pipe"]}),l="",u="",d=0,m=0,f=null,p=(_,k,w)=>{if(w>=He)return{next:k,bytes:w};let h=Buffer.byteLength(_,"utf-8"),y=w+h;if(y<=He)return{next:k+_,bytes:y};let N=He-w,C=Buffer.from(_,"utf-8").subarray(0,N).toString("utf-8");return{next:k+C,bytes:He}},b=_=>{i||(i=!0,s(_))};a.stdout.setEncoding("utf-8"),a.stderr.setEncoding("utf-8"),a.stdout.on("data",_=>{let k=p(_,l,d);l=k.next,d=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 Pt(e,t={}){let n=[...new Set(e.map(i=>fe(i)).filter(Boolean))],r=n.map(i=>oi(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 $n(e,t,n,r=Ys,s=ai){let i=pe(e,n);await In(i,{recursive:!0});let o=Pt(t,{install_root:i});if(o.packages.length===0){let m=await Ve(e,o.parser_ids,n);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:m.enabled,installed:m.installed}}let a=await s(o.command,o.args,e,r);if(!a.ok){let m=await re(e,n),f=si(m,o.parser_ids);await je(e,f,n);let p=await Ke(e,n);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:p.enabled,installed:p.installed}}let l=await Ve(e,o.parser_ids,n),u=await re(e,n),d=An(u,o.parser_ids);return await je(e,d,n),{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 li,readFile as ui,stat as ci,writeFile as di}from"node:fs/promises";import{createRequire as mi}from"node:module";var se="index-db-corrupt",ve=class extends Error{code=se;reason=se;db_path;constructor(t){super(se),this.name="IndexDbCorruptError",this.db_path=t}};function fi(e){if(e instanceof ve)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 pi=mi(import.meta.url),hi="index.sqlite",gi=(async()=>{let e=pi.resolve("sql.js/dist/sql-wasm.wasm"),n=(await import("sql.js")).default;return n({locateFile:()=>e})})(),Tt=new Map;function B(e,t){return`${j(e,t)}/${hi}`}async function Gn(e){try{return(await ci(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 zn(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 Ur}from"node:path";import{fileURLToPath as jo}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 En(e,t){let n=e.export();await qs(t.slice(0,t.lastIndexOf("/")),{recursive:!0}),await Bs(t,Buffer.from(n));let r=await Ln(t);_t.set(t,{db:e,mtimeMs:r})}async function Y(e){return Nn(e,!1)}async function In(e){return Nn(e,!0)}async function Nn(e,t){let n=await Ln(e),r=_t.get(e);if(r?.mtimeMs===n)return r.db;let s=await Qs,i;if(B(e))try{i=new s.Database(new Uint8Array(await zs(e)))}catch{if(!t)throw new ve(e);i=new s.Database}else i=new s.Database;try{Cn(i)}catch{if(!t&&B(e))throw new ve(e);i=new s.Database,Cn(i)}return _t.set(e,{db:i,mtimeMs:n}),i}function bt(e,t){let n=[t,...e].map(r=>r.trim().toLowerCase()).filter(r=>r.length>=2).slice(0,20);return[...new Set(n)]}function An(e){return e.replaceAll("\\","\\\\").replaceAll("%","\\%").replaceAll("_","\\_")}function yt(e,t){let n=[],r=[];for(let s of t){let i=`%${An(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 kt(e,t){return B(W(e,t))}async function Mn(e,t){let n=W(e,t);if(!B(n))return[];let r=await Y(n);return G(r.exec("SELECT path FROM files ORDER BY path ASC")).map(i=>i.path)}async function Ve(e,t,n){let r=W(e,n),s=await In(r);s.run("BEGIN TRANSACTION"),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"),await En(s,r)}async function On(e,t,n,r){let s=W(e,r),i=await In(s);i.run("BEGIN TRANSACTION");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"),await En(i,s)}async function Fn(e,t){let n=W(e,t);if(!B(n))return{files:[],symbols:[],chunks:[]};let r=await Y(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 Dn(e,t,n){let r=W(e,n);if(!B(r))return[];let s=await Y(r),i=Math.max(50,Math.min(2e3,t.limit*16)),o=bt(t.tokens,t.normalized),a=yt(["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 $n(e,t,n){let r=W(e,n);if(!B(r))return[];let s=await Y(r),i=Math.max(100,Math.min(4e3,t.limit*24)),o=bt(t.tokens,t.normalized),a=yt(["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 Un(e,t,n){let r=W(e,n);if(!B(r))return[];let s=await Y(r),i=Math.max(120,Math.min(5e3,t.limit*30)),o=bt(t.tokens,t.normalized),a=yt(["path","content"],o),l=[a.clause],u=[...a.params];if(t.pathPrefix&&t.pathPrefix.trim()!==""){let h=An(t.pathPrefix.trim().toLowerCase());l.push("path LIKE ? ESCAPE '\\'"),u.push(`${h}%`)}let d=l.join(" AND ");return G(s.exec(`SELECT id, path, start_line, end_line, content FROM chunks WHERE ${d} ORDER BY path ASC, start_line ASC LIMIT ${String(i)}`,u))}async function qn(e,t,n){let r=W(e,n);if(!B(r))return null;let s=await Y(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 zn(e,t){let n=W(e,t);if(!B(n))return!1;try{return await Y(n),!1}catch(r){return r instanceof ve}}async function Gn(e,t){let n=W(e,t);if(!B(n))return{file_count:0,symbol_count:0,chunk_count:0};let r=await Y(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 Bn(e,t){let n=W(e,t);if(!B(n))return[];let r=await Y(n);return G(r.exec("SELECT language, COUNT(*) AS count FROM files GROUP BY language ORDER BY count DESC, language ASC"))}function Wn(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 xe(e){return e.toLowerCase()}function Vs(e){return e>=8?"high":e>=4?"medium":"low"}function Hn(e,t){let n=xe(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 jn(e,t){let n=xe(e.name),r=xe(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 Qn(e,t){let n=xe(`${e.path}
38
- ${e.content??""}`),r=xe(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 Ks(e,t,n){return e.length>0?e:[{label:t,detail:n}]}function Ke(e,t,n){return e.map(r=>{let s=t(r),i=Ks(s.reasons,n.label,n.detail);return{item:r,score:s.score,confidence:Vs(s.score),reasons:i}}).sort((r,s)=>s.score-r.score)}import{copyFileSync as Xs,existsSync as Js,mkdirSync as Ys,symlinkSync as Zs}from"node:fs";import{createRequire as ei}from"node:module";import{dirname as ti,join as wt,relative as ni}from"node:path";var Xn=ei(import.meta.url),ri={attempted:!1,ok:!1,reason:"not-bun"};function Vn(e){if(!e||typeof e!="object")return!1;let t=e.code;return t==="EACCES"||t==="EPERM"||t==="EROFS"}function si(e){if(!e.isBun)return{attempted:!1,ok:!1,reason:"not-bun"};try{let t=e.resolvePackage(),n=ti(t),r=wt(n,"prebuilds",`${e.platform}-${e.arch}`),s=wt(r,"tree-sitter.node");if(e.exists(s))return{attempted:!0,ok:!0,reason:"already-present"};let i=wt(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(Vn(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(Vn(o))return{attempted:!0,ok:!1,reason:"readonly"};throw o}}}catch{return{attempted:!0,ok:!1,reason:"resolution-failed"}}}function ii(){let e=si({isBun:typeof process.versions.bun=="string",platform:process.platform,arch:process.arch,resolvePackage:()=>Xn.resolve("tree-sitter/package.json"),exists:Js,mkdir:t=>Ys(t,{recursive:!0}),symlink:Zs,copy:Xs,relativePath:ni});return ri=e,e}function oi(){let e=Z("tree-sitter");return e||(ii(),e=Z("tree-sitter"),e)}function Z(e){try{return Xn(e)}catch{return}}function ai(){return Z("tree-sitter-typescript")?.typescript??null}var Jn={javascript:{loader:()=>Z("tree-sitter-javascript"),parserId:"javascript",symbolKinds:{function_declaration:"function",class_declaration:"class",method_definition:"method"}},typescript:{loader:ai,parserId:"typescript",symbolKinds:{function_declaration:"function",class_declaration:"class",method_definition:"method",interface_declaration:"interface",type_alias_declaration:"type",enum_declaration:"type"}},python:{loader:()=>Z("tree-sitter-python"),parserId:"python",symbolKinds:{function_definition:"function",class_definition:"class"}},shell:{loader:()=>Z("tree-sitter-bash"),parserId:"bash",symbolKinds:{function_definition:"function"}},go:{loader:()=>Z("tree-sitter-go"),parserId:"go",symbolKinds:{function_declaration:"function",method_declaration:"method",type_declaration:"type"}},rust:{loader:()=>Z("tree-sitter-rust"),parserId:"rust",symbolKinds:{function_item:"function",struct_item:"type",enum_item:"type",trait_item:"interface",impl_item:"type"}}},vt=oi(),Kn=new Map;function Yn(e,t){if(!vt)return null;let n=Kn.get(e);if(n)return n;let r=new vt;return r.setLanguage(t),Kn.set(e,r),r}function xt(e,t){return e.slice(t.startIndex,t.endIndex)}function Zn(e,t){let n=e.childForFieldName("name");if(n){let r=xt(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=xt(t,r).trim();if(s)return s}return null}function er(e,t){let n=e.childForFieldName("parameters");return n&&xt(t,n).trim()||void 0}function li(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 ui(e){return!e||e==="text"?null:Z(`tree-sitter-${e}`)}function ci(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 di(e,t,n,r){let s=Yn(t,r);if(!s)return null;try{let o=[s.parse(n).rootNode],a=new Set,l=[];for(;o.length>0;){let u=o.pop();if(!u)continue;let d=ci(u.type);if(d){let m=Zn(u,n);if(m){let h=`${m}:${String(u.startPosition.row)}:${d}`;a.has(h)||(a.add(h),l.push({path:e,line:u.startPosition.row+1,kind:d,name:m,signature_hint:er(u,n)}))}}for(let m of u.namedChildren)o.push(m)}return l}catch{return null}}function tr(e,t,n,r){if(t==="json")return r.has("json")?[]:null;let s=Jn[t];if(!s){if(!r.has(t))return null;let a=ui(t);return a?di(e,t,n,a):null}if(!r.has(s.parserId))return null;let i=s.loader();if(!i)return null;let o=Yn(t,i);if(!o)return null;try{let a=o.parse(n),l=new Set(Object.keys(s.symbolKinds)),u=li(a.rootNode,l),d=[];for(let m of u){let h=s.symbolKinds[m.type];if(!h)continue;let f=Zn(m,n);f&&d.push({path:e,line:m.startPosition.row+1,kind:h,name:f,signature_hint:er(m,n)})}return d}catch{return null}}function nr(e){let t=Object.values(Jn).filter(r=>!!r),n=[];if(!vt){for(let r of t){let s=r.parserId;e.has(s)&&(n.includes(s)||n.push(s))}return n}for(let r of t){if(!e.has(r.parserId))continue;r.loader()||n.push(r.parserId)}return n}var ar="2",gi=24,_i=512*1024,bi=120,yi=20,sr=20,ki=100,wi=1500,vi=64,xi=256,Si=240;function Lt(e){return e.content_mode==="none"||e.content_mode==="preview"||e.content_mode==="full"?e.content_mode:e.include_content===!0?"full":"preview"}function St(e){return e.map(t=>({...t,reasons:t.reasons.map(n=>({label:n.label,detail:""}))}))}var $=new Map,Se=new Map,H=new Map,Ri=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"]),Pi=new Set(["doc","docs","readme","markdown","guide","documentation"]),Ti=new Set(["symbol","symbols","function","class","method","type","interface"]),lr=new Set(["src","lib","app","server","cmd","pkg","modules","hosts","outputs","scripts"]);function Pe(e,t){return`${e}::${j(e,t)}`}function Rt(e,t){if($.set(e,{value:t,ts:Date.now()}),$.size>vi){let n=$.keys().next().value;n&&$.delete(n)}}function V(){return typeof Bun<"u"&&typeof Bun.nanoseconds=="function"?Bun.nanoseconds()/1e6:Date.now()}async function oe(e,t,n=5e3){return await new Promise(r=>{let s=!1,i=!1,o=null,a=mi("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 d=setTimeout(()=>{i=!0,a.kill("SIGTERM"),o=setTimeout(()=>{a.kill("SIGKILL")},150)},n);a.on("error",()=>{clearTimeout(d),o&&clearTimeout(o),u({ok:!1,timedOut:i})}),a.on("close",m=>{if(clearTimeout(d),o&&clearTimeout(o),i||m!==0){u({ok:!1,timedOut:i});return}u({ok:!0,stdout:l.trim()})})})}async function Pt(e){let t=await oe(e,["status","--porcelain"]);return t.ok?{dirty:t.stdout.length>0,degraded:!1}:{dirty:!0,degraded:!0}}async function Ci(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 oe(e,["diff","--name-only",`${t}..HEAD`])),s(await oe(e,["diff","--name-only"])),s(await oe(e,["diff","--cached","--name-only"])),s(await oe(e,["ls-files","--others","--exclude-standard"])),{files:n,degraded:r}}function Q(e){return e.toLowerCase()}function Li(e){let n=Q(e).split(/[^a-z0-9_./-]+/).map(r=>r.trim()).filter(r=>r.length>=3&&r.length<=64).filter(r=>!Ri.has(r));return[...new Set(n)]}function Ei(e){return Q(e).replace(/\s+/g," ").trim()}function Ii(e,t,n="auto"){return n!=="auto"?n:t.some(r=>Pi.has(r))||e.includes("readme")||e.includes("docs")?"docs":t.some(r=>Ti.has(r))?"symbols":"code"}function Ni(e,t){if(Se.set(e,t),Se.size>xi){let n=Se.keys().next().value;n&&Se.delete(n)}return t}function te(e,t="auto"){let n=`${t}\0${e}`,r=Se.get(n);if(r)return r;let s=Ei(e),i=Li(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:Ii(s,i,t)};return Ni(n,o)}function Et(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 Ai(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 ur(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 Mi(e,t){return t?t==="nix"?e.endsWith(".nix"):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(`.${t}`):!0}function Oi(e){return fi("sha1").update(e).digest("hex")}var Fi={ex:"elixir",exs:"elixir",cs:"c-sharp",cjs:"javascript",mjs:"javascript",jsx:"javascript",tsx:"typescript"};function Di(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(".nix"))return"nix";if(n.endsWith(".md"))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=Fi[r]??r;if(t.has(s))return s}return"text"}function $i(e){return e.split("/")[0]||"."}function Ui(e,t){let n=t.split(`
40
- `),r=[],s=0;for(;s<n.length;){let i=Math.min(n.length,s+bi);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 qi(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 d=u[1],m=a.includes("class")?"class":/type|interface/.test(a)?"type":"function";s.push({path:e,line:o+1,kind:m,name:d,signature_hint:a.trim().slice(0,120)});break}}return s}function zi(e,t,n,r){let s=tr(e,t,n,r);return s!==null?s:qi(e,t,n)}async function Gi(e,t,n,r){let s=_e(e,r);if(s&&(t===s||t.startsWith(`${s}/`)))return{file:null,symbols:[],chunks:[]};if(t.startsWith(".git/"))return{file:null,symbols:[],chunks:[]};let i=Re(e,t),o;try{o=await hi(i)}catch{return{file:null,symbols:[],chunks:[]}}if(!o.isFile())return{file:null,symbols:[],chunks:[]};if(o.size>_i)return{file:null,symbols:[],chunks:[]};let a="";try{a=await or(i,"utf-8")}catch{return{file:null,symbols:[],chunks:[]}}if(a.includes("\0"))return{file:null,symbols:[],chunks:[]};let l=Di(t,n);return{file:{path:t,language:l,size:o.size,hash:Oi(a),top_level:$i(t)},symbols:zi(t,l,a,n),chunks:Ui(t,a)}}async function Xe(e,t,n,r){let s=[],i=[],o=[];for(let a=0;a<t.length;a+=sr){let l=t.slice(a,a+sr),u=await Promise.all(l.map(d=>Gi(e,d,n,r)));for(let d of u)d.file&&(s.push(d.file),i.push(...d.symbols),o.push(...d.chunks))}return s.sort((a,l)=>a.path.localeCompare(l.path)),i.sort((a,l)=>a.path.localeCompare(l.path)||a.line-l.line||a.name.localeCompare(l.name)),o.sort((a,l)=>a.path.localeCompare(l.path)||a.start_line-l.start_line),{files:s,symbols:i,chunks:o}}function cr(e,t){let n=Pe(e,t),r=H.get(n);return r||(r=new Map,H.set(n,r)),r}function It(e,t,n){let r=cr(e,t),s=mn(r,n);return s?(P.recordCacheHit(),s):(P.recordCacheMiss(),null)}function Nt(e,t,n,r){let s=cr(e,t);fn(s,n,r,ki)}async function Bi(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,d)=>d[1]-u[1]))s.push(`- ${a}: ${String(l)}`);s.push(""),await Ct(Re(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 Ct(Re(j(e,n),"entrypoints.md"),o.join(`
44
- `),"utf-8")}async function Wi(e,t){if(!kt(e,t))return[];let n=await Qe(e,t),r=new Set(n.enabled),s=await Bn(e,t),i=[];for(let o of s){if(i.length>=5)break;let a=o.language.trim().toLowerCase(),l=Pn(a);if(!l||!l.installable)continue;let u=l.parser_id,d=r.has(u),m=Rn(u),h=d?m?null:"runtime-missing":"parser-disabled";h&&i.push({language:a,parser_id:u,files:o.count,reason:h,runtime_package:l.runtime_package,install_tool:"veil_grammar_runtime_install",install_args:{parsers:[u]}})}return i}async function Tt(e,t,n){if(!t.exists)return{...t,grammar_suggestions:[]};try{let r=await Wi(e,n);return{...t,grammar_suggestions:r}}catch{return{...t,grammar_suggestions:[]}}}async function ce(e,t="full",n={}){let r=V(),s=j(e,n.state_root);await pi(s,{recursive:!0});let i=await Qe(e,n.state_root),o=new Set(i.enabled),a=nr(o);if(a.length>0)throw new Error(`Missing required parser runtimes for enabled built-ins: ${a.join(", ")}. Reinstall dependencies and rerun build.`);let l=await _n(e,n.state_root),u=await oe(e,["rev-parse","HEAD"]),d=u.ok?u.stdout:null,m=t==="full";if(t==="full"){let _=await Xe(e,l,o,n.state_root);await Ve(e,_,n.state_root)}else{let _=await K(e,n);if(!_.exists||!_.manifest?.git_head||_.reasons.includes(we)){let y=await Xe(e,l,o,n.state_root);await Ve(e,y,n.state_root),m=!0}else{let y=await Ci(e,_.manifest.git_head),b=new Set(l);for(let w of await Mn(e,n.state_root))b.has(w)||y.files.add(w);if(y.degraded){let w=await Xe(e,l,o,n.state_root);await Ve(e,w,n.state_root),m=!0}else if(y.files.size>0){let w=await Xe(e,[...y.files],o,n.state_root);await On(e,y.files,w,n.state_root),m=!0}}}let h=await Gn(e,n.state_root),f=Wn(e,d,h);if(f.schema_version=ar,f.stale_after_hours=gi,await Ct(Re(s,"manifest.json"),`${JSON.stringify(f,null,2)}
45
- `,"utf-8"),m){let _=await Fn(e,n.state_root);await Bi(e,_.files,n.state_root)}return $.delete(Pe(e,n.state_root)),H.delete(Pe(e,n.state_root)),P.recordIndexBuild(),P.recordBuildLatency(V()-r),P.recordCacheInvalidation(),P.updateCacheSizes(H.size,$.size),f}async function K(e,t={}){let n=Pe(e,t.state_root),r=$.get(n);if(!t.bypass_cache&&r&&Date.now()-r.ts<wi)return P.updateCacheSizes(H.size,$.size),r.value;let s=await oe(e,["rev-parse","HEAD"]),i=s.ok?s.stdout:null,o=Re(j(e,t.state_root),"manifest.json"),a=kt(e,t.state_root);if(!rr(o)||!a){let b=[rr(o)?"index-db-missing":"manifest-missing"];(await Pt(e)).dirty&&b.push("workspace-dirty");let p=await Tt(e,{exists:!1,stale:!0,reasons:b,manifest:null,current_git_head:i},t.state_root);return Rt(n,p),P.updateCacheSizes(H.size,$.size),p}let l;try{l=JSON.parse(await or(o,"utf-8"))}catch{let b={exists:!0,stale:!0,reasons:["manifest-invalid-json"],manifest:null,current_git_head:i};(await Pt(e)).dirty&&b.reasons.push("workspace-dirty");let v=await Tt(e,b,t.state_root);return Rt(n,v),P.updateCacheSizes(H.size,$.size),v}let u=[];await zn(e,t.state_root)&&u.push(we),l.schema_version!==ar&&u.push("schema-version-mismatch"),l.git_head!==i&&u.push("git-head-mismatch"),(await Pt(e)).dirty&&u.push("workspace-dirty");let m=Date.parse(l.generated_at),h=Date.now()-m,f=l.stale_after_hours*60*60*1e3;Number.isFinite(m)&&h>f&&u.push("ttl-expired");let _={exists:!0,stale:u.length>0,reasons:u,manifest:l,current_git_head:i},y=await Tt(e,_,t.state_root);return Rt(n,y),P.updateCacheSizes(H.size,$.size),y}function Hi(e){return e.stale?e.reasons.some(t=>t!=="workspace-dirty"):!1}async function At(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&&!Hi(r))return{workspace:e,refreshed:!1,reason:"dirty-only",mode:null,status_before:r,status_after:r,manifest:r.manifest};let o=await ce(e,i,{state_root:t.state_root});$.delete(Pe(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 ji(e,t,n){let r=new ue(Math.max(0,n));for(let s=0;s<e.length;s++){let i=Q(e[s]?.path??""),o=i.includes(t.normalized)?8:0;for(let l of t.tokens)i.includes(l)&&(o+=l.includes("/")?3:1.5);let a=Q(e[s]?.top_level??"");t.intent==="code"&&lr.has(a)&&(o+=.6),t.intent==="docs"&&(o+=ur(i)),o>.5&&r.insert(s,o)}return r.toSortedArray().map(s=>e[s]).filter(s=>!!s)}function Qi(e,t,n){let r=new ue(Math.max(0,n));for(let[s,i]of e.entries()){let o=Q(i.name),a=Q(i.path),l=o.includes(t.normalized)?7:0;for(let u of t.tokens)o.includes(u)&&(l+=2),a.includes(u)&&(l+=1);t.intent==="symbols"&&(l+=1.5),t.intent==="docs"&&(l-=1),l>=1.5&&r.insert(s,l)}return r.toSortedArray().map(s=>e[s]).filter(s=>!!s)}function Vi(e,t,n,r){let s=r.language?Q(r.language):"",i=r.path_prefix?Q(r.path_prefix):"",o=r.prefer_code??t.intent!=="docs",a=new ue(Math.max(0,n)),l=new Set;for(let u of t.tokens)lr.has(u)&&l.add(u),u.includes("/")&&l.add(u.split("/")[0]??"");for(let[u,d]of e.entries()){let m=Q(d.path);if(i&&!m.startsWith(i)||!Mi(m,s))continue;let h=Q(`${d.path}
46
- ${d.content??""}`),f=h.includes(t.normalized)?6:0;m.includes(t.normalized)&&(f+=3);for(let _ of t.tokens)h.includes(_)&&(f+=1.5);for(let _ of t.pathTokens)m.includes(_)&&(f+=3.5);l.has(m.split("/")[0]??"")&&(f+=2.5),o&&(f+=Ai(m)),t.intent==="docs"&&(f+=ur(m)),f>=2&&a.insert(u,f)}return a.toSortedArray().map(u=>e[u]).filter(u=>!!u)}function ir(e){return typeof e!="number"||!Number.isFinite(e)||e<=0?Si:Math.max(40,Math.min(2e4,Math.floor(e)))}function dr(e,t,n){let r=e.content??"",s=r.length;if(t==="full"){if(typeof n=="number"&&Number.isFinite(n)&&n>0){let a=ir(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=ir(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=>dr(r,t,n))}async function Te(e,t,n=20,r={}){let s=V();if(n<=0)return[];let i=te(t);if(!i.normalized)return[];let o=`files\0${i.intent}\0${i.normalized}\0${String(n)}`,a=It(e,r.state_root,o);if(a)return a;let l=ji(await Dn(e,{normalized:i.normalized,tokens:Et(i),limit:Math.min(n,200)},r.state_root),i,Math.min(n,200));return Nt(e,r.state_root,o,l),P.recordQuery(V()-s),P.updateCacheSizes(H.size,$.size),l}async function Ce(e,t,n=20,r={}){let s=V();if(n<=0)return[];let i=te(t);if(!i.normalized)return[];let o=`symbols\0${i.intent}\0${i.normalized}\0${String(n)}`,a=It(e,r.state_root,o);if(a)return a;let l=Qi(await $n(e,{normalized:i.normalized,tokens:Et(i),limit:Math.min(n,200)},r.state_root),i,Math.min(n,200));return Nt(e,r.state_root,o,l),P.recordQuery(V()-s),P.updateCacheSizes(H.size,$.size),l}async function Le(e,t,n=10,r={}){let s=V();if(n<=0)return[];let i=te(t,r.intent);if(!i.normalized)return[];let o=["chunks",i.intent,i.normalized,String(n),String(r.prefer_code??""),Lt(r),String(r.content_max_chars??""),r.path_prefix??"",r.language??""].join("\0"),a=It(e,r.state_root,o);if(a)return a;let l=Vi(await Un(e,{normalized:i.normalized,tokens:Et(i),limit:Math.min(n,100),pathPrefix:r.path_prefix},r.state_root),i,Math.min(n,100),r),u=mr(l,Lt(r),r.content_max_chars);return Nt(e,r.state_root,o,u),P.recordQuery(V()-s),P.updateCacheSizes(H.size,$.size),u}async function fr(e,t,n={}){let r=te(t,n.intent),s=await Te(e,t,n.files_limit??20,{state_root:n.state_root}),i=await Ce(e,t,n.symbols_limit??(r.intent==="symbols"?40:20),{state_root:n.state_root}),o=await Le(e,t,n.search_limit??10,{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 pr(e,t,n={}){let r=V(),s=te(t,n.intent),i=n.files_limit??8,o=n.symbols_limit??(s.intent==="symbols"?20:12),a=n.search_limit??(s.intent==="docs"?10:8),l=n.prefer_code??s.intent!=="docs",u=s,d=s,m=s,h=await Te(e,t,i,{state_root:n.state_root}),f=await Ce(e,t,o,{state_root:n.state_root}),_=await Le(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}),y="none",b="Primary lookup strategy returned complete result groups";f.length===0&&s.intent!=="docs"&&(d=te(t,"symbols"),f=await Ce(e,t,o,{state_root:n.state_root}),f.length>0&&(y="symbols",b="Primary strategy had no symbol hits, retried with symbol-focused routing")),_.length===0&&s.intent!=="docs"&&(m=te(t,"code"),_=await Le(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}),_.length>0&&(y=y==="none"?"chunks":"all",b="Primary strategy had no chunk hits, retried with code-focused routing")),h.length===0&&(u=te(t,"code"),h=await Te(e,t,i,{state_root:n.state_root}),h.length>0&&(y=y==="none"?"files":"all",b="Primary strategy had no file hits, retried with broad path routing"));let w=mr(_,Lt(n),n.content_max_chars),v=new Map;for(let k of _)v.set(k.id,k);let p={intent:s.intent,files:Ke(h,k=>Hn(k.path,u),{label:"fallback-file-match",detail:"File returned by fallback retrieval path"}),symbols:Ke(f,k=>jn(k,d),{label:"fallback-symbol-match",detail:"Symbol returned by fallback retrieval path"}),chunks:Ke(w,k=>Qn(v.get(k.id)??k,m),{label:"fallback-chunk-match",detail:"Chunk returned by fallback retrieval path"}),fallback:{used:y!=="none",stage:y,detail:b}};return n.response_mode==="compact"&&(p.files=St(p.files),p.symbols=St(p.symbols),p.chunks=St(p.chunks)),P.recordQuery(V()-r),P.updateCacheSizes(H.size,$.size),p}async function hr(e,t,n={}){let r=await qn(e,t,n.state_root);return r?dr(r,n.include_content===!1?"preview":"full",n.content_max_chars):null}var br=2e4,to=5e5,no=".veil-repo-context",me=2e6,ro=150;function ne(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=Ki(e,t,{cwd:n,stdio:["ignore","pipe","pipe"]}),l="",u="",d=0,m=0,h=!1,f=!1,_=null,y=v=>{i||(i=!0,s(v))},b=(v,p,k)=>{if(k>=me)return{next:p,bytes:k,truncated:!0};let I=Buffer.byteLength(v,"utf-8"),T=k+I;if(T<=me)return{next:p+v,bytes:T,truncated:!1};let A=me-k,E=Buffer.from(v,"utf-8").subarray(0,A).toString("utf-8");return{next:p+E,bytes:me,truncated:!0}};a.stdout.setEncoding("utf-8"),a.stderr.setEncoding("utf-8"),a.stdout.on("data",v=>{let p=b(v,l,d);l=p.next,d=p.bytes,p.truncated&&(h=!0)}),a.stderr.on("data",v=>{let p=b(v,u,m);u=p.next,m=p.bytes,p.truncated&&(f=!0)});let w=setTimeout(()=>{o=!0,a.kill("SIGTERM"),_=setTimeout(()=>{a.kill("SIGKILL")},ro)},r);a.on("error",v=>{clearTimeout(w),_&&clearTimeout(_),y({ok:!1,stdout:l,stderr:u,code:null,timedOut:o,stdoutTruncated:h,stderrTruncated:f,error:v.message,errorCode:v.code})}),a.on("close",v=>{clearTimeout(w),_&&clearTimeout(_),y({ok:v===0&&!o,stdout:l,stderr:u,code:v,timedOut:o,stdoutTruncated:h,stderrTruncated:f})})})}function Mt(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 so(e,t,n,r,s){return{ok:!0,workspace:e,tool:t,git_available:!0,duration_ms:Number((ne()-n).toFixed(4)),truncated:r,warnings:s}}function C(e,t,n,r,s=!0){return{meta:{ok:!1,workspace:e,tool:t,git_available:s,duration_ms:Number((ne()-n).toFixed(4)),truncated:!1,warnings:[]},data:null,error:r}}function Ft(e,t){let n=Math.max(1024,Math.min(t??br,to));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 yr(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(Ee(t))return{ok:!1,error:{code:"invalid-path",message:"Path must be a relative path inside workspace"}};let n=eo(t),r=de(e,n),s=Ye(e,r);if(s.startsWith("..")||Ee(s))return{ok:!1,error:{code:"invalid-path",message:"Path escapes workspace"}};try{let i=Ie(e),o=r;try{o=Ie(r)}catch{let l=Zi(r);try{let u=Ie(l);o=de(u,_r(r))}catch{o=r}}let a=Ye(i,o);if(a.startsWith("..")||Ee(a))return{ok:!1,error:{code:"invalid-path",message:"Path escapes workspace via symlink"}}}catch{let i=de(e),o=de(e,n),a=Ye(i,o);if(a.startsWith("..")||Ee(a))return{ok:!1,error:{code:"invalid-path",message:"Path escapes workspace"}}}return{ok:!0,value:n}}function Ot(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 Ze(e,t){let n=await O(t.command??"git",["-C",e,"rev-parse","--is-inside-work-tree"],e,t.timeoutMs);if(Mt(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=Ie(e),i=Ie(i)}catch{s=de(e),i=de(i)}let o=Ye(i,s);return o.startsWith("..")||Ee(o)?{ok:!1,error:{code:"not-a-repo",message:"Workspace is outside git repository root"},gitAvailable:!0}:{ok:!0}}function io(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 oo(e){return typeof e!="number"||!Number.isFinite(e)||e<=0?null:Math.max(1,Math.min(2e3,Math.floor(e)))}function ao(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 lo(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 fe(e,t,n,r,s,i=[]){let o=s.warning?[s.warning,...i]:i;return{meta:so(e,t,n,s.truncated,o),data:r,error:null}}function Ne(e){let t=[];return e.stdoutTruncated&&t.push(`stdout capture capped at ${String(me)} bytes`),e.stderrTruncated&&t.push(`stderr capture capped at ${String(me)} bytes`),t}function x(e,t,n,r){let s=ne()-t,i=e==="gh_lookup";P.recordGitCall(s,n,r,i)}async function kr(e,t){let n=ne(),r=Math.min(1e4,Math.max(500,t?.timeout_ms??5e3)),s={timeoutMs:r,command:t?.command},i=await Ze(e,s);if(!i.ok)return x("git_status",n,!1,!1),C(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),d=await O(s.command??"git",["-C",e,"status","--porcelain"],e,r);if(!o.ok||!a.ok||!d.ok){let w=o.timedOut||a.timedOut||d.timedOut;return x("git_status",n,!1,w),C(e,"git_status",n,{code:w?"timeout":"command-failed",message:`Failed to gather git status: ${(o.stderr||a.stderr||d.stderr||"unknown").trim()}`})}let m=io(d.stdout),h=ao(m,oo(t?.paths_limit)),f=t?.include_paths??!1,[_,y]=(u.stdout.trim()||"0 0").split(" "),b={branch:o.stdout.trim(),head:a.stdout.trim(),upstream:l.ok?l.stdout.trim():null,ahead:Number(y||"0")||0,behind:Number(_||"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:f?h.paths:void 0};return x("git_status",n,!0,!1),fe(e,"git_status",n,b,{truncated:!1},h.warnings)}async function wr(e,t){let n=ne(),r=Math.min(12e3,Math.max(500,t?.timeout_ms??8e3)),s={timeoutMs:r,command:t?.command},i=await Ze(e,s);if(!i.ok)return x("git_log",n,!1,!1),C(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 x("git_log",n,!1,l.timedOut),C(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=lo(l.stdout);return x("git_log",n,!0,!1),fe(e,"git_log",n,{limit:o,entries:u},{truncated:!1},Ne(l))}async function vr(e,t){let n=ne(),r=Math.min(1e4,Math.max(500,t?.timeout_ms??5e3)),s={timeoutMs:r,command:t?.command},i=await Ze(e,s);if(!i.ok)return x("git_diff",n,!1,!1),C(e,"git_diff",n,i.error,i.gitAvailable);let o=Ot(t?.base);if(!o.ok)return x("git_diff",n,!1,!1),C(e,"git_diff",n,o.error);let a=Ot(t?.head);if(!a.ok)return x("git_diff",n,!1,!1),C(e,"git_diff",n,a.error);let l=yr(e,t?.path);if(!l.ok)return x("git_diff",n,!1,!1),C(e,"git_diff",n,l.error);let u=["-C",e,"diff"];t?.staged&&u.push("--cached"),t?.name_only&&u.push("--name-only");let d=o.value,m=a.value,h=!!(d&&m);d&&m?u.push(`${d}..${m}`):d&&u.push(d),l.value&&u.push("--",l.value);let f=await O(s.command??"git",u,e,r);if(!f.ok)return x("git_diff",n,!1,f.timedOut),C(e,"git_diff",n,{code:f.timedOut?"timeout":"command-failed",message:`git diff failed: ${f.stderr.trim()!==""?f.stderr.trim():f.error??"unknown"}`});let _=Ft(f.stdout,t?.max_bytes),y={mode:h?"range":"working",staged:!!t?.staged,name_only:!!t?.name_only,base:o.value??null,head:a.value??null,path:l.value??null,text:_.text};return x("git_diff",n,!0,!1),fe(e,"git_diff",n,y,_,Ne(f))}async function xr(e,t){let n=ne(),r=Math.min(12e3,Math.max(500,t?.timeout_ms??8e3)),s={timeoutMs:r,command:t?.command},i=await Ze(e,s);if(!i.ok)return x("git_show",n,!1,!1),C(e,"git_show",n,i.error,i.gitAvailable);let o=Ot(t?.rev);if(!o.ok||!o.value)return x("git_show",n,!1,!1),C(e,"git_show",n,o.ok?{code:"invalid-revision",message:"Revision is required"}:o.error);let a=yr(e,t?.path);if(!a.ok)return x("git_show",n,!1,!1),C(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 h=u.stderr.includes("bad revision")||u.stderr.includes("unknown revision");return x("git_show",n,!1,u.timedOut),C(e,"git_show",n,{code:u.timedOut?"timeout":h?"invalid-revision":"command-failed",message:`git show failed: ${u.stderr.trim()!==""?u.stderr.trim():u.error??"unknown"}`})}let d=Ft(u.stdout,t?.max_bytes),m={rev:o.value,path:a.value??null,patch:t?.patch!==!1,text:d.text};return x("git_show",n,!0,!1),fe(e,"git_show",n,m,d,Ne(u))}async function Sr(e,t){let n=ne(),r=Math.min(2e4,Math.max(500,t.timeout_ms??12e3)),s=t.command??"gh",i=await O(s,["--version"],e,r);if(Mt(i))return x("gh_lookup",n,!1,!1),C(e,"gh_lookup",n,{code:"gh-unavailable",message:"gh is not available in PATH"},!0);if(!i.ok)return x("gh_lookup",n,!1,i.timedOut),C(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 x("gh_lookup",n,!1,o.timedOut),C(e,"gh_lookup",n,{code:o.timedOut?"timeout":"gh-unauthenticated",message:"gh is unauthenticated or cannot access GitHub"});let l=(b=>{let w=b.trim();if(!w)return null;if(w.startsWith("http://")||w.startsWith("https://"))try{let A=new URL(w).pathname.replace(/^\/+/,"").replace(/\.git$/,"").split("/").filter(Boolean);if(A.length<2)return null;let E=A[0]??"",D=A[1]??"";return!E||!D?null:{repo:`${E}/${D}`,owner:E,name:D,url:`https://github.com/${E}/${D}.git`}}catch{return null}let p=w.replace(/\.git$/,"").split("/").filter(Boolean);if(p.length!==2)return null;let k=p[0]??"",I=p[1]??"";return!k||!I?null:{repo:`${k}/${I}`,owner:k,name:I,url:`https://github.com/${k}/${I}.git`}})(t.repo);if(!l)return x("gh_lookup",n,!1,!1),C(e,"gh_lookup",n,{code:"command-failed",message:"repo must be 'owner/repo' or a GitHub URL"});if(t.kind==="repo_context"){let b=await O("git",["--version"],e,r);if(Mt(b))return x("gh_lookup",n,!1,!1),C(e,"gh_lookup",n,{code:"git-unavailable",message:"git is not available in PATH"},!1);if(!b.ok)return x("gh_lookup",n,!1,b.timedOut),C(e,"gh_lookup",n,{code:b.timedOut?"timeout":"command-failed",message:"git command is unavailable"},!1);let w=t.temp_root?.trim()?t.temp_root.trim():"/tmp",v=Je(w,l.owner),p=Je(v,_r(l.name));Xi(v,{recursive:!0});let k=Je(p,".git"),I=Je(p,no),T;if(!gr(k))T=await O("git",["clone","--depth","1",l.url,p],e,r),T.ok&&Yi(I,`${l.repo}
49
- `,"utf-8");else{if(!gr(I))return x("gh_lookup",n,!1,!1),C(e,"gh_lookup",n,{code:"command-failed",message:`existing clone target ${p} is unmanaged, refusing hard reset`});let A=Ji(I,"utf-8").trim();if(A!==l.repo)return x("gh_lookup",n,!1,!1),C(e,"gh_lookup",n,{code:"command-failed",message:`existing clone target ${p} belongs to ${A||"unknown"}, refusing hard reset`});let E=await O("git",["-C",p,"remote","set-url","origin",l.url],e,r),D=await O("git",["-C",p,"fetch","--depth","1","origin"],e,r),Qt=await O("git",["-C",p,"symbolic-ref","refs/remotes/origin/HEAD"],e,r),Wr=Qt.ok?Qt.stdout.trim().replace(/^refs\/remotes\//,""):"origin/main",se=await O("git",["-C",p,"reset","--hard",Wr],e,r);T=!E.ok||!D.ok||!se.ok?{ok:!1,stdout:`${E.stdout}
37
+ `)}async function qn(e,t){let n=e.export();await li(t.slice(0,t.lastIndexOf("/")),{recursive:!0}),await di(t,Buffer.from(n));let r=await Gn(t);Tt.set(t,{db:e,mtimeMs:r})}async function ee(e){return Hn(e,!1)}async function Bn(e){return Hn(e,!0)}async function Hn(e,t){let n=await Gn(e),r=Tt.get(e);if(r?.mtimeMs===n)return r.db;let s=await gi,i;if(q(e))try{i=new s.Database(new Uint8Array(await ui(e)))}catch{if(!t)throw new ve(e);i=new s.Database}else i=new s.Database;try{zn(i)}catch{if(!t&&q(e))throw new ve(e);i=new s.Database,zn(i)}return Tt.set(e,{db:i,mtimeMs:n}),i}function Ct(e,t){let n=[t,...e].map(r=>r.trim().toLowerCase()).filter(r=>r.length>=2).slice(0,20);return[...new Set(n)]}function jn(e){return e.replaceAll("\\","\\\\").replaceAll("%","\\%").replaceAll("_","\\_")}function It(e,t){let n=[],r=[];for(let s of t){let i=`%${jn(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 Et(e,t){return q(B(e,t))}async function Vn(e,t){let n=B(e,t);if(!q(n))return[];let r=await ee(n);return G(r.exec("SELECT path FROM files ORDER BY path ASC")).map(i=>i.path)}async function Xe(e,t,n){let r=B(e,n),s=await Bn(r);s.run("BEGIN TRANSACTION"),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"),await qn(s,r)}async function Qn(e,t,n,r){let s=B(e,r),i=await Bn(s);i.run("BEGIN TRANSACTION");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"),await qn(i,s)}async function Kn(e,t){let n=B(e,t);if(!q(n))return{files:[],symbols:[],chunks:[]};let r=await ee(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 Xn(e,t,n){let r=B(e,n);if(!q(r))return[];let s=await ee(r),i=Math.max(50,Math.min(2e3,t.limit*16)),o=Ct(t.tokens,t.normalized),a=It(["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 Jn(e,t,n){let r=B(e,n);if(!q(r))return[];let s=await ee(r),i=Math.max(100,Math.min(4e3,t.limit*24)),o=Ct(t.tokens,t.normalized),a=It(["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 Yn(e,t,n){let r=B(e,n);if(!q(r))return[];let s=await ee(r),i=Math.max(120,Math.min(5e3,t.limit*30)),o=Ct(t.tokens,t.normalized),a=It(["path","content"],o),l=[a.clause],u=[...a.params];if(t.pathPrefix&&t.pathPrefix.trim()!==""){let f=jn(t.pathPrefix.trim().toLowerCase());l.push("path LIKE ? ESCAPE '\\'"),u.push(`${f}%`)}let d=l.join(" AND ");return G(s.exec(`SELECT id, path, start_line, end_line, content FROM chunks WHERE ${d} ORDER BY path ASC, start_line ASC LIMIT ${String(i)}`,u))}async function Zn(e,t,n){let r=B(e,n);if(!q(r))return null;let s=await ee(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 er(e,t){let n=B(e,t);if(!q(n))return!1;try{return await ee(n),!1}catch(r){return fi(r)}}async function tr(e,t){let n=B(e,t);if(!q(n))return{file_count:0,symbol_count:0,chunk_count:0};let r=await ee(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 nr(e,t){let n=B(e,t);if(!q(n))return[];let r=await ee(n);return G(r.exec("SELECT language, COUNT(*) AS count FROM files GROUP BY language ORDER BY count DESC, language ASC"))}function rr(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 Se(e){return e.toLowerCase()}function _i(e){return e>=8?"high":e>=4?"medium":"low"}function sr(e,t){let n=Se(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 ir(e,t){let n=Se(e.name),r=Se(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 or(e,t){let n=Se(`${e.path}
38
+ ${e.content??""}`),r=Se(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 bi(e,t,n){return e.length>0?e:[{label:t,detail:n}]}function Je(e,t,n){return e.map(r=>{let s=t(r),i=bi(s.reasons,n.label,n.detail);return{item:r,score:s.score,confidence:_i(s.score),reasons:i}}).sort((r,s)=>s.score-r.score)}import{copyFileSync as yi,existsSync as ki,mkdirSync as wi,symlinkSync as xi}from"node:fs";import{createRequire as cr}from"node:module";import{dirname as vi,join as Ye,relative as Si}from"node:path";var dr=cr(import.meta.url),ar=new Map,Ri={attempted:!1,ok:!1,reason:"not-bun"};function lr(e){if(!e||typeof e!="object")return!1;let t=e.code;return t==="EACCES"||t==="EPERM"||t==="EROFS"}function Pi(e){if(!e.isBun)return{attempted:!1,ok:!1,reason:"not-bun"};try{let t=e.resolvePackage(),n=vi(t),r=Ye(n,"prebuilds",`${e.platform}-${e.arch}`),s=Ye(r,"tree-sitter.node");if(e.exists(s))return{attempted:!0,ok:!0,reason:"already-present"};let i=Ye(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(lr(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(lr(o))return{attempted:!0,ok:!1,reason:"readonly"};throw o}}}catch{return{attempted:!0,ok:!1,reason:"resolution-failed"}}}function Ti(){let e=Pi({isBun:typeof process.versions.bun=="string",platform:process.platform,arch:process.arch,resolvePackage:()=>dr.resolve("tree-sitter/package.json"),exists:ki,mkdir:t=>wi(t,{recursive:!0}),symlink:xi,copy:yi,relativePath:Si});return Ri=e,e}function Ci(){let e=te("tree-sitter");return e||(Ti(),e=te("tree-sitter"),e)}function te(e,t=[],n=!0){for(let r of t){let s=ar.get(r);s||(s=cr(Ye(r,"__veil_runtime_loader__.cjs")),ar.set(r,s));try{return s(e)}catch{continue}}if(n)try{return dr(e)}catch{return}}function Ii(e=[],t=!0){return te("tree-sitter-typescript",e,t)?.typescript??null}var mr={javascript:{loader:(e,t)=>te("tree-sitter-javascript",e,t),parserId:"javascript",symbolKinds:{function_declaration:"function",class_declaration:"class",method_definition:"method"}},typescript:{loader:Ii,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)=>te("tree-sitter-python",e,t),parserId:"python",symbolKinds:{function_definition:"function",class_definition:"class"}},shell:{loader:(e,t)=>te("tree-sitter-bash",e,t),parserId:"bash",symbolKinds:{function_definition:"function"}},go:{loader:(e,t)=>te("tree-sitter-go",e,t),parserId:"go",symbolKinds:{function_declaration:"function",method_declaration:"method",type_declaration:"type"}},rust:{loader:(e,t)=>te("tree-sitter-rust",e,t),parserId:"rust",symbolKinds:{function_item:"function",struct_item:"type",enum_item:"type",trait_item:"interface",impl_item:"type"}}},Lt=Ci(),ur=new Map;function fr(e,t,n){if(!Lt)return null;let r=`${e}\0${n}`,s=ur.get(r);if(s)return s;let i=new Lt;return i.setLanguage(t),ur.set(r,i),i}function Nt(e,t){return e.slice(t.startIndex,t.endIndex)}function pr(e,t){let n=e.childForFieldName("name");if(n){let r=Nt(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=Nt(t,r).trim();if(s)return s}return null}function hr(e,t){let n=e.childForFieldName("parameters");return n&&Nt(t,n).trim()||void 0}function Ei(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 Li(e,t=[],n=!0){return!e||e==="text"?null:te(`tree-sitter-${e}`,t,n)}function Ni(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 Ai(e,t,n,r,s){let i=fr(t,r,s);if(!i)return null;try{let a=[i.parse(n).rootNode],l=new Set,u=[];for(;a.length>0;){let d=a.pop();if(!d)continue;let m=Ni(d.type);if(m){let f=pr(d,n);if(f){let p=`${f}:${String(d.startPosition.row)}:${m}`;l.has(p)||(l.add(p),u.push({path:e,line:d.startPosition.row+1,kind:m,name:f,signature_hint:hr(d,n)}))}}for(let f of d.namedChildren)a.push(f)}return u}catch{return null}}function gr(e,t,n,r,s=[],i=new Set){let o=s.join("\0");if(t==="json")return r.has("json")?[]:null;let a=mr[t];if(!a){if(!r.has(t))return null;let f=i.has(t),p=`${o}\0${f?"1":"0"}`,b=Li(t,s,f);return b?Ai(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"}`,d=a.loader(s,l);if(!d)return null;let m=fr(t,d,u);if(!m)return null;try{let f=m.parse(n),p=new Set(Object.keys(a.symbolKinds)),b=Ei(f.rootNode,p),x=[];for(let _ of b){let k=a.symbolKinds[_.type];if(!k)continue;let w=pr(_,n);w&&x.push({path:e,line:_.startPosition.row+1,kind:k,name:w,signature_hint:hr(_,n)})}return x}catch{return null}}function _r(e,t=[],n=new Set){let r=Object.values(mr).filter(i=>!!i),s=[];if(!Lt){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 xr="2",Ui=24,Wi=512*1024,$i=120,zi=20,yr=20,Gi=100,qi=1500,Bi=64,Hi=256,ji=240;function Ut(e){return e.content_mode==="none"||e.content_mode==="preview"||e.content_mode==="full"?e.content_mode:e.include_content===!0?"full":"preview"}function At(e){return e.map(t=>({...t,reasons:t.reasons.length>0?[{label:t.reasons[0]?.label??"",detail:""}]:[]}))}var U=new Map,Re=new Map,H=new Map,Vi=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"]),Qi=new Set(["doc","docs","readme","markdown","guide","documentation"]),Ki=new Set(["symbol","symbols","function","class","method","type","interface"]),vr=new Set(["src","lib","app","server","cmd","pkg","modules","hosts","outputs","scripts"]);function Te(e,t){return`${e}::${j(e,t)}`}function Mt(e,t){if(U.set(e,{value:t,ts:Date.now()}),U.size>Bi){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 ue(e,t,n=5e3){return await new Promise(r=>{let s=!1,i=!1,o=null,a=Mi("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 d=setTimeout(()=>{i=!0,a.kill("SIGTERM"),o=setTimeout(()=>{a.kill("SIGKILL")},150)},n);a.on("error",()=>{clearTimeout(d),o&&clearTimeout(o),u({ok:!1,timedOut:i})}),a.on("close",m=>{if(clearTimeout(d),o&&clearTimeout(o),i||m!==0){u({ok:!1,timedOut:i});return}u({ok:!0,stdout:l.trim()})})})}async function Ot(e){let t=await ue(e,["status","--porcelain"]);return t.ok?{dirty:t.stdout.length>0,degraded:!1}:{dirty:!0,degraded:!0}}async function Xi(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 ue(e,["diff","--name-only",`${t}..HEAD`])),s(await ue(e,["diff","--name-only"])),s(await ue(e,["diff","--cached","--name-only"])),s(await ue(e,["ls-files","--others","--exclude-standard"])),{files:n,degraded:r}}function V(e){return e.toLowerCase()}function Ji(e){let n=V(e).split(/[^a-z0-9_./-]+/).map(r=>r.trim()).filter(r=>r.length>=3&&r.length<=64).filter(r=>!Vi.has(r));return[...new Set(n)]}function Yi(e){return V(e).replace(/\s+/g," ").trim()}function Zi(e,t,n="auto"){return n!=="auto"?n:t.some(r=>Qi.has(r))||e.includes("readme")||e.includes("docs")?"docs":t.some(r=>Ki.has(r))?"symbols":"code"}function eo(e,t){if(Re.set(e,t),Re.size>Hi){let n=Re.keys().next().value;n&&Re.delete(n)}return t}function ie(e,t="auto"){let n=`${t}\0${e}`,r=Re.get(n);if(r)return r;let s=Yi(e),i=Ji(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:Zi(s,i,t)};return eo(n,o)}function Wt(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 to(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 Sr(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 no(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 ro(e){return Oi("sha1").update(e).digest("hex")}var so={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 io(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=so[r]??r;if(t.has(s))return s}return"text"}function oo(e){return e.split("/")[0]||"."}function ao(e,t){let n=t.split(`
40
+ `),r=[],s=0;for(;s<n.length;){let i=Math.min(n.length,s+$i);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-zi,s+1)}return r}function lo(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 d=u[1],m=a.includes("class")?"class":/type|interface/.test(a)?"type":"function";s.push({path:e,line:o+1,kind:m,name:d,signature_hint:a.trim().slice(0,120)});break}}return s}function uo(e,t,n,r,s,i){let o=gr(e,t,n,r,s,i);return o!==null?o:lo(e,t,n)}async function co(e,t,n,r,s,i){let o=we(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=Pe(e,t),l;try{l=await Di(a)}catch{return{file:null,symbols:[],chunks:[]}}if(!l.isFile())return{file:null,symbols:[],chunks:[]};if(l.size>Wi)return{file:null,symbols:[],chunks:[]};let u="";try{u=await wr(a,"utf-8")}catch{return{file:null,symbols:[],chunks:[]}}if(u.includes("\0"))return{file:null,symbols:[],chunks:[]};let d=io(t,n);return{file:{path:t,language:d,size:l.size,hash:ro(u),top_level:oo(t)},symbols:uo(t,d,u,n,r,s),chunks:ao(t,u)}}async function Ze(e,t,n,r,s,i){let o=[],a=[],l=[];for(let u=0;u<t.length;u+=yr){let d=t.slice(u,u+yr),m=await Promise.all(d.map(f=>co(e,f,n,r,s,i)));for(let f of m)f.file&&(o.push(f.file),a.push(...f.symbols),l.push(...f.chunks))}return o.sort((u,d)=>u.path.localeCompare(d.path)),a.sort((u,d)=>u.path.localeCompare(d.path)||u.line-d.line||u.name.localeCompare(d.name)),l.sort((u,d)=>u.path.localeCompare(d.path)||u.start_line-d.start_line),{files:o,symbols:a,chunks:l}}function Rr(e,t){let n=Te(e,t),r=H.get(n);return r||(r=new Map,H.set(n,r)),r}function $t(e,t,n){let r=Rr(e,t),s=xn(r,n);return s?(P.recordCacheHit(),s):(P.recordCacheMiss(),null)}function zt(e,t,n,r){let s=Rr(e,t);vn(s,n,r,Gi)}async function mo(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,d)=>d[1]-u[1]))s.push(`- ${a}: ${String(l)}`);s.push(""),await Dt(Pe(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 Dt(Pe(j(e,n),"entrypoints.md"),o.join(`
44
+ `),"utf-8")}async function fo(e,t){if(!Et(e,t))return[];let n=await Ke(e,t),r=new Set(n.enabled),s=new Set(await St(e,t)),i=await nr(e,t),o=[];for(let a of i){if(o.length>=5)break;let l=a.language.trim().toLowerCase(),u=Wn(l);if(!u||!u.installable)continue;let d=u.parser_id,m=r.has(d),f=Un(d,e,t,{allow_global_fallback:Rt(d,s)}),p=m?f?null:"runtime-missing":"parser-disabled";p&&o.push({language:l,parser_id:d,files:a.count,reason:p,runtime_package:u.runtime_package,install_tool:"veil_grammar_runtime_install",install_args:{parsers:[d]}})}return o}async function Ft(e,t,n){if(!t.exists)return{...t,grammar_suggestions:[]};try{let r=await fo(e,n);return{...t,grammar_suggestions:r}}catch{return{...t,grammar_suggestions:[]}}}async function he(e,t="full",n={}){let r=Q(),s=j(e,n.state_root);await Fi(s,{recursive:!0});let i=await Ke(e,n.state_root),o=new Set(i.enabled),a=new Set(await St(e,n.state_root)),l=new Set([...o].filter(k=>Rt(k,a))),u=[pe(e,n.state_root)],d=_r(o,u,l);if(d.length>0)throw new Error(`Missing required parser runtimes for enabled built-ins: ${d.join(", ")}. Reinstall dependencies and rerun build.`);let m=await Tn(e,n.state_root),f=await ue(e,["rev-parse","HEAD"]),p=f.ok?f.stdout:null,b=t==="full";if(t==="full"){let k=await Ze(e,m,o,u,l,n.state_root);await Xe(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 Ze(e,m,o,u,l,n.state_root);await Xe(e,w,n.state_root),b=!0}else{let w=await Xi(e,k.manifest.git_head),h=new Set(m);for(let y of await Vn(e,n.state_root))h.has(y)||w.files.add(y);if(w.degraded){let y=await Ze(e,m,o,u,l,n.state_root);await Xe(e,y,n.state_root),b=!0}else if(w.files.size>0){let y=await Ze(e,[...w.files],o,u,l,n.state_root);await Qn(e,w.files,y,n.state_root),b=!0}}}let x=await tr(e,n.state_root),_=rr(e,p,x);if(_.schema_version=xr,_.stale_after_hours=Ui,await Dt(Pe(s,"manifest.json"),`${JSON.stringify(_,null,2)}
45
+ `,"utf-8"),b){let k=await Kn(e,n.state_root);await mo(e,k.files,n.state_root)}return U.delete(Te(e,n.state_root)),H.delete(Te(e,n.state_root)),P.recordIndexBuild(),P.recordBuildLatency(Q()-r),P.recordCacheInvalidation(),P.updateCacheSizes(H.size,U.size),_}async function K(e,t={}){let n=Te(e,t.state_root),r=U.get(n);if(!t.bypass_cache&&r&&Date.now()-r.ts<qi)return P.updateCacheSizes(H.size,U.size),r.value;let s=await ue(e,["rev-parse","HEAD"]),i=s.ok?s.stdout:null,o=Pe(j(e,t.state_root),"manifest.json"),a=Et(e,t.state_root);if(!br(o)||!a){let _=[br(o)?"index-db-missing":"manifest-missing"];(await Ot(e)).dirty&&_.push("workspace-dirty");let h=await Ft(e,{exists:!1,stale:!0,reasons:_,manifest:null,current_git_head:i},t.state_root);return Mt(n,h),P.updateCacheSizes(H.size,U.size),h}let l;try{l=JSON.parse(await wr(o,"utf-8"))}catch{let _={exists:!0,stale:!0,reasons:["manifest-invalid-json"],manifest:null,current_git_head:i};(await Ot(e)).dirty&&_.reasons.push("workspace-dirty");let w=await Ft(e,_,t.state_root);return Mt(n,w),P.updateCacheSizes(H.size,U.size),w}let u=[];await er(e,t.state_root)&&u.push(se),l.schema_version!==xr&&u.push("schema-version-mismatch"),l.git_head!==i&&u.push("git-head-mismatch"),(await Ot(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 Ft(e,b,t.state_root);return Mt(n,x),P.updateCacheSizes(H.size,U.size),x}function po(e){return e.stale?e.reasons.some(t=>t!=="workspace-dirty"):!1}async function Gt(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&&!po(r))return{workspace:e,refreshed:!1,reason:"dirty-only",mode:null,status_before:r,status_after:r,manifest:r.manifest};let o=await he(e,i,{state_root:t.state_root});U.delete(Te(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 ho(e,t,n){let r=new me(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"&&vr.has(a)&&(o+=.6),t.intent==="docs"&&(o+=Sr(i)),o>.5&&r.insert(s,o)}return r.toSortedArray().map(s=>e[s]).filter(s=>!!s)}function go(e,t,n){let r=new me(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 _o(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 me(Math.max(0,n)),l=new Set;for(let u of t.tokens)vr.has(u)&&l.add(u),u.includes("/")&&l.add(u.split("/")[0]??"");for(let[u,d]of e.entries()){let m=V(d.path);if(i&&!m.startsWith(i)||!no(m,s))continue;let f=V(`${d.path}
46
+ ${d.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+=to(m)),t.intent==="docs"&&(p+=Sr(m)),p>=2&&a.insert(u,p)}return a.toSortedArray().map(u=>e[u]).filter(u=>!!u)}function kr(e){return typeof e!="number"||!Number.isFinite(e)||e<=0?ji:Math.max(40,Math.min(2e4,Math.floor(e)))}function Pr(e,t,n){let r=e.content??"",s=r.length;if(t==="full"){if(typeof n=="number"&&Number.isFinite(n)&&n>0){let a=kr(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=kr(n),o=s>i;return{...e,content:o?r.slice(0,i):r,content_truncated:o,content_chars:s}}function Tr(e,t,n){return e.map(r=>Pr(r,t,n))}async function Ce(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=$t(e,r.state_root,o);if(a)return a;let l=ho(await Xn(e,{normalized:i.normalized,tokens:Wt(i),limit:Math.min(n,200)},r.state_root),i,Math.min(n,200));return zt(e,r.state_root,o,l),P.recordQuery(Q()-s),P.updateCacheSizes(H.size,U.size),l}async function Ie(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=$t(e,r.state_root,o);if(a)return a;let l=go(await Jn(e,{normalized:i.normalized,tokens:Wt(i),limit:Math.min(n,200)},r.state_root),i,Math.min(n,200));return zt(e,r.state_root,o,l),P.recordQuery(Q()-s),P.updateCacheSizes(H.size,U.size),l}async function Ee(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??""),Ut(r),String(r.content_max_chars??""),r.path_prefix??"",r.language??""].join("\0"),a=$t(e,r.state_root,o);if(a)return a;let l=_o(await Yn(e,{normalized:i.normalized,tokens:Wt(i),limit:Math.min(n,100),pathPrefix:r.path_prefix},r.state_root),i,Math.min(n,100),r),u=Tr(l,Ut(r),r.content_max_chars);return zt(e,r.state_root,o,u),P.recordQuery(Q()-s),P.updateCacheSizes(H.size,U.size),u}async function Cr(e,t,n={}){let r=ie(t,n.intent),s=await Ce(e,t,n.files_limit??16,{state_root:n.state_root}),i=await Ie(e,t,n.symbols_limit??(r.intent==="symbols"?32:16),{state_root:n.state_root}),o=await Ee(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 Ir(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,d=s,m=s,f=await Ce(e,t,i,{state_root:n.state_root}),p=await Ie(e,t,o,{state_root:n.state_root}),b=await Ee(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"&&(d=ie(t,"symbols"),p=await Ie(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 Ee(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 Ce(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=Tr(b,Ut(n),n.content_max_chars),w=new Map;for(let y of b)w.set(y.id,y);let h={intent:s.intent,files:Je(f,y=>sr(y.path,u),{label:"fallback-file-match",detail:"File returned by fallback retrieval path"}),symbols:Je(p,y=>ir(y,d),{label:"fallback-symbol-match",detail:"Symbol returned by fallback retrieval path"}),chunks:Je(k,y=>or(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=At(h.files),h.symbols=At(h.symbols),h.chunks=At(h.chunks)),P.recordQuery(Q()-r),P.updateCacheSizes(H.size,U.size),h}async function Er(e,t,n={}){let r=await Zn(e,t,n.state_root);return r?Pr(r,n.include_content===!1?"preview":"full",n.content_max_chars):null}var Ar=2e4,So=5e5,Ro=".veil-repo-context",_e=2e6,Po=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=bo(e,t,{cwd:n,stdio:["ignore","pipe","pipe"]}),l="",u="",d=0,m=0,f=!1,p=!1,b=null,x=w=>{i||(i=!0,s(w))},_=(w,h,y)=>{if(y>=_e)return{next:h,bytes:y,truncated:!0};let N=Buffer.byteLength(w,"utf-8"),C=y+N;if(C<=_e)return{next:h+w,bytes:C,truncated:!1};let M=_e-y,E=Buffer.from(w,"utf-8").subarray(0,M).toString("utf-8");return{next:h+E,bytes:_e,truncated:!0}};a.stdout.setEncoding("utf-8"),a.stderr.setEncoding("utf-8"),a.stdout.on("data",w=>{let h=_(w,l,d);l=h.next,d=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")},Po)},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 qt(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 To(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 Ht(e,t){let n=Math.max(1024,Math.min(t??Ar,So));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 Mr(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(Le(t))return{ok:!1,error:{code:"invalid-path",message:"Path must be a relative path inside workspace"}};let n=vo(t),r=ge(e,n),s=tt(e,r);if(s.startsWith("..")||Le(s))return{ok:!1,error:{code:"invalid-path",message:"Path escapes workspace"}};try{let i=Ne(e),o=r;try{o=Ne(r)}catch{let l=xo(r);try{let u=Ne(l);o=ge(u,Nr(r))}catch{o=r}}let a=tt(i,o);if(a.startsWith("..")||Le(a))return{ok:!1,error:{code:"invalid-path",message:"Path escapes workspace via symlink"}}}catch{let i=ge(e),o=ge(e,n),a=tt(i,o);if(a.startsWith("..")||Le(a))return{ok:!1,error:{code:"invalid-path",message:"Path escapes workspace"}}}return{ok:!0,value:n}}function Bt(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 nt(e,t){let n=await O(t.command??"git",["-C",e,"rev-parse","--is-inside-work-tree"],e,t.timeoutMs);if(qt(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=Ne(e),i=Ne(i)}catch{s=ge(e),i=ge(i)}let o=tt(i,s);return o.startsWith("..")||Le(o)?{ok:!1,error:{code:"not-a-repo",message:"Workspace is outside git repository root"},gitAvailable:!0}:{ok:!0}}function Co(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 Io(e){return typeof e!="number"||!Number.isFinite(e)||e<=0?null:Math.max(1,Math.min(2e3,Math.floor(e)))}function Eo(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 Lo(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 be(e,t,n,r,s,i=[]){let o=s.warning?[s.warning,...i]:i;return{meta:To(e,t,n,s.truncated,o),data:r,error:null}}function Ae(e){let t=[];return e.stdoutTruncated&&t.push(`stdout capture capped at ${String(_e)} bytes`),e.stderrTruncated&&t.push(`stderr capture capped at ${String(_e)} bytes`),t}function v(e,t,n,r){let s=oe()-t,i=e==="gh_lookup";P.recordGitCall(s,n,r,i)}async function Or(e,t){let n=oe(),r=Math.min(1e4,Math.max(500,t?.timeout_ms??5e3)),s={timeoutMs:r,command:t?.command},i=await nt(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),d=await O(s.command??"git",["-C",e,"status","--porcelain"],e,r);if(!o.ok||!a.ok||!d.ok){let k=o.timedOut||a.timedOut||d.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||d.stderr||"unknown").trim()}`})}let m=Co(d.stdout),f=Eo(m,Io(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),be(e,"git_status",n,_,{truncated:!1},f.warnings)}async function Fr(e,t){let n=oe(),r=Math.min(12e3,Math.max(500,t?.timeout_ms??8e3)),s={timeoutMs:r,command:t?.command},i=await nt(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=Lo(l.stdout);return v("git_log",n,!0,!1),be(e,"git_log",n,{limit:o,entries:u},{truncated:!1},Ae(l))}async function Dr(e,t){let n=oe(),r=Math.min(1e4,Math.max(500,t?.timeout_ms??5e3)),s={timeoutMs:r,command:t?.command},i=await nt(e,s);if(!i.ok)return v("git_diff",n,!1,!1),I(e,"git_diff",n,i.error,i.gitAvailable);let o=Bt(t?.base);if(!o.ok)return v("git_diff",n,!1,!1),I(e,"git_diff",n,o.error);let a=Bt(t?.head);if(!a.ok)return v("git_diff",n,!1,!1),I(e,"git_diff",n,a.error);let l=Mr(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 d=o.value,m=a.value,f=!!(d&&m);d&&m?u.push(`${d}..${m}`):d&&u.push(d),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=Ht(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),be(e,"git_diff",n,x,b,Ae(p))}async function Ur(e,t){let n=oe(),r=Math.min(12e3,Math.max(500,t?.timeout_ms??8e3)),s={timeoutMs:r,command:t?.command},i=await nt(e,s);if(!i.ok)return v("git_show",n,!1,!1),I(e,"git_show",n,i.error,i.gitAvailable);let o=Bt(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=Mr(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 d=Ht(u.stdout,t?.max_bytes),m={rev:o.value,path:a.value??null,patch:t?.patch!==!1,text:d.text};return v("git_show",n,!0,!1),be(e,"git_show",n,m,d,Ae(u))}async function Wr(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(qt(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(qt(_))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=et(k,l.owner),h=et(w,Nr(l.name));yo(w,{recursive:!0});let y=et(h,".git"),N=et(h,Ro),C;if(!Lr(y))C=await O("git",["clone","--depth","1",l.url,h],e,r),C.ok&&wo(N,`${l.repo}
49
+ `,"utf-8");else{if(!Lr(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=ko(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),rn=await O("git",["-C",h,"symbolic-ref","refs/remotes/origin/HEAD"],e,r),ds=rn.ok?rn.stdout.trim().replace(/^refs\/remotes\//,""):"origin/main",le=await O("git",["-C",h,"reset","--hard",ds],e,r);C=!E.ok||!D.ok||!le.ok?{ok:!1,stdout:`${E.stdout}
50
50
  ${D.stdout}
51
- ${se.stdout}`,stderr:`${E.stderr}
51
+ ${le.stdout}`,stderr:`${E.stderr}
52
52
  ${D.stderr}
53
- ${se.stderr}`,code:1,timedOut:E.timedOut||D.timedOut||se.timedOut,stdoutTruncated:E.stdoutTruncated||D.stdoutTruncated||se.stdoutTruncated,stderrTruncated:E.stderrTruncated||D.stderrTruncated||se.stderrTruncated}:se}if(!T.ok)return x("gh_lookup",n,!1,T.timedOut),C(e,"gh_lookup",n,{code:T.timedOut?"timeout":"command-failed",message:`failed to sync repo ${l.repo}: ${T.stderr.trim()!==""?T.stderr.trim():T.error??"unknown"}`});try{await ce(p,"changed",{state_root:t.state_root});let A=await K(p,{state_root:t.state_root}),E=ie(p,t.state_root),D={repo:l.repo,kind:"repo_context",query:t.query??"",limit:0,text:`repo indexed at ${p}`,repo_url:l.url,cloned_workspace:p,state_root:E,status_exists:A.exists};return x("gh_lookup",n,!0,!1),fe(e,"gh_lookup",n,D,{truncated:!1},Ne(T))}catch(A){return x("gh_lookup",n,!1,!1),C(e,"gh_lookup",n,{code:"command-failed",message:`failed to index cloned repo: ${String(A)}`})}}let u=Math.min(50,Math.max(1,t.limit??10)),d=t.query??"",m="issue",h;t.kind==="issues"?(m="issue",h=["search",d||"is:open","--repo",l.repo,"--limit",String(u)]):t.kind==="prs"?(m="pr",h=["list","--repo",l.repo,"--limit",String(u)],d&&h.push("--search",d)):(m="run",h=["list","--repo",l.repo,"--limit",String(u)]);let f=await O(s,[m,...h],e,r);if(!f.ok)return x("gh_lookup",n,!1,f.timedOut),C(e,"gh_lookup",n,{code:f.timedOut?"timeout":"command-failed",message:`gh lookup failed: ${f.stderr.trim()!==""?f.stderr.trim():f.error??"unknown"}`});let _=Ft(f.stdout,br),y={repo:l.repo,kind:t.kind,query:d,limit:u,text:_.text,repo_url:l.url};return x("gh_lookup",n,!0,!1),fe(e,"gh_lookup",n,y,_,Ne(f))}var L={veil_status:"Use when you need index status or staleness.",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. Omit default args unless overriding.",veil_lookup:"Use when you need ranked natural-language code context. Defaults are compact; request full detail only when needed.",veil_discover:"Use when you need one broad first retrieval call. Omit default args unless overriding.",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. Defaults are bounded for token safety; override only when needed.",veil_git_status:"Use when you need branch or dirty-tree context. Path lists are opt-in; request them only when needed.",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 uo}from"node:fs";import{dirname as co,resolve as Rr}from"node:path";import{fileURLToPath as mo}from"node:url";function fo(e){let t=co(mo(e)),n=[Rr(t,"../package.json"),Rr(t,"../../package.json")];for(let r of n)try{let s=JSON.parse(uo(r,"utf8"));if(typeof s.version=="string"&&/^\d+\.\d+\.\d+$/.test(s.version))return s.version}catch{}return null}var Pr=fo(import.meta.url)??"0.0.0";var pe=["google","duckduckgo","wikipedia","github","reddit","deepwiki"],po={google:10,duckduckgo:9,wikipedia:6,github:7,reddit:5,deepwiki:8},ho=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 Dt(e){return e.replace(/<[^>]+>/g," ")}function Me(e){return e.replace(/&amp;/g,"&").replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/&#39;/g,"'")}function et(e){let t=F(e);if(!t)return"";try{let n=new URL(t),r=[];for(let[o,a]of n.searchParams.entries())ho.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 $t(e){let t=F(Me(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 go(e){try{return new URL($t(e)).host.toLowerCase()}catch{return""}}function _o(e,t){return Number((po[e]-t*.01).toFixed(4))}function bo(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 yo(e,t){let n=bo(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 ko(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(Me(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(Me(Dt(a?.[1]??"")));if(!l){s=r.exec(e);continue}n.push({title:l,url:i,snippet:""}),s=r.exec(e)}return n}function Er(e){if(!e)return[];let t=[];for(let n of e){if(Array.isArray(n.Topics)&&n.Topics.length>0){t.push(...Er(n.Topics));continue}t.push(n)}return t}function Tr(e,t){let n=[],r=Er(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 Cr(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=$t(s[1]),o=F(Me(Dt(s[2])));if(!i||!o){s=r.exec(e);continue}n.push({title:o,url:i,snippet:""}),s=r.exec(e)}return n}function wo(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=$t(s[1]),o=F(Me(Dt(s[2]))),a=et(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 vo(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 xo(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 So(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 Ae(e){try{return await e.json()}catch{throw new Error("invalid-json")}}async function Ro(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=Ue(o),l=qe(s.aborted||a==="timeout",a);return{provider:e.provider,ok:!1,duration_ms:Number((X()-i).toFixed(4)),results:[],warning:l?"timeout":a}}}function Po(e,t,n){let r=[...e].sort((u,d)=>pe.indexOf(u.provider)-pe.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],h=et(m.url);if(!h)continue;let f=yo(n,m),_=Number((f*100+_o(u.provider,d+1)).toFixed(4)),y={provider:u.provider,title:m.title,url:m.url,snippet:m.snippet,score:_,reasons:[{label:`${u.provider}-rank`,detail:`Provider ${u.provider} rank ${String(d+1)}`}]},b=s.get(h);if(!b){s.set(h,y);continue}if(y.score>b.score){y.reasons.push({label:"dedupe",detail:`Duplicate URL also seen in ${b.provider}`}),s.set(h,y);continue}b.reasons.push({label:"dedupe",detail:`Duplicate URL also seen in ${y.provider}`})}let i=[...s.values()].sort((u,d)=>{let m=d.score-u.score;if(m!==0)return m;let h=pe.indexOf(u.provider)-pe.indexOf(d.provider);return h!==0?h:et(u.url).localeCompare(et(d.url))}),o=new Map,a=[];for(let u of i){let d=go(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 To=[{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 f=await i.text(),_=ko(f,n);if(_.length>0)return _}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=Cr(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 h=await Ae(m);return Tr(h,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=Cr(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 Ae(a);return Tr(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 Ae(i);return vo(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 Ae(i);return xo(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 Ae(i);return So(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 wo(a,n)}}];function Lr(e,t,n){return{provider:e,ok:!1,duration_ms:Number(t.toFixed(4)),result_count:0,warning:n}}async function Ir(e,t){let n=X(),r=tn(t.query),s=Ge(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=To.map((p,k)=>Ro(p,u,r,s,a.signal).then(I=>({idx:k,outcome:I}))),h=new Set(m.map((p,k)=>k)),f=[];for(;h.size>0;){let p=X()-n,k=i-p;if(k<=0){d=!0;break}let I=[...h].map(E=>m[E]),T=new Promise(E=>{setTimeout(()=>{E(null)},k)}),A=await Promise.race([...I,T]);if(!A){d=!0;break}h.delete(A.idx),f.push(A.outcome)}h.size>0&&!a.signal.aborted&&a.abort("timeout");let _=Po(f,s,r),y=new Map;for(let p of f)y.set(p.provider,{provider:p.provider,ok:p.ok,duration_ms:p.duration_ms,result_count:p.results.length,warning:p.warning});let b=X()-n;for(let p of h){let k=pe[p]??"google";y.set(k,Lr(k,b,d?"timeout":"cancelled"))}let w=pe.map(p=>y.get(p)??Lr(p,b,d?"timeout":"not-run")),v=w.filter(p=>!p.ok&&p.warning).map(p=>`${p.provider}: ${p.warning??"unknown"}`);if(_.detailed_results.length>0){let p=_.detailed_results.map(k=>({title:k.title,url:k.url}));return{meta:{ok:!0,duration_ms:Number((X()-n).toFixed(4))},data:{results:p,...o?{debug:{query:r,provider:_.primary_provider,warnings:v,provider_trace:w,detailed_results:_.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 U={readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},he={readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},Ut={readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},Ao={readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},Fr=1024*1024,ae=class extends Error{constructor(t){super(t),this.name="HttpBodyTooLargeError"}};function Nr(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 N(e){return typeof e=="boolean"?e:void 0}function Ar(e){if(!e||typeof e!="object"||Array.isArray(e))return{exists:!1,stale:!0,reasons:["unknown"]};let t=e;return{exists:t.exists===!0,stale:t.stale===!0,reasons:Array.isArray(t.reasons)?t.reasons:[],grammar_suggestions:Array.isArray(t.grammar_suggestions)?t.grammar_suggestions:[]}}function tt(e){if(Array.isArray(e)){let t=e.filter(n=>typeof n=="string").join(",");return je(t)}return typeof e=="string"?je(e):[]}function Mo(e){return ee.find(n=>n.id===e)?.label??e}function Oo(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 Gt(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 nt(e,t,n,r){if(Oo(n)>0)return n;let o=((await K(e,{state_root:t})).grammar_suggestions??[]).filter(a=>Gt(a,r));return o.length===0?n:{...n,grammar_suggestions:o}}function Fo(e){return{content:[{type:"text",text:pt(e)}],isError:!1}}function Mr(e,t){let n=Nr(t),r=Nr(n.error),i={ok:!1,error:{code:g(r.code)??"tool-error",message:e}};return{content:[{type:"text",text:pt(i)}],isError:!0}}function q(e,t){let n=e??process.cwd();return P.configureStatePath(Zt(n,t)),n}async function Oe(e){let t=q(e.workspace,e.state_root);return await At(t,{state_root:e.state_root,refresh_if_stale:e.refresh_if_stale??!0,strict_query_freshness:!0}),t}var Bt=[{name:"veil_status",title:"Veil Index Status",description:L.veil_status,inputSchema:{workspace:c.string().optional(),state_root:c.string().optional()},annotations:U,handler:async e=>{let t=g(e.workspace),n=g(e.state_root),r=q(t,n),s=await K(r,{state_root:n});return M("status",s)}},{name:"veil_refresh",title:"Veil Refresh Index",description:L.veil_refresh,inputSchema:{workspace:c.string().optional(),mode:c.enum(["full","changed"]).optional(),state_root:c.string().optional()},annotations:he,handler:async e=>{let t=g(e.workspace),n=g(e.state_root),r=e.mode==="full"?"full":"changed",s=q(t,n),i=await ce(s,r,{state_root:n});return M("refresh",{ok:!0,mode:r,manifest:i})}},{name:"veil_build",title:"Veil Build Index",description:L.veil_build,inputSchema:{workspace:c.string().optional(),state_root:c.string().optional()},annotations:he,handler:async e=>{let t=g(e.workspace),n=g(e.state_root),r=q(t,n);return{ok:!0,mode:"full",manifest:await ce(r,"full",{state_root:n})}}},{name:"veil_grammar_list",title:"Veil Grammar List",description:L.veil_grammar_list,inputSchema:{workspace:c.string().optional(),state_root:c.string().optional()},annotations:U,handler:async e=>{let t=g(e.workspace),n=g(e.state_root),r=q(t,n);return{parsers:await xn(r,n)}}},{name:"veil_grammar_install",title:"Veil Grammar Install",description:L.veil_grammar_install,inputSchema:{workspace:c.string().optional(),state_root:c.string().optional(),parsers:c.array(c.string()).optional()},annotations:he,handler:async e=>{let t=g(e.workspace),n=g(e.state_root),r=q(t,n),s=await He(r,tt(e.parsers),n);return{ok:!0,installed:s.installed,enabled:s.enabled}}},{name:"veil_grammar_remove",title:"Veil Grammar Remove",description:L.veil_grammar_remove,inputSchema:{workspace:c.string().optional(),state_root:c.string().optional(),parsers:c.array(c.string()).optional()},annotations:he,handler:async e=>{let t=g(e.workspace),n=g(e.state_root),r=q(t,n),s=await wn(r,tt(e.parsers),n);return{ok:!0,installed:s.installed,enabled:s.enabled}}},{name:"veil_grammar_update",title:"Veil Grammar Update",description:L.veil_grammar_update,inputSchema:{workspace:c.string().optional(),state_root:c.string().optional(),parsers:c.array(c.string()).optional(),all:c.boolean().optional()},annotations:he,handler:async e=>{let t=g(e.workspace),n=g(e.state_root),r=q(t,n),s=N(e.all)?"all":tt(e.parsers),i=await vn(r,s,n);return{ok:!0,updated:i.updated,installed:i.installed}}},{name:"veil_grammar_recommend",title:"Veil Grammar Recommend",description:L.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:U,handler:async e=>{let t=g(e.workspace),n=g(e.state_root),r=g(e.query),s=q(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=>Gt(l,r)).slice(0,o).map(l=>{let u=je(l.parser_id),d=gt(u);return{...l,parser_label:Mo(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 M("grammar_recommend",{query:r??null,suggestions:a})}},{name:"veil_grammar_runtime_install",title:"Veil Grammar Runtime Install",description:L.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:he,handler:async e=>{let t=g(e.workspace),n=g(e.state_root),r=q(t,n),s=tt(e.parsers),i=await Tn(r,s,n,S(e.timeout_ms)),o=await K(r,{state_root:n,bypass_cache:!0});return M("grammar_runtime_install",{...i,status:Ar(o),grammar_suggestions:o.grammar_suggestions??[]})}},{name:"veil_files",title:"Veil Find Files",description:L.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:U,handler:async e=>{let t=g(e.query)??"",n=g(e.workspace),r=g(e.state_root),s=N(e.refresh_if_stale),i=S(e.limit),o=await Oe({workspace:n,state_root:r,refresh_if_stale:s}),a=await Te(o,t,ct(i),{state_root:r}),l=await nt(o,r,{items:a},t);return M("files",l,{query:t})}},{name:"veil_symbols",title:"Veil Find Symbols",description:L.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:U,handler:async e=>{let t=g(e.query)??"",n=g(e.workspace),r=g(e.state_root),s=N(e.refresh_if_stale),i=S(e.limit),o=await Oe({workspace:n,state_root:r,refresh_if_stale:s}),a=await Ce(o,t,dt(i),{state_root:r}),l=await nt(o,r,{items:a},t);return M("symbols",l,{query:t})}},{name:"veil_search",title:"Veil Search Chunks",description:L.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:U,handler:async e=>{let t=g(e.query)??"",n=g(e.workspace),r=g(e.state_root),s=N(e.refresh_if_stale),i=await Oe({workspace:n,state_root:r,refresh_if_stale:s}),o=await Le(i,t,mt(S(e.limit)),{content_mode:e.content_mode==="none"||e.content_mode==="full"||e.content_mode==="preview"?e.content_mode:void 0,include_content:N(e.include_content),content_max_chars:be(S(e.content_max_chars)),prefer_code:N(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 nt(i,r,{items:o},t);return M("search",a,{query:t})}},{name:"veil_lookup",title:"Veil Lookup Context",description:L.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:U,handler:async e=>{let t=g(e.query)??"",n=g(e.workspace),r=g(e.state_root),s=N(e.refresh_if_stale),i=await Oe({workspace:n,state_root:r,refresh_if_stale:s}),o=await pr(i,t,{files_limit:nn(S(e.files_limit)),symbols_limit:rn(S(e.symbols_limit)),search_limit:sn(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:N(e.include_content),content_max_chars:be(S(e.content_max_chars)),prefer_code:N(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 nt(i,r,o,t);return M("lookup",a,{query:t})}},{name:"veil_discover",title:"Veil Discover Context",description:L.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:U,handler:async e=>{let t=g(e.query)??"",n=g(e.workspace),r=g(e.state_root),s=q(n,r),i=await At(s,{state_root:r,refresh_if_stale:N(e.refresh_if_stale)??!0,strict_query_freshness:!0}),o=await fr(s,t,{files_limit:ct(S(e.files_limit)),symbols_limit:dt(S(e.symbols_limit)),search_limit:mt(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:N(e.include_content),content_max_chars:be(S(e.content_max_chars)),prefer_code:N(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});return M("discover",{status:Ar(i.status_after),intent:o.intent,files:o.files,symbols:o.symbols,chunks:o.chunks,grammar_suggestions:(i.status_after.grammar_suggestions??[]).filter(a=>Gt(a,t))},{query:t})}},{name:"veil_chunk",title:"Veil Fetch Chunk",description:L.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:U,handler:async e=>{let t=g(e.workspace),n=g(e.state_root),r=await Oe({workspace:t,state_root:n,refresh_if_stale:N(e.refresh_if_stale)??!0}),s=g(e.id)??"",i=await hr(r,s,{state_root:n,include_content:!0,content_max_chars:be(S(e.content_max_chars))});return M("chunk",{item:i},{query:s})}},{name:"veil_web_search",title:"Veil Web Search",description:L.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:Ut,handler:async e=>{let t=g(e.query)??"",n=g(e.workspace)??process.cwd();return M("web_search",await Ir(n,{query:t,limit:Ge(S(e.limit)),timeout_ms:Be(S(e.timeout_ms)),debug:N(e.debug)}),{query:t})}},{name:"veil_fetch_url",title:"Veil Fetch URL",description:L.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:Ut,handler:async e=>{let t=g(e.url)??"";return M("fetch_url",await dn({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:N(e.include_error_content),allow_private_network:N(e.allow_private_network)}),{query:t})}},{name:"veil_git_status",title:"Veil Git Status",description:L.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:U,handler:async e=>M("git_status",await kr(g(e.workspace)??process.cwd(),{timeout_ms:S(e.timeout_ms),include_paths:N(e.include_paths),paths_limit:S(e.paths_limit)}))},{name:"veil_git_log",title:"Veil Git Log",description:L.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:U,handler:async e=>M("git_log",await wr(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:L.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:U,handler:async e=>M("git_diff",await vr(g(e.workspace)??process.cwd(),{staged:N(e.staged),path:g(e.path),base:g(e.base),head:g(e.head),name_only:N(e.name_only),timeout_ms:S(e.timeout_ms),max_bytes:S(e.max_bytes)}))},{name:"veil_git_show",title:"Veil Git Show",description:L.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:U,handler:async e=>M("git_show",await xr(g(e.workspace)??process.cwd(),{rev:g(e.rev)??"",path:g(e.path),patch:N(e.patch),timeout_ms:S(e.timeout_ms),max_bytes:S(e.max_bytes)}))},{name:"veil_gh_lookup",title:"Veil GitHub Lookup",description:L.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:Ut,handler:async e=>{let t=g(e.workspace),n=g(e.state_root),r=q(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 M("gh_lookup",await Sr(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:L.veil_diagnostics,inputSchema:{workspace:c.string().optional(),state_root:c.string().optional(),reset:c.boolean().optional()},annotations:Ao,handler:e=>{q(g(e.workspace),g(e.state_root)),N(e.reset)&&P.reset();let t=P.getDiagnostics();return M("diagnostics",t)}}];async function Do(e,t){try{let n=await e.handler(t),r=ut(n);return r?Mr(r,n):Fo(n)}catch(n){let r=n instanceof Error?n.message:String(n);return Mr(r)}}function Ht(){let e=new Eo({name:"veil-mcp-server",version:Pr});for(let t of Bt)e.registerTool(t.name,{title:t.title,description:t.description,inputSchema:t.inputSchema,annotations:t.annotations},async n=>Do(t,n));return e}function Fe(e){let t=e.trim().toLowerCase();return t?t.startsWith("[")&&t.endsWith("]")?t.slice(1,-1):t:""}function $o(e){let t=e?.trim()??"";if(!t)return"";if(t.startsWith("[")){let r=t.indexOf("]");return Fe(r!==-1?t.slice(0,r+1):t)}let n=t.split(":")[0]??"";return Fe(n)}function qt(e){return e==="localhost"||e==="127.0.0.1"||e==="::1"}function Uo(e){if(!e)return"";try{return Fe(new URL(e).hostname)}catch{return""}}function qo(e,t,n){if(n)return null;let r=$o(e.headers.host);if(!r||!qt(r))return"Request host is not allowed for local-only mode";let s=Uo(g(e.headers.origin));return s&&!qt(s)?"Origin is not allowed for local-only mode":qt(Fe(t))?null:"Server host must be loopback unless allow_remote is true"}async function Dr(e,t=Fr){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 ae(`Request body exceeds ${String(t)} bytes maximum`);n.push(a);continue}if(Buffer.isBuffer(i)){if(r+=i.byteLength,r>t)throw new ae(`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 ae(`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 ae(`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 Or=!1,zt=null;async function jt(){Or||(zt??=(async()=>{let e=Ht(),t=new Io;await e.connect(t),Or=!0})().catch(e=>{throw zt=null,e}),await zt)}var Wt=!1,re=null,st=null,it=null,ot=null;async function zo(){if(re)try{await re}catch{}let e=st,t=it,n=ot;re=null,Wt=!1,st=null,it=null,ot=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 $r(e={}){if(Wt)return;if(re){await re;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=Ht(),o=new No({sessionIdGenerator:void 0,enableJsonResponse:!0});await i.connect(o),it=o,ot=i;let a=Co(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=qo(l,t,s);if(d){u.statusCode=403,u.end(d);return}let m=await Dr(l);await o.handleRequest(l,u,m)}catch(d){if(d instanceof ae){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)}}});st=a,re=new Promise((l,u)=>{a.on("error",u),a.listen(n,t,()=>{Wt=!0,l()})});try{await re}catch(l){throw st=null,it=null,ot=null,re=null,await o.close(),await i.close(),l}}var El={createMcpServer:Ht,toolNames:Bt.map(e=>e.name),toolDefinitions:Bt,responseErrorMessage:ut,parseRequestBody:Dr,maxHttpRequestBodyBytes:Fr,stopHttpServer:zo},Go=import.meta,Bo=`${rt}src${rt}server.ts`,Wo=Lo(import.meta.url).endsWith(Bo),Ho=process.argv.some(e=>e.endsWith(`${rt}src${rt}server.ts`)||e==="src/server.ts");Wo&&(Go.main===!0||Ho)&&await jt();async function qr(e=process.argv){if(zr(e)){await $r();return}await jt()}function zr(e){return process.env.VEIL_HTTP==="1"?!0:e.includes("--http")}async function Gr(e=()=>qr()){try{await e()}catch(t){process.stderr.write(String(t)+`
54
- `),process.exitCode=1}}function Br(e){let t=import.meta;if(typeof t.main=="boolean")return t.main;let n=process.argv[1];return n?Ur(n)===Ur(jo(e)):!1}var Ol={main:qr,runMain:Gr,isMainModule:Br,shouldStartHttp:zr},Qo=Br(import.meta.url);Qo&&Gr();export{Ol as __internalBin};
53
+ ${le.stderr}`,code:1,timedOut:E.timedOut||D.timedOut||le.timedOut,stdoutTruncated:E.stdoutTruncated||D.stdoutTruncated||le.stdoutTruncated,stderrTruncated:E.stderrTruncated||D.stderrTruncated||le.stderrTruncated}:le}if(!C.ok)return v("gh_lookup",n,!1,C.timedOut),I(e,"gh_lookup",n,{code:C.timedOut?"timeout":"command-failed",message:`failed to sync repo ${l.repo}: ${C.stderr.trim()!==""?C.stderr.trim():C.error??"unknown"}`});try{await he(h,"changed",{state_root:t.state_root});let M=await K(h,{state_root:t.state_root}),E=ne(h,t.state_root),D={repo:l.repo,kind:"repo_context",query:t.query??"",limit:0,text:`repo indexed at ${h}`,repo_url:l.url,cloned_workspace:h,state_root:E,status_exists:M.exists};return v("gh_lookup",n,!0,!1),be(e,"gh_lookup",n,D,{truncated:!1},Ae(C))}catch(M){return v("gh_lookup",n,!1,!1),I(e,"gh_lookup",n,{code:"command-failed",message:`failed to index cloned repo: ${String(M)}`})}}let u=Math.min(50,Math.max(1,t.limit??10)),d=t.query??"",m="issue",f;t.kind==="issues"?(m="issue",f=["search",d||"is:open","--repo",l.repo,"--limit",String(u)]):t.kind==="prs"?(m="pr",f=["list","--repo",l.repo,"--limit",String(u)],d&&f.push("--search",d)):(m="run",f=["list","--repo",l.repo,"--limit",String(u)]);let p=await O(s,[m,...f],e,r);if(!p.ok)return v("gh_lookup",n,!1,p.timedOut),I(e,"gh_lookup",n,{code:p.timedOut?"timeout":"command-failed",message:`gh lookup failed: ${p.stderr.trim()!==""?p.stderr.trim():p.error??"unknown"}`});let b=Ht(p.stdout,Ar),x={repo:l.repo,kind:t.kind,query:d,limit:u,text:b.text,repo_url:l.url};return v("gh_lookup",n,!0,!1),be(e,"gh_lookup",n,x,b,Ae(p))}var T={veil_status:"Use when you need index status or staleness.",veil_update_check:"Use when you need MCP package and skill update status.",veil_refresh:"Use when you need to rebuild index state.",veil_build:"Use when you need a full index rebuild.",veil_files:"Use when you need file path matches.",veil_symbols:"Use when you need symbol name matches.",veil_search:"Use when you need indexed keyword matches.",veil_lookup:"Use when you need ranked natural-language code context. Defaults are compact.",veil_discover:"Use when you need one broad first retrieval call.",veil_chunk:"Use when you need full content for one chunk id.",veil_grammar_list:"Use when you need parser availability and enabled state.",veil_grammar_install:"Use when you need to enable parser IDs.",veil_grammar_remove:"Use when you need to disable parser IDs.",veil_grammar_update:"Use when you need parser metadata refresh.",veil_grammar_recommend:"Use when you need parser improvement suggestions for unsupported or disabled language coverage.",veil_grammar_runtime_install:"Use when you need explicit, approved runtime package install for parser IDs.",veil_web_search:"Use when you need external docs or web references.",veil_fetch_url:"Use when you need markdown-first page content from a URL.",veil_git_status:"Use when you need branch or dirty-tree context.",veil_git_log:"Use when you need commit history context.",veil_git_diff:"Use when you need diff content for changes.",veil_git_show:"Use when you need commit details for one revision.",veil_gh_lookup:"Use when you need GitHub issues, PRs, checks, or repo bootstrap.",veil_diagnostics:"Use when you need cache or latency diagnostics."};import{readFileSync as Gr}from"node:fs";import{dirname as qr,resolve as rt}from"node:path";import{fileURLToPath as Br}from"node:url";var st=/^\d+\.\d+\.\d+$/,Hr=2e3,No=600*1e3,Ao="@ushiradineth/veil",Mo=(e,t)=>fetch(e,t),$r,jr=new Map;function Oo(e){let t=qr(Br(e)),n=[rt(t,"../package.json"),rt(t,"../../package.json")];for(let r of n)try{let s=JSON.parse(Gr(r,"utf8"));if(typeof s.version=="string"&&st.test(s.version))return s.version}catch{}return null}function Fo(e){let t=e.match(/^version:\s*([0-9]+\.[0-9]+\.[0-9]+)\s*$/m);if(!t)return null;let n=t[1]??"";return st.test(n)?n:null}function Do(e){let t=qr(Br(e)),n=[rt(t,"../skills/SKILL.md"),rt(t,"../../skills/SKILL.md")];for(let r of n)try{let s=Gr(r,"utf8"),i=Fo(s);if(i)return i}catch{}return null}function zr(e){if(!st.test(e))return null;let[t,n,r]=e.split(".").map(s=>Number.parseInt(s,10));return!Number.isFinite(t)||!Number.isFinite(n)||!Number.isFinite(r)?null:[t,n,r]}function Vr(e,t){let n=zr(e),r=zr(t);if(!n||!r)return null;for(let s=0;s<3;s++){if(n[s]>r[s])return 1;if(n[s]<r[s])return-1}return 0}function Uo(){return $r!==void 0?$r:Bo}async function Wo(e,t){let n=Number.isFinite(t)?Math.max(250,t):Hr,r=new AbortController,s=setTimeout(()=>{r.abort()},n);try{let i=`https://registry.npmjs.org/${encodeURIComponent(e)}/latest`,o=await Mo(i,{signal:r.signal,headers:{accept:"application/json"}});if(!o.ok)throw new Error(`npm lookup failed with status ${String(o.status)}`);let a=await o.json(),l=typeof a.version=="string"?a.version:null;if(!l||!st.test(l))throw new Error("npm lookup returned invalid version");return l}finally{clearTimeout(s)}}function Qr(e,t){return`${e}\0${t}`}function $o(e,t){let n=Qr(e,t),r=jr.get(n);return!r||Date.now()-r.ts>No?null:{...r.value,source:"cache"}}function zo(e,t,n){let r=Qr(e,t);jr.set(r,{ts:Date.now(),value:n})}async function Go(e={}){let t=e.package_name??Ao,n=e.current_version??jt,r=e.allow_network??!0,s=e.force_refresh===!0,i=e.timeout_ms??Hr;if(!s){let o=$o(t,n);if(o)return o}if(!r){let o=new Date().toISOString();return{package_name:t,current:n,latest:null,outdated:null,source:"unavailable",checked_at:o,warning:"network-check-disabled"}}try{let o=await Wo(t,i),a=Vr(n,o),l=new Date().toISOString(),u={package_name:t,current:n,latest:o,outdated:a===null?null:a<0,source:"network",checked_at:l};return a===null&&(u.warning="version-compare-failed"),zo(t,n,u),u}catch(o){let a=o instanceof Error?o.message:String(o),l=new Date().toISOString();return{package_name:t,current:n,latest:null,outdated:null,source:"unavailable",checked_at:l,warning:a}}}function qo(e){let t=Uo(),n=e?.trim()?e.trim():null;if(!t)return{expected:null,reported:n,outdated:null,reason:"expected-version-missing"};if(!n)return{expected:t,reported:null,outdated:null,reason:"reported-version-missing"};let r=Vr(n,t);return r===null?{expected:t,reported:n,outdated:null,reason:"invalid-version"}:{expected:t,reported:n,outdated:r<0,reason:null}}async function it(e={}){let t=await Go({allow_network:e.allow_network,force_refresh:e.force_refresh,timeout_ms:e.timeout_ms}),n=qo(e.reported_skill_version);return{mcp:t,skill:n}}var jt=Oo(import.meta.url)??"0.0.0",Bo=Do(import.meta.url);var ye=["google","duckduckgo","wikipedia","github","reddit","deepwiki"],Ho={google:10,duckduckgo:9,wikipedia:6,github:7,reddit:5,deepwiki:8},jo=new Set(["utm_source","utm_medium","utm_campaign","utm_term","utm_content","gclid","fbclid","ref"]);function X(){return typeof Bun<"u"&&typeof Bun.nanoseconds=="function"?Bun.nanoseconds()/1e6:Date.now()}function F(e){return e.replace(/\s+/g," ").trim()}function Vt(e){return e.replace(/<[^>]+>/g," ")}function Oe(e){return e.replace(/&amp;/g,"&").replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&quot;/g,'"').replace(/&#39;/g,"'")}function ot(e){let t=F(e);if(!t)return"";try{let n=new URL(t),r=[];for(let[o,a]of n.searchParams.entries())jo.has(o.toLowerCase())||r.push([o,a]);r.sort(([o,a],[l,u])=>{let d=o.localeCompare(l);return d!==0?d:a.localeCompare(u)});let s=r.map(([o,a])=>`${encodeURIComponent(o)}=${encodeURIComponent(a)}`).join("&"),i=n.pathname||"/";return i.length>1&&(i=i.replace(/\/+$/,"")),`${n.protocol.toLowerCase()}//${n.host.toLowerCase()}${i}${s?`?${s}`:""}`}catch{return t.replace(/\/+$/,"").toLowerCase()}}function Qt(e){let t=F(Oe(e));if(!t)return"";let n=t.startsWith("//")?`https:${t}`:t;try{let r=new URL(n);if(r.host.includes("duckduckgo.com")&&r.pathname==="/l/"){let s=r.searchParams.get("uddg");if(s)return F(decodeURIComponent(s))}return n}catch{return n}}function Vo(e){try{return new URL(Qt(e)).host.toLowerCase()}catch{return""}}function Qo(e,t){return Number((Ho[e]-t*.01).toFixed(4))}function Ko(e){let t=new Set(["a","an","the","to","from","for","of","in","on","with","how","do","i"]),n=e.toLowerCase().replace(/[^a-z0-9\s]+/g," ").split(/\s+/).map(r=>r.trim()).filter(r=>r.length>=2&&!t.has(r));return Array.from(new Set(n))}function Xo(e,t){let n=Ko(e);if(n.length===0)return 0;let r=e.toLowerCase(),s=t.title.toLowerCase(),i=t.snippet.toLowerCase(),o=t.url.toLowerCase(),a=0;for(let l of n)s.includes(l)&&(a+=6),i.includes(l)&&(a+=3),o.includes(l)&&(a+=1);return s.includes(r)&&(a+=8),i.includes(r)&&(a+=4),a}function Jo(e,t){let n=[],r=/<a href="\/url\?q=([^"&]+)[^"]*"[^>]*>([\s\S]*?)<\/a>/g,s=r.exec(e);for(;s&&n.length<t;){let i=F(decodeURIComponent(Oe(s[1])));if(!i||i.includes("webcache.googleusercontent.com")){s=r.exec(e);continue}let o=s[2],a=/<h3[^>]*>([\s\S]*?)<\/h3>/.exec(o),l=F(Oe(Vt(a?.[1]??"")));if(!l){s=r.exec(e);continue}n.push({title:l,url:i,snippet:""}),s=r.exec(e)}return n}function Yr(e){if(!e)return[];let t=[];for(let n of e){if(Array.isArray(n.Topics)&&n.Topics.length>0){t.push(...Yr(n.Topics));continue}t.push(n)}return t}function Kr(e,t){let n=[],r=Yr(e.RelatedTopics);for(let s of r){let i=F(s.Text??""),o=F(s.FirstURL??"");if(!(!i||!o)&&(n.push({title:i.split(" - ")[0]??i,url:o,snippet:i}),n.length>=t))break}return n}function Xr(e,t){let n=[],r=/<a[^>]*class="[^"]*result__a[^"]*"[^>]*href="([^"]+)"[^>]*>([\s\S]*?)<\/a>/g,s=r.exec(e);for(;s&&n.length<t;){let i=Qt(s[1]),o=F(Oe(Vt(s[2])));if(!i||!o){s=r.exec(e);continue}n.push({title:o,url:i,snippet:""}),s=r.exec(e)}return n}function Yo(e,t){let n=[],r=/<a[^>]*class="[^"]*result__a[^"]*"[^>]*href="([^"]+)"[^>]*>([\s\S]*?)<\/a>/g,s=r.exec(e);for(;s&&n.length<t;){let i=Qt(s[1]),o=F(Oe(Vt(s[2]))),a=ot(i);if(!o||!a.includes("deepwiki.com/")){s=r.exec(e);continue}n.push({title:o,url:i,snippet:""}),s=r.exec(e)}return n}function Zo(e,t){if(!Array.isArray(e))return[];let n=Array.isArray(e[1])?e[1]:[],r=Array.isArray(e[2])?e[2]:[],s=Array.isArray(e[3])?e[3]:[],i=[];for(let o=0;o<n.length;o+=1){let a=F(String(n[o]??"")),l=F(String(s[o]??""));if(!(!a||!l)&&(i.push({title:a,url:l,snippet:F(String(r[o]??""))}),i.length>=t))break}return i}function ea(e,t){let n=Array.isArray(e.items)?e.items:[],r=[];for(let s of n){let i=F(s.full_name??""),o=F(s.html_url??"");if(!(!i||!o)&&(r.push({title:i,url:o,snippet:F(s.description??"")}),r.length>=t))break}return r}function ta(e,t){let n=Array.isArray(e.data?.children)?e.data.children:[],r=[];for(let s of n){let i=s.data;if(!i)continue;let o=F(i.title??""),a=F(i.permalink??"");if(!o||!a)continue;let l=a.startsWith("http")?a:`https://www.reddit.com${a}`,u=F(i.selftext??i.url??"");if(r.push({title:o,url:l,snippet:u}),r.length>=t)break}return r}async function Me(e){try{return await e.json()}catch{throw new Error("invalid-json")}}async function na(e,t,n,r,s){let i=X();try{let o=await e.run(t,n,r,s);return{provider:e.provider,ok:o.length>0,duration_ms:Number((X()-i).toFixed(4)),results:o,warning:o.length>0?null:"no-parseable-results"}}catch(o){let a=$e(o),l=ze(s.aborted||a==="timeout",a);return{provider:e.provider,ok:!1,duration_ms:Number((X()-i).toFixed(4)),results:[],warning:l?"timeout":a}}}function ra(e,t,n){let r=[...e].sort((u,d)=>ye.indexOf(u.provider)-ye.indexOf(d.provider)),s=new Map;for(let u of r)for(let d=0;d<u.results.length;d+=1){let m=u.results[d],f=ot(m.url);if(!f)continue;let p=Xo(n,m),b=Number((p*100+Qo(u.provider,d+1)).toFixed(4)),x={provider:u.provider,title:m.title,url:m.url,snippet:m.snippet,score:b,reasons:[{label:`${u.provider}-rank`,detail:`Provider ${u.provider} rank ${String(d+1)}`}]},_=s.get(f);if(!_){s.set(f,x);continue}if(x.score>_.score){x.reasons.push({label:"dedupe",detail:`Duplicate URL also seen in ${_.provider}`}),s.set(f,x);continue}_.reasons.push({label:"dedupe",detail:`Duplicate URL also seen in ${x.provider}`})}let i=[...s.values()].sort((u,d)=>{let m=d.score-u.score;if(m!==0)return m;let f=ye.indexOf(u.provider)-ye.indexOf(d.provider);return f!==0?f:ot(u.url).localeCompare(ot(d.url))}),o=new Map,a=[];for(let u of i){let d=Vo(u.url),m=o.get(d)??0;if(!(d&&m>=2)&&(d&&o.set(d,m+1),a.push(u),a.length>=t))break}return{primary_provider:a.length>0?a[0].provider:r.find(u=>u.ok)?.provider??"google",detailed_results:a.map(u=>({title:u.title,url:u.url,snippet:u.snippet,score:u.score,reasons:u.reasons}))}}var sa=[{provider:"google",run:async(e,t,n,r)=>{let s=`https://www.google.com/search?q=${encodeURIComponent(t)}&hl=en&num=${String(n)}`,i=await e(s,{method:"GET",headers:{accept:"text/html","user-agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36"},signal:r});if(i.ok){let p=await i.text(),b=Jo(p,n);if(b.length>0)return b}let o=`https://html.duckduckgo.com/html/?q=${encodeURIComponent(t)}`,a=await e(o,{method:"GET",headers:{accept:"text/html","user-agent":"Mozilla/5.0 (compatible; veil-web-search)"},signal:r});if(!a.ok)throw new Error(`http-${String(i.status||a.status)}`);let l=await a.text(),u=Xr(l,n);if(u.length>0)return u;let d=`https://api.duckduckgo.com/?q=${encodeURIComponent(t)}&format=json&no_redirect=1&no_html=1`,m=await e(d,{method:"GET",headers:{accept:"application/json"},signal:r});if(!m.ok)return[];let f=await Me(m);return Kr(f,n)}},{provider:"duckduckgo",run:async(e,t,n,r)=>{let s=`https://html.duckduckgo.com/html/?q=${encodeURIComponent(t)}`,i=await e(s,{method:"GET",headers:{accept:"text/html","user-agent":"Mozilla/5.0 (compatible; veil-web-search)"},signal:r});if(i.ok){let u=await i.text(),d=Xr(u,n);if(d.length>0)return d}let o=`https://api.duckduckgo.com/?q=${encodeURIComponent(t)}&format=json&no_redirect=1&no_html=1`,a=await e(o,{method:"GET",headers:{accept:"application/json"},signal:r});if(!a.ok)throw new Error(`http-${String(a.status)}`);let l=await Me(a);return Kr(l,n)}},{provider:"wikipedia",run:async(e,t,n,r)=>{let s=`https://en.wikipedia.org/w/api.php?action=opensearch&search=${encodeURIComponent(t)}&limit=${String(n)}&namespace=0&format=json&origin=*`,i=await e(s,{method:"GET",headers:{accept:"application/json"},signal:r});if(!i.ok)throw new Error(`http-${String(i.status)}`);let o=await Me(i);return Zo(o,n)}},{provider:"github",run:async(e,t,n,r)=>{let s=`https://api.github.com/search/repositories?q=${encodeURIComponent(t)}&per_page=${String(n)}&sort=stars&order=desc`,i=await e(s,{method:"GET",headers:{accept:"application/vnd.github+json","user-agent":"veil-web-search"},signal:r});if(!i.ok)throw new Error(`http-${String(i.status)}`);let o=await Me(i);return ea(o,n)}},{provider:"reddit",run:async(e,t,n,r)=>{let s=`https://www.reddit.com/search.json?q=${encodeURIComponent(t)}&limit=${String(n)}&sort=relevance&type=link`,i=await e(s,{method:"GET",headers:{accept:"application/json","user-agent":"veil-web-search"},signal:r});if(!i.ok)throw new Error(`http-${String(i.status)}`);let o=await Me(i);return ta(o,n)}},{provider:"deepwiki",run:async(e,t,n,r)=>{let s=`site:deepwiki.com ${t}`,i=`https://html.duckduckgo.com/html/?q=${encodeURIComponent(s)}`,o=await e(i,{method:"GET",headers:{accept:"text/html","user-agent":"Mozilla/5.0 (compatible; veil-web-search)"},signal:r});if(!o.ok)throw new Error(`http-${String(o.status)}`);let a=await o.text();return Yo(a,n)}}];function Jr(e,t,n){return{provider:e,ok:!1,duration_ms:Number(t.toFixed(4)),result_count:0,warning:n}}async function Zr(e,t){let n=X(),r=mn(t.query),s=qe(t.limit),i=Be(t.timeout_ms),o=t.debug??!1;if(!r)return{meta:{ok:!1,duration_ms:Number((X()-n).toFixed(4))},data:null,error:{code:"invalid-query",message:"Query is required"}};let a=new AbortController,l=setTimeout(()=>{a.abort("timeout")},i),u=t.fetch_impl??fetch,d=!1;try{let m=sa.map((h,y)=>na(h,u,r,s,a.signal).then(N=>({idx:y,outcome:N}))),f=new Set(m.map((h,y)=>y)),p=[];for(;f.size>0;){let h=X()-n,y=i-h;if(y<=0){d=!0;break}let N=[...f].map(E=>m[E]),C=new Promise(E=>{setTimeout(()=>{E(null)},y)}),M=await Promise.race([...N,C]);if(!M){d=!0;break}f.delete(M.idx),p.push(M.outcome)}f.size>0&&!a.signal.aborted&&a.abort("timeout");let b=ra(p,s,r),x=new Map;for(let h of p)x.set(h.provider,{provider:h.provider,ok:h.ok,duration_ms:h.duration_ms,result_count:h.results.length,warning:h.warning});let _=X()-n;for(let h of f){let y=ye[h]??"google";x.set(y,Jr(y,_,d?"timeout":"cancelled"))}let k=ye.map(h=>x.get(h)??Jr(h,_,d?"timeout":"not-run")),w=k.filter(h=>!h.ok&&h.warning).map(h=>`${h.provider}: ${h.warning??"unknown"}`);if(b.detailed_results.length>0){let h=b.detailed_results.map(y=>({title:y.title,url:y.url}));return{meta:{ok:!0,duration_ms:Number((X()-n).toFixed(4))},data:{results:h,...o?{debug:{query:r,provider:b.primary_provider,warnings:w,provider_trace:k,detailed_results:b.detailed_results}}:{}},error:null}}return{meta:{ok:!1,duration_ms:Number((X()-n).toFixed(4))},data:null,error:{code:d?"timeout":"provider-unavailable",message:d?"Global timeout budget reached before providers returned results":"No provider returned parseable results"}}}catch(m){return{meta:{ok:!1,duration_ms:Number((X()-n).toFixed(4))},data:null,error:{code:"internal-error",message:m instanceof Error?m.message:String(m)}}}finally{clearTimeout(l)}}var $={readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},ke={readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},at={readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},ca={readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},rs=1024*1024,ce=class extends Error{constructor(t){super(t),this.name="HttpBodyTooLargeError"}};function es(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:{value:e}}function g(e){return typeof e=="string"?e:void 0}function S(e){return typeof e=="number"?e:void 0}function L(e){return typeof e=="boolean"?e:void 0}function ts(e){if(!e||typeof e!="object"||Array.isArray(e))return{exists:!1,stale:!0,reasons:["unknown"]};let t=e,n={exists:t.exists===!0,stale:t.stale===!0,reasons:Array.isArray(t.reasons)?t.reasons:[]},r=Array.isArray(t.grammar_suggestions)?t.grammar_suggestions:[];return r.length>0&&(n.grammar_suggestions=r),n}function lt(e){if(Array.isArray(e)){let t=e.filter(n=>typeof n=="string").join(",");return Qe(t)}return typeof e=="string"?Qe(e):[]}function da(e){return Z.find(n=>n.id===e)?.label??e}function ma(e){if(!e||typeof e!="object"||Array.isArray(e))return 0;let t=e;return(Array.isArray(t.items)?t.items.length:0)+(Array.isArray(t.files)?t.files.length:0)+(Array.isArray(t.symbols)?t.symbols.length:0)+(Array.isArray(t.chunks)?t.chunks.length:0)}function Yt(e,t){if(!t||t.trim()==="")return!0;let n=t.toLowerCase();if(n.includes(e.language.toLowerCase()))return!0;let r=Z.find(s=>s.id===e.parser_id);return r?n.includes(r.id.toLowerCase())?!0:r.aliases.some(s=>n.includes(s.toLowerCase())):!1}async function ut(e,t,n,r){if(ma(n)>0)return n;let o=((await K(e,{state_root:t})).grammar_suggestions??[]).filter(a=>Yt(a,r));return o.length===0?n:{...n,grammar_suggestions:o}}function fa(e){return{content:[{type:"text",text:wt(e)}],isError:!1}}function Kt(e,t){let n=es(t),r=es(n.error),i={ok:!1,error:{code:g(r.code)??"tool-error",message:e}};return{content:[{type:"text",text:wt(i)}],isError:!0}}function pa(e){if(!e||typeof e!="object")return null;let t=e,n=g(t.code);if(n&&n.trim().length>0)return n;let r=g(t.reason);return r&&r.trim().length>0?r:null}function W(e,t){let n=e??process.cwd();return P.configureStatePath(cn(n,t)),n}async function Fe(e){let t=W(e.workspace,e.state_root);return await Gt(t,{state_root:e.state_root,refresh_if_stale:e.refresh_if_stale??!0,strict_query_freshness:!0}),t}var Zt=[{name:"veil_status",title:"Veil Index Status",description:T.veil_status,inputSchema:{workspace:c.string().optional(),state_root:c.string().optional(),reported_skill_version:c.string().optional()},annotations:$,handler:async e=>{let t=g(e.workspace),n=g(e.state_root),r=W(t,n),s=await K(r,{state_root:n,bypass_cache:!0}),i=await it({allow_network:!1,reported_skill_version:g(e.reported_skill_version)});return A("status",{...s,updates:i})}},{name:"veil_update_check",title:"Veil Update Check",description:T.veil_update_check,inputSchema:{workspace:c.string().optional(),state_root:c.string().optional(),reported_skill_version:c.string().optional(),force_refresh:c.boolean().optional(),timeout_ms:c.number().int().positive().max(1e4).optional()},annotations:at,handler:async e=>{W(g(e.workspace),g(e.state_root));let t=await it({reported_skill_version:g(e.reported_skill_version),force_refresh:L(e.force_refresh),timeout_ms:S(e.timeout_ms)});return A("update_check",t)}},{name:"veil_refresh",title:"Veil Refresh Index",description:T.veil_refresh,inputSchema:{workspace:c.string().optional(),mode:c.enum(["full","changed"]).optional(),state_root:c.string().optional()},annotations:ke,handler:async e=>{let t=g(e.workspace),n=g(e.state_root),r=e.mode==="full"?"full":"changed",s=W(t,n),i=await he(s,r,{state_root:n});return A("refresh",{ok:!0,mode:r,manifest:i})}},{name:"veil_build",title:"Veil Build Index",description:T.veil_build,inputSchema:{workspace:c.string().optional(),state_root:c.string().optional()},annotations:ke,handler:async e=>{let t=g(e.workspace),n=g(e.state_root),r=W(t,n);return{ok:!0,mode:"full",manifest:await he(r,"full",{state_root:n})}}},{name:"veil_grammar_list",title:"Veil Grammar List",description:T.veil_grammar_list,inputSchema:{workspace:c.string().optional(),state_root:c.string().optional()},annotations:$,handler:async e=>{let t=g(e.workspace),n=g(e.state_root),r=W(t,n);return{parsers:await Fn(r,n)}}},{name:"veil_grammar_install",title:"Veil Grammar Install",description:T.veil_grammar_install,inputSchema:{workspace:c.string().optional(),state_root:c.string().optional(),parsers:c.array(c.string()).optional()},annotations:ke,handler:async e=>{let t=g(e.workspace),n=g(e.state_root),r=W(t,n),s=await Ve(r,lt(e.parsers),n);return{ok:!0,installed:s.installed,enabled:s.enabled}}},{name:"veil_grammar_remove",title:"Veil Grammar Remove",description:T.veil_grammar_remove,inputSchema:{workspace:c.string().optional(),state_root:c.string().optional(),parsers:c.array(c.string()).optional()},annotations:ke,handler:async e=>{let t=g(e.workspace),n=g(e.state_root),r=W(t,n),s=await Mn(r,lt(e.parsers),n);return{ok:!0,installed:s.installed,enabled:s.enabled}}},{name:"veil_grammar_update",title:"Veil Grammar Update",description:T.veil_grammar_update,inputSchema:{workspace:c.string().optional(),state_root:c.string().optional(),parsers:c.array(c.string()).optional(),all:c.boolean().optional()},annotations:ke,handler:async e=>{let t=g(e.workspace),n=g(e.state_root),r=W(t,n),s=L(e.all)?"all":lt(e.parsers),i=await On(r,s,n);return{ok:!0,updated:i.updated,installed:i.installed}}},{name:"veil_grammar_recommend",title:"Veil Grammar Recommend",description:T.veil_grammar_recommend,inputSchema:{workspace:c.string().optional(),state_root:c.string().optional(),query:c.string().optional(),limit:c.number().int().positive().max(10).optional()},annotations:$,handler:async e=>{let t=g(e.workspace),n=g(e.state_root),r=g(e.query),s=W(t,n),i=await K(s,{state_root:n}),o=Math.max(1,Math.min(S(e.limit)??5,10)),a=(i.grammar_suggestions??[]).filter(l=>Yt(l,r)).slice(0,o).map(l=>{let u=Qe(l.parser_id),d=Pt(u,{install_root:pe(s,n)});return{...l,parser_label:da(l.parser_id),install_plan:d,note:l.reason==="parser-disabled"?"Parser is available but disabled. Installing runtime and enabling parser improves symbol extraction accuracy.":"Parser runtime package is missing. Installing runtime restores symbol extraction accuracy."}});return A("grammar_recommend",{query:r??null,suggestions:a})}},{name:"veil_grammar_runtime_install",title:"Veil Grammar Runtime Install",description:T.veil_grammar_runtime_install,inputSchema:{workspace:c.string().optional(),state_root:c.string().optional(),parsers:c.array(c.string()).optional(),timeout_ms:c.number().int().positive().max(3e5).optional()},annotations:ke,handler:async e=>{let t=g(e.workspace),n=g(e.state_root),r=W(t,n),s=lt(e.parsers),i=await $n(r,s,n,S(e.timeout_ms)),o=await K(r,{state_root:n,bypass_cache:!0}),a=o.grammar_suggestions??[],l={...i,status:ts(o)};return a.length>0&&(l.grammar_suggestions=a),A("grammar_runtime_install",{...l})}},{name:"veil_files",title:"Veil Find Files",description:T.veil_files,inputSchema:{workspace:c.string().optional(),query:c.string(),limit:c.number().int().positive().max(200).optional(),refresh_if_stale:c.boolean().optional(),state_root:c.string().optional()},annotations:$,handler:async e=>{let t=g(e.query)??"",n=g(e.workspace),r=g(e.state_root),s=L(e.refresh_if_stale),i=S(e.limit),o=await Fe({workspace:n,state_root:r,refresh_if_stale:s}),a=await Ce(o,t,_t(i),{state_root:r}),l=await ut(o,r,{items:a},t);return A("files",l,{query:t})}},{name:"veil_symbols",title:"Veil Find Symbols",description:T.veil_symbols,inputSchema:{workspace:c.string().optional(),query:c.string(),limit:c.number().int().positive().max(200).optional(),refresh_if_stale:c.boolean().optional(),state_root:c.string().optional()},annotations:$,handler:async e=>{let t=g(e.query)??"",n=g(e.workspace),r=g(e.state_root),s=L(e.refresh_if_stale),i=S(e.limit),o=await Fe({workspace:n,state_root:r,refresh_if_stale:s}),a=await Ie(o,t,bt(i),{state_root:r}),l=await ut(o,r,{items:a},t);return A("symbols",l,{query:t})}},{name:"veil_search",title:"Veil Search Chunks",description:T.veil_search,inputSchema:{workspace:c.string().optional(),query:c.string(),limit:c.number().int().positive().optional(),content_mode:c.enum(["none","preview","full"]).optional(),include_content:c.boolean().optional(),content_max_chars:c.number().int().positive().optional(),prefer_code:c.boolean().optional(),path_prefix:c.string().optional(),language:c.string().optional(),intent:c.enum(["auto","code","docs","symbols"]).optional(),refresh_if_stale:c.boolean().optional(),state_root:c.string().optional()},annotations:$,handler:async e=>{let t=g(e.query)??"",n=g(e.workspace),r=g(e.state_root),s=L(e.refresh_if_stale),i=await Fe({workspace:n,state_root:r,refresh_if_stale:s}),o=await Ee(i,t,yt(S(e.limit)),{content_mode:e.content_mode==="none"||e.content_mode==="full"||e.content_mode==="preview"?e.content_mode:void 0,include_content:L(e.include_content),content_max_chars:xe(S(e.content_max_chars)),prefer_code:L(e.prefer_code),path_prefix:g(e.path_prefix),language:g(e.language),intent:e.intent==="code"||e.intent==="docs"||e.intent==="symbols"?e.intent:"auto",state_root:r}),a=await ut(i,r,{items:o},t);return A("search",a,{query:t})}},{name:"veil_lookup",title:"Veil Lookup Context",description:T.veil_lookup,inputSchema:{workspace:c.string().optional(),query:c.string(),files_limit:c.number().int().positive().optional(),symbols_limit:c.number().int().positive().optional(),search_limit:c.number().int().positive().optional(),content_mode:c.enum(["none","preview","full"]).optional(),include_content:c.boolean().optional(),content_max_chars:c.number().int().positive().optional(),prefer_code:c.boolean().optional(),path_prefix:c.string().optional(),language:c.string().optional(),intent:c.enum(["auto","code","docs","symbols"]).optional(),response_mode:c.enum(["full","compact"]).optional(),refresh_if_stale:c.boolean().optional(),state_root:c.string().optional()},annotations:$,handler:async e=>{let t=g(e.query)??"",n=g(e.workspace),r=g(e.state_root),s=L(e.refresh_if_stale),i=await Fe({workspace:n,state_root:r,refresh_if_stale:s}),o=await Ir(i,t,{files_limit:fn(S(e.files_limit)),symbols_limit:pn(S(e.symbols_limit)),search_limit:hn(S(e.search_limit)),content_mode:e.content_mode==="none"||e.content_mode==="full"||e.content_mode==="preview"?e.content_mode:void 0,include_content:L(e.include_content),content_max_chars:xe(S(e.content_max_chars)),prefer_code:L(e.prefer_code),path_prefix:g(e.path_prefix),language:g(e.language),intent:e.intent==="code"||e.intent==="docs"||e.intent==="symbols"?e.intent:"auto",response_mode:e.response_mode==="full"?"full":"compact",state_root:r}),a=await ut(i,r,o,t);return A("lookup",a,{query:t})}},{name:"veil_discover",title:"Veil Discover Context",description:T.veil_discover,inputSchema:{workspace:c.string().optional(),query:c.string(),files_limit:c.number().int().positive().optional(),symbols_limit:c.number().int().positive().optional(),search_limit:c.number().int().positive().optional(),content_mode:c.enum(["none","preview","full"]).optional(),include_content:c.boolean().optional(),content_max_chars:c.number().int().positive().optional(),refresh_if_stale:c.boolean().optional(),prefer_code:c.boolean().optional(),path_prefix:c.string().optional(),language:c.string().optional(),intent:c.enum(["auto","code","docs","symbols"]).optional(),state_root:c.string().optional(),reported_skill_version:c.string().optional()},annotations:$,handler:async e=>{let t=g(e.query)??"",n=g(e.workspace),r=g(e.state_root),s=W(n,r),i=await Gt(s,{state_root:r,refresh_if_stale:L(e.refresh_if_stale)??!0,strict_query_freshness:!0}),o=await Cr(s,t,{files_limit:_t(S(e.files_limit)),symbols_limit:bt(S(e.symbols_limit)),search_limit:yt(S(e.search_limit)),content_mode:e.content_mode==="none"||e.content_mode==="full"||e.content_mode==="preview"?e.content_mode:void 0,include_content:L(e.include_content),content_max_chars:xe(S(e.content_max_chars)),prefer_code:L(e.prefer_code),path_prefix:g(e.path_prefix),language:g(e.language),intent:e.intent==="code"||e.intent==="docs"||e.intent==="symbols"?e.intent:"auto",state_root:r}),a=(i.status_after.grammar_suggestions??[]).filter(d=>Yt(d,t)),l=await it({allow_network:!1,reported_skill_version:g(e.reported_skill_version)}),u={status:ts(i.status_after),updates:l,intent:o.intent,files:o.files,symbols:o.symbols,chunks:o.chunks};return a.length>0&&(u.grammar_suggestions=a),A("discover",u,{query:t})}},{name:"veil_chunk",title:"Veil Fetch Chunk",description:T.veil_chunk,inputSchema:{workspace:c.string().optional(),id:c.string(),content_max_chars:c.number().int().positive().optional(),refresh_if_stale:c.boolean().optional(),state_root:c.string().optional()},annotations:$,handler:async e=>{let t=g(e.workspace),n=g(e.state_root),r=await Fe({workspace:t,state_root:n,refresh_if_stale:L(e.refresh_if_stale)??!0}),s=g(e.id)??"",i=await Er(r,s,{state_root:n,include_content:!0,content_max_chars:xe(S(e.content_max_chars))});return A("chunk",{item:i},{query:s})}},{name:"veil_web_search",title:"Veil Web Search",description:T.veil_web_search,inputSchema:{workspace:c.string().optional(),query:c.string(),limit:c.number().int().positive().optional(),timeout_ms:c.number().int().positive().optional(),debug:c.boolean().optional()},annotations:at,handler:async e=>{let t=g(e.query)??"",n=g(e.workspace)??process.cwd();return A("web_search",await Zr(n,{query:t,limit:qe(S(e.limit)),timeout_ms:Be(S(e.timeout_ms)),debug:L(e.debug)}),{query:t})}},{name:"veil_fetch_url",title:"Veil Fetch URL",description:T.veil_fetch_url,inputSchema:{url:c.string(),format:c.enum(["markdown","text","html"]).optional(),timeout_ms:c.number().int().positive().max(2e4).optional(),max_bytes:c.number().int().positive().max(2e6).optional(),include_error_content:c.boolean().optional(),allow_private_network:c.boolean().optional()},annotations:at,handler:async e=>{let t=g(e.url)??"";return A("fetch_url",await wn({url:t,format:e.format==="text"||e.format==="html"||e.format==="markdown"?e.format:void 0,timeout_ms:S(e.timeout_ms),max_bytes:S(e.max_bytes),include_error_content:L(e.include_error_content),allow_private_network:L(e.allow_private_network)}),{query:t})}},{name:"veil_git_status",title:"Veil Git Status",description:T.veil_git_status,inputSchema:{workspace:c.string().optional(),timeout_ms:c.number().int().positive().max(1e4).optional(),include_paths:c.boolean().optional(),paths_limit:c.number().int().positive().max(2e3).optional()},annotations:$,handler:async e=>A("git_status",await Or(g(e.workspace)??process.cwd(),{timeout_ms:S(e.timeout_ms),include_paths:L(e.include_paths),paths_limit:S(e.paths_limit)}))},{name:"veil_git_log",title:"Veil Git Log",description:T.veil_git_log,inputSchema:{workspace:c.string().optional(),limit:c.number().int().positive().max(200).optional(),since:c.string().optional(),author:c.string().optional(),grep:c.string().optional(),timeout_ms:c.number().int().positive().max(12e3).optional()},annotations:$,handler:async e=>A("git_log",await Fr(g(e.workspace)??process.cwd(),{limit:S(e.limit),since:g(e.since),author:g(e.author),grep:g(e.grep),timeout_ms:S(e.timeout_ms)}))},{name:"veil_git_diff",title:"Veil Git Diff",description:T.veil_git_diff,inputSchema:{workspace:c.string().optional(),staged:c.boolean().optional(),path:c.string().optional(),base:c.string().optional(),head:c.string().optional(),name_only:c.boolean().optional(),timeout_ms:c.number().int().positive().max(1e4).optional(),max_bytes:c.number().int().positive().max(5e5).optional()},annotations:$,handler:async e=>A("git_diff",await Dr(g(e.workspace)??process.cwd(),{staged:L(e.staged),path:g(e.path),base:g(e.base),head:g(e.head),name_only:L(e.name_only),timeout_ms:S(e.timeout_ms),max_bytes:S(e.max_bytes)}))},{name:"veil_git_show",title:"Veil Git Show",description:T.veil_git_show,inputSchema:{workspace:c.string().optional(),rev:c.string(),path:c.string().optional(),patch:c.boolean().optional(),timeout_ms:c.number().int().positive().max(12e3).optional(),max_bytes:c.number().int().positive().max(5e5).optional()},annotations:$,handler:async e=>A("git_show",await Ur(g(e.workspace)??process.cwd(),{rev:g(e.rev)??"",path:g(e.path),patch:L(e.patch),timeout_ms:S(e.timeout_ms),max_bytes:S(e.max_bytes)}))},{name:"veil_gh_lookup",title:"Veil GitHub Lookup",description:T.veil_gh_lookup,inputSchema:{workspace:c.string().optional(),repo:c.string(),kind:c.enum(["repo_context","issues","prs","checks"]),query:c.string().optional(),limit:c.number().int().positive().max(50).optional(),timeout_ms:c.number().int().positive().max(2e4).optional(),temp_root:c.string().optional(),state_root:c.string().optional()},annotations:at,handler:async e=>{let t=g(e.workspace),n=g(e.state_root),r=W(t,n),s=g(e.repo)??"",i=e.kind==="issues"||e.kind==="prs"||e.kind==="checks"?e.kind:"repo_context",o=g(e.query);return A("gh_lookup",await Wr(r,{repo:s,kind:i,query:o,limit:S(e.limit),timeout_ms:S(e.timeout_ms),temp_root:g(e.temp_root),state_root:n}),{query:o??s})}},{name:"veil_diagnostics",title:"Veil Diagnostics",description:T.veil_diagnostics,inputSchema:{workspace:c.string().optional(),state_root:c.string().optional(),reset:c.boolean().optional()},annotations:ca,handler:e=>{W(g(e.workspace),g(e.state_root)),L(e.reset)&&P.reset();let t=P.getDiagnostics();return A("diagnostics",t)}}];async function ha(e,t){try{let n=await e.handler(t),r=gt(n);return r?Kt(r,n):fa(n)}catch(n){let r=pa(n),s=n instanceof Error?n.message:String(n);return r?Kt(s,{error:{code:r}}):Kt(s)}}function tn(){let e=new aa({name:"veil-mcp-server",version:jt});for(let t of Zt)e.registerTool(t.name,{title:t.title,description:t.description,inputSchema:t.inputSchema,annotations:t.annotations},async n=>ha(t,n));return e}function De(e){let t=e.trim().toLowerCase();return t?t.startsWith("[")&&t.endsWith("]")?t.slice(1,-1):t:""}function ga(e){let t=e?.trim()??"";if(!t)return"";if(t.startsWith("[")){let r=t.indexOf("]");return De(r!==-1?t.slice(0,r+1):t)}let n=t.split(":")[0]??"";return De(n)}function Xt(e){return e==="localhost"||e==="127.0.0.1"||e==="::1"}function _a(e){if(!e)return"";try{return De(new URL(e).hostname)}catch{return""}}function ba(e,t,n){if(n)return null;let r=ga(e.headers.host);if(!r||!Xt(r))return"Request host is not allowed for local-only mode";let s=_a(g(e.headers.origin));return s&&!Xt(s)?"Origin is not allowed for local-only mode":Xt(De(t))?null:"Server host must be loopback unless allow_remote is true"}async function ss(e,t=rs){if(e.method!=="POST")return;let n=[],r=0;for await(let i of e){if(typeof i=="string"){let a=Buffer.from(i);if(r+=a.byteLength,r>t)throw new ce(`Request body exceeds ${String(t)} bytes maximum`);n.push(a);continue}if(Buffer.isBuffer(i)){if(r+=i.byteLength,r>t)throw new ce(`Request body exceeds ${String(t)} bytes maximum`);n.push(i);continue}if(i instanceof Uint8Array){let a=Buffer.from(i);if(r+=a.byteLength,r>t)throw new ce(`Request body exceeds ${String(t)} bytes maximum`);n.push(a);continue}let o=Buffer.from(String(i));if(r+=o.byteLength,r>t)throw new ce(`Request body exceeds ${String(t)} bytes maximum`);n.push(o)}if(n.length===0)return;let s=Buffer.concat(n).toString("utf-8").trim();if(s)try{return JSON.parse(s)}catch{return}}var ns=!1,Jt=null;async function nn(){ns||(Jt??=(async()=>{let e=tn(),t=new la;await e.connect(t),ns=!0})().catch(e=>{throw Jt=null,e}),await Jt)}var en=!1,ae=null,dt=null,mt=null,ft=null;async function ya(){if(ae)try{await ae}catch{}let e=dt,t=mt,n=ft;ae=null,en=!1,dt=null,mt=null,ft=null,e&&await new Promise((r,s)=>{e.close(i=>{if(i){s(i);return}r()})}),t&&await t.close(),n&&await n.close()}async function is(e={}){if(en)return;if(ae){await ae;return}let t=e.host?.trim()??"127.0.0.1",n=Number.isFinite(e.port)?Number(e.port):8765,r=e.path?.trim()??"/mcp",s=e.allow_remote===!0,i=tn(),o=new ua({sessionIdGenerator:void 0,enableJsonResponse:!0});await i.connect(o),mt=o,ft=i;let a=ia(async(l,u)=>{try{if((l.url??"")!==r){u.statusCode=404,u.end("Not Found");return}if(l.method!=="GET"&&l.method!=="POST"&&l.method!=="DELETE"){u.statusCode=405,u.end("Method Not Allowed");return}let d=ba(l,t,s);if(d){u.statusCode=403,u.end(d);return}let m=await ss(l);await o.handleRequest(l,u,m)}catch(d){if(d instanceof ce){u.headersSent||(u.statusCode=413,u.end(d.message));return}if(!u.headersSent){u.statusCode=500;let m=d instanceof Error?d.message:String(d);u.end(m)}}});dt=a,ae=new Promise((l,u)=>{a.on("error",u),a.listen(n,t,()=>{en=!0,l()})});try{await ae}catch(l){throw dt=null,mt=null,ft=null,ae=null,await o.close(),await i.close(),l}}var uu={createMcpServer:tn,toolNames:Zt.map(e=>e.name),toolDefinitions:Zt,responseErrorMessage:gt,parseRequestBody:ss,maxHttpRequestBodyBytes:rs,stopHttpServer:ya},ka=import.meta,wa=`${ct}src${ct}server.ts`,xa=oa(import.meta.url).endsWith(wa),va=process.argv.some(e=>e.endsWith(`${ct}src${ct}server.ts`)||e==="src/server.ts");xa&&(ka.main===!0||va)&&await nn();async function as(e=process.argv){if(ls(e)){await is();return}await nn()}function ls(e){return process.env.VEIL_HTTP==="1"?!0:e.includes("--http")}async function us(e=()=>as()){try{await e()}catch(t){process.stderr.write(String(t)+`
54
+ `),process.exitCode=1}}function cs(e){let t=import.meta;if(typeof t.main=="boolean")return t.main;let n=process.argv[1];return n?os(n)===os(Sa(e)):!1}var pu={main:as,runMain:us,isMainModule:cs,shouldStartHttp:ls},Ra=cs(import.meta.url);Ra&&us();export{pu as __internalBin};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ushiradineth/veil",
3
- "version": "0.6.1",
3
+ "version": "0.7.1",
4
4
  "private": false,
5
5
  "homepage": "https://github.com/ushiradineth/veil",
6
6
  "bugs": {
@@ -17,6 +17,7 @@
17
17
  "files": [
18
18
  "bin",
19
19
  "dist",
20
+ "skills/SKILL.md",
20
21
  "README.md",
21
22
  "LICENSE"
22
23
  ],
@@ -0,0 +1,83 @@
1
+ ---
2
+ name: veil
3
+ version: 2.2.3
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
+ ---
6
+
7
+ # Veil Skill
8
+
9
+ ## Trigger Conditions
10
+
11
+ Use this skill when the task asks for any of these outcomes:
12
+
13
+ - locate files, symbols, or relevant code paths quickly
14
+ - inspect branch status, commit history, or diffs before changes
15
+ - gather external references and summarize source pages
16
+ - inspect GitHub repository, issue, PR, or checks context
17
+ - detect unsupported or disabled parser coverage and guide grammar installation via approval loop
18
+
19
+ Treat intent phrases like `find where`, `investigate`, `compare`, `summarize from web`, and `check PR` as strong triggers.
20
+
21
+ Prefer Veil MCP tools when supported so outputs stay structured and follow-on steps are cheaper.
22
+
23
+ Veil MCP responses are compact TOON payloads. Guidance fields appear only on low-confidence or missing-context responses.
24
+
25
+ ## Your Task
26
+
27
+ 1. Route discovery and context gathering through Veil MCP tools first.
28
+ 2. Keep calls minimal: one broad retrieval tool, then one narrowing tool.
29
+ 3. Add git, web, or GitHub branches only when they change the answer.
30
+ 4. Return concise findings with file paths or URLs, then continue implementation.
31
+
32
+ ## Retrieval Workflow
33
+
34
+ Retrieval query tools refresh index state on stale or dirty worktrees by default.
35
+
36
+ 1. Start broad once with `veil_discover`.
37
+ 2. Narrow once with `veil_lookup` or one targeted call: `veil_files|veil_symbols|veil_search`.
38
+ 3. Fetch full code only when needed with `veil_chunk` using chunk ids from prior results.
39
+ 4. Add context branches only as needed: git, web, or GitHub.
40
+ 5. Return concise findings with paths or URLs, then continue implementation.
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
+
48
+ Prefer required args only by default. Add optional args only when you need behavior different from defaults.
49
+ Prefer compact defaults (`veil_lookup` compact reasons, git path lists off unless asked, bounded `veil_fetch_url` output).
50
+
51
+ ## Intent Branches
52
+
53
+ - Local retrieval: `veil_discover`, `veil_lookup`, `veil_files`, `veil_symbols`, `veil_search`, `veil_chunk`.
54
+ - Git context: `veil_git_status`, `veil_git_log`, `veil_git_diff`, `veil_git_show`.
55
+ - Web context: `veil_web_search`, then `veil_fetch_url`.
56
+ - GitHub context: `veil_gh_lookup`.
57
+ - Setup and operations (non-retrieval): `veil_status`, `veil_update_check`, `veil_build`, `veil_grammar_list|install|remove|update`, `veil_diagnostics` with `reset`.
58
+ - Grammar improvement loop: `veil_grammar_recommend` then (after explicit user approval) `veil_grammar_runtime_install`.
59
+ - Grammar runtime installs are workspace and state-root scoped (`<state_root>/grammars-runtime`) and reused by
60
+ later MCP server instances targeting the same workspace.
61
+ - For known installable parsers, treat runtime fallback as strict by default. Only rely on fallback paths when
62
+ install is recorded as failed or no known runtime package mapping exists.
63
+
64
+ ## Anti-pattern Corrections
65
+
66
+ - Shell-first discovery with ad hoc tools -> start with `veil_discover`, then narrow once.
67
+ - Repeating broad retrieval calls -> rewrite query with entity + intent, then run one focused follow-up.
68
+ - Asking for full code in broad calls -> keep compact defaults and fetch only selected chunk ids with `veil_chunk`.
69
+ - Jumping to `veil_fetch_url` without candidates -> use `veil_web_search` first.
70
+ - Raw `git` reads for normal context -> use `veil_git_status|veil_git_log|veil_git_diff|veil_git_show`.
71
+ - Treating setup helpers as retrieval gaps -> keep setup/runtime operations separate from retrieval behavior.
72
+ - Auto-installing parser runtimes during retrieval -> never auto-install, recommend first and require explicit approval before `veil_grammar_runtime_install`.
73
+
74
+ ## When Not to Use
75
+
76
+ - One-file local reads where path is already known and no retrieval is needed.
77
+ - Pure write/edit steps that do not require lookup, git context, web context, or GitHub context.
78
+
79
+ ## Quick Examples
80
+
81
+ - `Find implementation points for a feature request` -> `veil_discover` then `veil_lookup`.
82
+ - `Check what changed on this branch before editing` -> `veil_git_status`, `veil_git_log`, then `veil_git_diff`.
83
+ - `Summarize dependency docs with source links` -> `veil_web_search`, then `veil_fetch_url`.