@engineeros/connector 1.59.2 → 1.59.4
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.
|
@@ -680,7 +680,7 @@ ${t.map(n=>`- ${n}`).join(`
|
|
|
680
680
|
`)}function dS(e,t,n=[]){let r=new Map((t?.capabilities??[]).map(i=>[i.id.toLowerCase(),i])),o=[],s=new Set(n);for(let i of String(e??"").split(/^##\s*Candidate\s*$/m).slice(1)){let a=Yl(i,"Capability")?.match(new RegExp(hh,"i"))?.[0],c=a?r.get(a.toLowerCase()):null,l=Yl(i,"Source")?.toLowerCase(),u=Yl(i,"Reason");if(!c||!iS.includes(l)||!u)continue;let p=`${l}:${c.id}`;if(!s.has(p)&&(s.add(p),o.push({source:l,candidate_key:p,capability_id:c.id,capability_name:c.name,reason:u.slice(0,MF),evidence:Yl(i,"Evidence")?.slice(0,PF)??null}),o.length===fh))break}return o}function pS(e,t,{version:n="development",at:r=new Date}={}){return{type:RF,scanned_at:r.toISOString(),connector_version:String(n).slice(0,50),evidence_fingerprint:e.fingerprint,candidates:t.slice(0,fh)}}async function BF(e){let t=Qo.join(e,".engineeros","design","projects"),r=(await sS(t).catch(()=>[])).find(i=>FF.test(i))??null;if(!r)return{projectId:null,capabilities:[]};let o=await ph(Qo.join(t,r,"INDEX.md"),"utf8").catch(()=>""),s=[];for(let i of o.split(/\r?\n/)){let a=UF.exec(i.trim());if(a&&(s.push({id:a[2].toLowerCase(),name:a[1].replace(/\\([[\]])/g,"$1").slice(0,LF),status:(a[3]?.split(";").pop()??"").trim().slice(0,40)||"unknown"}),s.length===CF))break}return{projectId:r,capabilities:s}}async function GF(e){let t=Qo.join(e,".engineeros","assessment"),n=(await ph(Qo.join(t,"assessment.md"),"utf8").catch(()=>"")).trim().slice(0,jF),r=Qo.join(t,"sections"),o=(await sS(r).catch(()=>[])).filter(i=>i.endsWith(".md")).sort().slice(0,OF),s=[];for(let i of o){let a=await ph(Qo.join(r,i),"utf8").catch(()=>"");a.trim()&&s.push({name:i,excerpt:a.trim().slice(0,NF)})}return{document:n,sections:s}}function HF(e){let t=[e.document,...e.sections.map(n=>`### ${n.name}
|
|
681
681
|
${n.excerpt}`)].filter(Boolean);return t.length?t.join(`
|
|
682
682
|
|
|
683
|
-
`):"No local assessment has been recorded yet."}function Yl(e,t){return new RegExp(`^${t}:\\s*(.+)$`,"mi").exec(e)?.[1]?.trim()||null}function WF({projectId:e,capabilities:t,assessment:n,failedRuns:r}){return TF("sha256").update(JSON.stringify({projectId:e,capabilities:t.map(o=>[o.id,o.status]),assessment:[n.document,...n.sections.map(o=>o.excerpt)],failedRuns:r.map(o=>[o.run_id,o.status])})).digest("hex")}import{createHash as im,randomUUID as mG}from"node:crypto";import{isUtf8 as gG}from"node:buffer";import{realpathSync as wG}from"node:fs";import{cp as yG,lstat as gm,mkdir as Eu,readFile as _G,readdir as vG,rm as Tu,stat as wm,utimes as bG,writeFile as bE}from"node:fs/promises";import De from"node:path";import{promisify as KE}from"node:util";import{deflateRaw as SG,gzip as kG}from"node:zlib";I();import Lh from"node:path";import{Readable as YU,Writable as ZU}from"node:stream";import*as Ht from"@agentclientprotocol/sdk";I();import{existsSync as hS,readdirSync as qF,readFileSync as mS}from"node:fs";import fS from"node:os";import ir from"node:path";var VF=/^\d+\.\d+\.\d+(?:[-+][0-9A-Za-z.-]+)?$/,XF=/\.(?:c|m)?js$/i,mh=new Map;function gS(e,t=[],{env:n=process.env,platform:r=process.platform}={}){let o=JSON.stringify([e,t,yS(n,r)]),s=mh.get(o);if(s&&hS(s.args[0]))return s;let i=JF(e,t,n,r);return i?mh.set(o,i):mh.delete(o),i}function JF(e,t,n,r){if(ir.basename(String(e||"")).toLowerCase().replace(/\.(?:cmd|exe|bat)$/,"")!=="npx"||!Array.isArray(t))return null;let s=[...t];for(;s.length&&/^(?:--yes|-y)$/.test(s[0]);)s.shift();let i=KF(s.shift());if(!i||!VF.test(i.version))return null;let a=yS(n,r),c;try{c=qF(ir.join(a,"_npx"))}catch{return null}for(let l of c){let u=ir.join(a,"_npx",l,"node_modules"),p=ir.resolve(u,...i.name.split("/")),d=YF(ir.join(p,"package.json"));if(d?.name!==i.name||d.version!==i.version)continue;let f=ZF(d);if(!f)return null;let h=ir.resolve(p,f);return!h.startsWith(p)||!hS(h)||!QF(h)?null:{command:process.execPath,args:[h,...s],binDirectory:ir.join(u,".bin")}}return null}function wS(e,t){if(!t?.binDirectory)return e;let n=Object.keys(e).find(o=>o.toUpperCase()==="PATH")||"PATH",r=e[n];return{...e,[n]:r?`${t.binDirectory}${ir.delimiter}${r}`:t.binDirectory}}function yS(e,t){return e.npm_config_cache?e.npm_config_cache:t==="win32"?ir.join(e.LOCALAPPDATA||ir.join(fS.homedir(),"AppData","Local"),"npm-cache"):ir.join(fS.homedir(),".npm")}function KF(e){let t=String(e||"").trim();if(!t||t.startsWith("-"))return null;let n=t.lastIndexOf("@");return n<=0?null:{name:t.slice(0,n),version:t.slice(n+1)}}function YF(e){try{return JSON.parse(mS(e,"utf8"))}catch{return null}}function ZF(e){if(typeof e.bin=="string")return e.bin;if(!e.bin||typeof e.bin!="object")return null;let t=Object.entries(e.bin),n=e.name.split("/").pop();return(t.find(([r])=>r===n)||(t.length===1?t[0]:null))?.[1]??null}function QF(e){if(XF.test(e))return!0;try{return/^#!.*\bnode\b/.test(mS(e,"utf8").slice(0,200))}catch{return!1}}Yc();I();import{open as eU,readdir as tU,stat as nU}from"node:fs/promises";import rU from"node:os";import gh from"node:path";var oU=/usage limit|quota|insufficient (?:credit|balance|funds)|credit balance|billing|payment required|subscribe to/i,sU=15e3,iU=1<<20;function wh(e=process.env){return gh.join(e.XDG_DATA_HOME||gh.join(rU.homedir(),".local","share"),"opencode","log")}async function _S(e){let t=(await tU(e).catch(()=>[])).filter(r=>r.endsWith(".log"));return(await Promise.all(t.map(async r=>{let o=gh.join(e,r),s=await nU(o).catch(()=>null);return s?{file:o,size:s.size,changed:s.mtimeMs}:null}))).filter(Boolean).sort((r,o)=>o.changed-r.changed)[0]??null}async function vS(e,{directory:t=wh(),intervalMs:n=sU}={}){let r=await _S(t),o=r?.size??0,s="",i,a=new Promise((d,f)=>{i=f}),c=String(e).replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),l=new RegExp(`level=ERROR\\b.*\\bsession\\.id=${c}\\b.*\\berror\\.error="([^"]*)"`),u=async()=>{let d=await _S(t);if(!d||((d.file!==r?.file||d.size<o)&&(o=0,s=""),r=d,d.size===o))return;let f=Math.max(o,d.size-iU),h=await eU(d.file,"r"),m;try{let _=Buffer.alloc(d.size-f);await h.read(_,0,_.length,f),m=_.toString("utf8")}finally{await h.close()}o=d.size;let g=`${s}${m}`.split(/\r?\n/);s=g.pop()??"";for(let _ of g){let S=l.exec(_)?.[1]?.replace(/^AI_\w+Error:\s*/,"");if(S&&oU.test(S)){clearInterval(p),i(Object.assign(new Error(`OpenCode's model provider refused the request: ${S}`),{refused:!0}));return}}},p=setInterval(()=>{u().catch(()=>{})},n);return p.unref?.(),{refused:a,stop:()=>clearInterval(p)}}I();kt();import{createHash as LS}from"node:crypto";import{lstat as DS,mkdir as FS,mkdtemp as IU,open as US,readdir as jU,rename as NU,rm as eu,unlink as MU,writeFile as PS}from"node:fs/promises";import Ct from"node:path";import{z as ce}from"zod";I();import{z as Rt}from"zod";var aU=Rt.enum(["discovery","research","implementation","verification","handover"]),cU=Rt.object({id:Rt.string().regex(/^[a-z][a-z0-9-]{0,63}$/),name:Rt.string().trim().min(1).max(80),provider:Rt.string().trim().min(1).max(80),category:Rt.enum(["code-intelligence","design","work-management","source-control","documentation","web-research","api-development","browser-testing","quality-security","data","infrastructure","observability","development-environment"]),integration:Rt.enum(["mcp","cli","skill"]),provenance:Rt.enum(["official-provider","open-source-project"]),source:Rt.string().url().max(500).refine(e=>{let t=new URL(e);return t.protocol==="https:"&&!t.username&&!t.password},"Use a credential-free HTTPS source URL."),selection_group:Rt.string().regex(/^[a-z][a-z0-9-]{0,63}$/),profiles:Rt.array(aU).min(1).max(5),activation:Rt.string().trim().min(1).max(180),default_policy:Rt.enum(["read-only","approval-for-writes","deterministic-gate"]),setup:Rt.object({kind:Rt.enum(["automatic","local-prerequisite","external-auth","provider-configuration"]),summary:Rt.string().trim().min(1).max(300),commands:Rt.array(Rt.object({label:Rt.string().trim().min(1).max(80),command:Rt.string().trim().min(1).max(300)}).strict()).max(4)}).strict()}).strict(),lU=[["codegraph","CodeGraph","CodeGraph","code-intelligence","mcp","open-source-project","https://github.com/codegraph-ai/CodeGraph","code-intelligence",["discovery","implementation","verification"],"Use for brownfield symbol, dependency and call-path discovery when a fresh index exists.","read-only"],["serena","Serena","Oraios","code-intelligence","mcp","open-source-project","https://github.com/oraios/serena","code-intelligence",["discovery","implementation"],"Evaluate as an alternative to CodeGraph for semantic symbol navigation and refactoring.","approval-for-writes"],["jetbrains","JetBrains IDE MCP","JetBrains","code-intelligence","mcp","official-provider","https://www.jetbrains.com/help/rider/mcp-server.html","code-intelligence",["discovery","implementation","verification"],"Use when a supported JetBrains IDE is running and its project index is ready.","approval-for-writes"],["ast-grep","ast-grep","ast-grep","code-intelligence","cli","open-source-project","https://github.com/ast-grep/ast-grep","structural-analysis",["discovery","implementation","verification"],"Use for deterministic structural search, repository rules and approved codemods.","approval-for-writes"],["figma","Figma","Figma","design","mcp","official-provider","https://help.figma.com/hc/en-us/articles/32132100833559-Guide-to-the-Figma-MCP-server","design-system",["discovery","implementation","verification"],"Use for UI work when the Goal cites a Figma file, node or project design system.","approval-for-writes"],["storybook","Storybook","Storybook","design","mcp","open-source-project","https://github.com/storybookjs/storybook","component-catalog",["discovery","implementation","verification"],"Use when the repository contains a Storybook configuration or component stories.","read-only"],["miro","Miro","Miro","design","mcp","official-provider","https://developers.miro.com/docs/miro-mcp","diagramming",["discovery","research","handover"],"Use when a Goal cites a Miro board or requests an approved planning diagram.","approval-for-writes"],["lucid","Lucid","Lucid","design","mcp","official-provider","https://help.lucid.co/hc/en-us/articles/42578801807508-Integrate-Lucid-with-AI-tools-using-the-Lucid-MCP-server","diagramming",["discovery","research","handover"],"Use when a Goal cites a Lucid document or requests an approved architecture diagram.","approval-for-writes"],["linear","Linear","Linear","work-management","mcp","official-provider","https://linear.app/docs/mcp","work-tracker",["discovery","implementation","handover"],"Use only when Linear is the project's configured authoritative external tracker.","approval-for-writes"],["monday","monday.com","monday.com","work-management","mcp","official-provider","https://github.com/mondaycom/mcp","work-tracker",["discovery","implementation","handover"],"Use only when monday.com is the project's configured authoritative external tracker.","approval-for-writes"],["atlassian-rovo","Atlassian Rovo","Atlassian","work-management","mcp","official-provider","https://developer.atlassian.com/cloud/rovo-mcp/","work-tracker",["discovery","research","implementation","handover"],"Use for Jira, Confluence or Bitbucket projects after the Atlassian site is selected.","approval-for-writes"],["youtrack","YouTrack","JetBrains","work-management","mcp","official-provider","https://www.jetbrains.com/help/youtrack/devportal/ai-tools.html","work-tracker",["discovery","implementation","handover"],"Use only when YouTrack is the project's configured authoritative external tracker.","approval-for-writes"],["notion","Notion","Notion","documentation","mcp","official-provider","https://github.com/makenotion/notion-mcp-server","knowledge-base",["discovery","research","handover"],"Use when approved Notion pages contain specifications, decisions or runbooks for the Goal.","approval-for-writes"],["slack","Slack","Slack","documentation","mcp","official-provider","https://docs.slack.dev/ai/slack-mcp-server","team-communication",["discovery","research","handover"],"Use to retrieve cited team decisions or publish an explicitly approved delivery update.","approval-for-writes"],["github","GitHub","GitHub","source-control","mcp","official-provider","https://github.com/github/github-mcp-server","source-control",["discovery","implementation","verification","handover"],"Use when the configured repository remote is hosted on GitHub.","approval-for-writes"],["gitlab","GitLab","GitLab","source-control","mcp","official-provider","https://docs.gitlab.com/user/model_context_protocol/mcp_server/","source-control",["discovery","implementation","verification","handover"],"Use when the configured repository remote is hosted on GitLab.","approval-for-writes"],["context7","Context7","Upstash","documentation","mcp","official-provider","https://github.com/upstash/context7","library-documentation",["research","implementation","verification"],"Use for current version-specific framework and library documentation.","read-only"],["postman","Postman","Postman","api-development","mcp","official-provider","https://learning.postman.com/docs/developer/postman-api/postman-mcp-server/overview","api-workspace",["discovery","implementation","verification"],"Use the minimal or code toolset when a Goal references Postman or an API collection.","approval-for-writes"],["exa","Exa","Exa","web-research","mcp","official-provider","https://github.com/exa-labs/exa-mcp-server","web-research",["research"],"Select as the single web research provider for technical and code research.","read-only"],["tavily","Tavily","Tavily","web-research","mcp","official-provider","https://github.com/tavily-ai/tavily-mcp","web-research",["research"],"Select as an alternative single provider for search, extraction, mapping and crawling.","read-only"],["firecrawl","Firecrawl","Firecrawl","web-research","mcp","official-provider","https://github.com/firecrawl/firecrawl-mcp-server","web-extraction",["research"],"Use on demand for approved site extraction or crawling when ordinary fetch cannot read a source.","read-only"],["perplexity","Perplexity","Perplexity","web-research","mcp","official-provider","https://github.com/perplexityai/modelcontextprotocol","web-research",["research"],"Select as an alternative single search-backed research provider.","read-only"],["playwright","Playwright","Microsoft","browser-testing","mcp","official-provider","https://github.com/microsoft/playwright-mcp","browser-automation",["implementation","verification"],"Use for browser journeys and UI acceptance checks against approved test hosts.","approval-for-writes"],["chrome-devtools","Chrome DevTools","Google","browser-testing","mcp","official-provider","https://github.com/ChromeDevTools/chrome-devtools-mcp","browser-diagnostics",["implementation","verification"],"Use for targeted console, network and performance diagnosis rather than routine acceptance.","approval-for-writes"],["browserstack","BrowserStack","BrowserStack","browser-testing","mcp","official-provider","https://github.com/browserstack/mcp-server","device-testing",["verification"],"Use when acceptance requires real devices or a cross-browser matrix.","approval-for-writes"],["semgrep","Semgrep","Semgrep","quality-security","cli","official-provider","https://github.com/semgrep/semgrep","static-security",["implementation","verification"],"Run deterministic project security rules; use its MCP layer only to investigate findings.","deterministic-gate"],["sonarqube","SonarQube","SonarSource","quality-security","mcp","official-provider","https://github.com/SonarSource/sonarqube-mcp-server","quality-platform",["implementation","verification"],"Use when the project is already connected to SonarQube or SonarQube Cloud.","read-only"],["snyk","Snyk","Snyk","quality-security","mcp","official-provider","https://github.com/snyk/studio-mcp","security-platform",["implementation","verification"],"Use when the project already has Snyk policy or organization configuration.","read-only"],["gitleaks","Gitleaks","Gitleaks","quality-security","cli","open-source-project","https://github.com/gitleaks/gitleaks","secret-scanning",["implementation","verification"],"Run as a deterministic secret scan before final handover.","deterministic-gate"],["trivy","Trivy","Aqua Security","quality-security","cli","official-provider","https://github.com/aquasecurity/trivy","supply-chain-security",["implementation","verification"],"Run relevant repository, dependency, image and infrastructure scans deterministically.","deterministic-gate"],["postgres","PostgreSQL MCP","Microsoft","data","mcp","official-provider","https://github.com/microsoft/postgres-mcp","database",["discovery","implementation","verification"],"Use only with a least-privileged read-only development or test database role.","read-only"],["supabase","Supabase","Supabase","data","mcp","official-provider","https://github.com/supabase/mcp","database",["discovery","implementation","verification"],"Use a project-scoped read-only connection when Supabase configuration is detected.","approval-for-writes"],["terraform","Terraform","HashiCorp","infrastructure","mcp","official-provider","https://github.com/hashicorp/terraform-mcp-server","infrastructure-as-code",["research","implementation","verification"],"Use when Terraform files or an approved HCP Terraform workspace are present.","approval-for-writes"],["aws","AWS MCP Servers","Amazon Web Services","infrastructure","mcp","official-provider","https://github.com/awslabs/mcp","cloud-provider",["research","implementation","verification","handover"],"Select only service-specific AWS servers evidenced by the repository and assignment.","approval-for-writes"],["azure","Azure MCP","Microsoft","infrastructure","mcp","official-provider","https://github.com/microsoft/mcp","cloud-provider",["research","implementation","verification","handover"],"Use only when Azure configuration and an approved subscription scope are present.","approval-for-writes"],["cloudflare","Cloudflare","Cloudflare","infrastructure","mcp","official-provider","https://github.com/cloudflare/mcp","cloud-provider",["research","implementation","verification","handover"],"Use only for Cloudflare projects with narrowly selected account permissions.","approval-for-writes"],["vercel","Vercel","Vercel","infrastructure","mcp","official-provider","https://vercel.com/docs/agent-resources/vercel-mcp","cloud-provider",["research","implementation","verification","handover"],"Use only when the repository is linked to an approved Vercel project.","approval-for-writes"],["sentry","Sentry","Sentry","observability","mcp","official-provider","https://github.com/getsentry/sentry-mcp","observability",["discovery","verification"],"Use for read-only error, trace and issue investigation in Sentry-backed projects.","read-only"],["grafana","Grafana","Grafana Labs","observability","mcp","official-provider","https://github.com/grafana/mcp-grafana","observability",["discovery","verification"],"Use for read-only metrics, logs, traces, dashboards and alert investigation.","read-only"],["datadog","Datadog","Datadog","observability","mcp","official-provider","https://docs.datadoghq.com/mcp_server/","observability",["discovery","verification"],"Use only required Datadog toolsets under existing RBAC and data-access controls.","read-only"],["pagerduty","PagerDuty","PagerDuty","observability","mcp","official-provider","https://support.pagerduty.com/main/docs/pagerduty-mcp-server","incident-management",["discovery","verification","handover"],"Use the hosted server for incident context; incident changes require explicit approval.","approval-for-writes"],["renovate","Renovate","Mend","development-environment","cli","official-provider","https://github.com/renovatebot/renovate","dependency-maintenance",["implementation","verification"],"Run as a scheduled dependency-maintenance workflow, separate from Goal execution.","approval-for-writes"],["devcontainers","Dev Container CLI","Dev Containers","development-environment","cli","open-source-project","https://github.com/devcontainers/cli","development-environment",["implementation","verification"],"Use as a reproducible execution substrate when a dev container definition exists.","deterministic-gate"],["docker-mcp-gateway","Docker MCP Gateway","Docker","development-environment","cli","official-provider","https://github.com/docker/mcp-gateway","mcp-runtime",["discovery","research","implementation","verification","handover"],"Evaluate as the isolated runtime for admitted local MCP servers, not as policy authority.","deterministic-gate"]],uU=new Set(["codegraph","ast-grep","figma","linear","context7","playwright","chrome-devtools","devcontainers"]),yh={serena:["Install Serena with uv","uv tool install -p 3.13 serena-agent"],jetbrains:["Enable the IDE MCP server","Open Settings > Tools > MCP Server in the running JetBrains IDE and choose Enable"],storybook:["Initialize Storybook in this repository","npx storybook@latest init"],semgrep:["Install Semgrep","python -m pip install semgrep"],gitleaks:["Install Gitleaks on Windows","winget install Gitleaks.Gitleaks"],trivy:["Install Trivy on Windows","winget install AquaSecurity.Trivy"],renovate:["Install Renovate","npm install --global renovate"],"docker-mcp-gateway":["Check Docker MCP support","docker mcp --help"]},_h={github:["Sign in to GitHub","gh auth login"],gitlab:["Sign in to GitLab","glab auth login"],snyk:["Authenticate Snyk","snyk auth"],aws:["Sign in with AWS SSO","aws sso login"],azure:["Sign in to Azure","az login"],cloudflare:["Sign in to Cloudflare","wrangler login"],vercel:["Sign in to Vercel","vercel login"],supabase:["Sign in to Supabase","supabase login"]};function dU(e,t){return uU.has(e)?{kind:"automatic",summary:`Detect, install when needed, and register ${t} on the connected machine.`,commands:[]}:yh[e]?{kind:"local-prerequisite",summary:`${t} requires local software or an application setting before it can be registered.`,commands:[{label:yh[e][0],command:yh[e][1]}]}:_h[e]?{kind:"external-auth",summary:"Authenticate the vendor CLI locally, then check setup again. Credentials remain on this machine.",commands:[{label:_h[e][0],command:_h[e][1]}]}:{kind:"provider-configuration",summary:`${t} requires provider-specific account, project, endpoint, or credential configuration. Follow the provider guide, then check setup again.`,commands:[]}}function pU(e){let[t,n,r,o,s,i,a,c,l,u,p]=e;return cU.parse({id:t,name:n,provider:r,category:o,integration:s,provenance:i,source:a,selection_group:c,profiles:l,activation:u,default_policy:p,setup:dU(t,n)})}var Fs=Object.freeze(lU.map(pU));if(new Set(Fs.map(e=>e.id)).size!==Fs.length)throw new Error("Curated tool catalog IDs must be unique.");I();var bS={name:"engineeros-managed-codegraph",version:"1.0.0",lockfileVersion:3,requires:!0,packages:{"":{name:"engineeros-managed-codegraph",version:"1.0.0",dependencies:{"@astudioplus/codegraph-mcp":"0.21.0"}},"node_modules/@astudioplus/codegraph-mcp":{version:"0.21.0",resolved:"https://registry.npmjs.org/@astudioplus/codegraph-mcp/-/codegraph-mcp-0.21.0.tgz",integrity:"sha512-9F43S5fL+pQ2pJTVoLB+PvOg7UglIQaSZdHEA6HZ7q4bRKVouskDnH5J4RWKVw6SlDXDxl8ijLdR5+YGF6l6dg==",cpu:["x64","arm64"],hasInstallScript:!0,license:"Apache-2.0",os:["darwin","linux","win32"],dependencies:{"posthog-node":"^4.18.0"},bin:{"codegraph-daemon":"bin/codegraph-daemon.js","codegraph-mcp":"bin/codegraph-mcp.js","codegraph-mcp-fetch-engine":"bin/fetch-engine-cli.js","codegraph-mcp-install-hooks":"bin/install-hooks.js"},engines:{node:">=18.0.0"}},"node_modules/agent-base":{version:"6.0.2",resolved:"https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",integrity:"sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",license:"MIT",dependencies:{debug:"4"},engines:{node:">= 6.0.0"}},"node_modules/asynckit":{version:"0.4.0",resolved:"https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",integrity:"sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",license:"MIT"},"node_modules/axios":{version:"1.20.0",resolved:"https://registry.npmjs.org/axios/-/axios-1.20.0.tgz",integrity:"sha512-r8aOh8j9cGKpgQAqpzrUHnSIc6a59Y3Xf/cv8sy1DrHCkZHzQGEuoq1tARk6qSyDdtQGSDgpb9kFlruzPvrgwg==",license:"MIT",dependencies:{"follow-redirects":"^1.16.0","form-data":"^4.0.6","https-proxy-agent":"^5.0.1","proxy-from-env":"^2.1.0"}},"node_modules/call-bind-apply-helpers":{version:"1.0.2",resolved:"https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",integrity:"sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",license:"MIT",dependencies:{"es-errors":"^1.3.0","function-bind":"^1.1.2"},engines:{node:">= 0.4"}},"node_modules/combined-stream":{version:"1.0.8",resolved:"https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",integrity:"sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",license:"MIT",dependencies:{"delayed-stream":"~1.0.0"},engines:{node:">= 0.8"}},"node_modules/debug":{version:"4.4.3",resolved:"https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",integrity:"sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",license:"MIT",dependencies:{ms:"^2.1.3"},engines:{node:">=6.0"},peerDependenciesMeta:{"supports-color":{optional:!0}}},"node_modules/delayed-stream":{version:"1.0.0",resolved:"https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",integrity:"sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",license:"MIT",engines:{node:">=0.4.0"}},"node_modules/dunder-proto":{version:"1.0.1",resolved:"https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",integrity:"sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",license:"MIT",dependencies:{"call-bind-apply-helpers":"^1.0.1","es-errors":"^1.3.0",gopd:"^1.2.0"},engines:{node:">= 0.4"}},"node_modules/es-define-property":{version:"1.0.1",resolved:"https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",integrity:"sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",license:"MIT",engines:{node:">= 0.4"}},"node_modules/es-errors":{version:"1.3.0",resolved:"https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",integrity:"sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",license:"MIT",engines:{node:">= 0.4"}},"node_modules/es-object-atoms":{version:"1.1.2",resolved:"https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz",integrity:"sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==",license:"MIT",dependencies:{"es-errors":"^1.3.0"},engines:{node:">= 0.4"}},"node_modules/es-set-tostringtag":{version:"2.1.0",resolved:"https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",integrity:"sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",license:"MIT",dependencies:{"es-errors":"^1.3.0","get-intrinsic":"^1.2.6","has-tostringtag":"^1.0.2",hasown:"^2.0.2"},engines:{node:">= 0.4"}},"node_modules/follow-redirects":{version:"1.16.1",resolved:"https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.1.tgz",integrity:"sha512-FNvFGzoMLWmE6Yj9spb/zjd7yiNCHiAW9/Tg9CXrQ8wuu32HtlJOwWO11OJafl5FfY3DxTdQ0vj42zU1kvv5jg==",funding:[{type:"individual",url:"https://github.com/sponsors/RubenVerborgh"}],license:"MIT",engines:{node:">=4.0"},peerDependenciesMeta:{debug:{optional:!0}}},"node_modules/form-data":{version:"4.0.6",resolved:"https://registry.npmjs.org/form-data/-/form-data-4.0.6.tgz",integrity:"sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==",license:"MIT",dependencies:{asynckit:"^0.4.0","combined-stream":"^1.0.8","es-set-tostringtag":"^2.1.0",hasown:"^2.0.4","mime-types":"^2.1.35"},engines:{node:">= 6"}},"node_modules/function-bind":{version:"1.1.2",resolved:"https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",integrity:"sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",license:"MIT",funding:{url:"https://github.com/sponsors/ljharb"}},"node_modules/get-intrinsic":{version:"1.3.0",resolved:"https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",integrity:"sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",license:"MIT",dependencies:{"call-bind-apply-helpers":"^1.0.2","es-define-property":"^1.0.1","es-errors":"^1.3.0","es-object-atoms":"^1.1.1","function-bind":"^1.1.2","get-proto":"^1.0.1",gopd:"^1.2.0","has-symbols":"^1.1.0",hasown:"^2.0.2","math-intrinsics":"^1.1.0"},engines:{node:">= 0.4"},funding:{url:"https://github.com/sponsors/ljharb"}},"node_modules/get-proto":{version:"1.0.1",resolved:"https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",integrity:"sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",license:"MIT",dependencies:{"dunder-proto":"^1.0.1","es-object-atoms":"^1.0.0"},engines:{node:">= 0.4"}},"node_modules/gopd":{version:"1.2.0",resolved:"https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",integrity:"sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",license:"MIT",engines:{node:">= 0.4"},funding:{url:"https://github.com/sponsors/ljharb"}},"node_modules/has-symbols":{version:"1.1.0",resolved:"https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",integrity:"sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",license:"MIT",engines:{node:">= 0.4"},funding:{url:"https://github.com/sponsors/ljharb"}},"node_modules/has-tostringtag":{version:"1.0.2",resolved:"https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",integrity:"sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",license:"MIT",dependencies:{"has-symbols":"^1.0.3"},engines:{node:">= 0.4"},funding:{url:"https://github.com/sponsors/ljharb"}},"node_modules/hasown":{version:"2.0.4",resolved:"https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz",integrity:"sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==",license:"MIT",dependencies:{"function-bind":"^1.1.2"},engines:{node:">= 0.4"}},"node_modules/https-proxy-agent":{version:"5.0.1",resolved:"https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",integrity:"sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",license:"MIT",dependencies:{"agent-base":"6",debug:"4"},engines:{node:">= 6"}},"node_modules/math-intrinsics":{version:"1.1.0",resolved:"https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",integrity:"sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",license:"MIT",engines:{node:">= 0.4"}},"node_modules/mime-db":{version:"1.52.0",resolved:"https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",integrity:"sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",license:"MIT",engines:{node:">= 0.6"}},"node_modules/mime-types":{version:"2.1.35",resolved:"https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",integrity:"sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",license:"MIT",dependencies:{"mime-db":"1.52.0"},engines:{node:">= 0.6"}},"node_modules/ms":{version:"2.1.3",resolved:"https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",integrity:"sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",license:"MIT"},"node_modules/posthog-node":{version:"4.18.0",resolved:"https://registry.npmjs.org/posthog-node/-/posthog-node-4.18.0.tgz",integrity:"sha512-XROs1h+DNatgKh/AlIlCtDxWzwrKdYDb2mOs58n4yN8BkGN9ewqeQwG5ApS4/IzwCb7HPttUkOVulkYatd2PIw==",license:"MIT",dependencies:{axios:"^1.8.2"},engines:{node:">=15.0.0"}},"node_modules/proxy-from-env":{version:"2.1.0",resolved:"https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz",integrity:"sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==",license:"MIT",engines:{node:">=10"}}}};var SS={name:"engineeros-managed-ast-grep",version:"1.0.0",lockfileVersion:3,requires:!0,packages:{"":{name:"engineeros-managed-ast-grep",version:"1.0.0",dependencies:{"@ast-grep/cli":"0.51.0"}},"node_modules/@ast-grep/cli":{version:"0.51.0",resolved:"https://registry.npmjs.org/@ast-grep/cli/-/cli-0.51.0.tgz",integrity:"sha512-sIZEt4L4iQJRM2QDKQnbltQxddIsxzt9nmguw3/X7eP3cFwBopsZtFRvaEVht/3/6C1xe3Opn/pbsxSFVJDvpA==",hasInstallScript:!0,license:"MIT",dependencies:{"detect-libc":"2.1.2"},bin:{"ast-grep":"ast-grep",sg:"sg"},engines:{node:">= 12.0.0"},optionalDependencies:{"@ast-grep/cli-darwin-arm64":"0.51.0","@ast-grep/cli-darwin-x64":"0.51.0","@ast-grep/cli-linux-arm64-gnu":"0.51.0","@ast-grep/cli-linux-x64-gnu":"0.51.0","@ast-grep/cli-win32-arm64-msvc":"0.51.0","@ast-grep/cli-win32-ia32-msvc":"0.51.0","@ast-grep/cli-win32-x64-msvc":"0.51.0"}},"node_modules/@ast-grep/cli-darwin-arm64":{version:"0.51.0",resolved:"https://registry.npmjs.org/@ast-grep/cli-darwin-arm64/-/cli-darwin-arm64-0.51.0.tgz",integrity:"sha512-LYh8du1Qd1xFMi15Lh6xnWgHBZGbdCVyQVHOsaqEbICXvd8oAdEIex8ywTt2PwODYAMt6TD7p94S2/kt5dJ1tQ==",cpu:["arm64"],license:"MIT",optional:!0,os:["darwin"],engines:{node:">= 10"}},"node_modules/@ast-grep/cli-darwin-x64":{version:"0.51.0",resolved:"https://registry.npmjs.org/@ast-grep/cli-darwin-x64/-/cli-darwin-x64-0.51.0.tgz",integrity:"sha512-RF3FsO3XsGt+qLqpqbHiKKhly9/Pd08mVnvxx86Qli3DokvIFRAR8KlsTDnql4hsNgAbacp4vyDJsf/pBhh8iw==",cpu:["x64"],license:"MIT",optional:!0,os:["darwin"],engines:{node:">= 10"}},"node_modules/@ast-grep/cli-linux-arm64-gnu":{version:"0.51.0",resolved:"https://registry.npmjs.org/@ast-grep/cli-linux-arm64-gnu/-/cli-linux-arm64-gnu-0.51.0.tgz",integrity:"sha512-aYT07uAVSA3nfoofdVXJuL44DGt1lIOj/GGSNy9mrIiD3TeBv5wxNNXHjMw96bkACdOp8pFMwiuCLY8pMtCT7Q==",cpu:["arm64"],libc:["glibc"],license:"MIT",optional:!0,os:["linux"],engines:{node:">= 10"}},"node_modules/@ast-grep/cli-linux-x64-gnu":{version:"0.51.0",resolved:"https://registry.npmjs.org/@ast-grep/cli-linux-x64-gnu/-/cli-linux-x64-gnu-0.51.0.tgz",integrity:"sha512-ljsdvSrmnmQZaB/lrtLuOP3k3AYCb+TNpPCMi4OQuF1vRBFwMdsES0xrL9iUpJ8ioyIy1h5qTM1T4z5OeoGIvw==",cpu:["x64"],libc:["glibc"],license:"MIT",optional:!0,os:["linux"],engines:{node:">= 10"}},"node_modules/@ast-grep/cli-win32-arm64-msvc":{version:"0.51.0",resolved:"https://registry.npmjs.org/@ast-grep/cli-win32-arm64-msvc/-/cli-win32-arm64-msvc-0.51.0.tgz",integrity:"sha512-G0eb9EmwWvsaJSZI929PCcJhBBeFiB7oAndml5weI1iDjDVn7f5u8jb4wEsovA9W5wy70MjYfH7/H59ogQr8Nw==",cpu:["arm64"],license:"MIT",optional:!0,os:["win32"],engines:{node:">= 10"}},"node_modules/@ast-grep/cli-win32-ia32-msvc":{version:"0.51.0",resolved:"https://registry.npmjs.org/@ast-grep/cli-win32-ia32-msvc/-/cli-win32-ia32-msvc-0.51.0.tgz",integrity:"sha512-68oC9L73Nq7Wi34aEqcUSIhIYaaM4PpVrrlcbobn4cAKSlUEMIC/9aKsKo6pknQYwSNr9dyIFX92zXIoTRNbcg==",cpu:["ia32"],license:"MIT",optional:!0,os:["win32"],engines:{node:">= 10"}},"node_modules/@ast-grep/cli-win32-x64-msvc":{version:"0.51.0",resolved:"https://registry.npmjs.org/@ast-grep/cli-win32-x64-msvc/-/cli-win32-x64-msvc-0.51.0.tgz",integrity:"sha512-lYsKBG0Wn/vk8Zbeo60l+Lms317mL1xpW6Dvv68k3F57vqlMHkWR2tuNcyWC3OVJXbas8dFMoe1R+6wkofIC+g==",cpu:["x64"],license:"MIT",optional:!0,os:["win32"],engines:{node:">= 10"}},"node_modules/detect-libc":{version:"2.1.2",resolved:"https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz",integrity:"sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==",license:"Apache-2.0",engines:{node:">=8"}}}};var kS={name:"engineeros-managed-context7",version:"1.0.0",lockfileVersion:3,requires:!0,packages:{"":{name:"engineeros-managed-context7",version:"1.0.0",dependencies:{"@upstash/context7-mcp":"4.4.4"}},"node_modules/@hono/node-server":{version:"1.19.17",resolved:"https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.17.tgz",integrity:"sha512-dSneS5qhiauZWGDCeK4o695Xd9nUNjviSZCMQrj10eetr8Uln1ucn6bbphOM6UynAMMtNIzZNSpL9vnASJwrPQ==",license:"MIT",engines:{node:">=18.14.1"},peerDependencies:{hono:"^4"}},"node_modules/@modelcontextprotocol/core":{version:"2.3.1",resolved:"https://registry.npmjs.org/@modelcontextprotocol/core/-/core-2.3.1.tgz",integrity:"sha512-laVmIhPGpWi7rG9q+0UigblRN0Hws/Yjlb6qLFtVqryXVLkc4h+yN8z731POD2LnAGQlFe7/tXhUm7Bi0YB91g==",license:"Apache-2.0",dependencies:{zod:"^4.2.0"},engines:{node:">=20"}},"node_modules/@modelcontextprotocol/node":{version:"2.1.1",resolved:"https://registry.npmjs.org/@modelcontextprotocol/node/-/node-2.1.1.tgz",integrity:"sha512-EY92OAXN2xYL7tNS/MVsWJW1v8VHAPwl9B4Ca3pCrjmvqyC+S1C/6UHsMxF2GoFPraS5Yyg56vFz9brVpFojMA==",license:"Apache-2.0",dependencies:{"@hono/node-server":"^1.19.9",hono:"^4.11.4"},engines:{node:">=20"},peerDependencies:{"@modelcontextprotocol/server":"^2.3.0"}},"node_modules/@modelcontextprotocol/server":{version:"2.3.1",resolved:"https://registry.npmjs.org/@modelcontextprotocol/server/-/server-2.3.1.tgz",integrity:"sha512-e59MfWuSssj6DoQ96JCTqdW1AXT5/XtnTl0WWd6MU1Ka434fFUGGosCLJbGNySDhHGvxQWoRWK137FXYFkYNWw==",license:"Apache-2.0",dependencies:{"@modelcontextprotocol/core":"2.3.1",zod:"^4.2.0"},engines:{node:">=20"}},"node_modules/@opentelemetry/api":{version:"1.9.1",resolved:"https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.1.tgz",integrity:"sha512-gLyJlPHPZYdAk1JENA9LeHejZe1Ti77/pTeFm/nMXmQH/HFZlcS/O2XJB+L8fkbrNSqhdtlvjBVjxwUYanNH5Q==",license:"Apache-2.0",engines:{node:">=8.0.0"}},"node_modules/@opentelemetry/api-logs":{version:"0.222.0",resolved:"https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.222.0.tgz",integrity:"sha512-9mb1If+IF6u0ZVXkHQ6ogEae5HwA6ajIVUgpSDQyRASxft6BSXHvBvPooRle3yFN/fKnCdSOnuu0OC3PLcF6+g==",license:"Apache-2.0",dependencies:{"@opentelemetry/api":"^1.3.0"},engines:{node:">=8.0.0"}},"node_modules/@opentelemetry/core":{version:"2.11.0",resolved:"https://registry.npmjs.org/@opentelemetry/core/-/core-2.11.0.tgz",integrity:"sha512-7YP44XH0tV6+Mb54x2YGf84i7yi+31MBZlE8JwvozkxyTvXbSp10X7cI7YE49ChJ3shMJoBmCJF3+1QFBJctGA==",license:"Apache-2.0",dependencies:{"@opentelemetry/semantic-conventions":"^1.29.0"},engines:{node:"^18.19.0 || >=20.6.0"},peerDependencies:{"@opentelemetry/api":">=1.0.0 <1.10.0"}},"node_modules/@opentelemetry/exporter-prometheus":{version:"0.222.0",resolved:"https://registry.npmjs.org/@opentelemetry/exporter-prometheus/-/exporter-prometheus-0.222.0.tgz",integrity:"sha512-I7nalnnBZrhlTgjlqsVeEjJGcQCFK5kKAYVk7XTz/cbubvj5fvjLOal/Many0taHF2GIkOWmegsbQ8vbQJjhFg==",license:"Apache-2.0",dependencies:{"@opentelemetry/core":"2.11.0","@opentelemetry/resources":"2.11.0","@opentelemetry/sdk-metrics":"2.11.0","@opentelemetry/semantic-conventions":"^1.29.0"},engines:{node:"^18.19.0 || >=20.6.0"},peerDependencies:{"@opentelemetry/api":"^1.3.0"}},"node_modules/@opentelemetry/exporter-prometheus/node_modules/@opentelemetry/resources":{version:"2.11.0",resolved:"https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.11.0.tgz",integrity:"sha512-Ie7+8q8MDF4FAEQCKVMTx3ReUvxiIAgIiiW3c9JdmP8+HMcDy20puT+AHjexnExgnbvBxjQ9fjkFDWrikJ2jQA==",license:"Apache-2.0",dependencies:{"@opentelemetry/core":"2.11.0","@opentelemetry/semantic-conventions":"^1.29.0"},engines:{node:"^18.19.0 || >=20.6.0"},peerDependencies:{"@opentelemetry/api":">=1.3.0 <1.10.0"}},"node_modules/@opentelemetry/exporter-prometheus/node_modules/@opentelemetry/sdk-metrics":{version:"2.11.0",resolved:"https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-2.11.0.tgz",integrity:"sha512-7GXXcObyHyDUUSG+L+kJoquty01bzm7ivE7+SSgXXJcHuPzGviptxwARmI2c+bnnxjexGQbJnyNlN8HxBP/Y7A==",license:"Apache-2.0",dependencies:{"@opentelemetry/core":"2.11.0","@opentelemetry/resources":"2.11.0"},engines:{node:"^18.19.0 || >=20.6.0"},peerDependencies:{"@opentelemetry/api":">=1.9.0 <1.10.0"}},"node_modules/@opentelemetry/instrumentation":{version:"0.222.0",resolved:"https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.222.0.tgz",integrity:"sha512-fhbRDuAgzPKpq1k5+hX3uS+3QAYNca0on0Ngot/R8dDsQtuFaADeZnG2uSgxABuvcI7S2phAaRhbct9jieeKZw==",license:"Apache-2.0",dependencies:{"@opentelemetry/api-logs":"0.222.0","import-in-the-middle":"^3.0.0","require-in-the-middle":"^8.0.0"},engines:{node:"^18.19.0 || >=20.6.0"},peerDependencies:{"@opentelemetry/api":"^1.3.0"}},"node_modules/@opentelemetry/instrumentation-runtime-node":{version:"0.35.0",resolved:"https://registry.npmjs.org/@opentelemetry/instrumentation-runtime-node/-/instrumentation-runtime-node-0.35.0.tgz",integrity:"sha512-/cOW4Qlv4nnr4QXDCkv0TEtOBa9R9lXHu//JuD5+nRPYR74g9iLmf5tadcYvn32oz2R8vQnV8FTnMLzjfAGMCQ==",license:"Apache-2.0",dependencies:{"@opentelemetry/api-logs":"^0.222.0","@opentelemetry/core":"^2.0.0","@opentelemetry/instrumentation":"^0.222.0"},engines:{node:"^18.19.0 || >=20.6.0"},peerDependencies:{"@opentelemetry/api":"^1.3.0"}},"node_modules/@opentelemetry/resources":{version:"2.12.0",resolved:"https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.12.0.tgz",integrity:"sha512-+rSRoOdln6NhXTVcBdHSlZxJDNzwxadeweK2ltZO3tVtfp6aklABc06xclDk6ovRR+EiGgIcSbh/6NgjFhnb3A==",license:"Apache-2.0",dependencies:{"@opentelemetry/core":"2.12.0","@opentelemetry/semantic-conventions":"^1.29.0"},engines:{node:"^18.19.0 || >=20.6.0"},peerDependencies:{"@opentelemetry/api":">=1.3.0 <1.10.0"}},"node_modules/@opentelemetry/resources/node_modules/@opentelemetry/core":{version:"2.12.0",resolved:"https://registry.npmjs.org/@opentelemetry/core/-/core-2.12.0.tgz",integrity:"sha512-1HsSAuvT4/my0QrXWsyXFdWjKaPeCHsismKZgEEIb8NK13LP6DrMRlsUbvD/0F9mDWK3xDom9AMv3IscxgOnOQ==",license:"Apache-2.0",dependencies:{"@opentelemetry/semantic-conventions":"^1.29.0"},engines:{node:"^18.19.0 || >=20.6.0"},peerDependencies:{"@opentelemetry/api":">=1.0.0 <1.10.0"}},"node_modules/@opentelemetry/sdk-metrics":{version:"2.12.0",resolved:"https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-2.12.0.tgz",integrity:"sha512-mVMaEHwCUJuY3S4Esn+nT0yQA3qCEGh+SOPJsXygU0Gl453WcsDNjtEa8EfdewMwoLyr1tlofB4fXytVpiXuow==",license:"Apache-2.0",dependencies:{"@opentelemetry/core":"2.12.0","@opentelemetry/resources":"2.12.0"},engines:{node:"^18.19.0 || >=20.6.0"},peerDependencies:{"@opentelemetry/api":">=1.9.0 <1.10.0"}},"node_modules/@opentelemetry/sdk-metrics/node_modules/@opentelemetry/core":{version:"2.12.0",resolved:"https://registry.npmjs.org/@opentelemetry/core/-/core-2.12.0.tgz",integrity:"sha512-1HsSAuvT4/my0QrXWsyXFdWjKaPeCHsismKZgEEIb8NK13LP6DrMRlsUbvD/0F9mDWK3xDom9AMv3IscxgOnOQ==",license:"Apache-2.0",dependencies:{"@opentelemetry/semantic-conventions":"^1.29.0"},engines:{node:"^18.19.0 || >=20.6.0"},peerDependencies:{"@opentelemetry/api":">=1.0.0 <1.10.0"}},"node_modules/@opentelemetry/semantic-conventions":{version:"1.43.0",resolved:"https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.43.0.tgz",integrity:"sha512-eSYWTm620tTk45EKSedaUL8MFYI8hW164hIXsgIHyxu3VobUB3fFCu5t0hQby6OoWRPsG1KkKUG2M5UadiLiVg==",license:"Apache-2.0",engines:{node:">=14"}},"node_modules/@types/body-parser":{version:"1.19.6",resolved:"https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz",integrity:"sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==",license:"MIT",dependencies:{"@types/connect":"*","@types/node":"*"}},"node_modules/@types/connect":{version:"3.4.38",resolved:"https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz",integrity:"sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==",license:"MIT",dependencies:{"@types/node":"*"}},"node_modules/@types/express":{version:"5.0.6",resolved:"https://registry.npmjs.org/@types/express/-/express-5.0.6.tgz",integrity:"sha512-sKYVuV7Sv9fbPIt/442koC7+IIwK5olP1KWeD88e/idgoJqDm3JV/YUiPwkoKK92ylff2MGxSz1CSjsXelx0YA==",license:"MIT",dependencies:{"@types/body-parser":"*","@types/express-serve-static-core":"^5.0.0","@types/serve-static":"^2"}},"node_modules/@types/express-serve-static-core":{version:"5.1.3",resolved:"https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.1.3.tgz",integrity:"sha512-dPfW8NFiOF4wOHc7+N/QSxlY9cfSsenewGbAz8C8U/MULPd/YZ27LvJUIlzaXie7e6Ove9YunJGgC9tbHD2cKw==",license:"MIT",dependencies:{"@types/node":"*","@types/qs":"*","@types/range-parser":"*","@types/send":"*"}},"node_modules/@types/http-errors":{version:"2.0.5",resolved:"https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz",integrity:"sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==",license:"MIT"},"node_modules/@types/node":{version:"26.6.5",resolved:"https://registry.npmjs.org/@types/node/-/node-26.6.5.tgz",integrity:"sha512-uMzsv9stDdofIZBx4UGh4Z9ZgXnGC9seRDscilBcTHAeOFk67MZg/k9bWVfO+bk4qZmG+l52hRnLwUiH2LnJTg==",license:"MIT",dependencies:{"undici-types":"~8.9.0"}},"node_modules/@types/qs":{version:"6.15.1",resolved:"https://registry.npmjs.org/@types/qs/-/qs-6.15.1.tgz",integrity:"sha512-GZHUBZR9hckSUhrxmp1nG6NwdpM9fCunJwyThLW1X3AyHgd9IlHb6VANpQQqDr2o/qQp6McZ3y/IA2rVzKzSbw==",license:"MIT"},"node_modules/@types/range-parser":{version:"1.2.7",resolved:"https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz",integrity:"sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==",license:"MIT"},"node_modules/@types/send":{version:"1.2.1",resolved:"https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz",integrity:"sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==",license:"MIT",dependencies:{"@types/node":"*"}},"node_modules/@types/serve-static":{version:"2.2.0",resolved:"https://registry.npmjs.org/@types/serve-static/-/serve-static-2.2.0.tgz",integrity:"sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ==",license:"MIT",dependencies:{"@types/http-errors":"*","@types/node":"*"}},"node_modules/@upstash/context7-mcp":{version:"4.4.4",resolved:"https://registry.npmjs.org/@upstash/context7-mcp/-/context7-mcp-4.4.4.tgz",integrity:"sha512-T2DkjhweDnC2mRAclDiTrPG3KI1zYKhhjgY2SMKD9PVrbEaGD8x35VsIOqpwwDc2qiKBvfYCF/jqr+jQMu5PUA==",license:"MIT",dependencies:{"@modelcontextprotocol/node":"2.1.1","@modelcontextprotocol/server":"2.3.1","@opentelemetry/api":"^1.9.1","@opentelemetry/exporter-prometheus":"^0.222.0","@opentelemetry/instrumentation-runtime-node":"^0.35.0","@opentelemetry/resources":"^2.11.0","@opentelemetry/sdk-metrics":"^2.11.0","@types/express":"^5.0.4",commander:"^13.1.0",express:"^5.1.0",jose:"^6.2.12",undici:"^7.30.0",zod:"^4.6.5"},bin:{"context7-mcp":"dist/index.js"},engines:{node:">=20.18.1"}},"node_modules/accepts":{version:"2.0.0",resolved:"https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz",integrity:"sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==",license:"MIT",dependencies:{"mime-types":"^3.0.0",negotiator:"^1.0.0"},engines:{node:">= 0.6"}},"node_modules/body-parser":{version:"2.3.0",resolved:"https://registry.npmjs.org/body-parser/-/body-parser-2.3.0.tgz",integrity:"sha512-2cGmJupaNgg+QUwVLAucDuWuoMZ6EX9iHDRswZ5lsNYEmwPaRknMPCLZz07yTzVq/83p4o/wzbDZbBrTvGGTIw==",license:"MIT",dependencies:{bytes:"^3.1.2","content-type":"^2.0.0",debug:"^4.4.3","http-errors":"^2.0.1","iconv-lite":"^0.7.2","on-finished":"^2.4.1",qs:"^6.15.2","raw-body":"^3.0.2","type-is":"^2.1.0"},engines:{node:">=18"},funding:{type:"opencollective",url:"https://opencollective.com/express"}},"node_modules/bytes":{version:"3.1.2",resolved:"https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",integrity:"sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",license:"MIT",engines:{node:">= 0.8"}},"node_modules/call-bind-apply-helpers":{version:"1.0.2",resolved:"https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",integrity:"sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",license:"MIT",dependencies:{"es-errors":"^1.3.0","function-bind":"^1.1.2"},engines:{node:">= 0.4"}},"node_modules/call-bound":{version:"1.0.4",resolved:"https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",integrity:"sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",license:"MIT",dependencies:{"call-bind-apply-helpers":"^1.0.2","get-intrinsic":"^1.3.0"},engines:{node:">= 0.4"},funding:{url:"https://github.com/sponsors/ljharb"}},"node_modules/cjs-module-lexer":{version:"2.3.0",resolved:"https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-2.3.0.tgz",integrity:"sha512-lmNyBzi6iYiqyrExTctfmjd8tInx+dHu9PBomTfH5RXS53c27JMFJgzNv5TyAnm3PgGf+MLy0+Ws41/HlVxdKQ==",license:"MIT"},"node_modules/commander":{version:"13.1.0",resolved:"https://registry.npmjs.org/commander/-/commander-13.1.0.tgz",integrity:"sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==",license:"MIT",engines:{node:">=18"}},"node_modules/content-disposition":{version:"2.0.1",resolved:"https://registry.npmjs.org/content-disposition/-/content-disposition-2.0.1.tgz",integrity:"sha512-e+H0ZXHSWYrENhQzw1LPuP4oF5MzVKmDU6d3hxlvaPEYLLg62MxtQNPRx4SYSuYJSBUgnQIG4HIN2tEtNv7Dog==",license:"MIT",engines:{node:">=18"},funding:{type:"opencollective",url:"https://opencollective.com/express"}},"node_modules/content-type":{version:"2.1.0",resolved:"https://registry.npmjs.org/content-type/-/content-type-2.1.0.tgz",integrity:"sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag==",license:"MIT",engines:{node:">=18"},funding:{type:"opencollective",url:"https://opencollective.com/express"}},"node_modules/cookie":{version:"0.7.2",resolved:"https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz",integrity:"sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==",license:"MIT",engines:{node:">= 0.6"}},"node_modules/cookie-signature":{version:"1.2.2",resolved:"https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz",integrity:"sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==",license:"MIT",engines:{node:">=6.6.0"}},"node_modules/debug":{version:"4.4.3",resolved:"https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",integrity:"sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",license:"MIT",dependencies:{ms:"^2.1.3"},engines:{node:">=6.0"},peerDependenciesMeta:{"supports-color":{optional:!0}}},"node_modules/depd":{version:"2.0.0",resolved:"https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",integrity:"sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",license:"MIT",engines:{node:">= 0.8"}},"node_modules/dunder-proto":{version:"1.0.1",resolved:"https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",integrity:"sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",license:"MIT",dependencies:{"call-bind-apply-helpers":"^1.0.1","es-errors":"^1.3.0",gopd:"^1.2.0"},engines:{node:">= 0.4"}},"node_modules/ee-first":{version:"1.1.1",resolved:"https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",integrity:"sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",license:"MIT"},"node_modules/encodeurl":{version:"2.0.0",resolved:"https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",integrity:"sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",license:"MIT",engines:{node:">= 0.8"}},"node_modules/es-define-property":{version:"1.0.1",resolved:"https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",integrity:"sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",license:"MIT",engines:{node:">= 0.4"}},"node_modules/es-errors":{version:"1.3.0",resolved:"https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",integrity:"sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",license:"MIT",engines:{node:">= 0.4"}},"node_modules/es-module-lexer":{version:"3.0.4",resolved:"https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-3.0.4.tgz",integrity:"sha512-BldNY5mwkVu+cQ5Ymn3e6hB9Sx8XHx4ZevWbiUyZbfKxJxYO27Hf0wfzkxIaD5CAJMaGl3YspKELj0ff/7nCMA==",license:"MIT"},"node_modules/es-object-atoms":{version:"1.1.2",resolved:"https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz",integrity:"sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==",license:"MIT",dependencies:{"es-errors":"^1.3.0"},engines:{node:">= 0.4"}},"node_modules/escape-html":{version:"1.0.3",resolved:"https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",integrity:"sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",license:"MIT"},"node_modules/etag":{version:"1.8.1",resolved:"https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",integrity:"sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",license:"MIT",engines:{node:">= 0.6"}},"node_modules/express":{version:"5.3.0",resolved:"https://registry.npmjs.org/express/-/express-5.3.0.tgz",integrity:"sha512-qCqy1xSoaugxOD4IVHb1ZWdkvCF2W3aE2okKouWj8VwJ+ztskSiXoBnCSJqfKT+cVPJhuJqe9YLbY425+Zh00g==",license:"MIT",dependencies:{accepts:"^2.0.0","body-parser":"^2.3.0","content-disposition":"^2.0.1","content-type":"^2.0.0",cookie:"^0.7.1","cookie-signature":"^1.2.1",debug:"^4.4.0",depd:"^2.0.0",encodeurl:"^2.0.0","escape-html":"^1.0.3",etag:"^1.8.1",finalhandler:"^2.1.0",fresh:"^2.0.0","http-errors":"^2.0.0","merge-descriptors":"^2.0.0","mime-types":"^3.0.0","on-finished":"^2.4.1",once:"^1.4.0",parseurl:"^1.3.3","proxy-addr":"^2.0.8",qs:"^6.16.0","range-parser":"^1.2.1",router:"^2.2.0",send:"^1.1.0","serve-static":"^2.2.0",statuses:"^2.0.1","type-is":"^2.1.0",vary:"^1.1.2"},engines:{node:">= 18"},funding:{type:"opencollective",url:"https://opencollective.com/express"}},"node_modules/finalhandler":{version:"2.1.1",resolved:"https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz",integrity:"sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==",license:"MIT",dependencies:{debug:"^4.4.0",encodeurl:"^2.0.0","escape-html":"^1.0.3","on-finished":"^2.4.1",parseurl:"^1.3.3",statuses:"^2.0.1"},engines:{node:">= 18.0.0"},funding:{type:"opencollective",url:"https://opencollective.com/express"}},"node_modules/forwarded":{version:"0.2.0",resolved:"https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",integrity:"sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",license:"MIT",engines:{node:">= 0.6"}},"node_modules/fresh":{version:"2.0.0",resolved:"https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz",integrity:"sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==",license:"MIT",engines:{node:">= 0.8"}},"node_modules/function-bind":{version:"1.1.2",resolved:"https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",integrity:"sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",license:"MIT",funding:{url:"https://github.com/sponsors/ljharb"}},"node_modules/get-intrinsic":{version:"1.3.0",resolved:"https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",integrity:"sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",license:"MIT",dependencies:{"call-bind-apply-helpers":"^1.0.2","es-define-property":"^1.0.1","es-errors":"^1.3.0","es-object-atoms":"^1.1.1","function-bind":"^1.1.2","get-proto":"^1.0.1",gopd:"^1.2.0","has-symbols":"^1.1.0",hasown:"^2.0.2","math-intrinsics":"^1.1.0"},engines:{node:">= 0.4"},funding:{url:"https://github.com/sponsors/ljharb"}},"node_modules/get-proto":{version:"1.0.1",resolved:"https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",integrity:"sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",license:"MIT",dependencies:{"dunder-proto":"^1.0.1","es-object-atoms":"^1.0.0"},engines:{node:">= 0.4"}},"node_modules/gopd":{version:"1.2.0",resolved:"https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",integrity:"sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",license:"MIT",engines:{node:">= 0.4"},funding:{url:"https://github.com/sponsors/ljharb"}},"node_modules/has-symbols":{version:"1.1.0",resolved:"https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",integrity:"sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",license:"MIT",engines:{node:">= 0.4"},funding:{url:"https://github.com/sponsors/ljharb"}},"node_modules/hasown":{version:"2.0.4",resolved:"https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz",integrity:"sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==",license:"MIT",dependencies:{"function-bind":"^1.1.2"},engines:{node:">= 0.4"}},"node_modules/hono":{version:"4.13.13",resolved:"https://registry.npmjs.org/hono/-/hono-4.13.13.tgz",integrity:"sha512-CQ46U0ZkAGmbT/4UxdzzGJpacP2IeKgY4a5/tOI9AABbpOMfK739wfDXmv1usCk+3RkKj1hQy4/fjhiwa2xlrA==",license:"MIT",engines:{node:">=16.9.0"}},"node_modules/http-errors":{version:"2.0.1",resolved:"https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz",integrity:"sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==",license:"MIT",dependencies:{depd:"~2.0.0",inherits:"~2.0.4",setprototypeof:"~1.2.0",statuses:"~2.0.2",toidentifier:"~1.0.1"},engines:{node:">= 0.8"},funding:{type:"opencollective",url:"https://opencollective.com/express"}},"node_modules/iconv-lite":{version:"0.7.3",resolved:"https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.3.tgz",integrity:"sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==",license:"MIT",dependencies:{"safer-buffer":">= 2.1.2 < 3.0.0"},engines:{node:">=0.10.0"},funding:{type:"opencollective",url:"https://opencollective.com/express"}},"node_modules/import-in-the-middle":{version:"3.5.2",resolved:"https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-3.5.2.tgz",integrity:"sha512-WseIA/4o56+GYO3RmlOPvejYi771OFeJEeK/ejROsr9bdjW+E5NXTOD1Di8TL40Qgg3JJX9aa97Hf8iiSVIKZw==",license:"Apache-2.0",dependencies:{"cjs-module-lexer":"^2.2.0","es-module-lexer":"^3.0.2","module-details-from-path":"^1.0.4"},engines:{node:">=18"}},"node_modules/inherits":{version:"2.0.4",resolved:"https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",integrity:"sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",license:"ISC"},"node_modules/ipaddr.js":{version:"1.9.1",resolved:"https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",integrity:"sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",license:"MIT",engines:{node:">= 0.10"}},"node_modules/is-promise":{version:"4.0.0",resolved:"https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz",integrity:"sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==",license:"MIT"},"node_modules/jose":{version:"6.2.13",resolved:"https://registry.npmjs.org/jose/-/jose-6.2.13.tgz",integrity:"sha512-7TIg10ZE1x82YediN+lcrPNvGMKge9yFHQD+Qho/b8y2adfugU3AsvvHfxV0fzyFllT6l9xCjf4RWY9g/Z9PJQ==",license:"MIT",funding:{url:"https://github.com/sponsors/panva"}},"node_modules/math-intrinsics":{version:"1.1.0",resolved:"https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",integrity:"sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",license:"MIT",engines:{node:">= 0.4"}},"node_modules/media-typer":{version:"1.1.1",resolved:"https://registry.npmjs.org/media-typer/-/media-typer-1.1.1.tgz",integrity:"sha512-yz3xRaG20c6/BOzvYoDaGtPmGscs7YivItZEEqe6GbwNfHuxu9YNmvnEkMzKldAGY4/80pRcQRZSEnhquk9XuQ==",license:"MIT",engines:{node:">= 0.8"},funding:{type:"opencollective",url:"https://opencollective.com/express"}},"node_modules/merge-descriptors":{version:"2.0.0",resolved:"https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz",integrity:"sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==",license:"MIT",engines:{node:">=18"},funding:{url:"https://github.com/sponsors/sindresorhus"}},"node_modules/mime-db":{version:"1.54.0",resolved:"https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz",integrity:"sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==",license:"MIT",engines:{node:">= 0.6"}},"node_modules/mime-types":{version:"3.0.2",resolved:"https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz",integrity:"sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==",license:"MIT",dependencies:{"mime-db":"^1.54.0"},engines:{node:">=18"},funding:{type:"opencollective",url:"https://opencollective.com/express"}},"node_modules/module-details-from-path":{version:"1.0.4",resolved:"https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.4.tgz",integrity:"sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==",license:"MIT"},"node_modules/ms":{version:"2.1.3",resolved:"https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",integrity:"sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",license:"MIT"},"node_modules/negotiator":{version:"1.1.0",resolved:"https://registry.npmjs.org/negotiator/-/negotiator-1.1.0.tgz",integrity:"sha512-NMPBRMJgiQHjbd8phG3Vebdx4kZ1H121rbl5IkMqeOsahptB9BKo/d7oJ3zTXqTgagn2bWlNSXkh0QUGM31RYg==",license:"MIT",dependencies:{"content-type":"^2.1.0"},engines:{node:">=18"},funding:{type:"opencollective",url:"https://opencollective.com/express"}},"node_modules/object-inspect":{version:"1.13.4",resolved:"https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz",integrity:"sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",license:"MIT",engines:{node:">= 0.4"},funding:{url:"https://github.com/sponsors/ljharb"}},"node_modules/on-finished":{version:"2.4.1",resolved:"https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",integrity:"sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",license:"MIT",dependencies:{"ee-first":"1.1.1"},engines:{node:">= 0.8"}},"node_modules/once":{version:"1.4.0",resolved:"https://registry.npmjs.org/once/-/once-1.4.0.tgz",integrity:"sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",license:"ISC",dependencies:{wrappy:"1"}},"node_modules/parseurl":{version:"1.3.3",resolved:"https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",integrity:"sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",license:"MIT",engines:{node:">= 0.8"}},"node_modules/path-to-regexp":{version:"8.4.2",resolved:"https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz",integrity:"sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==",license:"MIT",funding:{type:"opencollective",url:"https://opencollective.com/express"}},"node_modules/proxy-addr":{version:"2.0.8",resolved:"https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.8.tgz",integrity:"sha512-5nnx0yGyVUcY6t9RnWcARWtwT9F1D8O9rt08htPvnd49W1IgZtmLkhu9WfMzQj1cFxjHIO6connUNVW5k7AVyQ==",license:"MIT",dependencies:{forwarded:"0.2.0","ipaddr.js":"1.9.1"},engines:{node:">= 0.10"},funding:{type:"opencollective",url:"https://opencollective.com/express"}},"node_modules/qs":{version:"6.16.1",resolved:"https://registry.npmjs.org/qs/-/qs-6.16.1.tgz",integrity:"sha512-5Px6J7rfHBAGUhNQ3es4YzcOdBBw0SDcVtThJml4RdnKw4tKs2epA0kPZ+K8X+WiHktT93RHVcQ/3ym5aTCgtg==",license:"BSD-3-Clause",dependencies:{"es-define-property":"^1.0.1","side-channel":"^1.1.1"},engines:{node:">=0.6"},funding:{url:"https://github.com/sponsors/ljharb"}},"node_modules/range-parser":{version:"1.3.0",resolved:"https://registry.npmjs.org/range-parser/-/range-parser-1.3.0.tgz",integrity:"sha512-hek2mFQpPuI4E1BBKrSto+BU3e3x4xuarsbiwr3+lf7p44juvFMV0XFWQAP3xUyqXA4RrXLIoaSUGbSt056ZMw==",license:"MIT",engines:{node:">= 0.6"},funding:{type:"opencollective",url:"https://opencollective.com/express"}},"node_modules/raw-body":{version:"3.0.2",resolved:"https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz",integrity:"sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==",license:"MIT",dependencies:{bytes:"~3.1.2","http-errors":"~2.0.1","iconv-lite":"~0.7.0",unpipe:"~1.0.0"},engines:{node:">= 0.10"}},"node_modules/require-in-the-middle":{version:"8.0.1",resolved:"https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-8.0.1.tgz",integrity:"sha512-QT7FVMXfWOYFbeRBF6nu+I6tr2Tf3u0q8RIEjNob/heKY/nh7drD/k7eeMFmSQgnTtCzLDcCu/XEnpW2wk4xCQ==",license:"MIT",dependencies:{debug:"^4.3.5","module-details-from-path":"^1.0.3"},engines:{node:">=9.3.0 || >=8.10.0 <9.0.0"}},"node_modules/router":{version:"2.2.0",resolved:"https://registry.npmjs.org/router/-/router-2.2.0.tgz",integrity:"sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==",license:"MIT",dependencies:{debug:"^4.4.0",depd:"^2.0.0","is-promise":"^4.0.0",parseurl:"^1.3.3","path-to-regexp":"^8.0.0"},engines:{node:">= 18"}},"node_modules/safer-buffer":{version:"2.1.2",resolved:"https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",integrity:"sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",license:"MIT"},"node_modules/send":{version:"1.2.1",resolved:"https://registry.npmjs.org/send/-/send-1.2.1.tgz",integrity:"sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==",license:"MIT",dependencies:{debug:"^4.4.3",encodeurl:"^2.0.0","escape-html":"^1.0.3",etag:"^1.8.1",fresh:"^2.0.0","http-errors":"^2.0.1","mime-types":"^3.0.2",ms:"^2.1.3","on-finished":"^2.4.1","range-parser":"^1.2.1",statuses:"^2.0.2"},engines:{node:">= 18"},funding:{type:"opencollective",url:"https://opencollective.com/express"}},"node_modules/serve-static":{version:"2.2.1",resolved:"https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz",integrity:"sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==",license:"MIT",dependencies:{encodeurl:"^2.0.0","escape-html":"^1.0.3",parseurl:"^1.3.3",send:"^1.2.0"},engines:{node:">= 18"},funding:{type:"opencollective",url:"https://opencollective.com/express"}},"node_modules/setprototypeof":{version:"1.2.0",resolved:"https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",integrity:"sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",license:"ISC"},"node_modules/side-channel":{version:"1.1.1",resolved:"https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz",integrity:"sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==",license:"MIT",dependencies:{"es-errors":"^1.3.0","object-inspect":"^1.13.4","side-channel-list":"^1.0.1","side-channel-map":"^1.0.1","side-channel-weakmap":"^1.0.2"},engines:{node:">= 0.4"},funding:{url:"https://github.com/sponsors/ljharb"}},"node_modules/side-channel-list":{version:"1.0.1",resolved:"https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz",integrity:"sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==",license:"MIT",dependencies:{"es-errors":"^1.3.0","object-inspect":"^1.13.4"},engines:{node:">= 0.4"},funding:{url:"https://github.com/sponsors/ljharb"}},"node_modules/side-channel-map":{version:"1.0.1",resolved:"https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",integrity:"sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",license:"MIT",dependencies:{"call-bound":"^1.0.2","es-errors":"^1.3.0","get-intrinsic":"^1.2.5","object-inspect":"^1.13.3"},engines:{node:">= 0.4"},funding:{url:"https://github.com/sponsors/ljharb"}},"node_modules/side-channel-weakmap":{version:"1.0.2",resolved:"https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",integrity:"sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",license:"MIT",dependencies:{"call-bound":"^1.0.2","es-errors":"^1.3.0","get-intrinsic":"^1.2.5","object-inspect":"^1.13.3","side-channel-map":"^1.0.1"},engines:{node:">= 0.4"},funding:{url:"https://github.com/sponsors/ljharb"}},"node_modules/statuses":{version:"2.0.2",resolved:"https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz",integrity:"sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==",license:"MIT",engines:{node:">= 0.8"}},"node_modules/toidentifier":{version:"1.0.1",resolved:"https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",integrity:"sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",license:"MIT",engines:{node:">=0.6"}},"node_modules/type-is":{version:"2.1.0",resolved:"https://registry.npmjs.org/type-is/-/type-is-2.1.0.tgz",integrity:"sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==",license:"MIT",dependencies:{"content-type":"^2.0.0","media-typer":"^1.1.0","mime-types":"^3.0.0"},engines:{node:">= 18"},funding:{type:"opencollective",url:"https://opencollective.com/express"}},"node_modules/undici":{version:"7.30.1",resolved:"https://registry.npmjs.org/undici/-/undici-7.30.1.tgz",integrity:"sha512-03KrMbjIFDWQR5RNPrSw3bd1r12JpyFQl9/yxjUbJtqkjmllqC5lFjZh6ujeuJCKr8EOQvRW872Oy/az+nLYxg==",license:"MIT",engines:{node:">=20.18.1"}},"node_modules/undici-types":{version:"8.9.0",resolved:"https://registry.npmjs.org/undici-types/-/undici-types-8.9.0.tgz",integrity:"sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg==",license:"MIT"},"node_modules/unpipe":{version:"1.0.0",resolved:"https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",integrity:"sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",license:"MIT",engines:{node:">= 0.8"}},"node_modules/vary":{version:"1.1.2",resolved:"https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",integrity:"sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",license:"MIT",engines:{node:">= 0.8"}},"node_modules/wrappy":{version:"1.0.2",resolved:"https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",integrity:"sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",license:"ISC"},"node_modules/zod":{version:"4.6.7",resolved:"https://registry.npmjs.org/zod/-/zod-4.6.7.tgz",integrity:"sha512-g8W2D2kU6a8untc053fX1uVBKzM7yqAxW/3zwk83+6RyF2+SKOuV+c0wBDhUwzV1PaGapmZH+rmcUzPf+3CGwg==",license:"MIT",funding:{url:"https://github.com/sponsors/colinhacks"}}}};var ES={name:"engineeros-managed-playwright",version:"1.0.0",lockfileVersion:3,requires:!0,packages:{"":{name:"engineeros-managed-playwright",version:"1.0.0",dependencies:{"@playwright/mcp":"0.0.83"}},"node_modules/@playwright/mcp":{version:"0.0.83",resolved:"https://registry.npmjs.org/@playwright/mcp/-/mcp-0.0.83.tgz",integrity:"sha512-oNcl+Ae2/IAjhfPeP46BfIkSakfmprY+aOtkv5MjrQ4lPav4/yNtPhL0iq8SlIM90oApWgBDUxaNKvktazUKOg==",license:"Apache-2.0",dependencies:{playwright:"1.64.0-alpha-1790635538000","playwright-core":"1.64.0-alpha-1790635538000"},bin:{"playwright-mcp":"cli.js"},engines:{node:">=18"}},"node_modules/playwright":{version:"1.64.0-alpha-1790635538000",resolved:"https://registry.npmjs.org/playwright/-/playwright-1.64.0-alpha-1790635538000.tgz",integrity:"sha512-/5XDUMxpOd/9AojJtWDFIRV3EJZNQ0AwvK69wgt3CPzy8wTgiBG9pX45VfxtqtvIRGwfWzMhrvawNKreG69Snw==",license:"Apache-2.0",dependencies:{"playwright-core":"1.64.0-alpha-1790635538000"},bin:{playwright:"cli.js"},engines:{node:">=20"}},"node_modules/playwright-core":{version:"1.64.0-alpha-1790635538000",resolved:"https://registry.npmjs.org/playwright-core/-/playwright-core-1.64.0-alpha-1790635538000.tgz",integrity:"sha512-pNwaXirhXMRLaRQs4NQ18EpTdtDoFwyPH9FOaaDC7YXG4hpwE2xmwCic/1srbuExVQC7zT9LJSJpDBAru+Vo9A==",license:"Apache-2.0",bin:{"playwright-core":"cli.js"},engines:{node:">=20"}}}};var $S={name:"engineeros-managed-chrome-devtools",version:"1.0.0",lockfileVersion:3,requires:!0,packages:{"":{name:"engineeros-managed-chrome-devtools",version:"1.0.0",dependencies:{"chrome-devtools-mcp":"1.11.0"}},"node_modules/chrome-devtools-mcp":{version:"1.11.0",resolved:"https://registry.npmjs.org/chrome-devtools-mcp/-/chrome-devtools-mcp-1.11.0.tgz",integrity:"sha512-CytJ/5tnzrS+J/74be2P5aCOsS/mmGRHys/Si+IYC4ucrbnWAmES/dYdxGJjeUCECRcoFUilZAysdjlwqUjXIA==",license:"Apache-2.0",bin:{"chrome-devtools":"build/src/bin/chrome-devtools.js","chrome-devtools-mcp":"build/src/bin/chrome-devtools-mcp.js"},engines:{node:"^20.19.0 || ^22.12.0 || >=23"},peerDependencies:{"@blackwell-systems/gcf":"^2.2.2","@toon-format/toon":"^4.1.0"},peerDependenciesMeta:{"@blackwell-systems/gcf":{optional:!0},"@toon-format/toon":{optional:!0}}}}};var xS={name:"engineeros-managed-devcontainers",version:"1.0.0",lockfileVersion:3,requires:!0,packages:{"":{name:"engineeros-managed-devcontainers",version:"1.0.0",dependencies:{"@devcontainers/cli":"0.89.0"}},"node_modules/@devcontainers/cli":{version:"0.89.0",resolved:"https://registry.npmjs.org/@devcontainers/cli/-/cli-0.89.0.tgz",integrity:"sha512-LzaoOGKQ/Zql6PsiZ4hVIYVZagzWkD65aG/1ou5/Kly5Y1PtjLg1yn7qu+LZCzVoAl6DZZ/pbz8qOO4RLNlqMg==",license:"MIT",bin:{devcontainer:"devcontainer.js"},engines:{node:">=20.0.0"}}}};var vh={codegraph:bS,"ast-grep":SS,context7:kS,playwright:ES,"chrome-devtools":$S,devcontainers:xS};I();kt();import{createHash as _U,randomBytes as AS}from"node:crypto";import{spawn as vU}from"node:child_process";import{createServer as bU}from"node:http";import{readFile as SU}from"node:fs/promises";import kU from"node:path";import{z as Un}from"zod";var EU=Un.string().regex(/^[a-z][a-z0-9-]{0,63}$/),TS=Un.object({status:Un.enum(["setup_required","signing_in","authenticated","expired","error"]),account_label:Un.string().max(160).nullable(),scopes:Un.array(Un.string().max(120)).max(32),expires_at:Un.string().datetime().nullable(),message:Un.string().max(300),updated_at:Un.string().datetime()}).strict(),RS=Un.object({version:Un.literal(1),providers:Un.record(EU,TS)}).strict(),bh=new Map,wo=new Map;function Zl(e){return yn(e).replace(/\.json$/,".tools-auth.json")}async function Sh(e,t=Zl(e)){try{return RS.parse(JSON.parse(await SU(t,"utf8")))}catch(n){if(n?.code==="ENOENT")return{version:1,providers:{}};throw new Error("Tool authentication state is invalid. Remove the local tools-auth state file and sign in again.")}}async function CS(e,t,n=Zl(e)){let r=RS.parse(t);await be(n,`${JSON.stringify(r,null,2)}
|
|
683
|
+
`):"No local assessment has been recorded yet."}function Yl(e,t){return new RegExp(`^${t}:\\s*(.+)$`,"mi").exec(e)?.[1]?.trim()||null}function WF({projectId:e,capabilities:t,assessment:n,failedRuns:r}){return TF("sha256").update(JSON.stringify({projectId:e,capabilities:t.map(o=>[o.id,o.status]),assessment:[n.document,...n.sections.map(o=>o.excerpt)],failedRuns:r.map(o=>[o.run_id,o.status])})).digest("hex")}import{createHash as im,randomUUID as mG}from"node:crypto";import{isUtf8 as gG}from"node:buffer";import{realpathSync as wG}from"node:fs";import{cp as yG,lstat as gm,mkdir as Eu,readFile as _G,readdir as vG,rm as Tu,stat as wm,utimes as bG,writeFile as bE}from"node:fs/promises";import De from"node:path";import{promisify as KE}from"node:util";import{deflateRaw as SG,gzip as kG}from"node:zlib";I();import Lh from"node:path";import{Readable as YU,Writable as ZU}from"node:stream";import*as Ht from"@agentclientprotocol/sdk";I();import{existsSync as hS,readdirSync as qF,readFileSync as mS}from"node:fs";import fS from"node:os";import ir from"node:path";var VF=/^\d+\.\d+\.\d+(?:[-+][0-9A-Za-z.-]+)?$/,XF=/\.(?:c|m)?js$/i,mh=new Map;function gS(e,t=[],{env:n=process.env,platform:r=process.platform}={}){let o=JSON.stringify([e,t,yS(n,r)]),s=mh.get(o);if(s&&hS(s.args[0]))return s;let i=JF(e,t,n,r);return i?mh.set(o,i):mh.delete(o),i}function JF(e,t,n,r){if(ir.basename(String(e||"")).toLowerCase().replace(/\.(?:cmd|exe|bat)$/,"")!=="npx"||!Array.isArray(t))return null;let s=[...t];for(;s.length&&/^(?:--yes|-y)$/.test(s[0]);)s.shift();let i=KF(s.shift());if(!i||!VF.test(i.version))return null;let a=yS(n,r),c;try{c=qF(ir.join(a,"_npx"))}catch{return null}for(let l of c){let u=ir.join(a,"_npx",l,"node_modules"),p=ir.resolve(u,...i.name.split("/")),d=YF(ir.join(p,"package.json"));if(d?.name!==i.name||d.version!==i.version)continue;let f=ZF(d);if(!f)return null;let h=ir.resolve(p,f);return!h.startsWith(p)||!hS(h)||!QF(h)?null:{command:process.execPath,args:[h,...s],binDirectory:ir.join(u,".bin")}}return null}function wS(e,t){if(!t?.binDirectory)return e;let n=Object.keys(e).find(o=>o.toUpperCase()==="PATH")||"PATH",r=e[n];return{...e,[n]:r?`${t.binDirectory}${ir.delimiter}${r}`:t.binDirectory}}function yS(e,t){return e.npm_config_cache?e.npm_config_cache:t==="win32"?ir.join(e.LOCALAPPDATA||ir.join(fS.homedir(),"AppData","Local"),"npm-cache"):ir.join(fS.homedir(),".npm")}function KF(e){let t=String(e||"").trim();if(!t||t.startsWith("-"))return null;let n=t.lastIndexOf("@");return n<=0?null:{name:t.slice(0,n),version:t.slice(n+1)}}function YF(e){try{return JSON.parse(mS(e,"utf8"))}catch{return null}}function ZF(e){if(typeof e.bin=="string")return e.bin;if(!e.bin||typeof e.bin!="object")return null;let t=Object.entries(e.bin),n=e.name.split("/").pop();return(t.find(([r])=>r===n)||(t.length===1?t[0]:null))?.[1]??null}function QF(e){if(XF.test(e))return!0;try{return/^#!.*\bnode\b/.test(mS(e,"utf8").slice(0,200))}catch{return!1}}Yc();I();import{open as eU,readdir as tU,stat as nU}from"node:fs/promises";import rU from"node:os";import gh from"node:path";var oU=/usage limit|quota|insufficient (?:credit|balance|funds)|credit balance|billing|payment required|subscribe to/i,sU=15e3,iU=1<<20;function wh(e=process.env){return gh.join(e.XDG_DATA_HOME||gh.join(rU.homedir(),".local","share"),"opencode","log")}async function _S(e){let t=(await tU(e).catch(()=>[])).filter(r=>r.endsWith(".log"));return(await Promise.all(t.map(async r=>{let o=gh.join(e,r),s=await nU(o).catch(()=>null);return s?{file:o,size:s.size,changed:s.mtimeMs}:null}))).filter(Boolean).sort((r,o)=>o.changed-r.changed)[0]??null}async function vS(e,{directory:t=wh(),intervalMs:n=sU}={}){let r=await _S(t),o=r?.size??0,s="",i,a=new Promise((d,f)=>{i=f}),c=String(e).replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),l=new RegExp(`level=ERROR\\b.*\\bsession\\.id=${c}\\b.*\\berror\\.error="([^"]*)"`),u=async()=>{let d=await _S(t);if(!d||((d.file!==r?.file||d.size<o)&&(o=0,s=""),r=d,d.size===o))return;let f=Math.max(o,d.size-iU),h=await eU(d.file,"r"),m;try{let _=Buffer.alloc(d.size-f);await h.read(_,0,_.length,f),m=_.toString("utf8")}finally{await h.close()}o=d.size;let g=`${s}${m}`.split(/\r?\n/);s=g.pop()??"";for(let _ of g){let S=l.exec(_)?.[1]?.replace(/^AI_\w+Error:\s*/,"");if(S&&oU.test(S)){clearInterval(p),i(Object.assign(new Error(`OpenCode's model provider refused the request: ${S}`),{refused:!0}));return}}},p=setInterval(()=>{u().catch(()=>{})},n);return p.unref?.(),{refused:a,stop:()=>clearInterval(p)}}I();kt();import{createHash as LS}from"node:crypto";import{lstat as DS,mkdir as FS,mkdtemp as IU,open as US,readdir as jU,rename as NU,rm as eu,unlink as MU,writeFile as PS}from"node:fs/promises";import Ct from"node:path";import{z as ce}from"zod";I();import{z as Rt}from"zod";var aU=Rt.enum(["discovery","research","implementation","verification","handover"]),cU=Rt.object({id:Rt.string().regex(/^[a-z][a-z0-9-]{0,63}$/),name:Rt.string().trim().min(1).max(80),provider:Rt.string().trim().min(1).max(80),category:Rt.enum(["code-intelligence","design","work-management","source-control","documentation","web-research","api-development","browser-testing","quality-security","data","infrastructure","observability","development-environment"]),integration:Rt.enum(["mcp","cli","skill"]),provenance:Rt.enum(["official-provider","open-source-project"]),source:Rt.string().url().max(500).refine(e=>{let t=new URL(e);return t.protocol==="https:"&&!t.username&&!t.password},"Use a credential-free HTTPS source URL."),selection_group:Rt.string().regex(/^[a-z][a-z0-9-]{0,63}$/),profiles:Rt.array(aU).min(1).max(5),activation:Rt.string().trim().min(1).max(180),default_policy:Rt.enum(["read-only","approval-for-writes","deterministic-gate"]),setup:Rt.object({kind:Rt.enum(["automatic","local-prerequisite","external-auth","provider-configuration"]),summary:Rt.string().trim().min(1).max(300),commands:Rt.array(Rt.object({label:Rt.string().trim().min(1).max(80),command:Rt.string().trim().min(1).max(300)}).strict()).max(4)}).strict()}).strict(),lU=[["codegraph","CodeGraph","CodeGraph","code-intelligence","mcp","open-source-project","https://github.com/codegraph-ai/CodeGraph","code-intelligence",["discovery","implementation","verification"],"Use for brownfield symbol, dependency and call-path discovery when a fresh index exists.","read-only"],["serena","Serena","Oraios","code-intelligence","mcp","open-source-project","https://github.com/oraios/serena","code-intelligence",["discovery","implementation"],"Evaluate as an alternative to CodeGraph for semantic symbol navigation and refactoring.","approval-for-writes"],["jetbrains","JetBrains IDE MCP","JetBrains","code-intelligence","mcp","official-provider","https://www.jetbrains.com/help/rider/mcp-server.html","code-intelligence",["discovery","implementation","verification"],"Use when a supported JetBrains IDE is running and its project index is ready.","approval-for-writes"],["ast-grep","ast-grep","ast-grep","code-intelligence","cli","open-source-project","https://github.com/ast-grep/ast-grep","structural-analysis",["discovery","implementation","verification"],"Use for deterministic structural search, repository rules and approved codemods.","approval-for-writes"],["figma","Figma","Figma","design","mcp","official-provider","https://help.figma.com/hc/en-us/articles/32132100833559-Guide-to-the-Figma-MCP-server","design-system",["discovery","implementation","verification"],"Use for UI work when the Goal cites a Figma file, node or project design system.","approval-for-writes"],["storybook","Storybook","Storybook","design","mcp","open-source-project","https://github.com/storybookjs/storybook","component-catalog",["discovery","implementation","verification"],"Use when the repository contains a Storybook configuration or component stories.","read-only"],["miro","Miro","Miro","design","mcp","official-provider","https://developers.miro.com/docs/miro-mcp","diagramming",["discovery","research","handover"],"Use when a Goal cites a Miro board or requests an approved planning diagram.","approval-for-writes"],["lucid","Lucid","Lucid","design","mcp","official-provider","https://help.lucid.co/hc/en-us/articles/42578801807508-Integrate-Lucid-with-AI-tools-using-the-Lucid-MCP-server","diagramming",["discovery","research","handover"],"Use when a Goal cites a Lucid document or requests an approved architecture diagram.","approval-for-writes"],["linear","Linear","Linear","work-management","mcp","official-provider","https://linear.app/docs/mcp","work-tracker",["discovery","implementation","handover"],"Use only when Linear is the project's configured authoritative external tracker.","approval-for-writes"],["monday","monday.com","monday.com","work-management","mcp","official-provider","https://github.com/mondaycom/mcp","work-tracker",["discovery","implementation","handover"],"Use only when monday.com is the project's configured authoritative external tracker.","approval-for-writes"],["atlassian-rovo","Atlassian Rovo","Atlassian","work-management","mcp","official-provider","https://developer.atlassian.com/cloud/rovo-mcp/","work-tracker",["discovery","research","implementation","handover"],"Use for Jira, Confluence or Bitbucket projects after the Atlassian site is selected.","approval-for-writes"],["youtrack","YouTrack","JetBrains","work-management","mcp","official-provider","https://www.jetbrains.com/help/youtrack/devportal/ai-tools.html","work-tracker",["discovery","implementation","handover"],"Use only when YouTrack is the project's configured authoritative external tracker.","approval-for-writes"],["notion","Notion","Notion","documentation","mcp","official-provider","https://github.com/makenotion/notion-mcp-server","knowledge-base",["discovery","research","handover"],"Use when approved Notion pages contain specifications, decisions or runbooks for the Goal.","approval-for-writes"],["slack","Slack","Slack","documentation","mcp","official-provider","https://docs.slack.dev/ai/slack-mcp-server","team-communication",["discovery","research","handover"],"Use to retrieve cited team decisions or publish an explicitly approved delivery update.","approval-for-writes"],["github","GitHub","GitHub","source-control","mcp","official-provider","https://github.com/github/github-mcp-server","source-control",["discovery","implementation","verification","handover"],"Use when the configured repository remote is hosted on GitHub.","approval-for-writes"],["gitlab","GitLab","GitLab","source-control","mcp","official-provider","https://docs.gitlab.com/user/model_context_protocol/mcp_server/","source-control",["discovery","implementation","verification","handover"],"Use when the configured repository remote is hosted on GitLab.","approval-for-writes"],["context7","Context7","Upstash","documentation","mcp","official-provider","https://github.com/upstash/context7","library-documentation",["research","implementation","verification"],"Use for current version-specific framework and library documentation.","read-only"],["postman","Postman","Postman","api-development","mcp","official-provider","https://learning.postman.com/docs/developer/postman-api/postman-mcp-server/overview","api-workspace",["discovery","implementation","verification"],"Use the minimal or code toolset when a Goal references Postman or an API collection.","approval-for-writes"],["exa","Exa","Exa","web-research","mcp","official-provider","https://github.com/exa-labs/exa-mcp-server","web-research",["research"],"Select as the single web research provider for technical and code research.","read-only"],["tavily","Tavily","Tavily","web-research","mcp","official-provider","https://github.com/tavily-ai/tavily-mcp","web-research",["research"],"Select as an alternative single provider for search, extraction, mapping and crawling.","read-only"],["firecrawl","Firecrawl","Firecrawl","web-research","mcp","official-provider","https://github.com/firecrawl/firecrawl-mcp-server","web-extraction",["research"],"Use on demand for approved site extraction or crawling when ordinary fetch cannot read a source.","read-only"],["perplexity","Perplexity","Perplexity","web-research","mcp","official-provider","https://github.com/perplexityai/modelcontextprotocol","web-research",["research"],"Select as an alternative single search-backed research provider.","read-only"],["playwright","Playwright","Microsoft","browser-testing","mcp","official-provider","https://github.com/microsoft/playwright-mcp","browser-automation",["implementation","verification"],"Use for browser journeys and UI acceptance checks against approved test hosts.","approval-for-writes"],["chrome-devtools","Chrome DevTools","Google","browser-testing","mcp","official-provider","https://github.com/ChromeDevTools/chrome-devtools-mcp","browser-diagnostics",["implementation","verification"],"Use for targeted console, network and performance diagnosis rather than routine acceptance.","approval-for-writes"],["browserstack","BrowserStack","BrowserStack","browser-testing","mcp","official-provider","https://github.com/browserstack/mcp-server","device-testing",["verification"],"Use when acceptance requires real devices or a cross-browser matrix.","approval-for-writes"],["semgrep","Semgrep","Semgrep","quality-security","cli","official-provider","https://github.com/semgrep/semgrep","static-security",["implementation","verification"],"Run deterministic project security rules; use its MCP layer only to investigate findings.","deterministic-gate"],["sonarqube","SonarQube","SonarSource","quality-security","mcp","official-provider","https://github.com/SonarSource/sonarqube-mcp-server","quality-platform",["implementation","verification"],"Use when the project is already connected to SonarQube or SonarQube Cloud.","read-only"],["snyk","Snyk","Snyk","quality-security","mcp","official-provider","https://github.com/snyk/studio-mcp","security-platform",["implementation","verification"],"Use when the project already has Snyk policy or organization configuration.","read-only"],["gitleaks","Gitleaks","Gitleaks","quality-security","cli","open-source-project","https://github.com/gitleaks/gitleaks","secret-scanning",["implementation","verification"],"Run as a deterministic secret scan before final handover.","deterministic-gate"],["trivy","Trivy","Aqua Security","quality-security","cli","official-provider","https://github.com/aquasecurity/trivy","supply-chain-security",["implementation","verification"],"Run relevant repository, dependency, image and infrastructure scans deterministically.","deterministic-gate"],["postgres","PostgreSQL MCP","Microsoft","data","mcp","official-provider","https://github.com/microsoft/postgres-mcp","database",["discovery","implementation","verification"],"Use only with a least-privileged read-only development or test database role.","read-only"],["supabase","Supabase","Supabase","data","mcp","official-provider","https://github.com/supabase/mcp","database",["discovery","implementation","verification"],"Use a project-scoped read-only connection when Supabase configuration is detected.","approval-for-writes"],["terraform","Terraform","HashiCorp","infrastructure","mcp","official-provider","https://github.com/hashicorp/terraform-mcp-server","infrastructure-as-code",["research","implementation","verification"],"Use when Terraform files or an approved HCP Terraform workspace are present.","approval-for-writes"],["aws","AWS MCP Servers","Amazon Web Services","infrastructure","mcp","official-provider","https://github.com/awslabs/mcp","cloud-provider",["research","implementation","verification","handover"],"Select only service-specific AWS servers evidenced by the repository and assignment.","approval-for-writes"],["azure","Azure MCP","Microsoft","infrastructure","mcp","official-provider","https://github.com/microsoft/mcp","cloud-provider",["research","implementation","verification","handover"],"Use only when Azure configuration and an approved subscription scope are present.","approval-for-writes"],["cloudflare","Cloudflare","Cloudflare","infrastructure","mcp","official-provider","https://github.com/cloudflare/mcp","cloud-provider",["research","implementation","verification","handover"],"Use only for Cloudflare projects with narrowly selected account permissions.","approval-for-writes"],["vercel","Vercel","Vercel","infrastructure","mcp","official-provider","https://vercel.com/docs/agent-resources/vercel-mcp","cloud-provider",["research","implementation","verification","handover"],"Use only when the repository is linked to an approved Vercel project.","approval-for-writes"],["sentry","Sentry","Sentry","observability","mcp","official-provider","https://github.com/getsentry/sentry-mcp","observability",["discovery","verification"],"Use for read-only error, trace and issue investigation in Sentry-backed projects.","read-only"],["grafana","Grafana","Grafana Labs","observability","mcp","official-provider","https://github.com/grafana/mcp-grafana","observability",["discovery","verification"],"Use for read-only metrics, logs, traces, dashboards and alert investigation.","read-only"],["datadog","Datadog","Datadog","observability","mcp","official-provider","https://docs.datadoghq.com/mcp_server/","observability",["discovery","verification"],"Use only required Datadog toolsets under existing RBAC and data-access controls.","read-only"],["pagerduty","PagerDuty","PagerDuty","observability","mcp","official-provider","https://support.pagerduty.com/main/docs/pagerduty-mcp-server","incident-management",["discovery","verification","handover"],"Use the hosted server for incident context; incident changes require explicit approval.","approval-for-writes"],["renovate","Renovate","Mend","development-environment","cli","official-provider","https://github.com/renovatebot/renovate","dependency-maintenance",["implementation","verification"],"Run as a scheduled dependency-maintenance workflow, separate from Goal execution.","approval-for-writes"],["devcontainers","Dev Container CLI","Dev Containers","development-environment","cli","open-source-project","https://github.com/devcontainers/cli","development-environment",["implementation","verification"],"Use as a reproducible execution substrate when a dev container definition exists.","deterministic-gate"],["docker-mcp-gateway","Docker MCP Gateway","Docker","development-environment","cli","official-provider","https://github.com/docker/mcp-gateway","mcp-runtime",["discovery","research","implementation","verification","handover"],"Evaluate as the isolated runtime for admitted local MCP servers, not as policy authority.","deterministic-gate"]],uU=new Set(["codegraph","ast-grep","figma","linear","context7","playwright","chrome-devtools","devcontainers"]),yh={serena:["Install Serena with uv","uv tool install -p 3.13 serena-agent"],jetbrains:["Enable the IDE MCP server","Open Settings > Tools > MCP Server in the running JetBrains IDE and choose Enable"],storybook:["Initialize Storybook in this repository","npx storybook@latest init"],semgrep:["Install Semgrep","python -m pip install semgrep"],gitleaks:["Install Gitleaks on Windows","winget install Gitleaks.Gitleaks"],trivy:["Install Trivy on Windows","winget install AquaSecurity.Trivy"],renovate:["Install Renovate","npm install --global renovate"],"docker-mcp-gateway":["Check Docker MCP support","docker mcp --help"]},_h={github:["Sign in to GitHub","gh auth login"],gitlab:["Sign in to GitLab","glab auth login"],snyk:["Authenticate Snyk","snyk auth"],aws:["Sign in with AWS SSO","aws sso login"],azure:["Sign in to Azure","az login"],cloudflare:["Sign in to Cloudflare","wrangler login"],vercel:["Sign in to Vercel","vercel login"],supabase:["Sign in to Supabase","supabase login"]};function dU(e,t){return uU.has(e)?{kind:"automatic",summary:`Detect, install when needed, and register ${t} on the connected machine.`,commands:[]}:yh[e]?{kind:"local-prerequisite",summary:`${t} requires local software or an application setting before it can be registered.`,commands:[{label:yh[e][0],command:yh[e][1]}]}:_h[e]?{kind:"external-auth",summary:"Authenticate the vendor CLI locally, then check setup again. Credentials remain on this machine.",commands:[{label:_h[e][0],command:_h[e][1]}]}:{kind:"provider-configuration",summary:`${t} requires provider-specific account, project, endpoint, or credential configuration. Follow the provider guide, then check setup again.`,commands:[]}}function pU(e){let[t,n,r,o,s,i,a,c,l,u,p]=e;return cU.parse({id:t,name:n,provider:r,category:o,integration:s,provenance:i,source:a,selection_group:c,profiles:l,activation:u,default_policy:p,setup:dU(t,n)})}var Fs=Object.freeze(lU.map(pU));if(new Set(Fs.map(e=>e.id)).size!==Fs.length)throw new Error("Curated tool catalog IDs must be unique.");I();var bS={name:"engineeros-managed-codegraph",version:"1.0.0",lockfileVersion:3,requires:!0,packages:{"":{name:"engineeros-managed-codegraph",version:"1.0.0",dependencies:{"@astudioplus/codegraph-mcp":"0.21.0"}},"node_modules/@astudioplus/codegraph-mcp":{version:"0.21.0",resolved:"https://registry.npmjs.org/@astudioplus/codegraph-mcp/-/codegraph-mcp-0.21.0.tgz",integrity:"sha512-9F43S5fL+pQ2pJTVoLB+PvOg7UglIQaSZdHEA6HZ7q4bRKVouskDnH5J4RWKVw6SlDXDxl8ijLdR5+YGF6l6dg==",cpu:["x64","arm64"],hasInstallScript:!0,license:"Apache-2.0",os:["darwin","linux","win32"],dependencies:{"posthog-node":"^4.18.0"},bin:{"codegraph-daemon":"bin/codegraph-daemon.js","codegraph-mcp":"bin/codegraph-mcp.js","codegraph-mcp-fetch-engine":"bin/fetch-engine-cli.js","codegraph-mcp-install-hooks":"bin/install-hooks.js"},engines:{node:">=18.0.0"}},"node_modules/agent-base":{version:"6.0.2",resolved:"https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",integrity:"sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",license:"MIT",dependencies:{debug:"4"},engines:{node:">= 6.0.0"}},"node_modules/asynckit":{version:"0.4.0",resolved:"https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",integrity:"sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==",license:"MIT"},"node_modules/axios":{version:"1.20.0",resolved:"https://registry.npmjs.org/axios/-/axios-1.20.0.tgz",integrity:"sha512-r8aOh8j9cGKpgQAqpzrUHnSIc6a59Y3Xf/cv8sy1DrHCkZHzQGEuoq1tARk6qSyDdtQGSDgpb9kFlruzPvrgwg==",license:"MIT",dependencies:{"follow-redirects":"^1.16.0","form-data":"^4.0.6","https-proxy-agent":"^5.0.1","proxy-from-env":"^2.1.0"}},"node_modules/call-bind-apply-helpers":{version:"1.0.2",resolved:"https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",integrity:"sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",license:"MIT",dependencies:{"es-errors":"^1.3.0","function-bind":"^1.1.2"},engines:{node:">= 0.4"}},"node_modules/combined-stream":{version:"1.0.8",resolved:"https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",integrity:"sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",license:"MIT",dependencies:{"delayed-stream":"~1.0.0"},engines:{node:">= 0.8"}},"node_modules/debug":{version:"4.4.3",resolved:"https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",integrity:"sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",license:"MIT",dependencies:{ms:"^2.1.3"},engines:{node:">=6.0"},peerDependenciesMeta:{"supports-color":{optional:!0}}},"node_modules/delayed-stream":{version:"1.0.0",resolved:"https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",integrity:"sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==",license:"MIT",engines:{node:">=0.4.0"}},"node_modules/dunder-proto":{version:"1.0.1",resolved:"https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",integrity:"sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",license:"MIT",dependencies:{"call-bind-apply-helpers":"^1.0.1","es-errors":"^1.3.0",gopd:"^1.2.0"},engines:{node:">= 0.4"}},"node_modules/es-define-property":{version:"1.0.1",resolved:"https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",integrity:"sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",license:"MIT",engines:{node:">= 0.4"}},"node_modules/es-errors":{version:"1.3.0",resolved:"https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",integrity:"sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",license:"MIT",engines:{node:">= 0.4"}},"node_modules/es-object-atoms":{version:"1.1.2",resolved:"https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz",integrity:"sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==",license:"MIT",dependencies:{"es-errors":"^1.3.0"},engines:{node:">= 0.4"}},"node_modules/es-set-tostringtag":{version:"2.1.0",resolved:"https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz",integrity:"sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==",license:"MIT",dependencies:{"es-errors":"^1.3.0","get-intrinsic":"^1.2.6","has-tostringtag":"^1.0.2",hasown:"^2.0.2"},engines:{node:">= 0.4"}},"node_modules/follow-redirects":{version:"1.16.1",resolved:"https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.1.tgz",integrity:"sha512-FNvFGzoMLWmE6Yj9spb/zjd7yiNCHiAW9/Tg9CXrQ8wuu32HtlJOwWO11OJafl5FfY3DxTdQ0vj42zU1kvv5jg==",funding:[{type:"individual",url:"https://github.com/sponsors/RubenVerborgh"}],license:"MIT",engines:{node:">=4.0"},peerDependenciesMeta:{debug:{optional:!0}}},"node_modules/form-data":{version:"4.0.6",resolved:"https://registry.npmjs.org/form-data/-/form-data-4.0.6.tgz",integrity:"sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==",license:"MIT",dependencies:{asynckit:"^0.4.0","combined-stream":"^1.0.8","es-set-tostringtag":"^2.1.0",hasown:"^2.0.4","mime-types":"^2.1.35"},engines:{node:">= 6"}},"node_modules/function-bind":{version:"1.1.2",resolved:"https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",integrity:"sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",license:"MIT",funding:{url:"https://github.com/sponsors/ljharb"}},"node_modules/get-intrinsic":{version:"1.3.0",resolved:"https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",integrity:"sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",license:"MIT",dependencies:{"call-bind-apply-helpers":"^1.0.2","es-define-property":"^1.0.1","es-errors":"^1.3.0","es-object-atoms":"^1.1.1","function-bind":"^1.1.2","get-proto":"^1.0.1",gopd:"^1.2.0","has-symbols":"^1.1.0",hasown:"^2.0.2","math-intrinsics":"^1.1.0"},engines:{node:">= 0.4"},funding:{url:"https://github.com/sponsors/ljharb"}},"node_modules/get-proto":{version:"1.0.1",resolved:"https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",integrity:"sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",license:"MIT",dependencies:{"dunder-proto":"^1.0.1","es-object-atoms":"^1.0.0"},engines:{node:">= 0.4"}},"node_modules/gopd":{version:"1.2.0",resolved:"https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",integrity:"sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",license:"MIT",engines:{node:">= 0.4"},funding:{url:"https://github.com/sponsors/ljharb"}},"node_modules/has-symbols":{version:"1.1.0",resolved:"https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",integrity:"sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",license:"MIT",engines:{node:">= 0.4"},funding:{url:"https://github.com/sponsors/ljharb"}},"node_modules/has-tostringtag":{version:"1.0.2",resolved:"https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz",integrity:"sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==",license:"MIT",dependencies:{"has-symbols":"^1.0.3"},engines:{node:">= 0.4"},funding:{url:"https://github.com/sponsors/ljharb"}},"node_modules/hasown":{version:"2.0.4",resolved:"https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz",integrity:"sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==",license:"MIT",dependencies:{"function-bind":"^1.1.2"},engines:{node:">= 0.4"}},"node_modules/https-proxy-agent":{version:"5.0.1",resolved:"https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",integrity:"sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",license:"MIT",dependencies:{"agent-base":"6",debug:"4"},engines:{node:">= 6"}},"node_modules/math-intrinsics":{version:"1.1.0",resolved:"https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",integrity:"sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",license:"MIT",engines:{node:">= 0.4"}},"node_modules/mime-db":{version:"1.52.0",resolved:"https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",integrity:"sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",license:"MIT",engines:{node:">= 0.6"}},"node_modules/mime-types":{version:"2.1.35",resolved:"https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",integrity:"sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",license:"MIT",dependencies:{"mime-db":"1.52.0"},engines:{node:">= 0.6"}},"node_modules/ms":{version:"2.1.3",resolved:"https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",integrity:"sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",license:"MIT"},"node_modules/posthog-node":{version:"4.18.0",resolved:"https://registry.npmjs.org/posthog-node/-/posthog-node-4.18.0.tgz",integrity:"sha512-XROs1h+DNatgKh/AlIlCtDxWzwrKdYDb2mOs58n4yN8BkGN9ewqeQwG5ApS4/IzwCb7HPttUkOVulkYatd2PIw==",license:"MIT",dependencies:{axios:"^1.8.2"},engines:{node:">=15.0.0"}},"node_modules/proxy-from-env":{version:"2.1.0",resolved:"https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz",integrity:"sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==",license:"MIT",engines:{node:">=10"}}}};var SS={name:"engineeros-managed-ast-grep",version:"1.0.0",lockfileVersion:3,requires:!0,packages:{"":{name:"engineeros-managed-ast-grep",version:"1.0.0",dependencies:{"@ast-grep/cli":"0.51.0"}},"node_modules/@ast-grep/cli":{version:"0.51.0",resolved:"https://registry.npmjs.org/@ast-grep/cli/-/cli-0.51.0.tgz",integrity:"sha512-sIZEt4L4iQJRM2QDKQnbltQxddIsxzt9nmguw3/X7eP3cFwBopsZtFRvaEVht/3/6C1xe3Opn/pbsxSFVJDvpA==",hasInstallScript:!0,license:"MIT",dependencies:{"detect-libc":"2.1.2"},bin:{"ast-grep":"ast-grep",sg:"sg"},engines:{node:">= 12.0.0"},optionalDependencies:{"@ast-grep/cli-darwin-arm64":"0.51.0","@ast-grep/cli-darwin-x64":"0.51.0","@ast-grep/cli-linux-arm64-gnu":"0.51.0","@ast-grep/cli-linux-x64-gnu":"0.51.0","@ast-grep/cli-win32-arm64-msvc":"0.51.0","@ast-grep/cli-win32-ia32-msvc":"0.51.0","@ast-grep/cli-win32-x64-msvc":"0.51.0"}},"node_modules/@ast-grep/cli-darwin-arm64":{version:"0.51.0",resolved:"https://registry.npmjs.org/@ast-grep/cli-darwin-arm64/-/cli-darwin-arm64-0.51.0.tgz",integrity:"sha512-LYh8du1Qd1xFMi15Lh6xnWgHBZGbdCVyQVHOsaqEbICXvd8oAdEIex8ywTt2PwODYAMt6TD7p94S2/kt5dJ1tQ==",cpu:["arm64"],license:"MIT",optional:!0,os:["darwin"],engines:{node:">= 10"}},"node_modules/@ast-grep/cli-darwin-x64":{version:"0.51.0",resolved:"https://registry.npmjs.org/@ast-grep/cli-darwin-x64/-/cli-darwin-x64-0.51.0.tgz",integrity:"sha512-RF3FsO3XsGt+qLqpqbHiKKhly9/Pd08mVnvxx86Qli3DokvIFRAR8KlsTDnql4hsNgAbacp4vyDJsf/pBhh8iw==",cpu:["x64"],license:"MIT",optional:!0,os:["darwin"],engines:{node:">= 10"}},"node_modules/@ast-grep/cli-linux-arm64-gnu":{version:"0.51.0",resolved:"https://registry.npmjs.org/@ast-grep/cli-linux-arm64-gnu/-/cli-linux-arm64-gnu-0.51.0.tgz",integrity:"sha512-aYT07uAVSA3nfoofdVXJuL44DGt1lIOj/GGSNy9mrIiD3TeBv5wxNNXHjMw96bkACdOp8pFMwiuCLY8pMtCT7Q==",cpu:["arm64"],libc:["glibc"],license:"MIT",optional:!0,os:["linux"],engines:{node:">= 10"}},"node_modules/@ast-grep/cli-linux-x64-gnu":{version:"0.51.0",resolved:"https://registry.npmjs.org/@ast-grep/cli-linux-x64-gnu/-/cli-linux-x64-gnu-0.51.0.tgz",integrity:"sha512-ljsdvSrmnmQZaB/lrtLuOP3k3AYCb+TNpPCMi4OQuF1vRBFwMdsES0xrL9iUpJ8ioyIy1h5qTM1T4z5OeoGIvw==",cpu:["x64"],libc:["glibc"],license:"MIT",optional:!0,os:["linux"],engines:{node:">= 10"}},"node_modules/@ast-grep/cli-win32-arm64-msvc":{version:"0.51.0",resolved:"https://registry.npmjs.org/@ast-grep/cli-win32-arm64-msvc/-/cli-win32-arm64-msvc-0.51.0.tgz",integrity:"sha512-G0eb9EmwWvsaJSZI929PCcJhBBeFiB7oAndml5weI1iDjDVn7f5u8jb4wEsovA9W5wy70MjYfH7/H59ogQr8Nw==",cpu:["arm64"],license:"MIT",optional:!0,os:["win32"],engines:{node:">= 10"}},"node_modules/@ast-grep/cli-win32-ia32-msvc":{version:"0.51.0",resolved:"https://registry.npmjs.org/@ast-grep/cli-win32-ia32-msvc/-/cli-win32-ia32-msvc-0.51.0.tgz",integrity:"sha512-68oC9L73Nq7Wi34aEqcUSIhIYaaM4PpVrrlcbobn4cAKSlUEMIC/9aKsKo6pknQYwSNr9dyIFX92zXIoTRNbcg==",cpu:["ia32"],license:"MIT",optional:!0,os:["win32"],engines:{node:">= 10"}},"node_modules/@ast-grep/cli-win32-x64-msvc":{version:"0.51.0",resolved:"https://registry.npmjs.org/@ast-grep/cli-win32-x64-msvc/-/cli-win32-x64-msvc-0.51.0.tgz",integrity:"sha512-lYsKBG0Wn/vk8Zbeo60l+Lms317mL1xpW6Dvv68k3F57vqlMHkWR2tuNcyWC3OVJXbas8dFMoe1R+6wkofIC+g==",cpu:["x64"],license:"MIT",optional:!0,os:["win32"],engines:{node:">= 10"}},"node_modules/detect-libc":{version:"2.1.2",resolved:"https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz",integrity:"sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==",license:"Apache-2.0",engines:{node:">=8"}}}};var kS={name:"engineeros-managed-context7",version:"1.0.0",lockfileVersion:3,requires:!0,packages:{"":{name:"engineeros-managed-context7",version:"1.0.0",dependencies:{"@upstash/context7-mcp":"4.4.4"}},"node_modules/@hono/node-server":{version:"1.19.17",resolved:"https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.17.tgz",integrity:"sha512-dSneS5qhiauZWGDCeK4o695Xd9nUNjviSZCMQrj10eetr8Uln1ucn6bbphOM6UynAMMtNIzZNSpL9vnASJwrPQ==",license:"MIT",engines:{node:">=18.14.1"},peerDependencies:{hono:"^4"}},"node_modules/@modelcontextprotocol/core":{version:"2.3.1",resolved:"https://registry.npmjs.org/@modelcontextprotocol/core/-/core-2.3.1.tgz",integrity:"sha512-laVmIhPGpWi7rG9q+0UigblRN0Hws/Yjlb6qLFtVqryXVLkc4h+yN8z731POD2LnAGQlFe7/tXhUm7Bi0YB91g==",license:"Apache-2.0",dependencies:{zod:"^4.2.0"},engines:{node:">=20"}},"node_modules/@modelcontextprotocol/node":{version:"2.1.1",resolved:"https://registry.npmjs.org/@modelcontextprotocol/node/-/node-2.1.1.tgz",integrity:"sha512-EY92OAXN2xYL7tNS/MVsWJW1v8VHAPwl9B4Ca3pCrjmvqyC+S1C/6UHsMxF2GoFPraS5Yyg56vFz9brVpFojMA==",license:"Apache-2.0",dependencies:{"@hono/node-server":"^1.19.9",hono:"^4.11.4"},engines:{node:">=20"},peerDependencies:{"@modelcontextprotocol/server":"^2.3.0"}},"node_modules/@modelcontextprotocol/server":{version:"2.3.1",resolved:"https://registry.npmjs.org/@modelcontextprotocol/server/-/server-2.3.1.tgz",integrity:"sha512-e59MfWuSssj6DoQ96JCTqdW1AXT5/XtnTl0WWd6MU1Ka434fFUGGosCLJbGNySDhHGvxQWoRWK137FXYFkYNWw==",license:"Apache-2.0",dependencies:{"@modelcontextprotocol/core":"2.3.1",zod:"^4.2.0"},engines:{node:">=20"}},"node_modules/@opentelemetry/api":{version:"1.9.1",resolved:"https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.1.tgz",integrity:"sha512-gLyJlPHPZYdAk1JENA9LeHejZe1Ti77/pTeFm/nMXmQH/HFZlcS/O2XJB+L8fkbrNSqhdtlvjBVjxwUYanNH5Q==",license:"Apache-2.0",engines:{node:">=8.0.0"}},"node_modules/@opentelemetry/api-logs":{version:"0.222.0",resolved:"https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.222.0.tgz",integrity:"sha512-9mb1If+IF6u0ZVXkHQ6ogEae5HwA6ajIVUgpSDQyRASxft6BSXHvBvPooRle3yFN/fKnCdSOnuu0OC3PLcF6+g==",license:"Apache-2.0",dependencies:{"@opentelemetry/api":"^1.3.0"},engines:{node:">=8.0.0"}},"node_modules/@opentelemetry/core":{version:"2.11.0",resolved:"https://registry.npmjs.org/@opentelemetry/core/-/core-2.11.0.tgz",integrity:"sha512-7YP44XH0tV6+Mb54x2YGf84i7yi+31MBZlE8JwvozkxyTvXbSp10X7cI7YE49ChJ3shMJoBmCJF3+1QFBJctGA==",license:"Apache-2.0",dependencies:{"@opentelemetry/semantic-conventions":"^1.29.0"},engines:{node:"^18.19.0 || >=20.6.0"},peerDependencies:{"@opentelemetry/api":">=1.0.0 <1.10.0"}},"node_modules/@opentelemetry/exporter-prometheus":{version:"0.222.0",resolved:"https://registry.npmjs.org/@opentelemetry/exporter-prometheus/-/exporter-prometheus-0.222.0.tgz",integrity:"sha512-I7nalnnBZrhlTgjlqsVeEjJGcQCFK5kKAYVk7XTz/cbubvj5fvjLOal/Many0taHF2GIkOWmegsbQ8vbQJjhFg==",license:"Apache-2.0",dependencies:{"@opentelemetry/core":"2.11.0","@opentelemetry/resources":"2.11.0","@opentelemetry/sdk-metrics":"2.11.0","@opentelemetry/semantic-conventions":"^1.29.0"},engines:{node:"^18.19.0 || >=20.6.0"},peerDependencies:{"@opentelemetry/api":"^1.3.0"}},"node_modules/@opentelemetry/exporter-prometheus/node_modules/@opentelemetry/resources":{version:"2.11.0",resolved:"https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.11.0.tgz",integrity:"sha512-Ie7+8q8MDF4FAEQCKVMTx3ReUvxiIAgIiiW3c9JdmP8+HMcDy20puT+AHjexnExgnbvBxjQ9fjkFDWrikJ2jQA==",license:"Apache-2.0",dependencies:{"@opentelemetry/core":"2.11.0","@opentelemetry/semantic-conventions":"^1.29.0"},engines:{node:"^18.19.0 || >=20.6.0"},peerDependencies:{"@opentelemetry/api":">=1.3.0 <1.10.0"}},"node_modules/@opentelemetry/exporter-prometheus/node_modules/@opentelemetry/sdk-metrics":{version:"2.11.0",resolved:"https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-2.11.0.tgz",integrity:"sha512-7GXXcObyHyDUUSG+L+kJoquty01bzm7ivE7+SSgXXJcHuPzGviptxwARmI2c+bnnxjexGQbJnyNlN8HxBP/Y7A==",license:"Apache-2.0",dependencies:{"@opentelemetry/core":"2.11.0","@opentelemetry/resources":"2.11.0"},engines:{node:"^18.19.0 || >=20.6.0"},peerDependencies:{"@opentelemetry/api":">=1.9.0 <1.10.0"}},"node_modules/@opentelemetry/instrumentation":{version:"0.222.0",resolved:"https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.222.0.tgz",integrity:"sha512-fhbRDuAgzPKpq1k5+hX3uS+3QAYNca0on0Ngot/R8dDsQtuFaADeZnG2uSgxABuvcI7S2phAaRhbct9jieeKZw==",license:"Apache-2.0",dependencies:{"@opentelemetry/api-logs":"0.222.0","import-in-the-middle":"^3.0.0","require-in-the-middle":"^8.0.0"},engines:{node:"^18.19.0 || >=20.6.0"},peerDependencies:{"@opentelemetry/api":"^1.3.0"}},"node_modules/@opentelemetry/instrumentation-runtime-node":{version:"0.35.0",resolved:"https://registry.npmjs.org/@opentelemetry/instrumentation-runtime-node/-/instrumentation-runtime-node-0.35.0.tgz",integrity:"sha512-/cOW4Qlv4nnr4QXDCkv0TEtOBa9R9lXHu//JuD5+nRPYR74g9iLmf5tadcYvn32oz2R8vQnV8FTnMLzjfAGMCQ==",license:"Apache-2.0",dependencies:{"@opentelemetry/api-logs":"^0.222.0","@opentelemetry/core":"^2.0.0","@opentelemetry/instrumentation":"^0.222.0"},engines:{node:"^18.19.0 || >=20.6.0"},peerDependencies:{"@opentelemetry/api":"^1.3.0"}},"node_modules/@opentelemetry/resources":{version:"2.12.0",resolved:"https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.12.0.tgz",integrity:"sha512-+rSRoOdln6NhXTVcBdHSlZxJDNzwxadeweK2ltZO3tVtfp6aklABc06xclDk6ovRR+EiGgIcSbh/6NgjFhnb3A==",license:"Apache-2.0",dependencies:{"@opentelemetry/core":"2.12.0","@opentelemetry/semantic-conventions":"^1.29.0"},engines:{node:"^18.19.0 || >=20.6.0"},peerDependencies:{"@opentelemetry/api":">=1.3.0 <1.10.0"}},"node_modules/@opentelemetry/resources/node_modules/@opentelemetry/core":{version:"2.12.0",resolved:"https://registry.npmjs.org/@opentelemetry/core/-/core-2.12.0.tgz",integrity:"sha512-1HsSAuvT4/my0QrXWsyXFdWjKaPeCHsismKZgEEIb8NK13LP6DrMRlsUbvD/0F9mDWK3xDom9AMv3IscxgOnOQ==",license:"Apache-2.0",dependencies:{"@opentelemetry/semantic-conventions":"^1.29.0"},engines:{node:"^18.19.0 || >=20.6.0"},peerDependencies:{"@opentelemetry/api":">=1.0.0 <1.10.0"}},"node_modules/@opentelemetry/sdk-metrics":{version:"2.12.0",resolved:"https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-2.12.0.tgz",integrity:"sha512-mVMaEHwCUJuY3S4Esn+nT0yQA3qCEGh+SOPJsXygU0Gl453WcsDNjtEa8EfdewMwoLyr1tlofB4fXytVpiXuow==",license:"Apache-2.0",dependencies:{"@opentelemetry/core":"2.12.0","@opentelemetry/resources":"2.12.0"},engines:{node:"^18.19.0 || >=20.6.0"},peerDependencies:{"@opentelemetry/api":">=1.9.0 <1.10.0"}},"node_modules/@opentelemetry/sdk-metrics/node_modules/@opentelemetry/core":{version:"2.12.0",resolved:"https://registry.npmjs.org/@opentelemetry/core/-/core-2.12.0.tgz",integrity:"sha512-1HsSAuvT4/my0QrXWsyXFdWjKaPeCHsismKZgEEIb8NK13LP6DrMRlsUbvD/0F9mDWK3xDom9AMv3IscxgOnOQ==",license:"Apache-2.0",dependencies:{"@opentelemetry/semantic-conventions":"^1.29.0"},engines:{node:"^18.19.0 || >=20.6.0"},peerDependencies:{"@opentelemetry/api":">=1.0.0 <1.10.0"}},"node_modules/@opentelemetry/semantic-conventions":{version:"1.43.0",resolved:"https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.43.0.tgz",integrity:"sha512-eSYWTm620tTk45EKSedaUL8MFYI8hW164hIXsgIHyxu3VobUB3fFCu5t0hQby6OoWRPsG1KkKUG2M5UadiLiVg==",license:"Apache-2.0",engines:{node:">=14"}},"node_modules/@types/body-parser":{version:"1.19.6",resolved:"https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz",integrity:"sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==",license:"MIT",dependencies:{"@types/connect":"*","@types/node":"*"}},"node_modules/@types/connect":{version:"3.4.38",resolved:"https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz",integrity:"sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==",license:"MIT",dependencies:{"@types/node":"*"}},"node_modules/@types/express":{version:"5.0.6",resolved:"https://registry.npmjs.org/@types/express/-/express-5.0.6.tgz",integrity:"sha512-sKYVuV7Sv9fbPIt/442koC7+IIwK5olP1KWeD88e/idgoJqDm3JV/YUiPwkoKK92ylff2MGxSz1CSjsXelx0YA==",license:"MIT",dependencies:{"@types/body-parser":"*","@types/express-serve-static-core":"^5.0.0","@types/serve-static":"^2"}},"node_modules/@types/express-serve-static-core":{version:"5.1.3",resolved:"https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.1.3.tgz",integrity:"sha512-dPfW8NFiOF4wOHc7+N/QSxlY9cfSsenewGbAz8C8U/MULPd/YZ27LvJUIlzaXie7e6Ove9YunJGgC9tbHD2cKw==",license:"MIT",dependencies:{"@types/node":"*","@types/qs":"*","@types/range-parser":"*","@types/send":"*"}},"node_modules/@types/http-errors":{version:"2.0.5",resolved:"https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz",integrity:"sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==",license:"MIT"},"node_modules/@types/node":{version:"26.6.5",resolved:"https://registry.npmjs.org/@types/node/-/node-26.6.5.tgz",integrity:"sha512-uMzsv9stDdofIZBx4UGh4Z9ZgXnGC9seRDscilBcTHAeOFk67MZg/k9bWVfO+bk4qZmG+l52hRnLwUiH2LnJTg==",license:"MIT",dependencies:{"undici-types":"~8.9.0"}},"node_modules/@types/qs":{version:"6.15.1",resolved:"https://registry.npmjs.org/@types/qs/-/qs-6.15.1.tgz",integrity:"sha512-GZHUBZR9hckSUhrxmp1nG6NwdpM9fCunJwyThLW1X3AyHgd9IlHb6VANpQQqDr2o/qQp6McZ3y/IA2rVzKzSbw==",license:"MIT"},"node_modules/@types/range-parser":{version:"1.2.7",resolved:"https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz",integrity:"sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==",license:"MIT"},"node_modules/@types/send":{version:"1.2.1",resolved:"https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz",integrity:"sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==",license:"MIT",dependencies:{"@types/node":"*"}},"node_modules/@types/serve-static":{version:"2.2.0",resolved:"https://registry.npmjs.org/@types/serve-static/-/serve-static-2.2.0.tgz",integrity:"sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ==",license:"MIT",dependencies:{"@types/http-errors":"*","@types/node":"*"}},"node_modules/@upstash/context7-mcp":{version:"4.4.4",resolved:"https://registry.npmjs.org/@upstash/context7-mcp/-/context7-mcp-4.4.4.tgz",integrity:"sha512-T2DkjhweDnC2mRAclDiTrPG3KI1zYKhhjgY2SMKD9PVrbEaGD8x35VsIOqpwwDc2qiKBvfYCF/jqr+jQMu5PUA==",license:"MIT",dependencies:{"@modelcontextprotocol/node":"2.1.1","@modelcontextprotocol/server":"2.3.1","@opentelemetry/api":"^1.9.1","@opentelemetry/exporter-prometheus":"^0.222.0","@opentelemetry/instrumentation-runtime-node":"^0.35.0","@opentelemetry/resources":"^2.11.0","@opentelemetry/sdk-metrics":"^2.11.0","@types/express":"^5.0.4",commander:"^13.1.0",express:"^5.1.0",jose:"^6.2.12",undici:"^7.30.0",zod:"^4.6.5"},bin:{"context7-mcp":"dist/index.js"},engines:{node:">=20.18.1"}},"node_modules/accepts":{version:"2.0.0",resolved:"https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz",integrity:"sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==",license:"MIT",dependencies:{"mime-types":"^3.0.0",negotiator:"^1.0.0"},engines:{node:">= 0.6"}},"node_modules/body-parser":{version:"2.3.0",resolved:"https://registry.npmjs.org/body-parser/-/body-parser-2.3.0.tgz",integrity:"sha512-2cGmJupaNgg+QUwVLAucDuWuoMZ6EX9iHDRswZ5lsNYEmwPaRknMPCLZz07yTzVq/83p4o/wzbDZbBrTvGGTIw==",license:"MIT",dependencies:{bytes:"^3.1.2","content-type":"^2.0.0",debug:"^4.4.3","http-errors":"^2.0.1","iconv-lite":"^0.7.2","on-finished":"^2.4.1",qs:"^6.15.2","raw-body":"^3.0.2","type-is":"^2.1.0"},engines:{node:">=18"},funding:{type:"opencollective",url:"https://opencollective.com/express"}},"node_modules/bytes":{version:"3.1.2",resolved:"https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",integrity:"sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",license:"MIT",engines:{node:">= 0.8"}},"node_modules/call-bind-apply-helpers":{version:"1.0.2",resolved:"https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz",integrity:"sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==",license:"MIT",dependencies:{"es-errors":"^1.3.0","function-bind":"^1.1.2"},engines:{node:">= 0.4"}},"node_modules/call-bound":{version:"1.0.4",resolved:"https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz",integrity:"sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==",license:"MIT",dependencies:{"call-bind-apply-helpers":"^1.0.2","get-intrinsic":"^1.3.0"},engines:{node:">= 0.4"},funding:{url:"https://github.com/sponsors/ljharb"}},"node_modules/cjs-module-lexer":{version:"2.3.0",resolved:"https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-2.3.0.tgz",integrity:"sha512-lmNyBzi6iYiqyrExTctfmjd8tInx+dHu9PBomTfH5RXS53c27JMFJgzNv5TyAnm3PgGf+MLy0+Ws41/HlVxdKQ==",license:"MIT"},"node_modules/commander":{version:"13.1.0",resolved:"https://registry.npmjs.org/commander/-/commander-13.1.0.tgz",integrity:"sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==",license:"MIT",engines:{node:">=18"}},"node_modules/content-disposition":{version:"2.0.1",resolved:"https://registry.npmjs.org/content-disposition/-/content-disposition-2.0.1.tgz",integrity:"sha512-e+H0ZXHSWYrENhQzw1LPuP4oF5MzVKmDU6d3hxlvaPEYLLg62MxtQNPRx4SYSuYJSBUgnQIG4HIN2tEtNv7Dog==",license:"MIT",engines:{node:">=18"},funding:{type:"opencollective",url:"https://opencollective.com/express"}},"node_modules/content-type":{version:"2.1.0",resolved:"https://registry.npmjs.org/content-type/-/content-type-2.1.0.tgz",integrity:"sha512-mj7UPXE0jaqaOsukNZRUEfEi2AcL7C/vwmwcHV0O97eO1E1pxBZuyjlZrx5seTaNBg1U6+o35wpa35Qfcc+7ag==",license:"MIT",engines:{node:">=18"},funding:{type:"opencollective",url:"https://opencollective.com/express"}},"node_modules/cookie":{version:"0.7.2",resolved:"https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz",integrity:"sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==",license:"MIT",engines:{node:">= 0.6"}},"node_modules/cookie-signature":{version:"1.2.2",resolved:"https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.2.tgz",integrity:"sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==",license:"MIT",engines:{node:">=6.6.0"}},"node_modules/debug":{version:"4.4.3",resolved:"https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",integrity:"sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",license:"MIT",dependencies:{ms:"^2.1.3"},engines:{node:">=6.0"},peerDependenciesMeta:{"supports-color":{optional:!0}}},"node_modules/depd":{version:"2.0.0",resolved:"https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",integrity:"sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",license:"MIT",engines:{node:">= 0.8"}},"node_modules/dunder-proto":{version:"1.0.1",resolved:"https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz",integrity:"sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==",license:"MIT",dependencies:{"call-bind-apply-helpers":"^1.0.1","es-errors":"^1.3.0",gopd:"^1.2.0"},engines:{node:">= 0.4"}},"node_modules/ee-first":{version:"1.1.1",resolved:"https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",integrity:"sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",license:"MIT"},"node_modules/encodeurl":{version:"2.0.0",resolved:"https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",integrity:"sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",license:"MIT",engines:{node:">= 0.8"}},"node_modules/es-define-property":{version:"1.0.1",resolved:"https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz",integrity:"sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==",license:"MIT",engines:{node:">= 0.4"}},"node_modules/es-errors":{version:"1.3.0",resolved:"https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz",integrity:"sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==",license:"MIT",engines:{node:">= 0.4"}},"node_modules/es-module-lexer":{version:"3.0.4",resolved:"https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-3.0.4.tgz",integrity:"sha512-BldNY5mwkVu+cQ5Ymn3e6hB9Sx8XHx4ZevWbiUyZbfKxJxYO27Hf0wfzkxIaD5CAJMaGl3YspKELj0ff/7nCMA==",license:"MIT"},"node_modules/es-object-atoms":{version:"1.1.2",resolved:"https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz",integrity:"sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==",license:"MIT",dependencies:{"es-errors":"^1.3.0"},engines:{node:">= 0.4"}},"node_modules/escape-html":{version:"1.0.3",resolved:"https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",integrity:"sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",license:"MIT"},"node_modules/etag":{version:"1.8.1",resolved:"https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",integrity:"sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",license:"MIT",engines:{node:">= 0.6"}},"node_modules/express":{version:"5.3.0",resolved:"https://registry.npmjs.org/express/-/express-5.3.0.tgz",integrity:"sha512-qCqy1xSoaugxOD4IVHb1ZWdkvCF2W3aE2okKouWj8VwJ+ztskSiXoBnCSJqfKT+cVPJhuJqe9YLbY425+Zh00g==",license:"MIT",dependencies:{accepts:"^2.0.0","body-parser":"^2.3.0","content-disposition":"^2.0.1","content-type":"^2.0.0",cookie:"^0.7.1","cookie-signature":"^1.2.1",debug:"^4.4.0",depd:"^2.0.0",encodeurl:"^2.0.0","escape-html":"^1.0.3",etag:"^1.8.1",finalhandler:"^2.1.0",fresh:"^2.0.0","http-errors":"^2.0.0","merge-descriptors":"^2.0.0","mime-types":"^3.0.0","on-finished":"^2.4.1",once:"^1.4.0",parseurl:"^1.3.3","proxy-addr":"^2.0.8",qs:"^6.16.0","range-parser":"^1.2.1",router:"^2.2.0",send:"^1.1.0","serve-static":"^2.2.0",statuses:"^2.0.1","type-is":"^2.1.0",vary:"^1.1.2"},engines:{node:">= 18"},funding:{type:"opencollective",url:"https://opencollective.com/express"}},"node_modules/finalhandler":{version:"2.1.1",resolved:"https://registry.npmjs.org/finalhandler/-/finalhandler-2.1.1.tgz",integrity:"sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==",license:"MIT",dependencies:{debug:"^4.4.0",encodeurl:"^2.0.0","escape-html":"^1.0.3","on-finished":"^2.4.1",parseurl:"^1.3.3",statuses:"^2.0.1"},engines:{node:">= 18.0.0"},funding:{type:"opencollective",url:"https://opencollective.com/express"}},"node_modules/forwarded":{version:"0.2.0",resolved:"https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",integrity:"sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",license:"MIT",engines:{node:">= 0.6"}},"node_modules/fresh":{version:"2.0.0",resolved:"https://registry.npmjs.org/fresh/-/fresh-2.0.0.tgz",integrity:"sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==",license:"MIT",engines:{node:">= 0.8"}},"node_modules/function-bind":{version:"1.1.2",resolved:"https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",integrity:"sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",license:"MIT",funding:{url:"https://github.com/sponsors/ljharb"}},"node_modules/get-intrinsic":{version:"1.3.0",resolved:"https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz",integrity:"sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==",license:"MIT",dependencies:{"call-bind-apply-helpers":"^1.0.2","es-define-property":"^1.0.1","es-errors":"^1.3.0","es-object-atoms":"^1.1.1","function-bind":"^1.1.2","get-proto":"^1.0.1",gopd:"^1.2.0","has-symbols":"^1.1.0",hasown:"^2.0.2","math-intrinsics":"^1.1.0"},engines:{node:">= 0.4"},funding:{url:"https://github.com/sponsors/ljharb"}},"node_modules/get-proto":{version:"1.0.1",resolved:"https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz",integrity:"sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==",license:"MIT",dependencies:{"dunder-proto":"^1.0.1","es-object-atoms":"^1.0.0"},engines:{node:">= 0.4"}},"node_modules/gopd":{version:"1.2.0",resolved:"https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz",integrity:"sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==",license:"MIT",engines:{node:">= 0.4"},funding:{url:"https://github.com/sponsors/ljharb"}},"node_modules/has-symbols":{version:"1.1.0",resolved:"https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz",integrity:"sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==",license:"MIT",engines:{node:">= 0.4"},funding:{url:"https://github.com/sponsors/ljharb"}},"node_modules/hasown":{version:"2.0.4",resolved:"https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz",integrity:"sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==",license:"MIT",dependencies:{"function-bind":"^1.1.2"},engines:{node:">= 0.4"}},"node_modules/hono":{version:"4.13.13",resolved:"https://registry.npmjs.org/hono/-/hono-4.13.13.tgz",integrity:"sha512-CQ46U0ZkAGmbT/4UxdzzGJpacP2IeKgY4a5/tOI9AABbpOMfK739wfDXmv1usCk+3RkKj1hQy4/fjhiwa2xlrA==",license:"MIT",engines:{node:">=16.9.0"}},"node_modules/http-errors":{version:"2.0.1",resolved:"https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz",integrity:"sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==",license:"MIT",dependencies:{depd:"~2.0.0",inherits:"~2.0.4",setprototypeof:"~1.2.0",statuses:"~2.0.2",toidentifier:"~1.0.1"},engines:{node:">= 0.8"},funding:{type:"opencollective",url:"https://opencollective.com/express"}},"node_modules/iconv-lite":{version:"0.7.3",resolved:"https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.3.tgz",integrity:"sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==",license:"MIT",dependencies:{"safer-buffer":">= 2.1.2 < 3.0.0"},engines:{node:">=0.10.0"},funding:{type:"opencollective",url:"https://opencollective.com/express"}},"node_modules/import-in-the-middle":{version:"3.5.2",resolved:"https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-3.5.2.tgz",integrity:"sha512-WseIA/4o56+GYO3RmlOPvejYi771OFeJEeK/ejROsr9bdjW+E5NXTOD1Di8TL40Qgg3JJX9aa97Hf8iiSVIKZw==",license:"Apache-2.0",dependencies:{"cjs-module-lexer":"^2.2.0","es-module-lexer":"^3.0.2","module-details-from-path":"^1.0.4"},engines:{node:">=18"}},"node_modules/inherits":{version:"2.0.4",resolved:"https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",integrity:"sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",license:"ISC"},"node_modules/ipaddr.js":{version:"1.9.1",resolved:"https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",integrity:"sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",license:"MIT",engines:{node:">= 0.10"}},"node_modules/is-promise":{version:"4.0.0",resolved:"https://registry.npmjs.org/is-promise/-/is-promise-4.0.0.tgz",integrity:"sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==",license:"MIT"},"node_modules/jose":{version:"6.2.13",resolved:"https://registry.npmjs.org/jose/-/jose-6.2.13.tgz",integrity:"sha512-7TIg10ZE1x82YediN+lcrPNvGMKge9yFHQD+Qho/b8y2adfugU3AsvvHfxV0fzyFllT6l9xCjf4RWY9g/Z9PJQ==",license:"MIT",funding:{url:"https://github.com/sponsors/panva"}},"node_modules/math-intrinsics":{version:"1.1.0",resolved:"https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz",integrity:"sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==",license:"MIT",engines:{node:">= 0.4"}},"node_modules/media-typer":{version:"1.1.1",resolved:"https://registry.npmjs.org/media-typer/-/media-typer-1.1.1.tgz",integrity:"sha512-yz3xRaG20c6/BOzvYoDaGtPmGscs7YivItZEEqe6GbwNfHuxu9YNmvnEkMzKldAGY4/80pRcQRZSEnhquk9XuQ==",license:"MIT",engines:{node:">= 0.8"},funding:{type:"opencollective",url:"https://opencollective.com/express"}},"node_modules/merge-descriptors":{version:"2.0.0",resolved:"https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-2.0.0.tgz",integrity:"sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==",license:"MIT",engines:{node:">=18"},funding:{url:"https://github.com/sponsors/sindresorhus"}},"node_modules/mime-db":{version:"1.54.0",resolved:"https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz",integrity:"sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==",license:"MIT",engines:{node:">= 0.6"}},"node_modules/mime-types":{version:"3.0.2",resolved:"https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz",integrity:"sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==",license:"MIT",dependencies:{"mime-db":"^1.54.0"},engines:{node:">=18"},funding:{type:"opencollective",url:"https://opencollective.com/express"}},"node_modules/module-details-from-path":{version:"1.0.4",resolved:"https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.4.tgz",integrity:"sha512-EGWKgxALGMgzvxYF1UyGTy0HXX/2vHLkw6+NvDKW2jypWbHpjQuj4UMcqQWXHERJhVGKikolT06G3bcKe4fi7w==",license:"MIT"},"node_modules/ms":{version:"2.1.3",resolved:"https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",integrity:"sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",license:"MIT"},"node_modules/negotiator":{version:"1.1.0",resolved:"https://registry.npmjs.org/negotiator/-/negotiator-1.1.0.tgz",integrity:"sha512-NMPBRMJgiQHjbd8phG3Vebdx4kZ1H121rbl5IkMqeOsahptB9BKo/d7oJ3zTXqTgagn2bWlNSXkh0QUGM31RYg==",license:"MIT",dependencies:{"content-type":"^2.1.0"},engines:{node:">=18"},funding:{type:"opencollective",url:"https://opencollective.com/express"}},"node_modules/object-inspect":{version:"1.13.4",resolved:"https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz",integrity:"sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==",license:"MIT",engines:{node:">= 0.4"},funding:{url:"https://github.com/sponsors/ljharb"}},"node_modules/on-finished":{version:"2.4.1",resolved:"https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",integrity:"sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",license:"MIT",dependencies:{"ee-first":"1.1.1"},engines:{node:">= 0.8"}},"node_modules/once":{version:"1.4.0",resolved:"https://registry.npmjs.org/once/-/once-1.4.0.tgz",integrity:"sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",license:"ISC",dependencies:{wrappy:"1"}},"node_modules/parseurl":{version:"1.3.3",resolved:"https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",integrity:"sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",license:"MIT",engines:{node:">= 0.8"}},"node_modules/path-to-regexp":{version:"8.4.2",resolved:"https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.4.2.tgz",integrity:"sha512-qRcuIdP69NPm4qbACK+aDogI5CBDMi1jKe0ry5rSQJz8JVLsC7jV8XpiJjGRLLol3N+R5ihGYcrPLTno6pAdBA==",license:"MIT",funding:{type:"opencollective",url:"https://opencollective.com/express"}},"node_modules/proxy-addr":{version:"2.0.8",resolved:"https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.8.tgz",integrity:"sha512-5nnx0yGyVUcY6t9RnWcARWtwT9F1D8O9rt08htPvnd49W1IgZtmLkhu9WfMzQj1cFxjHIO6connUNVW5k7AVyQ==",license:"MIT",dependencies:{forwarded:"0.2.0","ipaddr.js":"1.9.1"},engines:{node:">= 0.10"},funding:{type:"opencollective",url:"https://opencollective.com/express"}},"node_modules/qs":{version:"6.16.1",resolved:"https://registry.npmjs.org/qs/-/qs-6.16.1.tgz",integrity:"sha512-5Px6J7rfHBAGUhNQ3es4YzcOdBBw0SDcVtThJml4RdnKw4tKs2epA0kPZ+K8X+WiHktT93RHVcQ/3ym5aTCgtg==",license:"BSD-3-Clause",dependencies:{"es-define-property":"^1.0.1","side-channel":"^1.1.1"},engines:{node:">=0.6"},funding:{url:"https://github.com/sponsors/ljharb"}},"node_modules/range-parser":{version:"1.3.0",resolved:"https://registry.npmjs.org/range-parser/-/range-parser-1.3.0.tgz",integrity:"sha512-hek2mFQpPuI4E1BBKrSto+BU3e3x4xuarsbiwr3+lf7p44juvFMV0XFWQAP3xUyqXA4RrXLIoaSUGbSt056ZMw==",license:"MIT",engines:{node:">= 0.6"},funding:{type:"opencollective",url:"https://opencollective.com/express"}},"node_modules/raw-body":{version:"3.0.2",resolved:"https://registry.npmjs.org/raw-body/-/raw-body-3.0.2.tgz",integrity:"sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==",license:"MIT",dependencies:{bytes:"~3.1.2","http-errors":"~2.0.1","iconv-lite":"~0.7.0",unpipe:"~1.0.0"},engines:{node:">= 0.10"}},"node_modules/require-in-the-middle":{version:"8.0.1",resolved:"https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-8.0.1.tgz",integrity:"sha512-QT7FVMXfWOYFbeRBF6nu+I6tr2Tf3u0q8RIEjNob/heKY/nh7drD/k7eeMFmSQgnTtCzLDcCu/XEnpW2wk4xCQ==",license:"MIT",dependencies:{debug:"^4.3.5","module-details-from-path":"^1.0.3"},engines:{node:">=9.3.0 || >=8.10.0 <9.0.0"}},"node_modules/router":{version:"2.2.0",resolved:"https://registry.npmjs.org/router/-/router-2.2.0.tgz",integrity:"sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==",license:"MIT",dependencies:{debug:"^4.4.0",depd:"^2.0.0","is-promise":"^4.0.0",parseurl:"^1.3.3","path-to-regexp":"^8.0.0"},engines:{node:">= 18"}},"node_modules/safer-buffer":{version:"2.1.2",resolved:"https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",integrity:"sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",license:"MIT"},"node_modules/send":{version:"1.2.1",resolved:"https://registry.npmjs.org/send/-/send-1.2.1.tgz",integrity:"sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==",license:"MIT",dependencies:{debug:"^4.4.3",encodeurl:"^2.0.0","escape-html":"^1.0.3",etag:"^1.8.1",fresh:"^2.0.0","http-errors":"^2.0.1","mime-types":"^3.0.2",ms:"^2.1.3","on-finished":"^2.4.1","range-parser":"^1.2.1",statuses:"^2.0.2"},engines:{node:">= 18"},funding:{type:"opencollective",url:"https://opencollective.com/express"}},"node_modules/serve-static":{version:"2.2.1",resolved:"https://registry.npmjs.org/serve-static/-/serve-static-2.2.1.tgz",integrity:"sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==",license:"MIT",dependencies:{encodeurl:"^2.0.0","escape-html":"^1.0.3",parseurl:"^1.3.3",send:"^1.2.0"},engines:{node:">= 18"},funding:{type:"opencollective",url:"https://opencollective.com/express"}},"node_modules/setprototypeof":{version:"1.2.0",resolved:"https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",integrity:"sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",license:"ISC"},"node_modules/side-channel":{version:"1.1.1",resolved:"https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz",integrity:"sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==",license:"MIT",dependencies:{"es-errors":"^1.3.0","object-inspect":"^1.13.4","side-channel-list":"^1.0.1","side-channel-map":"^1.0.1","side-channel-weakmap":"^1.0.2"},engines:{node:">= 0.4"},funding:{url:"https://github.com/sponsors/ljharb"}},"node_modules/side-channel-list":{version:"1.0.1",resolved:"https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz",integrity:"sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==",license:"MIT",dependencies:{"es-errors":"^1.3.0","object-inspect":"^1.13.4"},engines:{node:">= 0.4"},funding:{url:"https://github.com/sponsors/ljharb"}},"node_modules/side-channel-map":{version:"1.0.1",resolved:"https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz",integrity:"sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==",license:"MIT",dependencies:{"call-bound":"^1.0.2","es-errors":"^1.3.0","get-intrinsic":"^1.2.5","object-inspect":"^1.13.3"},engines:{node:">= 0.4"},funding:{url:"https://github.com/sponsors/ljharb"}},"node_modules/side-channel-weakmap":{version:"1.0.2",resolved:"https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz",integrity:"sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==",license:"MIT",dependencies:{"call-bound":"^1.0.2","es-errors":"^1.3.0","get-intrinsic":"^1.2.5","object-inspect":"^1.13.3","side-channel-map":"^1.0.1"},engines:{node:">= 0.4"},funding:{url:"https://github.com/sponsors/ljharb"}},"node_modules/statuses":{version:"2.0.2",resolved:"https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz",integrity:"sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==",license:"MIT",engines:{node:">= 0.8"}},"node_modules/toidentifier":{version:"1.0.1",resolved:"https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",integrity:"sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",license:"MIT",engines:{node:">=0.6"}},"node_modules/type-is":{version:"2.1.0",resolved:"https://registry.npmjs.org/type-is/-/type-is-2.1.0.tgz",integrity:"sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==",license:"MIT",dependencies:{"content-type":"^2.0.0","media-typer":"^1.1.0","mime-types":"^3.0.0"},engines:{node:">= 18"},funding:{type:"opencollective",url:"https://opencollective.com/express"}},"node_modules/undici":{version:"7.30.1",resolved:"https://registry.npmjs.org/undici/-/undici-7.30.1.tgz",integrity:"sha512-03KrMbjIFDWQR5RNPrSw3bd1r12JpyFQl9/yxjUbJtqkjmllqC5lFjZh6ujeuJCKr8EOQvRW872Oy/az+nLYxg==",license:"MIT",engines:{node:">=20.18.1"}},"node_modules/undici-types":{version:"8.9.0",resolved:"https://registry.npmjs.org/undici-types/-/undici-types-8.9.0.tgz",integrity:"sha512-KTDyRTYX8sWmKXAikPHHSyc63CRPETMctyjKFupcC6OBLXT3xsN0e9aF7m+mIXutFWpUXuedtowG7iLOzp0kQg==",license:"MIT"},"node_modules/unpipe":{version:"1.0.0",resolved:"https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",integrity:"sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",license:"MIT",engines:{node:">= 0.8"}},"node_modules/vary":{version:"1.1.2",resolved:"https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",integrity:"sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",license:"MIT",engines:{node:">= 0.8"}},"node_modules/wrappy":{version:"1.0.2",resolved:"https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",integrity:"sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",license:"ISC"},"node_modules/zod":{version:"4.6.7",resolved:"https://registry.npmjs.org/zod/-/zod-4.6.7.tgz",integrity:"sha512-g8W2D2kU6a8untc053fX1uVBKzM7yqAxW/3zwk83+6RyF2+SKOuV+c0wBDhUwzV1PaGapmZH+rmcUzPf+3CGwg==",license:"MIT",funding:{url:"https://github.com/sponsors/colinhacks"}}}};var ES={name:"engineeros-managed-playwright",version:"1.0.0",lockfileVersion:3,requires:!0,packages:{"":{name:"engineeros-managed-playwright",version:"1.0.0",dependencies:{"@playwright/mcp":"0.0.83"}},"node_modules/@playwright/mcp":{version:"0.0.83",resolved:"https://registry.npmjs.org/@playwright/mcp/-/mcp-0.0.83.tgz",integrity:"sha512-oNcl+Ae2/IAjhfPeP46BfIkSakfmprY+aOtkv5MjrQ4lPav4/yNtPhL0iq8SlIM90oApWgBDUxaNKvktazUKOg==",license:"Apache-2.0",dependencies:{playwright:"1.64.0-alpha-1790635538000","playwright-core":"1.64.0-alpha-1790635538000"},bin:{"playwright-mcp":"cli.js"},engines:{node:">=18"}},"node_modules/playwright":{version:"1.64.0-alpha-1790635538000",resolved:"https://registry.npmjs.org/playwright/-/playwright-1.64.0-alpha-1790635538000.tgz",integrity:"sha512-/5XDUMxpOd/9AojJtWDFIRV3EJZNQ0AwvK69wgt3CPzy8wTgiBG9pX45VfxtqtvIRGwfWzMhrvawNKreG69Snw==",license:"Apache-2.0",dependencies:{"playwright-core":"1.64.0-alpha-1790635538000"},bin:{playwright:"cli.js"},engines:{node:">=20"}},"node_modules/playwright-core":{version:"1.64.0-alpha-1790635538000",resolved:"https://registry.npmjs.org/playwright-core/-/playwright-core-1.64.0-alpha-1790635538000.tgz",integrity:"sha512-pNwaXirhXMRLaRQs4NQ18EpTdtDoFwyPH9FOaaDC7YXG4hpwE2xmwCic/1srbuExVQC7zT9LJSJpDBAru+Vo9A==",license:"Apache-2.0",bin:{"playwright-core":"cli.js"},engines:{node:">=20"}}}};var $S={name:"engineeros-managed-chrome-devtools",version:"1.0.0",lockfileVersion:3,requires:!0,packages:{"":{name:"engineeros-managed-chrome-devtools",version:"1.0.0",dependencies:{"chrome-devtools-mcp":"1.12.0"}},"node_modules/chrome-devtools-mcp":{version:"1.12.0",resolved:"https://registry.npmjs.org/chrome-devtools-mcp/-/chrome-devtools-mcp-1.12.0.tgz",integrity:"sha512-lAGpH0zXT1ZdaPefP1KK/MvxwihOlu7VGQ7p4wbhD9OhN17vUC4KWk/ImUYR9DE4s+7r4r0ySV4xr2OkTa7ZMA==",license:"Apache-2.0",bin:{"chrome-devtools":"build/src/bin/chrome-devtools.js","chrome-devtools-mcp":"build/src/bin/chrome-devtools-mcp.js"},engines:{node:"^20.19.0 || ^22.12.0 || >=23"},peerDependencies:{"@blackwell-systems/gcf":"^2.2.2","@toon-format/toon":"^4.1.0"},peerDependenciesMeta:{"@blackwell-systems/gcf":{optional:!0},"@toon-format/toon":{optional:!0}}}}};var xS={name:"engineeros-managed-devcontainers",version:"1.0.0",lockfileVersion:3,requires:!0,packages:{"":{name:"engineeros-managed-devcontainers",version:"1.0.0",dependencies:{"@devcontainers/cli":"0.89.0"}},"node_modules/@devcontainers/cli":{version:"0.89.0",resolved:"https://registry.npmjs.org/@devcontainers/cli/-/cli-0.89.0.tgz",integrity:"sha512-LzaoOGKQ/Zql6PsiZ4hVIYVZagzWkD65aG/1ou5/Kly5Y1PtjLg1yn7qu+LZCzVoAl6DZZ/pbz8qOO4RLNlqMg==",license:"MIT",bin:{devcontainer:"devcontainer.js"},engines:{node:">=20.0.0"}}}};var vh={codegraph:bS,"ast-grep":SS,context7:kS,playwright:ES,"chrome-devtools":$S,devcontainers:xS};I();kt();import{createHash as _U,randomBytes as AS}from"node:crypto";import{spawn as vU}from"node:child_process";import{createServer as bU}from"node:http";import{readFile as SU}from"node:fs/promises";import kU from"node:path";import{z as Un}from"zod";var EU=Un.string().regex(/^[a-z][a-z0-9-]{0,63}$/),TS=Un.object({status:Un.enum(["setup_required","signing_in","authenticated","expired","error"]),account_label:Un.string().max(160).nullable(),scopes:Un.array(Un.string().max(120)).max(32),expires_at:Un.string().datetime().nullable(),message:Un.string().max(300),updated_at:Un.string().datetime()}).strict(),RS=Un.object({version:Un.literal(1),providers:Un.record(EU,TS)}).strict(),bh=new Map,wo=new Map;function Zl(e){return yn(e).replace(/\.json$/,".tools-auth.json")}async function Sh(e,t=Zl(e)){try{return RS.parse(JSON.parse(await SU(t,"utf8")))}catch(n){if(n?.code==="ENOENT")return{version:1,providers:{}};throw new Error("Tool authentication state is invalid. Remove the local tools-auth state file and sign in again.")}}async function CS(e,t,n=Zl(e)){let r=RS.parse(t);await be(n,`${JSON.stringify(r,null,2)}
|
|
684
684
|
`)}async function yo(e,t,n,r){let o=r||Zl(e),i=(wo.get(o)||Promise.resolve()).catch(()=>{}).then(async()=>{let a=await Sh(e,o);a.providers[t]=TS.parse(n),await CS(e,a,o)});wo.set(o,i);try{await i}finally{wo.get(o)===i&&wo.delete(o)}}async function $U(e,t,n){let r=n||Zl(e),s=(wo.get(r)||Promise.resolve()).catch(()=>{}).then(async()=>{let i=await Sh(e,r);delete i.providers[t],await CS(e,i,r)});wo.set(r,s);try{await s}finally{wo.get(r)===s&&wo.delete(r)}}function In(e,t,n={}){return{status:e,account_label:null,scopes:[],expires_at:null,message:t,updated_at:new Date().toISOString(),...n}}async function Sa(e,t){if(Number(e.headers.get("content-length")||0)>64e3)throw new Error(`${t} exceeded 64 KB.`);let r=await e.text();if(Buffer.byteLength(r)>64e3)throw new Error(`${t} exceeded 64 KB.`);try{return JSON.parse(r)}catch{throw new Error(`${t} did not return JSON.`)}}function wr(e,t){let n=new URL(e);if(n.protocol!=="https:"||n.username||n.password||n.hash)throw new Error(`${t} must be a credential-free HTTPS URL.`);return n}function xU(e){let t=/(?:^|,)\s*Bearer\s+[^,]*resource_metadata="([^"]+)"/i.exec(e||"");if(!t)throw new Error("The MCP server did not advertise protected-resource metadata. Confirm that it supports MCP OAuth 2.1.");return wr(t[1],"Protected-resource metadata")}function AU(e){let t=wr(e,"Authorization server"),n=t.pathname==="/"?"":t.pathname.replace(/\/$/,"");return t.pathname=`/.well-known/oauth-authorization-server${n}`,t.search="",t}async function TU(e,t){let n=await t(e,{method:"POST",headers:{Accept:"application/json, text/event-stream","Content-Type":"application/json"},body:JSON.stringify({jsonrpc:"2.0",id:"engineeros-auth-discovery",method:"initialize",params:{protocolVersion:"2025-06-18",capabilities:{},clientInfo:{name:"EngineerOS Connector",version:"1"}}}),redirect:"error"});if(n.status!==401)throw new Error(n.ok?"This MCP endpoint did not request authentication. Register it with authentication type none.":`MCP authorization discovery failed with HTTP ${n.status}.`);let r=xU(n.headers.get("www-authenticate")),o=await t(r,{redirect:"error"});if(!o.ok)throw new Error(`Protected-resource metadata failed with HTTP ${o.status}.`);let s=await Sa(o,"Protected-resource metadata");if(typeof s.resource=="string"&&wr(s.resource,"Protected resource").origin!==wr(e,"MCP endpoint").origin)throw new Error("Protected-resource metadata does not describe the requested MCP server.");let i=s.authorization_servers?.[0];if(typeof i!="string")throw new Error("Protected-resource metadata does not name an authorization server.");let a=await t(AU(i),{redirect:"error"});if(!a.ok)throw new Error(`Authorization metadata failed with HTTP ${a.status}.`);let c=await Sa(a,"Authorization metadata");if(typeof c.issuer=="string"&&wr(c.issuer,"Authorization metadata issuer").toString()!==wr(i,"Authorization server").toString())throw new Error("Authorization metadata issuer does not match the advertised server.");return{resource:s,metadata:c}}function RU(e){let t,n=new Promise((o,s)=>{t={resolve:o,reject:s}}),r=bU((o,s)=>{let i=new URL(o.url||"/","http://127.0.0.1");if(i.pathname!=="/oauth/callback"){s.writeHead(404).end("Not found");return}let a=i.searchParams.get("error"),c=i.searchParams.get("state"),l=i.searchParams.get("code");if(c!==e||!l||a){s.writeHead(400,{"Content-Type":"text/plain; charset=utf-8"}),s.end("EngineerOS could not complete sign-in. Return to EngineerOS for details."),t.reject(new Error(a?`Provider denied authorization (${a}).`:"OAuth callback validation failed."));return}s.writeHead(200,{"Content-Type":"text/plain; charset=utf-8"}),s.end("Authentication complete. You can close this window and return to EngineerOS."),t.resolve(l)});return new Promise((o,s)=>{r.once("error",s),r.listen(0,"127.0.0.1",()=>{let i=r.address();o({redirectUri:`http://127.0.0.1:${i.port}/oauth/callback`,result:n,close:()=>r.close()})})})}function CU(e){let t=process.platform==="win32"?["rundll32.exe",["url.dll,FileProtocolHandler",e]]:process.platform==="darwin"?["open",[e]]:["xdg-open",[e]];vU(t[0],t[1],{detached:!0,stdio:"ignore",windowsHide:!0}).unref()}async function OU(e,t={}){let n=t.fetchImpl||fetch,r=t.openBrowser||CU,o=e.launch.endpoint,s=e.authentication,{metadata:i}=await TU(o,n);if(typeof i.authorization_endpoint!="string"||typeof i.token_endpoint!="string")throw new Error("Authorization metadata is missing authorization or token endpoints.");wr(i.authorization_endpoint,"Authorization endpoint"),wr(i.token_endpoint,"Token endpoint");let a=AS(24).toString("base64url"),c=AS(48).toString("base64url"),l=_U("sha256").update(c).digest("base64url"),u=await RU(a),p;try{if(s.client.registration==="dynamic"){if(typeof i.registration_endpoint!="string")throw new Error("This provider does not support dynamic client registration. Configure a provider-issued OAuth client ID locally.");wr(i.registration_endpoint,"Registration endpoint");let v=await n(i.registration_endpoint,{method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify({client_name:"EngineerOS Connector",redirect_uris:[u.redirectUri],grant_types:["authorization_code","refresh_token"],response_types:["code"],token_endpoint_auth_method:"none"}),redirect:"error"});if(!v.ok)throw new Error(`OAuth client registration failed with HTTP ${v.status}.`);p=await Sa(v,"OAuth client registration")}else p={client_id:s.client.client_id};if(typeof p.client_id!="string"||!p.client_id||p.client_id.length>512)throw new Error("OAuth client registration did not return a client ID.");let d=new URL(i.authorization_endpoint);d.searchParams.set("response_type","code"),d.searchParams.set("client_id",p.client_id),d.searchParams.set("redirect_uri",u.redirectUri),d.searchParams.set("state",a),d.searchParams.set("code_challenge",l),d.searchParams.set("code_challenge_method","S256"),d.searchParams.set("resource",o),s.scopes.length&&d.searchParams.set("scope",s.scopes.join(" ")),r(d.toString());let f,h=await Promise.race([u.result,new Promise((v,w)=>{f=setTimeout(()=>w(new Error("Sign-in timed out after 3 minutes. Start sign-in again.")),18e4)})]).finally(()=>clearTimeout(f)),m=new URLSearchParams({grant_type:"authorization_code",code:h,client_id:p.client_id,redirect_uri:u.redirectUri,code_verifier:c,resource:o});typeof p.client_secret=="string"&&m.set("client_secret",p.client_secret);let g=await n(i.token_endpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"},body:m,redirect:"error"});if(!g.ok)throw new Error(`OAuth token exchange failed with HTTP ${g.status}.`);let _=await Sa(g,"OAuth token exchange");if(typeof _.access_token!="string"||!_.access_token||_.access_token.length>32768)throw new Error("OAuth token exchange did not return an access token.");if(typeof _.token_type=="string"&&_.token_type.toLowerCase()!=="bearer")throw new Error("OAuth token exchange returned an unsupported token type.");let S=Number.isFinite(_.expires_in)?new Date(Date.now()+Number(_.expires_in)*1e3).toISOString():null;return{token:_,client:p,token_endpoint:i.token_endpoint,endpoint:o,scopes:typeof _.scope=="string"?_.scope.split(/\s+/).filter(Boolean):s.scopes,expires_at:S}}finally{u.close()}}async function OS(e,t,n={}){let r=t.authentication;if(!r)return In(t.launch.transport==="https"||t.permissions.secrets.length?"setup_required":"authenticated",t.launch.transport==="https"||t.permissions.secrets.length?"Re-register this provider with an explicit authentication contract.":"No sign-in required.");if(r.type==="none")return In("authenticated","No sign-in required.");if(r.type==="external")return In("setup_required","Complete the provider-owned local sign-in flow on the connected machine, then refresh the inventory.");let s=(await Sh(e,n.stateFile)).providers[t.id];if(!s)return In("setup_required","Sign in to authorize this provider on the connected machine.");if(s.status==="authenticated"&&s.expires_at&&Date.parse(s.expires_at)<=Date.now())return{...s,status:"expired",message:"Access expired. Sign in again."};let i=n.vault||wn();return s.status==="authenticated"&&!await i.has(e,t.id)?In("setup_required","The local credential is missing. Sign in again."):s}async function IS(e,t,n={}){if(t.authentication?.type!=="oauth"||t.launch.transport!=="https")throw new Error("This provider does not support connector-managed OAuth sign-in.");let r=`${kU.resolve(e)}:${t.id}`;if(bh.has(r))throw new Error("Sign-in is already in progress for this provider.");let o=In("signing_in","Complete authorization in the browser opened by the connector.",{scopes:t.authentication.scopes}),s=n.vault||wn();if(s.available&&!await s.available())throw new Error("Secure tool credential storage is unavailable on this platform. Add a supported local keychain adapter before signing in.");await yo(e,t.id,o,n.stateFile);let i=n.authorize||OU,a=(async()=>{try{let c=await i(t,n);await s.put(e,t.id,c),await yo(e,t.id,In("authenticated","Connected. Credentials remain on this machine.",{scopes:c.scopes,expires_at:c.expires_at}),n.stateFile)}catch(c){await yo(e,t.id,In("error",c instanceof Error?c.message.slice(0,300):"Authentication failed. Start sign-in again.",{scopes:t.authentication.scopes}),n.stateFile)}finally{bh.delete(r),await n.onStatus?.()}})();return bh.set(r,a),{state:o,completion:a}}async function jS(e,t,n={}){if(t.authentication?.type!=="oauth")throw new Error("This provider has no connector-managed OAuth session.");await(n.vault||wn()).delete(e,t.id),await yo(e,t.id,In("setup_required","Signed out locally. Sign in to authorize this provider."),n.stateFile)}async function NS(e,t,n={}){if(t.authentication?.type!=="oauth")return;await(n.vault||wn()).delete(e,t.id),await $U(e,t.id,n.stateFile)}async function MS(e,t,n={}){if(t.authentication?.type!=="oauth")throw new Error("This provider has no connector-managed OAuth session.");let r=n.vault||wn(),o=await r.get(e,t.id);if(!o){await yo(e,t.id,In("setup_required","The local credential is missing. Sign in again."),n.stateFile);return}if(!o.expires_at||Date.parse(o.expires_at)>Date.now()+6e4)return;if(typeof o.token?.refresh_token!="string"){await yo(e,t.id,In("expired","Access expired and the provider supplied no refresh token. Sign in again.",{scopes:o.scopes||[],expires_at:o.expires_at||null}),n.stateFile);return}let s=n.fetchImpl||fetch;wr(o.token_endpoint,"Token endpoint");let i=new URLSearchParams({grant_type:"refresh_token",refresh_token:o.token.refresh_token,client_id:o.client.client_id,resource:o.endpoint});typeof o.client.client_secret=="string"&&i.set("client_secret",o.client.client_secret);let a=await s(o.token_endpoint,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded",Accept:"application/json"},body:i,redirect:"error"});if(!a.ok){await yo(e,t.id,In("expired",`Credential refresh failed with HTTP ${a.status}. Sign in again.`,{scopes:o.scopes||[],expires_at:o.expires_at||null}),n.stateFile);return}let c=await Sa(a,"OAuth token refresh");if(typeof c.access_token!="string"||!c.access_token||c.access_token.length>32768)throw new Error("OAuth token refresh did not return an access token.");let l=Number.isFinite(c.expires_in)?new Date(Date.now()+Number(c.expires_in)*1e3).toISOString():null,u={...o,token:{...o.token,...c,refresh_token:c.refresh_token||o.token.refresh_token},scopes:typeof c.scope=="string"?c.scope.split(/\s+/).filter(Boolean):o.scopes||t.authentication.scopes,expires_at:l};await r.put(e,t.id,u),await yo(e,t.id,In("authenticated","Connected. Credentials remain on this machine.",{scopes:u.scopes,expires_at:l}),n.stateFile)}var zS="curated-managed-npm-recipe-v1",Us=ce.string().trim().min(1).max(160).regex(/^[^\x00-\x1f\x7f]+$/),zs=ce.string().regex(/^[a-z][a-z0-9-]{0,63}$/),PU=ce.enum(["discovery","research","implementation","verification","handover"]),kh=ce.string().url().max(500).refine(e=>{let t=new URL(e);return t.protocol==="https:"&&!t.username&&!t.password&&!t.search&&!t.hash},"Use HTTPS without credentials, query parameters or fragments."),Ql=ce.string().max(1e3).refine(e=>Ct.isAbsolute(e),"Use an absolute local path."),LU=ce.string().trim().min(1).max(120).regex(/^[^\s\x00-\x1f\x7f]+$/),DU=ce.discriminatedUnion("type",[ce.object({type:ce.literal("none")}).strict(),ce.object({type:ce.literal("external"),instructions:Us}).strict(),ce.object({type:ce.literal("oauth"),scopes:ce.array(LU).max(32),client:ce.discriminatedUnion("registration",[ce.object({registration:ce.literal("dynamic")}).strict(),ce.object({registration:ce.literal("static"),client_id:ce.string().trim().min(1).max(200)}).strict()])}).strict()]),ka=ce.object({id:zs,name:Us,provider:Us,capability_class:ce.enum(["tool","skill","agent"]),source:kh,version:ce.string().max(64).regex(/^\d+\.\d+\.\d+(?:-[a-zA-Z0-9.-]+)?$/),license:Us,launch:ce.discriminatedUnion("transport",[ce.object({transport:ce.literal("stdio"),entrypoint:Ql,package_json:Ql,sha256:ce.string().regex(/^[a-f0-9]{64}$/)}).strict(),ce.object({transport:ce.literal("https"),endpoint:kh}).strict(),ce.object({transport:ce.literal("file"),entrypoint:Ql,package_json:Ql,sha256:ce.string().regex(/^[a-f0-9]{64}$/)}).strict()]),platforms:ce.array(ce.enum(["win32","linux","darwin"])).min(1).max(3),permissions:ce.object({workspace:ce.enum(["none","read","write"]),process:ce.boolean(),network:ce.array(kh).max(8),browser:ce.enum(["none","isolated"]),secrets:ce.array(zs).max(8),external_mutations:ce.boolean()}).strict(),authentication:DU.optional(),profiles:ce.array(PU).min(1).max(5),tasks:ce.array(zs).min(1).max(8),exclusions:ce.array(zs).max(8),tools:ce.array(ce.object({name:ce.string().regex(/^[a-z][a-z0-9-]*:[a-z][a-z0-9_]*$/),description:Us,response_mode:ce.enum(["summary","reference"])}).strict()).max(12),policy:ce.object({approval_required:ce.literal(!0),timeout_ms:ce.number().int().min(100).max(3e4),retry_limit:ce.number().int().min(0).max(1)}).strict(),evidence:ce.literal("metadata-only"),evaluation:ce.object({status:ce.enum(["experimental","standard"]),reference:Us}).strict()}).strict().superRefine((e,t)=>{e.tools.some(n=>!n.name.startsWith(`${e.id}:`))&&t.addIssue({code:"custom",path:["tools"],message:"Namespace every tool with the manifest ID."}),e.capability_class==="skill"!=(e.launch.transport==="file")&&t.addIssue({code:"custom",path:["launch"],message:"Skills use file transport; tools and agents use stdio or HTTPS."}),e.authentication?.type==="oauth"&&e.launch.transport!=="https"&&t.addIssue({code:"custom",path:["authentication"],message:"Connector-managed OAuth requires an HTTPS provider endpoint."})}),BS=ce.object({version:ce.literal(1),enabled:ce.boolean(),entries:ce.array(ce.object({manifest:ka,enabled:ce.boolean(),admitted_at:ce.string().datetime(),previous_manifest:ka.optional()}).strict()).max(16)}).strict().superRefine((e,t)=>{new Set(e.entries.map(n=>n.manifest.id)).size!==e.entries.length&&t.addIssue({code:"custom",path:["entries"],message:"Provider IDs must be unique."})}),FU=ce.object({type:ce.literal("tools.update"),command_id:ce.string().uuid(),action:ce.enum(["setup","enable","disable","remove","upgrade","rollback"]),provider_id:ce.union([ce.literal("all"),zs]),confirmed:ce.boolean()}).strict().superRefine((e,t)=>{let n={remove:"Remove one registered provider at a time.",setup:"Set up one provider at a time.",upgrade:"Upgrade one provider at a time.",rollback:"Roll back one provider at a time."}[e.action];n&&e.provider_id==="all"&&t.addIssue({code:"custom",path:["provider_id"],message:n}),["setup","enable","remove","upgrade","rollback"].includes(e.action)&&!e.confirmed&&t.addIssue({code:"custom",path:["confirmed"],message:`Confirm the ${e.action} operation explicitly.`})}),UU=ce.object({type:ce.literal("tools.auth"),command_id:ce.string().uuid(),action:ce.enum(["sign_in","status","sign_out"]),provider_id:zs,confirmed:ce.boolean()}).strict().superRefine((e,t)=>{e.action==="sign_out"&&!e.confirmed&&t.addIssue({code:"custom",path:["confirmed"],message:"Confirm sign out explicitly."})});function Lr(e){return yn(e).replace(/\.json$/,".tools.json")}async function es(e,t){let n=await DS(e);if(!n.isFile()||n.size>t)throw new Error("Use a regular file within the size limit.");let r=await US(e,"r");try{let o=await r.stat();if(!o.isFile()||o.size>t)throw new Error("Unsupported file or size.");let s=Buffer.alloc(t+1),i=0;for(;i<s.length;){let{bytesRead:a}=await r.read(s,i,s.length-i,null);if(!a)break;i+=a}if(i>t)throw new Error("File exceeds size limit.");return s.subarray(0,i)}finally{await r.close()}}async function zn(e,t=Lr(e)){try{return BS.parse(JSON.parse(await es(t,256e3)))}catch(n){if(n.code==="ENOENT")return{version:1,enabled:!0,entries:[]};throw new Error("Tool registry is invalid or unreadable. Repair the local .tools.json file using the documented manifest format.")}}async function tu(e,t,n){await FS(Ct.dirname(t),{recursive:!0});let r;try{r=await US(`${t}.lock`,"wx",384)}catch{throw new Error("Tool registry is locked or unwritable. Wait for the operator update to finish; inspect an abandoned .tools.json.lock before removing it.")}try{let o=await zn(e,t);await n(o),BS.parse(o),await be(t,`${JSON.stringify(o,null,2)}
|
|
685
685
|
`)}finally{await r.close(),await MU(`${t}.lock`)}}async function $h(e,t,n,r=Lr(e)){await tu(e,r,async o=>{if(t==="register"){let s;try{s=ka.parse(JSON.parse(await es(n,32e3)))}catch(i){let a=i instanceof ce.ZodError?i.issues.map(c=>c.path.join(".")).join(", "):"file";throw new Error(`Invalid capability manifest (${a}). See the connector tool registry documentation; supply exact versions and local file hashes.`)}Eh(o,s)}else if(["enable","disable"].includes(t))if(n==="all")o.enabled=t==="enable";else{let s=o.entries.find(i=>i.manifest.id===n);if(!s)throw new Error("Provider is not registered. Run `tools list` first.");s.enabled=t==="enable"}else if(t==="remove"){let s=o.entries.find(i=>i.manifest.id===n);if(!s)throw new Error("Provider is not registered.");await NS(e,s.manifest),o.entries=o.entries.filter(i=>i.manifest.id!==n)}else throw new Error("Use tools list, register FILE, enable ID|all, disable ID|all, remove ID, upgrade ID, or rollback ID.")})}function Eh(e,t){if(ka.parse(t),e.entries.some(n=>n.manifest.id===t.id))throw new Error("Provider already registered. Remove it explicitly before registering a new pin.");e.entries.push({manifest:t,enabled:!0,admitted_at:new Date().toISOString()})}async function Ea(e,t,n=Lr(e),{confirmLocal:r=async()=>!1,install:o=HS,prepareBrowser:s=Hw,log:i=console.log}={}){let a=FU.parse(t);if(["setup","enable","upgrade"].includes(a.action)){let c=xh[a.provider_id],l=c?`${c.package}@${c.version}; verified archive; lifecycle scripts disabled`:a.provider_id;if(await r(`Approve ${a.action} of ${l} in ${Ct.resolve(e)}`)!==!0)throw new Error(`Local console approval is required for tools ${a.action}. Run engineeros-connector tools ${a.action} ${a.provider_id} --workspace "${Ct.resolve(e)}" locally.`)}if(a.action==="setup"){if(a.provider_id==="playwright"&&!(await zn(e,n)).enabled)throw new Error("Tools are disabled. Run tools enable all before setting up Playwright.");await GU(e,a.provider_id,n,o,i)}else if(a.action==="upgrade")await XS(e,a.provider_id,n,o);else if(a.action==="rollback")await HU(e,a.provider_id,n);else return await $h(e,a.action,a.provider_id,n),jn(e,n);if(a.provider_id==="playwright"){let c=await jn(e,n),l=c.entries.find(d=>d.id==="playwright");if(l?.health!=="installation_verified")throw new Error(`Playwright cannot be prepared (${l?.health??c.error??"not registered"}). Enable or repair the Playwright tool, then run tools setup playwright again.`);let p=(await zn(e,n)).entries.find(d=>d.manifest.id==="playwright").manifest;await s(e,p.launch.package_json,{log:i})}return jn(e,n)}var zU={figma:{endpoint:"https://mcp.figma.com/mcp",scopes:[],permissions:{workspace:"read",process:!1,network:["https://mcp.figma.com"],browser:"isolated",secrets:["figma-oauth"],external_mutations:!0},tasks:["design-context"]},linear:{endpoint:"https://mcp.linear.app/mcp",scopes:["read","write"],permissions:{workspace:"none",process:!1,network:["https://mcp.linear.app"],browser:"isolated",secrets:["linear-oauth"],external_mutations:!0},tasks:["work-tracking"]}};function BU(e,t){let n=vh[e].packages[`node_modules/${t.package}`];return{...t,version:n.version,integrity:n.integrity,tarball:n.resolved}}var xh=Object.fromEntries(Object.entries({codegraph:{package:"@astudioplus/codegraph-mcp",workspace:"read",browser:"none",external_mutations:!1,tasks:["code-navigation"]},"ast-grep":{package:"@ast-grep/cli",workspace:"write",browser:"none",external_mutations:!1,tasks:["structural-analysis"]},context7:{package:"@upstash/context7-mcp",workspace:"none",browser:"none",external_mutations:!1,tasks:["library-documentation"]},playwright:{package:"@playwright/mcp",workspace:"write",browser:"isolated",external_mutations:!0,tasks:["browser-automation"]},"chrome-devtools":{package:"chrome-devtools-mcp",workspace:"read",browser:"isolated",external_mutations:!1,tasks:["browser-diagnostics"]},devcontainers:{package:"@devcontainers/cli",workspace:"write",browser:"none",external_mutations:!1,tasks:["development-environment"]}}).map(([e,t])=>[e,BU(e,t)]));function GS(e){let t=Fs.find(n=>n.id===e);if(!t)throw new Error("Provider is not in the connector catalog.");return t}async function GU(e,t,n,r,o){let s=GS(t),i=(await zn(e,n)).entries.find(u=>u.manifest.id===t);if(i){o(`${s.name} ${i.manifest.version} is already set up.`);return}let a=zU[t],c=xh[t];if(c){let u=Date.now();o(`Installing ${s.name} (${c.package}@${c.version}, verified archive, install scripts disabled).`);let p=await qS(s,c,n,r);await tu(e,n,d=>Eh(d,p)),o(`${s.name} is installed (${Ve(Date.now()-u)}).`);return}if(!a)throw new Error(`${s.name} does not yet have a verified automatic setup recipe. Open its provider guide; do not run an inferred install command.`);let l={id:s.id,name:s.name,provider:s.provider,capability_class:"tool",source:s.source,version:"1.0.0",license:"Provider terms",launch:{transport:"https",endpoint:a.endpoint},platforms:["win32","linux","darwin"],permissions:a.permissions,authentication:{type:"oauth",scopes:a.scopes,client:{registration:"dynamic"}},profiles:s.profiles,tasks:a.tasks,exclusions:[],tools:[],policy:{approval_required:!0,timeout_ms:3e4,retry_limit:1},evidence:"metadata-only",evaluation:{status:"experimental",reference:"curated-hosted-provider-recipe-v1"}};await tu(e,n,u=>Eh(u,l))}async function HS(e,t,{execute:n=Pc}={}){if(!Fo(e.integrity)||!Et(e.version))throw new Error("Provide an exact tool version and SHA-512 archive integrity pin.");if(!e.tarball?.startsWith(Tr))throw new Error("Pinned tool archive must come from the npm registry.");let r=e.lockfile,o=r?.packages?.[""],s=r?.packages?.[`node_modules/${e.package}`];if(r?.lockfileVersion!==3||!o||Object.keys(o.dependencies||{}).length!==1||o.dependencies[e.package]!==e.version)throw new Error("Provide a complete reviewed npm lockfile for this exact tool version before setup.");if(s?.version!==e.version||s?.integrity!==e.integrity||s?.resolved!==e.tarball)throw new Error("Tool lockfile does not match its recipe archive pin; installation refused.");Lc(r,"Tool dependency"),await FS(Ct.dirname(t),{recursive:!0});let i=await IU(`${t}.install-`);try{await PS(Ct.join(i,"package.json"),`${JSON.stringify({name:o.name,version:o.version,private:!0,dependencies:o.dependencies})}
|
|
686
686
|
`,{mode:384}),await PS(Ct.join(i,"package-lock.json"),`${JSON.stringify(r)}
|
|
@@ -1102,7 +1102,7 @@ It is checked with the provider and stored in this machine's protected vault
|
|
|
1102
1102
|
(Windows Data Protection, the macOS Keychain or the Linux Secret Service).
|
|
1103
1103
|
EngineerOS never receives it; the running connector uses it when EngineerOS asks.`;function SK(e,{input:t=process.stdin,output:n=process.stdout}={}){return t.isTTY?new Promise((r,o)=>{n.write(e);let s="";t.setRawMode(!0),t.resume(),t.setEncoding("utf8");let i=c=>{t.setRawMode(!1),t.pause(),t.removeListener("data",a),n.write(`
|
|
1104
1104
|
`),c?o(c):r(s.trim())},a=c=>{for(let l of c){if(l==="\r"||l===`
|
|
1105
|
-
`)return i();if(l==="")return i(new Error("Cancelled."));l==="\x7F"||l==="\b"?s=s.slice(0,-1):s+=l}};t.on("data",a)}):new Promise((r,o)=>{let s="";t.setEncoding("utf8"),t.on("data",i=>s+=i),t.on("end",()=>r(s.trim())),t.on("error",o)})}var qR=Symbol("missing");function kK(e,t){return new Promise(n=>{let r=vK(e,t,{stdio:"inherit",shell:!1});r.once("error",o=>n(o?.code==="ENOENT"?qR:o.message)),r.once("close",o=>n(o===0?null:`${e} exited with code ${o}.`))})}function WR(e,t){for(let n of hc){let r=t[n],o=r.connected?`connected${r.account?` as ${r.account}`:""}`:"not connected";e(`${n.padEnd(8)} ${o}`),r.connected||e(` ${r.detail?`${r.detail} `:""}Connect: ${r.connect_command}`)}}async function VR(e,t,n,{vault:r=ow(),run:o=Md,fetchImpl:s=fetch,secret:i=SK,interactive:a=kK,install:c=Nd,log:l=console.log,error:u=console.error}={}){if(n.help||e!=="integrations"&&!t[0])return l(bK),n.help?0:2;if(e==="integrations")return WR(l,(await Dd({run:o,vault:r})).providers),0;let p=t[0];if(!hc.includes(p))return u(`Unknown provider ${p}. Choose one of: ${hc.join(", ")}.`),2;if(p==="github"||p==="gitlab"){let f=is[p];if(e==="disconnect")return l(`${p} uses this machine's ${f} sign-in. Run \`${f} auth logout\` to sign out everywhere on this machine.`),0;let h=await a(f,["auth","login"]);if(h===qR){let m=await pi(f);if(!m){l(`Installing the ${dc[f].label} ${dc[f].version} for the connector...`);try{m=(await c(f)).path}catch(g){return u(g.message),1}}h=await a(m,["auth","login"])}return h?(u(`${h} ${Ld[p]} is how this machine signs in to ${p}.`),1):(WR(l,{[p]:(await Dd({run:o,vault:r})).providers[p]}),0)}let d=Xt[p];if(e==="disconnect")return await r.delete("",p),l(`Removed the ${d.label} ${d.tokenName} from this machine.`),0;try{await sw(r);let f=await i(`${d.label} ${d.tokenName} (create one at ${d.tokenUrl}): `),h=await iw(r,p,{token:f,site:n.site,email:n.email},s);return l(`Connected ${d.label}${h.account?` as ${h.account}`:""}. The token stays on this machine.`),0}catch(f){return u(f.message),1}}I();import{spawn as EK}from"node:child_process";async function XR({root:e,bundled:t,argv:n,workspace:r,spawnImpl:o=EK,log:s=console.log}){let i=n,a=!1;for(;;){let c=t;try{c=so(await cn(e),t)}catch(p){s(`${p.message} Starting the installed connector ${t.version}.`)}let{code:l,signal:u}=await $K(o,c.entry,i,t);if(l===zi){i=["start","--workspace",r],a=!1,s("Restarting the connector process on the activated update. Goal runs continue in their own processes.");continue}if(l!==0&&!u&&!a){let p=await cn(e).catch(()=>null);if(p&&!p.confirmed&&p.active?.version===c.version)try{let d=await kp(e,{version:c.version,entry:c.entry,bundled:t},{automatic:!0,reason:`${c.version} exited with code ${l} before connecting to EngineerOS.`});a=!0,s(`Connector ${c.version} stopped before connecting; rolled back to ${d.version}.`);continue}catch(d){s(`Automatic rollback failed: ${d.message}`)}}return l??1}}function $K(e,t,n,r){return new Promise((o,s)=>{let i=e(process.execPath,[...process.execArgv,t,...n],{stdio:"inherit",env:{...process.env,[fs]:"1",[yp]:r.entry,[_p]:r.version}}),a=process.platform==="win32"?[]:["SIGINT","SIGTERM","SIGHUP"],c=u=>i.kill(u);for(let u of a)process.on(u,c);let l=()=>{for(let u of a)process.off(u,c)};i.once("error",u=>{l(),s(u)}),i.once("exit",(u,p)=>{l(),o({code:u,signal:p})})})}var Co="1.59.
|
|
1105
|
+
`)return i();if(l==="")return i(new Error("Cancelled."));l==="\x7F"||l==="\b"?s=s.slice(0,-1):s+=l}};t.on("data",a)}):new Promise((r,o)=>{let s="";t.setEncoding("utf8"),t.on("data",i=>s+=i),t.on("end",()=>r(s.trim())),t.on("error",o)})}var qR=Symbol("missing");function kK(e,t){return new Promise(n=>{let r=vK(e,t,{stdio:"inherit",shell:!1});r.once("error",o=>n(o?.code==="ENOENT"?qR:o.message)),r.once("close",o=>n(o===0?null:`${e} exited with code ${o}.`))})}function WR(e,t){for(let n of hc){let r=t[n],o=r.connected?`connected${r.account?` as ${r.account}`:""}`:"not connected";e(`${n.padEnd(8)} ${o}`),r.connected||e(` ${r.detail?`${r.detail} `:""}Connect: ${r.connect_command}`)}}async function VR(e,t,n,{vault:r=ow(),run:o=Md,fetchImpl:s=fetch,secret:i=SK,interactive:a=kK,install:c=Nd,log:l=console.log,error:u=console.error}={}){if(n.help||e!=="integrations"&&!t[0])return l(bK),n.help?0:2;if(e==="integrations")return WR(l,(await Dd({run:o,vault:r})).providers),0;let p=t[0];if(!hc.includes(p))return u(`Unknown provider ${p}. Choose one of: ${hc.join(", ")}.`),2;if(p==="github"||p==="gitlab"){let f=is[p];if(e==="disconnect")return l(`${p} uses this machine's ${f} sign-in. Run \`${f} auth logout\` to sign out everywhere on this machine.`),0;let h=await a(f,["auth","login"]);if(h===qR){let m=await pi(f);if(!m){l(`Installing the ${dc[f].label} ${dc[f].version} for the connector...`);try{m=(await c(f)).path}catch(g){return u(g.message),1}}h=await a(m,["auth","login"])}return h?(u(`${h} ${Ld[p]} is how this machine signs in to ${p}.`),1):(WR(l,{[p]:(await Dd({run:o,vault:r})).providers[p]}),0)}let d=Xt[p];if(e==="disconnect")return await r.delete("",p),l(`Removed the ${d.label} ${d.tokenName} from this machine.`),0;try{await sw(r);let f=await i(`${d.label} ${d.tokenName} (create one at ${d.tokenUrl}): `),h=await iw(r,p,{token:f,site:n.site,email:n.email},s);return l(`Connected ${d.label}${h.account?` as ${h.account}`:""}. The token stays on this machine.`),0}catch(f){return u(f.message),1}}I();import{spawn as EK}from"node:child_process";async function XR({root:e,bundled:t,argv:n,workspace:r,spawnImpl:o=EK,log:s=console.log}){let i=n,a=!1;for(;;){let c=t;try{c=so(await cn(e),t)}catch(p){s(`${p.message} Starting the installed connector ${t.version}.`)}let{code:l,signal:u}=await $K(o,c.entry,i,t);if(l===zi){i=["start","--workspace",r],a=!1,s("Restarting the connector process on the activated update. Goal runs continue in their own processes.");continue}if(l!==0&&!u&&!a){let p=await cn(e).catch(()=>null);if(p&&!p.confirmed&&p.active?.version===c.version)try{let d=await kp(e,{version:c.version,entry:c.entry,bundled:t},{automatic:!0,reason:`${c.version} exited with code ${l} before connecting to EngineerOS.`});a=!0,s(`Connector ${c.version} stopped before connecting; rolled back to ${d.version}.`);continue}catch(d){s(`Automatic rollback failed: ${d.message}`)}}return l??1}}function $K(e,t,n,r){return new Promise((o,s)=>{let i=e(process.execPath,[...process.execArgv,t,...n],{stdio:"inherit",env:{...process.env,[fs]:"1",[yp]:r.entry,[_p]:r.version}}),a=process.platform==="win32"?[]:["SIGINT","SIGTERM","SIGHUP"],c=u=>i.kill(u);for(let u of a)process.on(u,c);let l=()=>{for(let u of a)process.off(u,c)};i.once("error",u=>{l(),s(u)}),i.once("exit",(u,p)=>{l(),o({code:u,signal:p})})})}var Co="1.59.4",Wd="1.59.4",RK=3e5,qd=["queued","running","reporting"],CK=5e3,aw={id:"design_sync",title:"Design artifact sync",remedy:"Fix the reported problem in this workspace. The connector retries on its own; it does not need restarting."},cw={id:"opportunity_scan",title:"Workspace opportunity scan",remedy:"EngineerOS asked this workspace what to deliver next and the scan failed. Check that the coding agent still answers here, or turn autonomy off in Project steering."},OK=6e4,IK=3e4,jK=60*6e4,lw={id:"tool_inventory",title:"Tool inventory refresh",remedy:"Run `engineeros-connector tools list` in this workspace for the full registry state."},uw={id:"runner_setup_reporting",title:"Goal runner setup reporting",remedy:"Restore the connection to EngineerOS; saved setup reports will retry automatically."},{command:gt,positional:jt,flags:Re}=jA(process.argv.slice(2));gt==="version"&&(console.log(Co),process.exit(0));var Qr=null,Yt=!1,dr=null,uC=!1,dC=null,Sw=null,Nt=null,bc=null,_w,JR,KR,dw,YR,mi,wi,pC=_d({getWorkspace:()=>M.workspace,onRecorded:e=>k1(M,e).then(()=>console.log(`Recorded the ${e.role} sign-in for Bug Hunter; it is kept on this machine.`)).catch(t=>console.error(`The recorded ${e.role} sign-in was not reported to EngineerOS: ${t.message}`))}),NK=GR({getWorkspace:()=>M.workspace,huntSignIns:pC}),wc=LA();gt==="results"&&(jt[0]!=="upload"&&(console.log(dd),process.exit(Re.help||!jt[0]?0:2)),process.exit(await zT(Re)));(gt==="connect"||gt==="disconnect"||gt==="integrations")&&process.exit(await VR(gt,jt,Re,{fetchImpl:UR}));if(gt==="runner"){let e=Kt.resolve(Re.workspace||process.cwd()),t=jt[0]||"status";try{if(t==="serve"||t==="worker"){let n=t==="worker"?Kt.join(Kt.dirname(yt(e,Re["run-id"])),"worker.log"):Kt.join(e,".engineeros","runner","service.log");AK(Kt.dirname(n),{recursive:!0});let r=(...s)=>Ua(n,`${TK(...s)}
|
|
1106
1106
|
`),o=(s,i,a)=>(Ua(n,s),(typeof i=="function"?i:a)?.(),!0);process.stdout.write=process.stderr.write=o,console.log=console.error=console.warn=r}if(t==="install"){if(Re["keep-awake"]!==void 0){if(!["on","off"].includes(Re["keep-awake"]))throw new Error("Use --keep-awake on or off.");let n=await Gt(e);if(!n)throw new Error("Pair this workspace before changing its runner keep-awake setting.");await Pn({...n,runner_keep_awake:Re["keep-awake"]==="on"})}console.log(`Installed Goal runner service: ${await Fu(e)}`),process.platform==="darwin"&&console.log("macOS may show a Background Items Added notice. Manage the runner in System Settings > General > Login Items.")}else t==="uninstall"?(await hx(e),console.log("Goal runner service removed. Saved and queued jobs are kept.")):t==="start"?await ei(e,{enable:!0}):t==="status"?console.log(JSON.stringify(await bo(e),null,2)):t==="serve"?await yx(e):t==="worker"?await _x(e,Re["run-id"]):it("Usage: engineeros-connector runner [install|start|status|uninstall] --workspace PATH [--keep-awake on|off]");process.exit(0)}catch(n){it(Dm(n,e).message)}}Re["assessment-workers"]!==void 0&&it("--assessment-workers is no longer supported. Select 3 to 8 parallel agents in EngineerOS before starting the assessment.");if(gt==="secret")try{let e=Um(Re),t=jt[0]||"list",n=await IA({action:t,name:jt[1],workspace:e,readValue:()=>OA({label:`Value for ${jt[1]}`}),write:r=>console.log(r)});process.exit(n.ok?0:1)}catch(e){it(e.message)}if(gt==="tools"){try{let e=Um(Re),t=jt[0]||"list";if(["sign-in","auth-status","sign-out"].includes(t)){let r=jt[1];r||it(`Usage: engineeros-connector tools ${t} PROVIDER_ID [--workspace PATH | --project PROJECT_UUID]`);let o=await Th(e,{type:"tools.auth",command_id:"00000000-0000-4000-8000-000000000001",action:{"sign-in":"sign_in","auth-status":"status","sign-out":"sign_out"}[t],provider_id:r,confirmed:t==="sign-out"});o.completion&&await o.completion}else["setup","upgrade","rollback"].includes(t)?await Ea(e,{type:"tools.update",command_id:"00000000-0000-4000-8000-000000000002",action:t,provider_id:jt[1],confirmed:!0},void 0,{confirmLocal:async()=>!0}):t!=="list"&&await $h(e,t,jt[1]);let n=await jn(e);console.log(JSON.stringify(n,null,2)),process.exitCode=n.error?1:0}catch(e){it(e.message)}process.exit(process.exitCode||0)}if(gt==="agents"){let e;try{e=await Hh()}catch(n){it(n instanceof Error?n.message:String(n))}let t=await Promise.all(e.map(async n=>{try{return await xa(n.id),`${n.id}: ready (${n.name} ${n.version}, ${n.distribution_type})`}catch(r){let o=r instanceof Error?r.message:String(r);return`${n.id}: setup needed (${n.name} ${n.version}, ${n.distribution_type}) - ${o}`}}));for(let n of t)console.log(n);process.exit(0)}if(gt==="agent"){let e=jt[0],t=jt[1]||"check";(!e||!["check","install"].includes(t))&&it("Usage: engineeros-connector agent AGENT_ID [check|install]");try{let n=t==="install"?await Aa(e):await xa(e);console.log(`${n.name} is ready (${n.version}, ${n.distribution}).`)}catch(n){it(n instanceof Error?n.message:String(n))}process.exit(0)}if(gt==="mcp"){let e=Re.workspace||process.env.ENGINEEROS_MCP_WORKSPACE||process.cwd(),t=Re["run-id"]||jt[0]||process.env.ENGINEEROS_MCP_RUN_ID||null,n=await Gt(e);await YA({config:n,runId:t,version:Co,input:process.stdin,output:process.stdout}),process.exit(0)}if(gt==="context-mcp"){let e=Re["config-workspace"]||Re.workspace||process.env.ENGINEEROS_MCP_WORKSPACE||process.cwd(),t=await Gt(e);t||it("This workspace is not paired with EngineerOS."),await OT({config:t,workspace:Re.workspace||process.env.ENGINEEROS_CONTEXT_WORKSPACE||t.workspace,version:Co,input:process.stdin,output:process.stdout}),process.exit(0)}if(gt==="status"){let e=await Gt(Re.workspace||process.cwd());console.log(e?`Paired as ${e.name} (${e.connector_id}) for ${e.workspace}`:"Not paired"),process.exit(e?0:1)}if(gt==="doctor"){let e=Kt.resolve(Re.workspace||process.cwd()),t=await Gt(e),n=await qA(e),r=await Ei(t||{workspace:e},e,pg(n));console.log(ag(r)),process.exit(r.status==="failed"?1:0)}if(gt==="update"){let e=jt[0]||"status";try{let t=bp(process.argv[1],Wd),n=await Ep(Rr(),t,{action:e,policy:jt[1]??null});console.log(Gi($p(n,t,{supervised:!0})))}catch(t){it(`${t.message}
|
|
1107
1107
|
Usage: engineeros-connector update [status|check|apply|rollback|policy manual|approve|auto-patch|auto-minor]`)}process.exit(0)}var yi=gt==="hunt-host";if(yi)try{Re.workspace=kx(jt,Re)}catch(e){it(e.message)}if((gt==="start"||gt==="pair"||yi)&&process.env[fs]!=="1"&&Et(Wd))try{process.exit(await XR({root:Rr(),bundled:{version:Wd,entry:Kt.resolve(process.argv[1])},argv:process.argv.slice(2),workspace:Kt.resolve(Re.workspace||process.cwd())}))}catch(e){it(`The connector process could not be started: ${e.message}`)}if(yi){try{await Ex(Re.workspace,jt[0]?Re.agent:null)}catch(e){it(e.message)}gt=jt[0]?"pair":"start"}var M,cs,yc;if(gt==="pair"){let e=jt[0];e||it("Usage: engineeros-connector pair CODE --url URL [--agent AGENT_ID | --agent-protocol forge] [--name NAME] [--workspace PATH] [--skip-git-repo-check]");let t=Re.url;t||it("Pairing requires --url with the EngineerOS backend address."),Re.agent&&Re["agent-command"]&&it("Use either --agent or --agent-command, not both.");let n=Re["agent-protocol"]||(Re["agent-command"]?"acp":"codex");["codex","acp","forge"].includes(n)||it(`Unknown --agent-protocol '${n}'. Use codex, acp, or forge.`),n==="forge"&&(Re.agent||Re["agent-command"])&&it("Forge runs its own agents. Drop --agent and --agent-command when pairing with --agent-protocol forge.");let r={};try{Re.agent&&(await xa(Re.agent),r=await Wh(Re.agent))}catch(o){it(o instanceof Error?o.message:String(o))}M={server_url:Rp(t),workspace:Kt.resolve(Re.workspace||process.cwd()),onboard:Re.onboard===!0,onboarding_pending:Re.onboard===!0,hunt_host:yi,agent_protocol:n,agent_command:Re["agent-command"]||null,agent_args:oY(Re["agent-args"]),agent_name:Re["agent-name"]||null,...r,skip_git_repo_check:yi||Re["skip-git-repo-check"]===!0,name:Re.name||`${xK.hostname()} - ${Kt.basename(Kt.resolve(Re.workspace||process.cwd()))}`},yc=await Gt(M.workspace),cs={type:"pair",pairing_code:e,name:M.name,capabilities:{},...Ny(yc,M.server_url)}}else gt==="start"?(M=await Gt(Re.workspace||process.cwd()),M||it("This connector is not paired. Create a pairing command in EngineerOS first."),yi&&!M.hunt_host&&it("This folder is not a paired hunt host. Generate a new hunt-host command in EngineerOS."),M.token||it("This connector's token is no longer in this machine's credential store. Create a new pairing command in EngineerOS and pair again."),cs={type:"authenticate",connector_id:M.connector_id,token:M.token}):it("Use `engineeros-connector pair`, `start`, `status`, `doctor`, `agents`, `agent`, `tools`, `secret`, or `mcp`.");var fC=vx(M,{reportError:e=>console.error(e)}),Ro=0,Vd=!1,_c=null,Zt=new Map,pw=0,fw=new Set,_i=[],Jt=new Map,xt,vw,zd,kr=null,Bd=!1,hC=0,hw=null,mw=[],Gd,mC,mc=1e3,vi,ZR=0,gw=!1,Kr=!1,Xn,To=!1,Xd=!1,bw=0;function hi(e){return bw+=1,e.finally(()=>{bw-=1})}var gi,as=0;function vc({exitCode:e=0}={}){if(as=Math.max(as,e),gi)return gi;let t=setTimeout(()=>{console.error("Connector shutdown exceeded 15 seconds; inspect the retained agent logs before restarting."),process.exit(1)},15e3);return t.unref(),gi=MK().finally(()=>clearTimeout(t)),gi}async function MK(){if(Yt=!0,bc?.stop(),Qr?.stop(),Sw?.stop(),dC?.stop(),clearInterval(_w),Nt?.stop(),mC?.(),clearTimeout(Gd),clearInterval(vw),clearInterval(zd),await Promise.all([...[...Zt.values()].map(e=>un(e.child))]),await Promise.all([...Jt.values()].map($w)),await mi?.cancelAll(),await wi?.abortAll(),await $a(),await Nw().catch(e=>{as=Math.max(as,1),console.error(`${e.message}. Stop those processes before restarting the connector.`)}),xt?.close(),as&&as!==zi){let e;await Promise.race([(async()=>{await Qr?.drain(),await Ei(M,M.workspace)})().catch(()=>{}),new Promise(t=>{e=setTimeout(t,1e4)})]).finally(()=>clearTimeout(e))}process.exit(as)}for(let e of["SIGINT","SIGTERM","SIGHUP"])process.on(e,()=>{vc()});var QR=!1;for(let e of["uncaughtException","unhandledRejection"])process.on(e,async t=>{QR||(QR=!0,console.error(`Connector stopping after an unhandled failure: ${t instanceof Error?t.stack||t.message:String(t)}`),await vc({exitCode:1}))});Nt=zw();process.on("exit",()=>{bc?.stop(),Nt.stop()});Nt.banner(`EngineerOS connector ${Co}`,[M.workspace,M.server_url]);Qr=PA({actions:{refresh_tool_inventory:async()=>{Le.tool_inventory=await jn(M.workspace),kn()},restart_goal_runner:()=>ei(M.workspace)},onNotify:()=>Ei(M,M.workspace),explain:async e=>{if(!await ki())return null;let{reading:t}=await H$(M,e);return t},onUpdate:e=>WA(M.workspace,e)});dC=XA({render:(e,t)=>Nt.write(e,t),onRecord:e=>Qr.observe(e)});Sw=JA({workspace:M.workspace,onRecord:e=>{Qr.observe(e),Nt.line(e.channel,e.level,e.message)}});Qr.start();M.hunt_host||Sw.start();Nt.live&&!M.hunt_host&&(_w=setInterval(()=>{PK().catch(()=>{})},CK),_w.unref?.());var ww=new Set;async function PK(){if(M.hunt_host)return;JR??=Mm(M.workspace);let{jobs:e}=await JR(),t=new Set,n=e.filter(r=>r.status!=="queued"&&qd.includes(r.status)).length;for(let r of e){if(!qd.includes(r.status))continue;t.add(r.runId),ww.add(r.runId);let o=r.status==="queued"&&n>0?`queued behind running Goals (running: ${n})`:r.activity?.phase||r.status;Nt.status(`goal:${r.runId}`,o,LK(r),{agent:r.status!=="queued",link:_c&&`${_c}/goals`}),Nt.step(`goal:${r.runId}`,r.activity?.message)}for(let r of ww)t.has(r)||(ww.delete(r),Nt.clearStatus(`goal:${r}`))}function LK(e){let t=e.startedAt??Date.parse(e.updatedAt??"");return Number.isFinite(t)?t:Date.now()}async function ki({ignoreBugHunt:e=!1}={}){if(Yt||Zt.size>0||Jt.size>0||Ro>0||(mi?.active??0)>0||!e&&(wi?.active??0)>0)return!1;try{let{jobs:t}=await bo(M.workspace);return!Yt&&!t.some(n=>qd.includes(n.status))}catch{return!1}}try{let e=M.hunt_host?{}:await ds(M.workspace);e.committed&&(M.onboarding_pending=!0,M.connector_id&&await Pn(M),console.log(`Local project repository ready at ${e.revision.slice(0,8)}. Source and design artifacts are committed locally.`))}catch(e){await vC(e)}var gC=await cn(Rr()).then(e=>e.policy!=="manual",()=>!1),rt;try{rt=await La(M,M.workspace)}catch(e){await vC(e)}console.log(`Using ${rt.name} through ${rt.protocol} (${rt.version}).`);var wC=async()=>Za({workspace:M.workspace}).names().catch(()=>[]),Le=nd(M,rt,await jn(M.workspace),{secretNames:await wC()}),Zr=by({running:bp(process.argv[1],Wd),supervised:process.env[fs]==="1",isIdle:async()=>!Yt&&Zt.size===0&&_i.length===0&&Jt.size===0&&Ro===0&&bw===0&&!To&&!Xd&&!Bd,restart:()=>vc({exitCode:zi}),onChange:e=>{Le.runtime_update=e,xt?.readyState===WebSocket.OPEN&&kn()}});try{await Zr.refresh()}catch(e){console.error(`Connector updates are unavailable: ${e.message}`)}M={...M,execution_profiles:rt.executionProfiles??null};gt==="pair"&&yc?.connector_id||await Pn(M);Le.agent_session={...Le.agent_session,status:"checking",message:`Checking that ${rt.name} can answer.`};Le.bug_hunt_browser=!1;cs.capabilities=Le;console.log(Br(M.worker_limit)===null?`Workers: automatic, ${Vs()} ${rt.name} workers side by side for this machine's CPU and memory; change it with /workers.`:`Workers: ${Br(M.worker_limit)} ${rt.name} workers side by side, set with /workers.`);var bi=e=>Gr(M,e),eC=Mu(bi,{signature:Q$});async function DK(){let e=await bo(M.workspace).catch(()=>({service:null,jobs:[]}));return{version:Co,now:Date.now(),workspace:M.workspace,config_path:yn(M.workspace),config:M,agent:rt,automatic_worker_limit:Vs(),worker_limit:Br(M.worker_limit),connection:{state:FK(),server_url:M.server_url,last_error:Xn||null},work:{assessments:[...Zt.values()].map(t=>({stage:t.stage,message:t.lastMessage,started_at:t.startedAt})),prompts:[...Jt.values()].map(t=>({id:String(t.runId).slice(0,8),purpose:t.purpose,started_at:t.startedAt})),integrations:Ro},runner:e,runtime_update:Zr.report(),health:Qr?.health()??null,activity:wc.snapshot()}}function FK(){return Yt||Kr?"stopped":xt?.readyState===WebSocket.OPEN?"connected":"connecting"}var UK={async cancelPrompt(e){let t=[...Jt.values()].find(n=>n.runId.startsWith(e));return t?(t.stoppedHere=!0,t.cancellation.abort(),await t.controller?.completed.catch(()=>{}),`Stopping prompt ${e} (${t.purpose}); EngineerOS will be told it was cancelled here.`):`Prompt ${e} finished before it could be stopped.`},setWorkers:e=>_C(e),setVerbose(e){return e===Vd?`Detailed agent activity is already ${e?"on":"off"}.`:(kw(e),"This lasts until EngineerOS sends its own setting again: when the connector reconnects, or when it is changed there.")},async runtimeUpdate(e){return e.action==="apply"?(Zr.command(e).catch(t=>console.error(`Connector update: ${t.message}`)),"Preparing the latest connector release beside this one; it switches over once this connector is idle."):(await Zr.command(e),Gi(await Zr.refresh()))}};bc=zA({ui:Nt,snapshot:DK,actions:UK});bc&&console.log(UA());await yC();var tC=new Set;async function yC(){if(Yt||Kr)return;console.log(`Connecting ${M.name} to ${M.server_url}`),Kr=!1,Xn=void 0;let e=new WebSocket(M.server_url);xt=e;let t=Dv(e,M.server_url,{onTimeout:r=>{xt===e&&(Xn=r,console.error(r),yw())}});mC=t,e.addEventListener("open",()=>{if(xt!==e){e.close();return}try{if(Iv(xt,e,cs))return;throw new Error("The WebSocket was not open when authentication started.")}catch(r){Xn=en(r),console.error(`Could not authenticate the WebSocket connection: ${Xn}`);try{e.close()}catch{}yw()}}),e.addEventListener("message",r=>{if(xt!==e)return;let o;try{o=JSON.parse(String(r.data))}catch{console.error("Ignored a malformed EngineerOS message frame (invalid JSON).");return}n(o).catch(s=>{console.error(`EngineerOS ${String(o?.type||"unknown").slice(0,80)} message failed: ${en(s)}`)})});let n=async r=>{if(r.type==="authenticated"&&r.connector?.capabilities?.http_updates!==!0){Yt=!0,Kr=!0,t(),console.error("Update the EngineerOS backend to support connector HTTP updates before reconnecting."),e.close();return}if(r.type==="paired"){t();let s=yc?.connector_id===r.connector.id;if(M=My(M,yc,r.connector.id,r.token),await Pn(M),r.connector?.capabilities?.http_updates!==!0){Yt=!0,Kr=!0,console.error("Pairing saved. Update the EngineerOS backend for HTTP updates, then start this connector again."),e.close();return}cs={type:"authenticate",connector_id:M.connector_id,token:M.token,capabilities:Le},console.log(s?`Reconnected existing workspace connector ${M.connector_id}; assessment history is preserved.`:`Paired. Connector ${M.connector_id} is online.`),sC(r);return}if(r.type==="authenticated"){t();let s=M.hunt_host?"Bug Hunter sessions":"EngineerOS runs";console.log(vi?`Reconnected after ${Ve(Date.now()-vi)} offline; waiting for ${s}.`:`Connected and waiting for ${s}.`),vi=void 0,sC(r);return}if(r.type==="provider.login"||r.type==="provider.logout"){Xd||BK(r);return}if(r.type==="workspace.refresh"){Si();return}if(r.type==="workers.update"){try{console.log(`EngineerOS changed the workers. ${await _C(r.worker_limit??"auto")}`)}catch(s){console.error(`Workers were not changed: ${s.message}`)}return}if(r.type==="logging.update"){kw(r.activity_log_enabled===!0);return}if(r.type==="tools.update"){let s=r.provider_id==="playwright"&&["setup","upgrade","rollback"].includes(r.action);s&&(Yr=!1,Le.bug_hunt_browser=!1,kn());try{Le.tool_inventory=await Ea(M.workspace,r,void 0,{confirmLocal:i=>bc?.confirm(i)??!1,log:Hd}),s&&(Yr=!0),Le.bug_hunt_browser=ss(Le.tool_inventory)&&Yr,e.send(JSON.stringify({type:"tools.updated",command_id:r.command_id,inventory:Le.tool_inventory})),kn(),console.log(`Tool registry updated: ${r.action} ${r.provider_id}.`)}catch(i){let a=i instanceof Error?i.message.slice(0,300):"The local connector rejected the tool registry update.";e.send(JSON.stringify({type:"tools.updated",command_id:r.command_id,error:a})),console.error(`Tool registry update rejected: ${a}`)}return}if(r.type==="tools.auth"){try{let s=await Th(M.workspace,r,{onStatus:async()=>{Le.tool_inventory=await jn(M.workspace),kn()}});Le.tool_inventory=s.inventory,s.completion&&s.completion.catch(i=>console.error(`Tool authentication status: ${i instanceof Error?i.message.slice(0,300):"Local status update failed."}`)),e.send(JSON.stringify({type:"tools.updated",command_id:r.command_id,inventory:Le.tool_inventory})),kn(),console.log(`Tool authentication updated: ${r.action} ${r.provider_id}.`)}catch(s){let i=s instanceof Error?s.message.slice(0,300):"The local connector rejected the tool authentication request.";e.send(JSON.stringify({type:"tools.updated",command_id:r.command_id,error:i})),console.error(`Tool authentication rejected: ${i}`)}return}if(r.type==="test_environment.health_check"){$s(r).then(s=>{e.send(JSON.stringify({type:"test_environment.health_result",command_id:r.command_id,result:s})),console.log(`Test environment health: ${s.status}${s.message?` (${s.message})`:""}.`)}).catch(s=>console.error(`Test environment health was not reported: ${s.message}`));return}if(r.type===BR){hi(NK(r).then(s=>(s.error&&console.error(`${r.provider} ${r.operation} failed: ${s.error}`),HR(M,s))).catch(s=>console.error(`An integration answer was not delivered: ${s.message}`)));return}if(r.type==="workspace.assessment"){let s=`${r.assessment_id}:${r.stage}`;km(_i,Zt.get(s),r)==="deferred"&&console.log(`Assessment stage ${r.stage} is already running here; EngineerOS will be answered when it finishes.`),Sc();return}if(r.type==="prompt.execute"){let s=Jt.get(r.prompt_id);s?$C(r)>s.executionRevision&&await eY(s,r):EC(r);return}if(r.type==="prompt.cancel"){let s=Jt.get(r.prompt_id);s&&await $w(s);return}if(r.type==="agent.warm"){VK(r);return}if(r.type==="run.available"){if(M.hunt_host){console.error("A hunt host cannot run Goals. Use Connect your code to pair a repository connector.");return}try{let s=await fC.dispatch(r);s.blocked?console.error(s.message):console.log(`Goal ${r.run_id} queued for the independent runner. Logs: ${Kt.join(M.workspace,".engineeros","runs",r.run_id,"activity.log")}`)}catch(s){console.error(`Goal dispatch failed: ${en(s)}`)}return}if(r.type==="goal.cleanup"){try{await wx(M.workspace),await ei(M.workspace)}catch(s){console.error(`Goal cleanup is pending: ${s.message}`)}return}if(r.type==="run.accepted"){rY(r);return}if(r.type==="run.cancelled"){await Nm(M.workspace,r.run_id);return}if(r.type===Pb){mi??=ih({getConfig:()=>M,onTestsCommitted:()=>Si()}),hi(mi.handle(r));return}if(r.type===Lb){mi??=ih({getConfig:()=>M,onTestsCommitted:()=>Si()}),await mi.cancel(r);return}if(r.type===uR){wi??=mR({getConfig:()=>M,isIdle:()=>ki({ignoreBugHunt:!0}),recordedSignIns:pC,activity:{status:Nt.status,step:Ew,agents:Nt.agents,finish:Nt.finish}}),hi(wi.handle(r));return}if(r.type===dR){wi?.stop(r);return}if(r.type===BT){KR??=GT({getConfig:()=>M}),hi(KR.handle(r));return}if(r.type===JT){dw??=o1({getConfig:()=>M}),hi(dw.handle(r));return}if(r.type===KT){await dw?.cancel(r);return}if(r.type===i1){YR??=a1({getConfig:()=>M,isIdle:()=>ki(),agentTurn:g$}),hi(YR.handle(r));return}if(r.type==="connector.update"){zK(e,r);return}if(r.type==="connector.disconnect"){console.log(r.message),await vc();return}if(r.type==="connector.revoked"){Yt=!0,console.error("This connector was revoked in EngineerOS."),e.close();return}if(r.type==="run.error"){console.error(`EngineerOS: ${r.message}`),r.run_id||(To=!1);return}if(r.type==="connection.error"){Kr=!0,console.error(`EngineerOS: ${r.message}`);return}let o=String(r.type??"(missing)").replace(/[^a-zA-Z0-9_.-]/g,"_").slice(0,120);tC.has(o)||(tC.add(o),console.warn(`Unknown EngineerOS message type ${o}; connector ${Co}. Update the connector and backend to compatible versions.`))};e.addEventListener("close",r=>{if(t(),xt!==e||gi)return;let o=jv(r);if(!o.retry||Kr||Yt){console.error(o.message),o.retry&&Kr&&console.error("Connection rejected. Create a new pairing command in EngineerOS if this connector was revoked."),vc();return}Xn=Xn?`${o.message} ${Xn}`:o.message,yw()}),e.addEventListener("error",r=>{xt===e&&(Xn=Ov(r),console.error(`WebSocket connection to ${M.server_url} failed: ${Xn}`))})}async function zK(e,t){let n=r=>e.send(JSON.stringify({type:"connector.updated",command_id:t.command_id,...r}));try{let r={action:t.action,policy:t.policy??null},o=Zr.command(r);r.action==="apply"?(o.catch(s=>console.error(`Connector update: ${s.message}`)),await Promise.race([o,new Promise(s=>setTimeout(s,3e3).unref())])):await o,n({report:await Zr.refresh()}),console.log(`EngineerOS asked for connector update ${r.action}.`)}catch(r){let o=(r instanceof Error?r.message:String(r)).slice(0,300)||"The connector rejected the update request.";n({error:o}),console.error(`Connector update ${t.action} rejected: ${o}`)}}async function BK(e){let t=e.request_id,n=e.type==="provider.logout"?"logout":"login";Xd=!0,console.log(`Starting interactive ${rt.name} provider ${n}.`);try{await(n==="logout"?Lv:Pv)(rt,M.workspace),rt=await La(M,M.workspace),Le=nd(M,rt,Le.tool_inventory,{secretNames:await wC()}),cs.capabilities=Le,xt.readyState===WebSocket.OPEN&&(xt.send(JSON.stringify({type:`provider.${n}.completed`,request_id:t,session:Le.agent_session})),xt.close(1e3,`Provider ${n} completed`)),console.log(`${rt.name} provider ${n} completed.`)}catch(r){let o=en(r).slice(0,500);xt.readyState===WebSocket.OPEN&&xt.send(JSON.stringify({type:`provider.${n}.failed`,request_id:t,message:o})),console.error(`Provider ${n} failed: ${o}`)}finally{Xd=!1}}function yw(){if(Yt||Kr||Gd)return;let e=Xn?` Last error: ${Xn}`:"",t=vi?` Offline for ${Ve(Date.now()-vi)}.`:"";vi??=Date.now(),console.error(`Connection unavailable.${e}${t} Retrying in ${Math.round(mc/1e3)}s.`),Gd=setTimeout(()=>{Gd=void 0,yC()},mc),mc=Math.min(3e4,mc*2)}async function Si(){if(!M.hunt_host&&!(To||xt.readyState!==WebSocket.OPEN)){To=!0,console.log("Inspecting the workspace without executing its code.");try{let{snapshot:e,map:t,stats:n}=await _g({workspace:M.workspace,connectorId:M.connector_id,refresh:vs,takeSnapshot:V$,buildMap:(i,a)=>cd(M.workspace,i,{head:a.head_revision,branch:a.branch}),log:i=>console.error(i)}),r=await q$(M.workspace,M.last_head_reported??M.last_snapshot_head,e.head_revision).catch(()=>null);r&&(e.changed_since=r);let o=await fetch(hs(M.server_url,M.connector_id),{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${M.token}`},body:JSON.stringify(e)});if(!o.ok)throw new Error(await ua(o,"the workspace"));let s=await o.json();M={...M,onboarding_pending:!1,last_snapshot_head:e.head_revision??M.last_snapshot_head,last_head_reported:e.head_revision??M.last_head_reported,last_head_branch:e.head_revision?e.branch??null:M.last_head_branch},await Pn(M),t&&await ld(M.workspace,M.connector_id,t).catch(()=>{}),console.log(`Inventoried ${e.total_file_count.toLocaleString()} safe file(s).`),console.log(`Uploaded ${e.evidence_file_count.toLocaleString()} prioritized source file(s).`),console.log(`Excluded ${e.excluded_file_count.toLocaleString()} sensitive or generated file(s).`),e.omitted_evidence_file_count>0&&console.log(`${e.omitted_evidence_file_count.toLocaleString()} additional file(s) remain available to the connected Agent locally.`),console.log(`Workspace inventory registered as ${s.workspace_kind}. Start the baseline assessment in EngineerOS to continue.`),n&&console.log(`Built the local context index: ${n.total_files.toLocaleString()} file(s) ready for assignment context.`),To=!1}catch(e){To=!1,console.error(`Workspace assessment failed: ${en(e)}`)}}}var GK=8e6,nC,rC="";async function HK({current:e,previous:t}){if(To||xt?.readyState!==WebSocket.OPEN)throw new Error("A snapshot is running or the connection is down.");let n=Kt.resolve(M.workspace),r=async()=>{M={...M,last_head_reported:e.head,last_head_branch:e.branch??null},await Pn(M)},o=await yg(M.workspace,M.connector_id),s=async()=>{if(await Si(),M.last_head_reported!==e.head)throw new Error("The snapshot did not report this commit.")};if(!o)return s();let{index:i}=await vs(M.workspace,M.connector_id),a=null,c=await vT({previous:{head:t.head,branch:t.branch??null},current:e,compare:(d,f)=>Am(M.workspace,d,f),inventoryDelta:d=>w_(n,Object.entries(i.files).map(([f,h])=>({path:f,size:h.size})),d),mapDelta:async()=>(a=await cd(M.workspace,i,{head:e.head,branch:e.branch}),wg(o,a)),contentHead:(await gl(n).catch(()=>null))?.content_head_revision??null});if(c.status==="snapshot")return s();if(c.status==="nothing")return r();let l=JSON.stringify(c.report);if(Buffer.byteLength(l)>GK)return s();let u=await fetch(Dy(M.server_url,M.connector_id),{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${M.token}`},body:l});if(!u.ok)throw new Error(await ua(u,"the new commit"));let p=await u.json().catch(()=>({}));if(p.needs_snapshot)return s();await r(),a&&await ld(M.workspace,M.connector_id,a).catch(()=>{}),console.log(`Reported ${c.report.reason==="branch_switch"?"the switch to ":"commit "}${e.head.slice(0,7)}${p.flagged_cases?`: ${p.flagged_cases} test case(s) to check again`:""}.`)}function WK(){M.hunt_host||M.onboarding_pending||To||xt?.readyState!==WebSocket.OPEN||(nC??=_T({readHead:()=>yT(M.workspace),getLastReported:()=>({head:M.last_head_reported??M.last_snapshot_head,branch:M.last_head_branch}),onChange:HK,onError:e=>{e.message!==rC&&(rC=e.message,console.error(`The new commit could not be reported yet: ${en(e)}`))}}),nC.poll().catch(()=>{}))}var qK=6e4,oC=0;async function VK(e){if(M.hunt_host)return;let t=typeof e.session_key=="string"?e.session_key.trim():"",n=t?M.sessions?.[t]:void 0,r=[];Date.now()-oC>qK&&(oC=Date.now(),r.push(vs(M.workspace,M.connector_id).catch(o=>console.error(`Context index refresh ahead of a conversation failed: ${o.message}`)))),M.agent_protocol==="acp"&&r.push(fk(M.workspace,M,{sessionKey:n?t:null,previousSessionId:n,sandbox:e.sandbox_mode==="workspace-write"?"workspace-write":"read-only",profile:e.execution_profile&&typeof e.execution_profile=="object"?e.execution_profile:{}}).catch(o=>console.error(`${rt?.name||"The agent"} could not be started ahead of the conversation: ${o.message}`))),await Promise.all(r)}function kn(){let e=N$(Zt);eC.update({type:"assessment.workers",assessment_workers:e,tool_inventory:Le.tool_inventory,runtime_update:Le.runtime_update,agent_session:Le.agent_session,bug_hunt_browser:Le.bug_hunt_browser,...Ou(M.worker_limit)}),eC.flush().catch(t=>console.error(`Assessment status: ${t.message}`))}async function _C(e){let t=Br(e);return t===Br(M.worker_limit)?t===null?"Workers are already automatic.":`Workers are already set to ${t}.`:(M={...M,worker_limit:t},await Pn(M),Sc(),kn(),t===null?`Workers are automatic again: up to ${Vs()} side by side for this machine's CPU and memory, for ${ec} (an assessment may ask for fewer). A Goal that uses your working folder still runs alone.`:`Up to ${t} worker${t===1?"":"s"} now run side by side: ${ec}. A Goal that uses your working folder still runs alone. Running work finishes; waiting work starts as workers free up.`)}function kw(e){if(e!==Vd){if(Vd=e,!e)for(let t of Zt.values())t.lastDetail=null;console.log(e?"Detailed agent activity is on: every agent action is printed here and shown in EngineerOS.":"Detailed agent activity is off: prompts and stages show only their latest steps."),kn()}}function Ew(e,t,n=null){Nt.step(e,t,n)&&Vd&&console.log(`[${e}] ${n?`${n}: `:""}${t}`)}function XK(){clearInterval(zd);let e=!1,t=()=>{e||Zt.size>0||Jt.size>0||(e=!0,Ei(M,M.workspace).finally(()=>{e=!1}))};t(),zd=setInterval(t,RK),zd.unref?.()}async function Ei(e,t,n=Qr?.healthChecks()??[]){let r=await EA({config:e,workspace:t,version:Co,insights:n,agentSession:dr,probes:{inspectAgent:(o,s)=>Yt?rt:La(o,s),inspectTools:o=>Yt?Le.tool_inventory:jn(o),runnerStatus:bo}});try{uC=(await $A(e,r,Gr))?.autonomy_scan===!0}catch(o){console.error(`EngineerOS did not accept the connector self-check: ${o instanceof Error?o.message:String(o)}`)}return r}async function vC(e){if(Yt)return gi;let t=e instanceof Error?e.message:String(e),n=await Ei(M,M.workspace).catch(()=>null);n&&console.error(ag(n)),it(t)}function sC(e){kw(e.connector?.activity_log_enabled===!0),_c=e.project_url??null,mc=1e3,KK(),SC(),Zr.confirm().catch(t=>console.error(`Connector update state: ${t.message}`)),YK(),M.onboarding_pending&&Si()}var gc=null,Yr=!1,bC=0,JK=Date.now();async function KK(){return gc||(gc=(async()=>{gC&&await JS(M.workspace,{log:t=>console.log(`[tools] ${t}`)}).catch(t=>console.error(`[tools] Tool updates were skipped: ${t.message}`));let e=Date.now();try{Hd("Preparing Bug Hunter's browser: Playwright, then a check that a browser starts. The first setup can take a few minutes."),await $x(M.workspace,{log:Hd}),Yr=!0,Le.tool_inventory=await jn(M.workspace),Le.bug_hunt_browser=ss(Le.tool_inventory)&&Yr,Hd(`Bug Hunter's browser is ready (${Ve(Date.now()-e)}).`)}catch(t){console.error(`[browser] Bug Hunter's browser setup failed after ${Ve(Date.now()-e)}: ${t.message}`),Le.bug_hunt_browser=!1}kn()})(),gc)}function Hd(e){console.log(`[browser] ${e}`)}async function SC(){if(dr?.state!=="checking"){bC=Date.now(),Le.agent_session={...Le.agent_session,status:"checking",message:`Checking that ${rt.name} can answer.`},kn(),dr={state:"checking",detail:`Asking ${rt.name} one question to confirm its session.`},console.log(`Checking that ${rt.name} can answer before accepting work.`);try{await F$(M,rt.name),dr={state:"ready",detail:`${rt.name} answered; its session is usable.`},Le.agent_session={...Le.agent_session,status:"authenticated",message:dr.detail},console.log(dr.detail)}catch(e){dr={state:"failed",detail:e instanceof Error?e.message:String(e),remedy:M.hunt_host?Ax(M.agent_id||M.agent_protocol):Bs(M.agent_id||M.agent_protocol)},Le.agent_session={...Le.agent_session,status:"logged_out",message:dr.remedy},console.error(`${dr.detail}
|
|
1108
1108
|
${dr.remedy}`)}kn(),await Ei(M,M.workspace).catch(()=>null)}}function YK(){clearInterval(vw);let e=!1,t=0,n=0,r=!1,o=()=>{Zr.tick(),ZK(),WK(),M.hunt_host&&gc&&Date.now()-bC>=xx(JK)&&Jt.size===0&&Zt.size===0&&!(wi?.active>0)&&SC(),!M.hunt_host&&!r&&Ja(uw.id)&&(r=!0,fC.flush().then(()=>Ud(uw)).catch(s=>Fd(uw,s)).finally(()=>{r=!1})),Zt.size>0&&kn(),!M.hunt_host&&!kr&&Date.now()-t>=OK&&Ja(aw.id)&&(t=Date.now(),kC().then(()=>Ud(aw)).catch(s=>Fd(aw,s))),!M.hunt_host&&uC&&!Bd&&Ja(cw.id)&&Date.now()-hC>=aS&&(Bd=!0,QK().then(()=>Ud(cw)).catch(s=>Fd(cw,s)).finally(()=>{Bd=!1})),!e&&Date.now()-n>=IK&&Ja(lw.id)&&(e=!0,n=Date.now(),jn(M.workspace).then(async s=>{if(Le.tool_inventory=s,!Yr&&ss(s))try{await(await Po(await ko(M.workspace))).close(),Yr=!0}catch{Yr=!1}Le.bug_hunt_browser=ss(s)&&Yr,kn(),Ud(lw)}).catch(s=>Fd(lw,s)).finally(()=>{e=!1}))};o(),vw=setInterval(o,1e4),XK()}async function ZK(){if(!(!gC||M.agent_protocol!=="acp"||!M.agent_id||gw||dr?.state==="checking"||Date.now()-ZR<jK)){gw=!0;try{if(!await ki())return;ZR=Date.now();let e,t=await bk(M,{verify:async r=>{e=await La(r,M.workspace)},log:r=>console.log(`[agent] ${r}`)});if(t===M||Yt)return;M={...t,execution_profiles:e.executionProfiles??null},await Pn(M),rt=e;let n=nd(M,rt,Le.tool_inventory);if(Object.assign(Le,{agent_name:n.agent_name,agent_version:n.agent_version,execution_profiles:n.execution_profiles}),cs.capabilities=Le,!await ki())return;await $a(),xt?.readyState===WebSocket.OPEN&&xt.close(1e3,"Coding agent updated")}catch(e){console.error(`[agent] The agent update check failed: ${e.message}`)}finally{gw=!1}}}function Fd(e,t){let n=yA(e.id,e.title,t,{remedy:e.remedy});console.error(`${e.title} failed ${n.failures} time(s); retrying in ${Math.round(n.retryInMs/1e3)}s: ${n.message}`)}function Ud(e){_A(e.id)&&console.log(`${e.title} recovered.`)}async function QK(){if(M.hunt_host||!await ki())return;hC=Date.now();let{jobs:e}=await bo(M.workspace).catch(()=>({jobs:[]})),t=await cS(M.workspace,{jobs:e});if(!lS(t))return;let n=`${t.fingerprint}:${mw.join(",")}`,r=hw?.key===n,o=r?hw.candidates:await W$(M,t,mw);hw={key:n,candidates:o};let s=await bi(pS(t,o,{version:Co}));Array.isArray(s?.refused)&&(mw=s.refused.map(String));let i=r?"unchanged since the last scan":"scanned";console.log(o.length?`Workspace ${i}; reported ${o.length} delivery candidate(s) to EngineerOS: ${o.map(a=>a.capability_name).join(", ")}.`:`Workspace ${i}; nothing worth starting.`)}var Ao=null,iC=null;async function kC(){if(!M.hunt_host){if(kr)return kr;kr=(async()=>{let e=await Qb(M,{knownRevision:Ao?.revision??null});if(e.unchanged||(Ao=e),iC===Ao.revision)return Ao;let{jobs:t}=await bo(M.workspace);return!t.some(r=>qd.includes(r.status))&&Ro===0&&Zt.size===0&&(await Kl(M.workspace,Ao),iC=Ao.revision),Ao})();try{return await kr}finally{kr=null,Sc()}}}function aC(e,t){if(!t)return;let n={type:"prompt.event",prompt_id:e,kind:t.kind};t.message&&(n.message=String(t.message).slice(0,500)),t.delta&&(n.delta=String(t.delta).slice(0,5e4)),t.status&&(n.status=String(t.status).slice(0,100)),Jt.get(e)?.events.push(n)}var cC=null;function Sc(){let e=xt.readyState===WebSocket.OPEN,t=Zt.values().next().value,n=Br(M.worker_limit)??Math.min(Vs(),Em(t?.workerLimit??_i[0]?.worker_limit)),r=e&&!kr&&Ro===0?$$(_i,Zt.size,n):[];for(let s of r){let i=`${s.assessment_id}:${s.stage}`,a={kind:"assessment",key:i,runId:s.assessment_id,stage:s.stage,child:null,controller:null,resumeAssignment:null,phase:"starting",progressPercent:5,lastMessage:`Starting ${s.stage} assessment stage`,startedAt:Date.now(),workerLimit:Em(s.worker_limit),lastActivityAt:Date.now(),eventCount:0,lastDetail:null};Zt.set(i,a),nY(s,a)}r.length>0&&kn();let o=x$({queued:_i,running:Zt.size,workerLimit:n,connected:e,designSync:!!kr,integrations:Ro});o&&o!==cC&&console.log(o),cC=o}function Jd(e){let t=$m(e);return t?`${rt.name} on ${t}`:rt.name}async function EC(e){let t=e.prompt_id,n=`prompt:${String(t).slice(0,8)}`,r=e.purpose||"project",o=Date.now(),s={runId:t,purpose:r,startedAt:o,child:null,controller:null,cancelled:!1,stoppedHere:!1,cancellation:new AbortController,events:nx(bi),executionRevision:$C(e),sessionKey:Iu(e),sessionId:null,replacement:null};Jt.set(t,s);let i,a=m=>{let g=m?JSON.stringify(m):null;!g||g===i||Jt.get(t)!==s||(i=g,aC(t,m))},c=`${r} \xB7 ${Jd(e)}`,l=D$(e,rt.name);aC(t,{kind:"status",message:l});let u=Number(e.answer_within_seconds),p=u>0?o+u*1e3:void 0;console.log([`[${n}] ${l} for ${r}.`,`${rt.name} can reason for several minutes without reporting a step.`,...p?[rp(p,o)]:[]].join(" ")),Nt.status(n,c,o,{link:_c,answerBy:p});let d=m=>{let g=S$(m),_=Yo(m);Jt.get(t)===s&&Ew(n,_??g?.message);let S=m.type==="forge.output"?null:_;a(g??(S?{kind:"status",message:S}:null))},f="failed",h=[r];try{ju(e)||(d({type:"connector.step",message:"Syncing the design context from EngineerOS"}),e={...e,design_context:await oS(kC,{pinned:!!e.local_design_context,last:Ao,onFallback:(S,v)=>d({type:"connector.step",message:`Design context not refreshed (${S.message}); continuing with ${v?"the copy synced earlier":"none"}`})})});let m=await m$(e,M,{onProcess:S=>{Jt.get(t)===s&&(s.child=S)},onController:S=>{Jt.get(t)===s&&(s.controller=S)},onSession:S=>{s.sessionId=S},onEvent:d},{signal:s.cancellation.signal});if(s.stoppedHere)throw new Error(lC);let g=m.singleTurn?Py(M.sessions,m.sessionKey):Cp(M.sessions,m.sessionKey,m.sessionId);if(JSON.stringify(g)!==JSON.stringify(M.sessions||{})&&(M={...M,sessions:g},await Pn(M)),s.cancelled)return;await s.events.close().catch(S=>{console.error(`[${n}] Prompt progress delivery: ${S.message} The agent has finished; submitting its complete response separately.`)});let _=await Nu(bi,{type:"prompt.completed",prompt_id:t,execution_revision:s.executionRevision,content:m.content,model:m.model,session_id:m.sessionId,usage:m.usage});_||console.error(`[${n}] ${Cm}`),wc.record("prompt","completed",{durationMs:Date.now()-o,usage:m.usage}),f=_?"finished":"undelivered",h=[Cc(m.usage),r]}catch(m){let g=s.stoppedHere?lC:en(m);if(wc.record("prompt","failed",{durationMs:Date.now()-o}),s.stoppedHere&&(f="cancelled"),!s.cancelled){try{await Nu(bi,{type:"prompt.failed",prompt_id:t,execution_revision:s.executionRevision,message:g})||console.error(`[${n}] ${Cm}`)}catch(_){console.error(`[${n}] Prompt failure delivery: ${_.message}`)}console.error(g)}}finally{s.events.stop();let m=s.replacement;m?(f="replaced",h=[`continuing on ${Jd(m)}`,r]):s.cancelled&&(f="cancelled"),Nt.finish(n,f,h),Jt.get(t)===s&&Jt.delete(t),m&&tY(s,m)}}var lC="Cancelled from the connector terminal by the person running it.";async function $w(e){e.cancelled=!0,e.cancellation.abort(),await e.controller?.completed.catch(()=>{})}function $C(e){return Number(e.execution_revision)||1}async function eY(e,t){let n=e.replacement!==null;e.replacement=t,!n&&(console.log(`[prompt:${String(e.runId).slice(0,8)}] The model was changed in EngineerOS; stopping this turn to continue it on ${Jd(t)}.`),await $w(e))}function tY(e,t){e.sessionId&&(M={...M,sessions:Cp(M.sessions,e.sessionKey,e.sessionId)},Pn(M).catch(n=>console.error(`Could not save the agent session: ${n.message}`))),EC(t)}async function nY(e,t){let n=e.assessment_id,r=e.stage;if(console.log(`Running assessment stage ${r}${e.stage_label&&e.stage_label!==r?` "${e.stage_label}"`:""} (${n}) with ${Jd(e)}.`),!fw.has(n)){fw.add(n);try{let b=await _$(M.workspace);if(!b.exists)console.log("No accepted assessment exists yet; this run establishes the baseline.");else{let $=b.accepted_head_revision?b.current_head_revision?b.current_head_revision!==b.accepted_head_revision?`The workspace is now at commit \`${b.current_head_revision}\`; the accepted assessment is from \`${b.accepted_head_revision}\`.`:"The accepted assessment is already at the current commit.":`The accepted assessment is from \`${b.accepted_head_revision}\`; the current commit could not be read.`:"Its accepted commit is unavailable; this run will refresh that provenance.";console.log(`Last accepted assessment covers ${b.stages.length||"no"} section(s). ${$}`)}}catch(b){console.error(`Assessment freshness check failed: ${b.message}`)}}let o=t.startedAt,s=`assessment:${r}`,i=!1,a=!1,c=5,l=!1,u=!1,p=null,d=null,f=null,h=new Set,m=()=>!Yt&&Zt.get(t.key)===t,g=async b=>{try{return await Nu(bi,b)||console.warn(`[${s}] ${ex}`),!0}catch($){return console.error(`Assessment failure delivery: ${$.message}`),!1}},_=(b,{milestone:$=!0}={})=>{if(!m()||$&&f===b)return;$&&(f=b,h.has(b)||(h.add(b),c=Math.min(90,c+10)),console.log(`[assessment:${r}] ${b}.`));let k=String(b).slice(0,500);t.progressPercent=c,t.lastMessage=k,Nt.status(s,k,o,{link:_c})};_(`Starting ${r} assessment stage`);let S=setInterval(()=>{let b=Date.now(),$=b-t.lastActivityAt,k=i&&!a?b$(r,$):null;if(!p&&k){p=k,console.error(`[assessment:${r}] ${p}`),Fa(t.controller,t.child);return}p||Qr.observe({at:b,level:"info",message:Nt.status(s,`${t.lastMessage} \xB7 last agent activity ${Ve($)} ago (${t.eventCount.toLocaleString()} events)`,o)})},15e3),v={onSession:async b=>{m()&&(d=String(b),await x0(M.workspace,n,r,b,{sourceRevision:e.source_revision,targetHeadRevision:e.target_head_revision}))},onController:b=>{m()&&(t.controller=b)},onProcess:b=>{m()&&(t.child=b,i=!0,t.phase!=="correcting"&&(t.phase="running",_("Connected agent process started")),t.lastActivityAt=Date.now())},onEvent:b=>{t.lastActivityAt=Date.now(),t.eventCount+=1;let $=v$(b);if($&&_($),!m())return;let k=Yo(b);!k||k===t.lastDetail||(t.lastDetail=k,Ew(s,k))}},w=(b,$)=>bm(b,$,M,v,{draftPath:Kt.relative(M.workspace,Kt.join(Tn(M.workspace,n),b.report_file)).split(Kt.sep).join("/")});try{let b=pw-Date.now();b>0&&(_(`Waiting ${Math.ceil(b/1e3)}s for the model provider's rate limit to clear`),await new Promise(R=>setTimeout(R,b+Math.floor(Math.random()*3e3)))),e.assessment_mode==="incremental"&&(c=15,_("Calculating changed files and affected behavior"));let $=await O0(M.workspace,e),k=await bf(M.workspace,n,r,{expectedHeadRevision:e.target_head_revision,expectedSourceRevision:e.source_revision});if(k)w(k,$),_("Recovered completed stage report from connector storage");else{if(d=await A0(M.workspace,n,r,{expectedHeadRevision:e.target_head_revision,expectedSourceRevision:e.source_revision}),d&&_("Restoring interrupted agent session"),k=await h$($,M,v,{previousSessionId:d}),p)throw new Error(p);a=!0,await vf(M.workspace,n,$,k)}a=!0,t.phase="delivering",t.progressPercent=95,t.lastMessage=r==="synthesis"?"Delivering completed assessment bundle":"Checkpointing connector-local stage result";let T=R=>fetch(Uy(M.server_url,M.connector_id,n),{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${M.token}`},body:JSON.stringify(R),signal:AbortSignal.timeout(QE)}),A=await L$(k,{submit:R=>P$(R,T,{isActive:()=>m()&&!Yt,onRetry:(O,C)=>{_("Completed result is waiting for EngineerOS",{milestone:!1}),console.warn(`[assessment:${r}] Completed result delivery failed: ${en(O)} Retrying in ${Math.round(C/1e3)}s without rerunning the agent.`)}}),payloadFor:R=>r==="synthesis"?Sf(M.workspace,n,R,{expectedSourceRevision:e.source_revision}):M0(R),rejectionFor:R=>ua(R,"the assessment"),correct:async(R,O)=>{if(a=!1,t.phase="correcting",t.lastMessage="Correcting a rejected stage result",!R.correctAfterRejection)throw new Error(`${O} The connector could not start the required agent correction.`);return R.correctAfterRejection(O)},onCorrected:async R=>{if(p)throw new Error(p);a=!0,await R0(M.workspace,n,r);let O=await vf(M.workspace,n,$,R);return w(O,$),t.phase="delivering",t.lastMessage="Delivering corrected stage result",O}});if(p)throw new Error(p);k=A.result;let x=A.response;if(!x.ok)throw new Error(await ua(x,"the assessment"));if(l=!0,wc.record("assessment stage","completed",{durationMs:Date.now()-o,usage:k.usage}),r==="synthesis"){let R=await x.json(),O=await I0(M.workspace,n,e,k,R.report_markdown);console.log(`Workspace assessment ${n} was accepted by EngineerOS and saved to ${Kt.relative(M.workspace,O)}.`);try{let C=await Nc(M.workspace);C.committed&&console.log(`Assessment committed to Git as ${C.revision.slice(0,8)}.`)}catch(C){console.error(`The assessment is saved locally but could not be committed to Git: ${C.message}`)}}else console.log(`Workspace assessment stage ${r} was checkpointed by EngineerOS.`)}catch(b){let $=p||en(b),k=C$(e,b),T=j$(b),E=T$(b);T&&(await T0(M.workspace,n,r).catch(x=>{console.error(`[assessment:${r}] Could not discard the unusable agent session checkpoint: ${x.message}`)}),d=null);let A=!p&&(d||T)&&(T||A$(b))&&k<E;if(m()&&A){t.phase="starting",t.lastMessage=T?"Agent session became unusable; restarting from saved assessment work":"Agent session interrupted; resuming checkpoint",t.resumeAssignment=O$(e,b);let x=I$(b,k);Da(b)&&(pw=Math.max(pw,Date.now()+x)),console.warn(`[assessment:${r}] ${T?"Agent session became unusable":"Agent session interrupted"}: ${$} ${T?"Starting a fresh session from the saved draft":`Resuming session ${d}`} in ${Math.round(x/1e3)}s (${k+1}/${E}).`),await new Promise(R=>setTimeout(R,x))}else m()&&(u=await g({type:"workspace.assessment.failed",assessment_id:n,stage:r,message:$}));A||(wc.record("assessment stage","failed",{durationMs:Date.now()-o}),console.error(`[assessment:${r}] ${$}`))}finally{clearInterval(S),Nt.clearStatus(s),r==="synthesis"&&l&&fw.delete(n),m()&&(Zt.delete(t.key),M$(_i,t,{accepted:l,failureReported:u})&&console.log(`Resuming interrupted agent session for assessment stage ${r} from its checkpoint.`),Sc())}}async function rY(e){let t=String(e.run_id||"");Ro+=1;try{kr&&await kr;let n=await i$(M.workspace,String(e.base_revision||""),String(e.head_revision||""),String(e.integration_branch||"")||null);if(n.applied){console.log(`Accepted Goal Run ${t} applied to the connected repository at ${n.revision} (${n.method}).`),await Si();return}console.warn(`Accepted Goal Run ${t} remains on its review branch. ${n.reason}`)}catch(n){console.error(`Accepted Goal Run ${t} could not be integrated: ${en(n)}`)}finally{Ro-=1,Sc()}}function oY(e){if(!e)return[];try{let t=JSON.parse(e);if(!Array.isArray(t)||t.some(n=>typeof n!="string"))throw new Error;return t}catch{it('--agent-args must be a JSON array, for example: --agent-args "[\\"acp\\"]"')}}function it(e){console.error(e),process.exit(1)}
|