@trymesh/cli 0.3.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/mesh-banner.svg +23 -0
- package/bin/mesh-daemon.cjs +25 -0
- package/bin/mesh.cjs +25 -0
- package/dist/agent-loop.js +1 -0
- package/dist/agent-os.js +1 -0
- package/dist/agents/critic.js +1 -0
- package/dist/agents/persona-loader.js +1 -0
- package/dist/agents/redteam.js +1 -0
- package/dist/audit/logger.js +1 -0
- package/dist/auth.js +1 -0
- package/dist/cache-manager.js +1 -0
- package/dist/command-filter.js +1 -0
- package/dist/command-safety.js +1 -0
- package/dist/company-brain.js +1 -0
- package/dist/composite-backend.js +1 -0
- package/dist/config.js +1 -0
- package/dist/context-artifacts.js +1 -0
- package/dist/context-assembler.js +1 -0
- package/dist/daemon-protocol.js +1 -0
- package/dist/daemon.js +2 -0
- package/dist/dashboard/assets/index-Co1IW0HE.css +1 -0
- package/dist/dashboard/assets/index-DIj6iOWd.js +1 -0
- package/dist/dashboard/index.html +13 -0
- package/dist/dashboard-server.js +1 -0
- package/dist/doctor.js +1 -0
- package/dist/index.js +2 -0
- package/dist/integrations/chatops/manager.js +1 -0
- package/dist/integrations/issues/github.js +1 -0
- package/dist/integrations/issues/jira.js +1 -0
- package/dist/integrations/issues/linear.js +1 -0
- package/dist/integrations/issues/manager.js +1 -0
- package/dist/integrations/issues/types.js +1 -0
- package/dist/integrations/telemetry/datadog.js +1 -0
- package/dist/integrations/telemetry/manager.js +1 -0
- package/dist/integrations/telemetry/otel.js +1 -0
- package/dist/integrations/telemetry/posthog.js +1 -0
- package/dist/integrations/telemetry/sentry.js +1 -0
- package/dist/issue-autopilot.js +1 -0
- package/dist/llm-client.js +1 -0
- package/dist/local-tools.js +1 -0
- package/dist/mcp-client.js +1 -0
- package/dist/mesh-brain.js +1 -0
- package/dist/mesh-core-adapter.js +1 -0
- package/dist/mesh-gateway.js +1 -0
- package/dist/mesh-portal.js +1 -0
- package/dist/model-catalog.js +1 -0
- package/dist/model-router.js +1 -0
- package/dist/moonshots/causal-autopsy.js +1 -0
- package/dist/moonshots/common.js +1 -0
- package/dist/moonshots/conversational-codebase.js +1 -0
- package/dist/moonshots/ephemeral-execution.js +1 -0
- package/dist/moonshots/fluid-mesh.js +1 -0
- package/dist/moonshots/hive-mind.js +1 -0
- package/dist/moonshots/live-wire.js +1 -0
- package/dist/moonshots/living-software.js +1 -0
- package/dist/moonshots/natural-language-source.js +1 -0
- package/dist/moonshots/precrime.js +1 -0
- package/dist/moonshots/probabilistic-codebase.js +1 -0
- package/dist/moonshots/proof-carrying-change.js +1 -0
- package/dist/moonshots/schrodingers-ast.js +1 -0
- package/dist/moonshots/semantic-git.js +1 -0
- package/dist/moonshots/semantic-sheriff.js +1 -0
- package/dist/moonshots/session-resurrection.js +1 -0
- package/dist/moonshots/shadow-deploy.js +1 -0
- package/dist/moonshots/spec-code.js +1 -0
- package/dist/moonshots/todo-resolver.js +1 -0
- package/dist/moonshots/tribunal.js +1 -0
- package/dist/nvidia-services.js +1 -0
- package/dist/production-readiness.js +1 -0
- package/dist/quality/property-tests.js +1 -0
- package/dist/quality/smt.js +1 -0
- package/dist/refactor/ts-compiler.js +1 -0
- package/dist/runtime/replay.js +1 -0
- package/dist/runtime-api.js +1 -0
- package/dist/runtime-observer.js +1 -0
- package/dist/security/self-defending.js +1 -0
- package/dist/session-capsule-store.js +1 -0
- package/dist/session-manager.js +1 -0
- package/dist/structured-logger.js +1 -0
- package/dist/support.js +1 -0
- package/dist/terminal-preview.js +1 -0
- package/dist/timeline/symptom-bisect.js +1 -0
- package/dist/timeline-manager.js +1 -0
- package/dist/tool-backend.js +1 -0
- package/dist/tool-schema.js +1 -0
- package/dist/voice-manager.js +1 -0
- package/dist/workspace-index.js +1 -0
- package/package.json +94 -0
- package/scripts/minify.js +114 -0
- package/scripts/postinstall.cjs +81 -0
- package/scripts/published-install-smoke.cjs +103 -0
- package/scripts/release-smoke.cjs +116 -0
- package/scripts/run-eval.ts +84 -0
- package/scripts/run-tests.cjs +54 -0
- package/scripts/update-brew.sh +57 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function e(){return R||(R=new S(b,{bedrock:{endpointBase:process.env.BEDROCK_ENDPOINT||"",bearerToken:process.env.AWS_BEARER_TOKEN_BEDROCK||process.env.BEDROCK_BEARER_TOKEN||process.env.BEDROCK_API_KEY||void 0,modelId:process.env.BEDROCK_MODEL_ID||v,fallbackModelIds:[],temperature:0,maxTokens:3e3},agent:{maxSteps:8,mode:"local",workspaceRoot:b,enableCloudCache:!1,themeColor:"cyan",voice:{configured:!1,language:"auto",speed:260,voice:"auto",microphone:"default"}},mcp:{args:[]},supabase:{},telemetry:{contribute:!1}})),R}function t(e={}){return{"X-Content-Type-Options":"nosniff","X-Frame-Options":"DENY","Referrer-Policy":"no-referrer","Content-Security-Policy":"default-src 'self'; script-src 'self'; style-src 'self' https://fonts.googleapis.com; font-src https://fonts.gstatic.com; img-src 'self' data:; connect-src 'self' ws://127.0.0.1:* ws://localhost:*;",...e}}function n(e){const t=y.extname(e).toLowerCase();return".html"===t?"text/html; charset=utf-8":".js"===t?"text/javascript; charset=utf-8":".css"===t?"text/css; charset=utf-8":".json"===t?"application/json; charset=utf-8":".svg"===t?"image/svg+xml":".png"===t?"image/png":".jpg"===t||".jpeg"===t?"image/jpeg":".woff2"===t?"font/woff2":".map"===t?"application/json; charset=utf-8":"application/octet-stream"}async function s(){if(_&&Date.now()-_.at<1500)return _.value;const[e,t,n,s,r,o,i,p,m,g,w,j]=await Promise.all([a(b,500),f(y.join(b,".mesh","digital-twin.json"),null),f(y.join(b,".mesh","predictive-repair.json"),null),f(y.join(b,".mesh","engineering-memory.json"),null),f(y.join(b,".mesh","causal-intelligence.json"),null),f(y.join(b,".mesh","discovery-lab.json"),null),f(y.join(b,".mesh","reality-forks","latest.json"),null),f(y.join(b,".mesh","ghost-engineer","profile.json"),null),f(A,[]),f(x,[]),f(O,null),f($,[])]),v=function(e){const t={source:[],tests:[],docs:[],config:[],other:[]};for(const n of e)/(\.test|\.spec)\./.test(n)||n.startsWith("tests/")?t.tests.push(n):/\.(md|mdx)$/.test(n)||/readme/i.test(n)?t.docs.push(n):/package\.json|tsconfig|eslint|prettier|vite|vitest|playwright|docker|yaml|yml|toml|json$/i.test(n)?t.config.push(n):n.startsWith("src/")?t.source.push(n):t.other.push(n);for(const e of Object.keys(t))t[e]=t[e].slice(0,120);return t}(e),S=await async function(e){const t=e.filter(e=>/\.(ts|tsx|js|jsx|mjs|cjs)$/.test(e)).slice(0,180),n=(await Promise.all(t.map(async e=>{const t=await h.stat(y.join(b,e)).catch(()=>null);return`${e}:${t?.mtimeMs??0}:${t?.size??0}`}))).join("|");if(N?.key===n)return N.value;const s=await async function(e){const t=e.filter(e=>/\.(ts|tsx|js|jsx|mjs|cjs)$/.test(e)).slice(0,180),n=new Set(e),s=new Set,r=[],o={},i=new Map;for(const e of t){s.add(e),o[e]=o[e]||{dependencies:[],dependents:[],externalImports:[]};const t=await h.readFile(y.join(b,e),"utf8").catch(()=>"");if(t)for(const a of c(t))if(a.startsWith(".")||a.startsWith("/")){const t=l(e,a,n);if(!t)continue;s.add(t),o[e].dependencies.push(t),o[t]=o[t]||{dependencies:[],dependents:[],externalImports:[]},o[t].dependents.push(e),r.push({source:e,target:t,type:"local"})}else{const t=u(a);o[e].externalImports.push(t),i.set(t,(i.get(t)||0)+1)}}const a=Array.from(s).slice(0,220).map(e=>({id:e,label:y.basename(e),group:d(e),dependencies:o[e]?.dependencies.length||0,dependents:o[e]?.dependents.length||0})),f=new Set(a.map(e=>e.id));return{nodes:a,links:r.filter(e=>f.has(e.source)&&f.has(e.target)).slice(0,420),details:o,externalPackages:Array.from(i.entries()).map(([e,t])=>({name:e,count:t})).sort((e,t)=>t.count-e.count||e.name.localeCompare(t.name)).slice(0,16)}}(e);return N={key:n,value:s},s}(e),k=Array.isArray(t?.riskHotspots)?t.riskHotspots.slice(0,10).map(e=>({file:e.file,risks:e.risks||[],score:e.score??null})):[],D=Array.isArray(n?.queue)?n.queue.slice(0,8):[],T=Array.isArray(o?.discoveries)?o.discoveries.slice(0,6):[],C=function(e){const t=Date.now();return e.slice(0,20).map(e=>{if("pending"!==e?.status)return e;const n=Date.parse(String(e.createdAt||""));return Number.isFinite(n)&&t-n<12e4?e:{...e,status:"stale",summary:"Queued by an older dashboard session. Run it again."}})}(Array.isArray(g)?g:[]),E={workspace:y.basename(b),fileCount:e.length,sourceCount:v.source.length,testCount:v.tests.length,docsCount:v.docs.length,configCount:v.config.length,repairs:D.length,riskHotspots:k.length,rules:Array.isArray(s?.rules)?s.rules.length:0,insights:Array.isArray(r?.insights)?r.insights.length:0,discoveries:T.length,forks:Array.isArray(i?.proposals)?i.proposals.length:0,ghostConfidence:"number"==typeof p?.confidence?Math.round(100*p.confidence):null},R=Math.max(0,100-8*D.length-4*k.length-2*Math.max(0,(Array.isArray(r?.insights)?r.insights.length:0)-5)),I={workspaceRoot:b,summary:E,health:{score:R,status:R>=85?"healthy":R>=65?"watch":"attention"},actions:[{label:"/repair",detail:"Find compiler and test-risk repair candidates",action:"repair"},{label:"/causal",detail:"Rebuild the file, risk, and test graph",action:"causal"},{label:"/lab",detail:"Suggest high-impact repo improvements",action:"lab"},{label:"/twin",detail:"Refresh files, routes, symbols, and risks",action:"twin"},{label:"/ghost learn",detail:"Learn local implementation style",action:"ghost_learn"}],groupedFiles:v,dependencyGraph:S,hotFiles:k,repairQueue:D,discoveries:T,contextMetrics:w,artifacts:Array.isArray(j)?j.slice(0,20):[],ghost:p,memoryRules:Array.isArray(s?.rules)?s.rules.slice(0,8):[],events:Array.isArray(m)?m.slice(0,30):[],actionQueue:C,liveUpdatedAt:(new Date).toISOString()};return _={at:Date.now(),value:I},I}function r(e,t){if("repair"===e){return`${Array.isArray(t.queue)?t.queue.length:0} repair candidates`}if("causal"===e){const e=t.graph??t;return`${e.nodes?.length??e.nodes??0} nodes, ${e.insights?.length??e.insights??0} insights`}if("lab"===e)return`${Array.isArray(t.discoveries)?t.discoveries.length:0} discoveries`;if("twin"===e){const e=t.twin??t;return`${e.files?.total??e.files??0} files mapped`}if("ghost_learn"===e){return`confidence ${(t.profile??t).confidence??"n/a"}`}return"complete"}async function o(e,t){await F.acquire();try{const n=await f(x,[]),s=Array.isArray(n)?n:[],r=s.findIndex(t=>t?.id===e);r>=0?s[r]=t:s.unshift(t),await h.mkdir(y.dirname(x),{recursive:!0}),await h.writeFile(x,JSON.stringify(s.slice(0,100),null,2),"utf8")}finally{F.release()}}async function i(e){await F.acquire();try{const t=await f(A,[]),n=Array.isArray(t)?t:[],s={id:`${Date.now()}-${Math.random().toString(36).slice(2,8)}`,...e};n.unshift(s),await h.mkdir(y.dirname(A),{recursive:!0}),await h.writeFile(A,JSON.stringify(n.slice(0,200),null,2),"utf8"),I({type:"event.append",event:s})}finally{F.release()}}async function a(e,t){const n=[e],s=[];for(;n.length>0&&s.length<t;){const r=n.shift();if(!r)break;const o=await h.readdir(r,{withFileTypes:!0}).catch(()=>[]);for(const i of o){if(s.length>=t)break;if(i.name.startsWith(".")&&".github"!==i.name)continue;if(C.has(i.name))continue;const o=y.join(r,i.name),a=y.relative(e,o).split(y.sep).join("/");i.isDirectory()?n.push(o):i.isFile()&&/\.(ts|tsx|js|jsx|mjs|cjs|json|md|css|html|yml|yaml|toml)$/.test(i.name)&&s.push(a)}}return s}function c(e){const t=new Set,n=[/\bimport\s+(?:[^"'`]*?\s+from\s+)?["'`]([^"'`]+)["'`]/g,/\bexport\s+[^"'`]*?\s+from\s+["'`]([^"'`]+)["'`]/g,/\brequire\(\s*["'`]([^"'`]+)["'`]\s*\)/g,/\bimport\(\s*["'`]([^"'`]+)["'`]\s*\)/g];for(const s of n)for(const n of e.matchAll(s))n[1]&&t.add(n[1]);return Array.from(t)}function l(e,t,n){const s=y.dirname(e),r=t.startsWith("/")?t.slice(1):y.normalize(y.join(s,t)).split(y.sep).join("/"),o=["",".ts",".tsx",".js",".jsx",".mjs",".cjs",".json"];for(const e of o){const t=`${r}${e}`;if(n.has(t))return t}for(const e of o.slice(1)){const t=`${r}/index${e}`;if(n.has(t))return t}return null}function u(e){if(e.startsWith("node:"))return e;if(e.startsWith("@")){const[t,n]=e.split("/");return[t,n].filter(Boolean).join("/")}return e.split("/")[0]||e}function d(e){return/(\.test|\.spec)\./.test(e)||e.startsWith("tests/")?"tests":/\.(md|mdx)$/.test(e)||/readme/i.test(e)?"docs":/package\.json|tsconfig|eslint|prettier|vite|vitest|playwright|docker|yaml|yml|toml|json$/i.test(e)?"config":e.startsWith("src/")?"source":"other"}async function f(e,t){const n=await h.readFile(e,"utf8").catch(()=>"");if(!n)return t;try{return JSON.parse(n)}catch{return t}}import{watch as p}from"node:fs";import{promises as h}from"node:fs";import m from"node:crypto";import g from"node:http";import y from"node:path";import{fileURLToPath as w}from"node:url";import{WebSocketServer as j}from"ws";import{DEFAULT_MODEL_ID as v}from"./model-catalog.js";import{LocalToolBackend as S}from"./local-tools.js";const b=y.resolve(process.argv[2]||process.cwd()),k=y.join(b,".mesh","dashboard"),A=y.join(k,"events.json"),x=y.join(k,"actions.json"),O=y.join(k,"context-metrics.json"),$=y.join(b,".mesh","context","artifacts","index.json"),D=y.join(k,"server.json"),T="react-live-dashboard-v1",C=new Set([".git","node_modules","dist",".mesh",".next",".turbo","coverage","benchmarks"]),E=new Set(["repair","causal","lab","twin","ghost_learn"]);let _=null,N=null,R=null,I=()=>{},q=()=>{};const F=new class{queue=[];locked=!1;async acquire(){if(this.locked)return new Promise(e=>this.queue.push(e));this.locked=!0}release(){if(this.queue.length>0){const e=this.queue.shift();e?.()}else this.locked=!1}};(async function(){await h.mkdir(k,{recursive:!0});const a=function(){const e=process.env.MESH_DASHBOARD_TOKEN||process.argv[3]||"";if(/^[a-f0-9]{64}$/i.test(e))return e;return m.randomBytes(32).toString("hex")}(),c=new Set,l=await async function(){const e=y.dirname(w(import.meta.url)),t=[y.join(e,"dashboard"),y.resolve(process.cwd(),"dist","dashboard"),y.resolve(b,"dist","dashboard")];for(const e of t){const t=y.join(e,"index.html"),n=await h.stat(t).catch(()=>null);if(n?.isFile())return e}return null}(),u=new j({noServer:!0});let d=null,v=null;const S=(e,t)=>{e.readyState===e.OPEN&&e.send(JSON.stringify(t))},A=async(e,t="snapshot")=>{S(e,{type:"state.snapshot",reason:t,state:await s()})};I=e=>{const t=JSON.stringify(e);for(const e of c)e.readyState===e.OPEN&&e.send(t)},q=(e="change")=>{_=null,d||(d=setTimeout(()=>{d=null,(async(e="change")=>{if(0===c.size)return;const t=await s();I({type:"state.snapshot",reason:e,state:t})})(e).catch(e=>{I({type:"error",error:e.message})})},120),d.unref())},u.on("connection",t=>{let n=!1;const s=setTimeout(()=>t.close(1008,"Authentication timeout"),5e3);s.unref(),t.on("message",l=>{(async()=>{const u=function(e){try{const t=Buffer.isBuffer(e)?e.toString("utf8"):String(e),n=JSON.parse(t);return n&&"string"==typeof n.type?n:null}catch{return null}}(l);if(!u)return S(t,{type:"error",error:"Invalid WebSocket message"});if(!n)return"auth"===u.type&&"string"==typeof u.token&&function(e,t){if(!/^[a-f0-9]{64}$/i.test(e)||!/^[a-f0-9]{64}$/i.test(t))return!1;const n=Buffer.from(e,"hex"),s=Buffer.from(t,"hex");return n.length===s.length&&m.timingSafeEqual(n,s)}(u.token,a)?(n=!0,clearTimeout(s),c.add(t),S(t,{type:"auth.ok",version:T}),void await A(t,"auth")):void t.close(1008,"Unauthorized");if("state.request"!==u.type){if("action.run"===u.type){const n=await async function(t){const n=String(t.action||"").trim();if(!E.has(n))return{ok:!1,error:"unsupported action"};let s;await F.acquire();try{const e=await f(x,[]),t=Array.isArray(e)?e:[];s={id:`${Date.now()}-${Math.random().toString(36).slice(2,8)}`,action:n,status:"running",createdAt:(new Date).toISOString()},t.unshift(s),await h.mkdir(y.dirname(x),{recursive:!0}),await h.writeFile(x,JSON.stringify(t.slice(0,100),null,2),"utf8")}finally{F.release()}await i({type:"dashboard_action",msg:`running ${n}`,at:(new Date).toISOString()}),I({type:"action.update",request:s}),q("action.running");try{const t=await async function(t){const n=e();switch(t){case"repair":return await n.callTool("workspace.predictive_repair",{action:"analyze"});case"causal":return await n.callTool("workspace.causal_intelligence",{action:"build"});case"lab":return await n.callTool("workspace.discovery_lab",{action:"run"});case"twin":return await n.callTool("workspace.digital_twin",{action:"build"});case"ghost_learn":return await n.callTool("workspace.ghost_engineer",{action:"learn"});default:throw new Error(`Unsupported dashboard action: ${t}`)}}(n),a={...s,status:"done",finishedAt:(new Date).toISOString(),summary:r(n,t),result:t};return await o(String(s.id),a),await i({type:"dashboard_action",msg:`done ${n}`,at:(new Date).toISOString()}),_=null,N=null,I({type:"action.update",request:a}),q("action.done"),{ok:!0,request:a}}catch(e){const t={...s,status:"error",finishedAt:(new Date).toISOString(),error:e.message};return await o(String(s.id),t),await i({type:"dashboard_action",msg:`failed ${n}`,at:(new Date).toISOString()}),_=null,I({type:"action.update",request:t}),q("action.error"),{ok:!1,request:t,error:e.message}}}({action:u.action});return void S(t,{type:"action.update",result:n})}"ping"===u.type&&S(t,{type:"pong",at:(new Date).toISOString()})}else await A(t,"client.request")})().catch(e=>{S(t,{type:"error",error:e.message})})}),t.on("close",()=>{clearTimeout(s),c.delete(t)})});const O=g.createServer(async(e,s)=>{try{await async function(e,s,r){const o=new URL(e.url||"/","http://127.0.0.1");if("/health"===o.pathname)return function(e,n){e.writeHead(200,t({"Content-Type":"application/json; charset=utf-8","Cache-Control":"no-store"})),e.end(JSON.stringify(n))}(s,{ok:!0,version:T});if("GET"!==e.method&&"HEAD"!==e.method)return s.writeHead(405,t({Allow:"GET, HEAD"})),void s.end("Method not allowed");if(!r)return s.writeHead(503,t({"Content-Type":"text/plain; charset=utf-8"})),void s.end("Dashboard assets are missing. Run npm run build to create dist/dashboard.");const i="/"===o.pathname?"/index.html":decodeURIComponent(o.pathname),a=function(e,t){const n=y.normalize(t).replace(/^(\.\.(\/|\\|$))+/,""),s=y.resolve(e,`.${y.sep}${n}`),r=y.relative(e,s);if(r.startsWith("..")||y.isAbsolute(r))return null;return s}(r,i);if(!a)return s.writeHead(404,t()),void s.end("Not found");const c=await h.stat(a).catch(()=>null);if(!c?.isFile())return s.writeHead(404,t()),void s.end("Not found");const l=await h.readFile(a);s.writeHead(200,t({"Content-Type":n(a),"Cache-Control":a.endsWith("index.html")?"no-store":"public, max-age=31536000, immutable"})),"HEAD"===e.method?s.end():s.end(l)}(e,s,l)}catch(e){s.writeHead(500,{"Content-Type":"application/json; charset=utf-8","X-Content-Type-Options":"nosniff","X-Frame-Options":"DENY"}),s.end(JSON.stringify({ok:!1,error:e.message}))}});O.on("upgrade",(e,t,n)=>{if("/ws"!==new URL(e.url||"/","http://127.0.0.1").pathname||!function(e){const t=e.headers.origin,n=e.headers.host;if(!t||!n)return!0;try{return new URL(t).host===n}catch{return!1}}(e))return t.write("HTTP/1.1 401 Unauthorized\r\n\r\n"),void t.destroy();u.handleUpgrade(e,t,n,t=>u.emit("connection",t,e))});const $=await async function(e){const t=[k,y.join(b,".mesh"),y.join(b,".mesh","context","artifacts"),y.join(b,".mesh","reality-forks"),y.join(b,".mesh","ghost-engineer")],n=[];for(const s of t){const t=await h.stat(s).catch(()=>null);if(t?.isDirectory())try{n.push(p(s,{persistent:!1},(t,n)=>{n&&!String(n).endsWith(".json")||(N=null,e())}))}catch{}}return n}(()=>q("file.change")),C=()=>{v=setTimeout(()=>{for(const e of c)e.readyState===e.OPEN&&e.ping();C()},3e4),v.unref()};C();const H=()=>{for(const e of $)e.close();d&&clearTimeout(d),v&&clearTimeout(v),u.close(),O.close(),R?.close().catch(()=>{})};process.once("SIGINT",H),process.once("SIGTERM",H),O.listen(0,"127.0.0.1",async()=>{const e=O.address(),t="object"==typeof e&&e?e.port:0;await h.writeFile(D,JSON.stringify({port:t,pid:process.pid,workspaceRoot:b,version:T},null,2),{encoding:"utf8",mode:384})})})().catch(e=>{process.stderr.write(`dashboard-server failed: ${e.message}\n`),process.exitCode=1});
|
package/dist/doctor.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
async function e(e,t,s){try{return await s(),{id:e,ok:!0,message:t}}catch(t){return{id:e,ok:!1,message:`Failed to apply ${e}.`,details:[t.message]}}}function t(e){return/^(1|true|yes)$/i.test(process.env[e]??"")}async function s(e,t={}){const s=new AbortController,a=setTimeout(()=>s.abort(),3e3);try{return await fetch(e,{...t,signal:t.signal??s.signal})}finally{clearTimeout(a)}}import{execFile as a}from"node:child_process";import{constants as i,promises as o}from"node:fs";import n from"node:os";import r from"node:path";import{promisify as c}from"node:util";const l=c(a);export class MeshDoctorEngine{config;constructor(e){this.config=e}async run(){const e=await Promise.all([this.checkLocalEnvironment(),this.checkWorkspaceReadiness(),this.checkReleaseGuardrails(),this.checkProxyConnectivity(),this.checkAuthentication(),this.checkProviderHealth(),this.checkKeytarHealth()]);return{ok:e.every(e=>"fail"!==e.status),timestamp:(new Date).toISOString(),checks:e}}async checkKeytarHealth(){const e=[];try{return await import("keytar"),e.push("Native keychain (keytar) is available."),{id:"keytar",title:"Native Keychain",status:"pass",message:"Secure OS credential storage is active.",details:e}}catch{return{id:"keytar",title:"Native Keychain",status:"warn",message:"Native keychain unavailable; using file-based fallback.",details:["Mesh will store sessions in ~/.config/mesh/session.json (chmod 0600).","This is normal on some Linux distros or CI environments."],fixes:[{id:"install_keytar_manual",title:"Install native build tools",description:"To use the system keychain, Mesh needs to compile keytar. Ensure python, make, and g++ are installed.",automatic:!1}]}}}async autoFix(){const t=this.config.agent.workspaceRoot,s=r.join(t,".mesh"),a=process.env.MESH_STATE_DIR||r.join(n.homedir(),".config","mesh"),c=[];return c.push(await e("create_state_dir",`Ensured Mesh state directory exists: ${a}`,async()=>{await o.mkdir(a,{recursive:!0,mode:448}),await o.chmod(a,448).catch(()=>{})})),c.push(await e("create_workspace_mesh_dir",`Ensured workspace .mesh directory exists: ${s}`,async()=>{await o.mkdir(s,{recursive:!0})})),c.push(await e("write_workspace_config","Ensured workspace .mesh/config.json exists.",async()=>{const e=r.join(s,"config.json");try{await o.access(e,i.F_OK)}catch{await o.writeFile(e,JSON.stringify({modelId:this.config.bedrock.modelId,themeColor:this.config.agent.themeColor,enableCloudCache:this.config.agent.enableCloudCache,initializedAt:(new Date).toISOString()},null,2)+"\n",{encoding:"utf8",mode:384})}})),c.push(await e("write_onboarding_state","Wrote latest first-run state marker.",async()=>{await o.writeFile(r.join(s,"first-run.json"),JSON.stringify({version:1,lastDoctorFixAt:(new Date).toISOString(),workspaceRoot:t},null,2)+"\n",{encoding:"utf8",mode:384})})),c}async checkWorkspaceReadiness(){const e=this.config.agent.workspaceRoot,t=r.join(e,".mesh"),s=process.env.MESH_STATE_DIR||r.join(n.homedir(),".config","mesh"),a=[`Workspace: ${e}`,`Mesh dir: ${t}`,`State root: ${s}`],c=[];let d="pass";try{if(!(await o.stat(e)).isDirectory())return{id:"workspace",title:"Workspace Readiness",status:"fail",message:"Workspace root is not a directory.",details:a};await o.access(e,i.R_OK|i.W_OK)}catch(e){return{id:"workspace",title:"Workspace Readiness",status:"fail",message:"Workspace root is not readable and writable.",details:[...a,e.message]}}try{await o.mkdir(s,{recursive:!0,mode:448}),await o.access(s,i.R_OK|i.W_OK),a.push("State directory is writable.")}catch(e){d="warn",a.push(`State directory warning: ${e.message}`),c.push({id:"create_state_dir",title:"Create Mesh state directory",description:`Create and chmod ${s}.`,automatic:!0})}try{await o.access(t,i.R_OK|i.W_OK),a.push("Workspace .mesh directory is writable.")}catch{d="warn",a.push("Workspace .mesh directory is missing or not writable."),c.push({id:"create_workspace_mesh_dir",title:"Create workspace .mesh directory",description:`Create ${t}.`,automatic:!0})}try{const{stdout:t}=await l("git",["rev-parse","--is-inside-work-tree"],{cwd:e});a.push("Git repository: "+("true"===t.trim()?"yes":"no"))}catch{d="warn",a.push("Git repository: no or unavailable"),c.push({id:"git_init_manual",title:"Initialize Git repository",description:"Mesh can work without Git, but timelines, diffs, and rollback are much safer in a Git worktree.",automatic:!1,command:"git init"})}return{id:"workspace",title:"Workspace Readiness",status:d,message:"pass"===d?"Workspace and Mesh state paths are writable.":"Workspace works, but some persistence features may be degraded.",details:a,fixes:c}}async checkReleaseGuardrails(){const e=["Cloud cache: "+(this.config.agent.enableCloudCache?"enabled":"disabled"),"Telemetry contribution: "+(this.config.telemetry.contribute?"enabled":"disabled"),"Watchers: "+(t("MESH_DISABLE_WATCHERS")?"disabled":"enabled"),"Background resolver: "+(t("MESH_ENABLE_BACKGROUND_RESOLVER")?"enabled":"disabled"),"Embeddings: "+(t("MESH_ENABLE_EMBEDDINGS")?"enabled":"disabled")];let s="pass";return this.config.telemetry.contribute&&(s="warn",e.push("Telemetry contribution is opt-in and enabled for this workspace.")),t("MESH_ENABLE_BACKGROUND_RESOLVER")&&(s="warn",e.push("Background resolver may run diagnostics after file changes.")),t("MESH_ENABLE_EMBEDDINGS")&&(s="warn",e.push("Embeddings may use local model loading or a configured remote provider.")),{id:"guardrails",title:"Release Guardrails",status:s,message:"pass"===s?"Costly and experimental background features are off by default.":"One or more opt-in features may affect cost, CPU, or privacy.",details:e}}async checkLocalEnvironment(){const e=[];let t="pass";const s=[];try{const a=process.version;e.push(`Node.js: ${a}`);const i=Number(a.replace(/^v/,"").split(".")[0]);(!Number.isFinite(i)||i<20)&&(t="fail",s.push({id:"upgrade_node_manual",title:"Upgrade Node.js",description:"Mesh requires Node.js >=20.",automatic:!1,command:"nvm install 20 && nvm use 20"}));const{stdout:o}=await l("git",["--version"]);e.push(`Git: ${o.trim()}`);const{stdout:n}=await l("npm",["--version"]);e.push(`npm: ${n.trim()}`);const{stdout:c}=await l("npm",["config","get","prefix"]),d=r.join(c.trim(),"bin"),u=(process.env.PATH??"").split(r.delimiter);e.push(`npm global bin: ${d}`),u.includes(d)||(t="fail"===t?"fail":"warn",e.push("npm global bin is not on PATH; global mesh installs may not be shell-visible."),s.push({id:"npm_path_manual",title:"Add npm global bin to PATH",description:"Add npm's global bin directory to your shell PATH.",automatic:!1,command:`export PATH="${d}:$PATH"`}))}catch(s){t="fail"===t?"fail":"warn",e.push(`Error checking local tools: ${s.message}`)}return{id:"local_env",title:"Local Environment",status:t,message:"pass"===t?"Local tools are available.":"Some local tools might be missing.",details:e,fixes:s}}async checkProxyConnectivity(){const e=this.config.bedrock.endpointBase;if(!e)return{id:"proxy_conn",title:"Proxy Connectivity",status:"fail",message:"No endpointBase configured in config.toml or .env.",fixes:[{id:"configure_endpoint_manual",title:"Configure Mesh endpoint",description:"Set MESH_ENDPOINT or run /setup to configure a custom endpoint.",automatic:!1,command:"mesh /setup"}]};try{const t=Date.now(),a=await s(e.replace(/\/+$/,"")+"/brain/health",{method:"GET"}).catch(()=>null),i=Date.now()-t;return a&&a.ok?{id:"proxy_conn",title:"Proxy Connectivity",status:"pass",message:`Proxy is reachable (Latency: ${i}ms).`,details:[`Endpoint: ${e}`]}:a&&[401,403,404,405].includes(a.status)?{id:"proxy_conn",title:"Proxy Connectivity",status:"warn",message:`Proxy is reachable, but health endpoint returned ${a.status}.`,details:[`Endpoint: ${e}`,"This is acceptable if provider checks pass after authentication."]}:{id:"proxy_conn",title:"Proxy Connectivity",status:"fail",message:`Proxy at ${e} returned status ${a?.status||"unknown"}.`,details:[`Endpoint: ${e}`]}}catch(t){return{id:"proxy_conn",title:"Proxy Connectivity",status:"fail",message:`Failed to connect to proxy: ${t.message}`,details:[`Endpoint: ${e}`]}}}async checkAuthentication(){const e=this.config.bedrock.bearerToken;if(!e)return{id:"auth",title:"Authentication",status:"fail",message:"No MESH_BEARER_TOKEN configured.",fixes:[{id:"login_manual",title:"Authenticate Mesh",description:"Run mesh and complete the login flow, or configure a bearer token.",automatic:!1,command:"mesh"}]};try{const t=e.split(".");if(3!==t.length)return{id:"auth",title:"Authentication",status:"warn",message:"Token is not a standard JWT format.",details:["Token might be a custom static key."]};const s=JSON.parse(Buffer.from(t[0],"base64").toString()),a=JSON.parse(Buffer.from(t[1],"base64").toString()),i=a.exp?new Date(1e3*a.exp):null,o=!!i&&i<new Date,n=[`User ID: ${a.sub||"unknown"}`,`Expires: ${i?i.toLocaleString():"never"}`,`Algorithm: ${s.alg||"unknown"}`];let r=o?"fail":"pass",c=o?"Your session token has expired.":"Authentication token is valid.";return o||"HS256"===s.alg||(r="warn",c=`Token uses ${s.alg} algorithm.`,n.push("⚠️ The default Mesh proxy currently only supports HS256.")),{id:"auth",title:"Authentication",status:r,message:c,details:n}}catch{return{id:"auth",title:"Authentication",status:"pass",message:"Authentication token present.",details:["Token format: non-JWT or opaque."]}}}async checkProviderHealth(){const e=this.config.bedrock.endpointBase,t=this.config.bedrock.bearerToken;if(!e||!t)return{id:"providers",title:"Model Providers",status:"fail",message:"Connectivity or Auth missing, cannot check providers.",fixes:[{id:"run_doctor_manual",title:"Fix proxy or auth first",description:"Provider checks require both endpoint connectivity and authentication.",automatic:!1,command:"mesh doctor fix"}]};const a=[];let i="pass";try{const o=await s(e.replace(/\/+$/,"")+"/chat/completions",{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${t}`,"x-mesh-provider":"google"},body:JSON.stringify({model:"gemini-2.5-flash",messages:[{role:"user",content:"ping"}],max_tokens:1})});if(o.ok)a.push("✅ Google (Gemini): Accessible");else{const e=await o.text();a.push(`❌ Google (Gemini): Failed (${o.status}) - ${e.slice(0,100)}`),i="warn",401===o.status&&e.includes("Invalid JWT")&&a.push("💡 Hint: Your token algorithm might mismatch the worker's expected HS256 secret.")}}catch(e){a.push(`❌ Google (Gemini): Error - ${e.message}`),i="warn"}try{const o=await s(e.replace(/\/+$/,"")+"/chat/completions",{method:"POST",headers:{"content-type":"application/json",authorization:`Bearer ${t}`},body:JSON.stringify({model:"meta/llama-4-maverick-17b-128e-instruct",messages:[{role:"user",content:"ping"}],max_tokens:1})});if(o.ok)a.push("✅ NVIDIA (Llama): Accessible");else{const e=await o.text();a.push(`❌ NVIDIA (Llama): Failed (${o.status}) - ${e.slice(0,100)}`),i="warn",401===o.status&&e.includes("Invalid JWT")&&a.push("💡 Hint: Your token algorithm might mismatch the worker's expected HS256 secret.")}}catch(e){a.push(`❌ NVIDIA (Llama): Error - ${e.message}`),i="warn"}return{id:"providers",title:"Model Providers",status:i,message:"pass"===i?"All providers are healthy.":"Some providers are unreachable.",details:a}}}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
async function t(){try{const t=await e.readFile(new URL("../package.json",import.meta.url),"utf8");return JSON.parse(t).version||"unknown"}catch{return"unknown"}}import{promises as e}from"node:fs";import o from"node:path";import s from"node:os";import n from"picocolors";import{AgentLoop as r}from"./agent-loop.js";import{AuthManager as i}from"./auth.js";import{loadConfig as a}from"./config.js";import{LocalToolBackend as c}from"./local-tools.js";import{McpClient as p}from"./mcp-client.js";import{CompositeToolBackend as m}from"./composite-backend.js";import{runDaemonCli as l}from"./daemon.js";import{buildSessionManager as u}from"./session-manager.js";import{collectSupportInfo as w,formatSupportInfo as d}from"./support.js";(async function(){const f=process.argv.slice(2),h=f[0],g=await t();if("--help"===h||"-h"===h||"help"===h)return void process.stdout.write(["Mesh CLI","","Usage:"," mesh start interactive agent"," mesh init run first-run setup and repo briefing"," mesh doctor [fix] run diagnostics and optional safe fixes"," mesh support print bug-report support info",' mesh "<task>" run one task'," mesh daemon <start|status|digest|stop>"," mesh logout"," mesh --version","","Inside the interactive CLI, run /help for command groups."].join("\n")+"\n");if("--version"===h||"-v"===h||"version"===h)return void process.stdout.write(`${g}\n`);if(async function(t){const r=o.join(s.homedir(),".config","mesh"),i=o.join(r,"update-check.json"),a=Date.now();try{const t=await e.readFile(i,"utf8"),o=JSON.parse(t);if(o.lastCheck&&a-o.lastCheck<864e5)return}catch{}try{const o=await fetch("https://registry.npmjs.org/@mesh/cli/latest",{signal:AbortSignal.timeout(1500)});if(o.ok){const s=await o.json();s.version&&s.version!==t&&process.stdout.write(["",n.yellow(n.bold(" Update Available!")),` Mesh version ${n.green(s.version)} is out. (Current: ${t})`,` Run ${n.cyan("npm install -g @mesh/cli")} to update.`,""].join("\n")+"\n"),await e.mkdir(r,{recursive:!0}),await e.writeFile(i,JSON.stringify({lastCheck:a,latestVersion:s.version}))}}catch{}}(g).catch(()=>null),"support"===h)return void process.stdout.write(d(await w(await t())));const k=await a(),v=new i;if("logout"===h)return void await v.signOut();if("daemon"===h){const t=await l(f.slice(1));return void(process.exitCode=t)}if("doctor"===h){await v.restoreAuthenticated().catch(()=>null),k.bedrock.bearerToken||=v.getAccessToken();const t=new c(k.agent.workspaceRoot,k),e=new m([t]);try{const t=new r(k,e);await t.runDoctorCli(f.slice(1))}finally{await e.close().catch(()=>{})}return}if("init"===h){const t=new c(k.agent.workspaceRoot,k),e=new m([t]);try{const t=new r(k,e);await t.runInit(f.slice(1),v)}finally{await e.close().catch(()=>{})}return}await v.ensureAuthenticated(),k.bedrock.bearerToken||=v.getAccessToken();let j=null,y=!1;const C=u(k.agent.workspaceRoot);C.start();try{const t=[new c(k.agent.workspaceRoot,k)],s=o.join(k.agent.workspaceRoot,".mesh","mcp.json");try{const o=await e.readFile(s,"utf8"),n=JSON.parse(o);for(const[e,o]of Object.entries(n))if(o.command){const e=new p(o.command,o.args||[]);await e.initialize(),t.push(e)}}catch{}if("mcp"===k.agent.mode){const e=k.mcp.command;if(!e)throw new Error("MCP mode selected but no MESH_MCP_COMMAND configured");const o=new p(e,k.mcp.args);await o.initialize(),t.push(o)}j=new m(t),(()=>{const t=t=>{y=!0,(async()=>{await C.stop(),await(j?.close().catch(()=>{}))})().finally(()=>{process.exitCode=process.exitCode||130,process.stderr.write(`\nReceived ${t}, shutting down Mesh cleanly.\n`),process.exit(0)})};process.on("SIGINT",t),process.on("SIGTERM",t)})();const n=new r(k,j);if("init"===h)return void await n.runInit(f.slice(1));const i=process.argv.slice(2).join(" ");await n.runCli(i)}finally{await(async()=>{j&&!y&&(y=!0,await C.stop(),await j.close().catch(()=>{}))})()}})().catch(t=>{const e=t instanceof Error?t.message:String(t);process.stderr.write(`Fatal: ${e}\n`),process.exitCode=1});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function t(t,a,e){const r=Array.isArray(a?.contract?.likelyFiles)?a.contract.likelyFiles:[],s=Array.isArray(e?.queue)?e.queue:[];return["## ChatOps Investigation",`- Request: ${t}`,"","## Planned scope",...r.slice(0,8).map(t=>`- ${t}`),"","## Verification",...s.slice(0,5).map(t=>`- ${t.summary??"Prepared repair candidate"}`)].join("\n")}import{promises as a}from"node:fs";import e from"node:path";export class ChatopsManager{workspaceRoot;hooks;constructor(t,a){this.workspaceRoot=t,this.hooks=a}async run(t){const a=String(t.action??"investigate");return"status"===a?this.status():"approve"===a?this.approve(t):this.investigate(t)}async investigate(a){const e=String(a.platform??"slack"),r=String(a.channel??"general"),s=String(a.message??"").trim();if(!s)throw new Error("chatops investigate requires message");const i=await this.hooks.intentCompile(s),n=await this.hooks.predictiveRepair(),o={id:`chat-${Date.now().toString(36)}`,platform:e,channel:r,message:s,status:"ready_for_approval",updates:["Looking at runtime traces and code impact...","Built intent contract and generated candidate repair queue.","Prepared draft PR summary pending approval reaction."],prDraft:t(s,i,n),createdAt:(new Date).toISOString(),updatedAt:(new Date).toISOString()};return await this.saveThread(o),{ok:!0,threadId:o.id,status:o.status,updates:o.updates,prDraft:o.prDraft}}async approve(t){const a=String(t.message??"").trim();if(!a)throw new Error("chatops approve requires thread id in message");const e=await this.readThread(a);if(!e)throw new Error(`chatops thread not found: ${a}`);return e.status="approved",e.updatedAt=(new Date).toISOString(),e.updates.push("Approval received from merge-authorized user; draft PR can be created."),await this.saveThread(e),{ok:!0,threadId:a,status:e.status,prDraft:e.prDraft}}async status(){const t=await this.listThreads();return{ok:!0,active:t.length,threads:t.slice(0,10).map(t=>({id:t.id,platform:t.platform,channel:t.channel,status:t.status,updatedAt:t.updatedAt}))}}baseDir(){return e.join(this.workspaceRoot,".mesh","chatops")}async saveThread(t){const r=e.join(this.baseDir(),`${t.id}.json`);await a.mkdir(e.dirname(r),{recursive:!0}),await a.writeFile(r,JSON.stringify(t,null,2),"utf8")}async readThread(t){try{const r=await a.readFile(e.join(this.baseDir(),`${t}.json`),"utf8");return JSON.parse(r)}catch{return null}}async listThreads(){try{const t=await a.readdir(this.baseDir());return(await Promise.all(t.filter(t=>t.endsWith(".json")).map(t=>this.readThread(t.replace(/\.json$/,""))))).filter(t=>Boolean(t))}catch{return[]}}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export async function fetchGithubIssues(e,t){if(!e.enabled)return[];const s=e.project?.trim();if(s&&/^[^/\s]+\/[^/\s]+$/.test(s)){const t=process.env.MESH_GITHUB_TOKEN||process.env.GITHUB_TOKEN||process.env.GH_TOKEN,i=new AbortController,r=setTimeout(()=>i.abort(),15e3);try{const r=encodeURIComponent(e.labels?.join(",")||"mesh"),n=await fetch(`https://api.github.com/repos/${s}/issues?state=open&labels=${r}&per_page=50`,{headers:{accept:"application/vnd.github+json",...t?{authorization:`Bearer ${t}`}:{}},signal:i.signal});if(n.ok){return(await n.json()).filter(e=>!e.pull_request).map(e=>({provider:"github",id:String(e.number),title:String(e.title??`GitHub issue #${e.number}`),body:String(e.body??""),labels:Array.isArray(e.labels)?e.labels.map(e=>String(e.name??e)):[],assignedTo:Array.isArray(e.assignees)&&e.assignees[0]?.login?String(e.assignees[0].login):void 0,url:String(e.html_url??`https://github.com/${s}/issues/${e.number}`)}))}}catch{}finally{clearTimeout(r)}}return t.filter(e=>"github"===e.provider)}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export async function fetchJiraIssues(e,r){return e.enabled?r.filter(e=>"jira"===e.provider):[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export async function fetchLinearIssues(e,r){return e.enabled?r.filter(e=>"linear"===e.provider):[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function e(e,t,s){const r=Array.isArray(t?.contract?.phases)?t.contract.phases:[],i=Array.isArray(t?.contract?.risks)?t.contract.risks:[],o=Array.isArray(s?.ranked)?s.ranked.slice(0,5):[];return["## Source Issue",`- ${e.provider.toUpperCase()} ${e.id}: ${e.title}`,e.url?`- URL: ${e.url}`:"","","## Intent Contract",...r.map(e=>`- ${e}`),"","## Risks",...i.map(e=>`- ${e.title??e}`),"","## Impact Map",...o.map(e=>`- ${e.path??e.file??"unknown"} (${e.score??"n/a"})`)].filter(Boolean).join("\n")}import{promises as t}from"node:fs";import s from"node:path";import{fetchGithubIssues as r}from"./github.js";import{fetchJiraIssues as i}from"./jira.js";import{fetchLinearIssues as o}from"./linear.js";export class IssuePipelineManager{workspaceRoot;hooks;constructor(e,t){this.workspaceRoot=e,this.hooks=t}async run(t){const s=t.action||"scan",r=await this.readConfig(),i=await this.loadIssues(r),o=t.provider?.toLowerCase(),a=i.filter(e=>(!o||e.provider===o)&&((!t.issueId||e.id===t.issueId)&&(!!e.labels.some(e=>"mesh"===e.toLowerCase())||!(!r.meshBotUser||e.assignedTo!==r.meshBotUser))));if("status"===s)return{ok:!0,action:s,queued:a.length,processed:[]};const n=[];for(const t of a.slice(0,10)){const s=await this.hooks.intentCompile(`${t.title}\n\n${t.body}`),r=await this.hooks.impactMap(t.title),i=Array.isArray(s?.contract?.likelyFiles)?s.contract.likelyFiles:[],o=Array.isArray(r?.ranked)?r.ranked.slice(0,3).map(e=>e.path||e.file).filter(Boolean):[],a=[...new Set([...i,...o])].slice(0,8);n.push({ok:!0,provider:t.provider,issueId:t.id,title:t.title,prTitle:`[mesh] ${t.title}`,prBody:e(t,s,r),timelineHints:a})}return await this.writeReport(n),{ok:!0,action:s,queued:a.length,processed:n}}async readConfig(){const e=s.join(this.workspaceRoot,".mesh","integrations.json");try{const s=await t.readFile(e,"utf8");return JSON.parse(s)}catch{return{issues:[{provider:"github",enabled:!0},{provider:"linear",enabled:!0},{provider:"jira",enabled:!0}]}}}async loadIssues(e){const a=s.join(this.workspaceRoot,".mesh","issues-snapshot.json");let n=[];try{n=JSON.parse(await t.readFile(a,"utf8"))}catch{n=[]}const c=e.issues??[];return(await Promise.all(c.map(async e=>"github"===e.provider?r(e,n):"linear"===e.provider?o(e,n):i(e,n)))).flat()}async writeReport(e){const r=s.join(this.workspaceRoot,".mesh","issue-pipeline","latest.json");await t.mkdir(s.dirname(r),{recursive:!0}),await t.writeFile(r,JSON.stringify({generatedAt:(new Date).toISOString(),items:e},null,2),"utf8")}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export async function fetchDatadogSignals(){return[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{promises as t}from"node:fs";import r from"node:path";import{fetchDatadogSignals as s}from"./datadog.js";import{fetchOtelSignals as e}from"./otel.js";import{fetchPosthogSignals as a}from"./posthog.js";import{fetchSentrySignals as o}from"./sentry.js";export class TelemetryManager{workspaceRoot;constructor(t){this.workspaceRoot=t}async refresh(){const t=await this.readFixtureSignals(),[r,i,n,c]=await Promise.all([o(),s(),a(),e()]),u=function(t){const r=new Map;for(const s of t){const t=`${s.file}::${s.route??""}::${s.source}`,e=r.get(t);(!e||scoreSignal(s)>scoreSignal(e))&&r.set(t,s)}return Array.from(r.values())}([...t,...r,...i,...n,...c]),l={schemaVersion:1,updatedAt:(new Date).toISOString(),signals:u};return await this.writeState(l),l}async status(){const r=this.statePath();try{const s=await t.readFile(r,"utf8");return JSON.parse(s)}catch{return{schemaVersion:1,updatedAt:null,signals:[]}}}async topSignals(t=10){return[...(await this.status()).signals].sort((t,r)=>scoreSignal(r)-scoreSignal(t)).slice(0,t)}statePath(){return r.join(this.workspaceRoot,".mesh","production-signals.json")}async writeState(s){const e=this.statePath();await t.mkdir(r.dirname(e),{recursive:!0}),await t.writeFile(e,JSON.stringify(s,null,2),"utf8")}async readFixtureSignals(){const s=r.join(this.workspaceRoot,".mesh","production-fixtures.json");try{const r=await t.readFile(s,"utf8"),e=JSON.parse(r);return Array.isArray(e)?e:[]}catch{return[]}}}export function scoreSignal(t){return t.requestVolume*Math.log1p(Math.max(0,t.errorRate))+t.revenueImpactDaily}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export async function fetchOtelSignals(){return[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export async function fetchPosthogSignals(){return[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export async function fetchSentrySignals(){return[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function t(t){return{issue:t.issue,verificationCommand:t.verificationCommand,branchName:t.branchName,prTitle:t.prTitle,likelyFiles:t.likelyFiles,brainCitations:t.brainCitations.slice(0,8),route:t.route,patchPrompt:t.patchPrompt}}function e(t){let e=t.trim();e=e.replace(/^```(?:diff|patch)?\s*/i,"").replace(/\s*```$/i,"").trim();const i=e.indexOf("diff --git ");return i>0&&(e=e.slice(i)),e}async function i(t,e){const{stdout:i}=await w("git",e,{cwd:t,maxBuffer:5242880});return i}async function r(t,e){try{return await i(t,e)}catch(t){return String(t.stdout??"")}}function s(t,e){const i=c.resolve(t,e),r=c.resolve(t),s=c.relative(r,i);if(s.startsWith("..")||c.isAbsolute(s))throw new Error(`Path escapes workspace root: ${e}`);return i}function n(t){return Array.isArray(t)?t.map(String).filter(Boolean):[]}function o(t,e,i,r){const s=Number(t);return Number.isFinite(s)?Math.max(i,Math.min(r,Math.trunc(s))):e}import{promises as a}from"node:fs";import c from"node:path";import l from"node:crypto";import{execFile as u}from"node:child_process";import{promisify as p}from"node:util";import{readJson as m,writeJson as d}from"./moonshots/common.js";import{CompanyBrainEngine as h}from"./company-brain.js";import{runCritic as f}from"./agents/critic.js";import{runRedTeam as g}from"./agents/redteam.js";const w=p(u);export class IssueAutopilotEngine{workspaceRoot;options;companyBrain;constructor(t,e){this.workspaceRoot=t,this.options=e,this.companyBrain=new h(t,e.callTool)}async run(e={}){const i=function(t){const e=t.trim().toLowerCase().replace("-","_");return"create_pr"===e||"submit_pr"===e?"pr":["status","plan","run","pr"].includes(e)?e:"status"}(String(e.action??"status"));if("status"===i)return this.status();const r=await this.resolveIssue(e),s=await this.buildPlan(r,e);if("plan"===i){const e=this.emptyRecord(i,"planned",!0,s);return await this.writeRun(e),{ok:!0,action:i,status:e.status,runId:e.id,plan:t(s),artifacts:e.artifacts}}return this.execute(i,s,e)}async execute(t,i,r){const s=this.emptyRecord(t,"requires_patch",!1,i),n=o(r.maxAttempts,2,1,4),a=await this.options.callTool("workspace.timeline_create",{name:`autopilot-${i.issue.provider}-${i.issue.id}`,baseRef:"string"==typeof r.baseRef?r.baseRef:void 0}),c=a?.timeline;if(!c?.id||!c?.root)throw new Error("Issue Autopilot could not create a verification timeline");s.timeline={id:c.id,root:c.root,applyAttempts:[]};let u=String(r.patch??"").trim(),p="";for(let t=1;t<=n;t+=1){if(u||(u=await this.generatePatch(i,t,p)),!u.trim())return s.status="requires_patch",s.proof={verdict:"manual_patch_required",patchPrompt:i.patchPrompt,reason:"No patch was supplied and no LLM patch generator is configured."},await this.finishAndWrite(s),this.publicRun(s);const r=e(u),n=await this.options.callTool("workspace.timeline_apply_patch",{timelineId:c.id,patch:r});if(s.timeline.applyAttempts.push({attempt:t,ok:Boolean(n?.ok),message:String(n?.message??(n?.ok?"Patch applied.":"Patch rejected.")),stderr:n?.stderr?String(n.stderr).slice(0,4e3):void 0}),n?.ok){u=r;break}u="",p=String(n?.stderr??n?.message??"patch apply failed")}if(!s.timeline.applyAttempts.some(t=>t.ok))return s.status="patch_failed",s.proof={verdict:"patch_failed",attempts:s.timeline.applyAttempts},await this.finishAndWrite(s),this.publicRun(s);const m=await this.options.callTool("workspace.timeline_run",{timelineId:c.id,command:i.verificationCommand,timeoutMs:o(r.timeoutMs,24e4,5e3,9e5)});s.timeline.verification=m;const d=await this.options.callTool("workspace.timeline_compare",{timelineIds:[c.id]}),h=Array.isArray(d?.comparisons)?d.comparisons[0]:null;s.timeline.comparison=h??{};const w=String(h?.diffPreview??u);s.review=function(t,e,i){const r=f({diffPreview:t,verificationOk:e}),s=g({diffPreview:t}),n=[...r.findings],o=Array.from(t.matchAll(/^diff --git a\/(.+?) b\//gm)).map(t=>t[1]),a=o.some(t=>/\.(ts|tsx|js|jsx|mjs|cjs)$/.test(t)&&!/(\.test|\.spec)\./.test(t)),c=o.some(t=>/(\.test|\.spec)\.|(^|\/)(test|tests|__tests__)\//.test(t));return a&&!c&&n.push({severity:"medium",reason:"Source changed without an obvious test update.",evidence:o.join(", ")}),/\b(nvapi-|sk-|gh[pousr]_)/.test(t)&&n.push({severity:"high",reason:"Diff appears to introduce a secret token.",evidence:"secret-like token pattern in diff"}),/child_process|exec\(|spawn\(|eval\(|new Function/.test(t)&&!/command-safety|assertCommandAllowed/.test(t)&&n.push({severity:"high",reason:"Diff touches command execution without an obvious safety gate.",evidence:"command execution token detected"}),{ok:e&&r.ok&&s.ok&&n.every(t=>"high"!==t.severity),issue:`${i.issue.provider}:${i.issue.id}`,changedFiles:o,critic:r,redTeam:s,findings:n}}(w,Boolean(m?.ok),i),s.proof=function(t,e){const i=Boolean(t.timeline?.verification?.ok),r=!1!==t.review?.ok,s=Boolean(t.timeline?.applyAttempts.some(t=>t.ok)),n=s&&i&&r?"pass":"fail";return{proofId:l.createHash("sha256").update(JSON.stringify({issue:t.plan.issue,timeline:t.timeline?.id,verificationOk:i,reviewOk:r,diffHash:l.createHash("sha1").update(e).digest("hex")})).digest("hex").slice(0,16),verdict:n,generatedAt:(new Date).toISOString(),gates:[{name:"timeline_patch_apply",ok:s},{name:"timeline_verification",ok:i,command:t.plan.verificationCommand},{name:"diff_review",ok:r},{name:"company_brain_context",ok:t.plan.brainCitations.length>0}],issue:t.plan.issue,changedFiles:t.timeline?.comparison?.changedFiles??[],changedLineCount:t.timeline?.comparison?.changedLineCount??0,rollback:"Close the PR branch or discard the timeline. Main workspace is untouched unless timeline promotion is explicitly run.",artifacts:t.artifacts}}(s,w);const y=Boolean(m?.ok)&&!1!==s.review?.ok&&"pass"===s.proof?.verdict;return s.ok=y,s.status=y?"pr"===t?"pr_ready":"verified":"blocked",!y||"pr"!==t&&!0!==r.submitPr||(s.pr=await this.createPullRequest(i,c.root,h,r).catch(t=>({ok:!1,error:t.message})),s.pr?.ok&&(s.status="pr_created")),await this.companyBrain.ingest({source:"autopilot",title:`${i.issue.provider}:${i.issue.id} ${s.status}`,body:`${i.issue.title}\nverdict=${s.proof?.verdict??"unknown"}\nverification=${m?.ok?"pass":"fail"}`,files:Array.isArray(h?.changedFiles)?h.changedFiles:i.likelyFiles}).catch(()=>{}),await this.finishAndWrite(s),this.publicRun(s)}async buildPlan(t,e){const i=`${t.title}\n\n${t.body}`.trim(),r=String(e.verificationCommand??await async function(t){const e=await m(c.join(t,"package.json"),null),i=e?.scripts??{},r=[];return i.typecheck&&r.push("npm run typecheck"),i.test&&r.push("npm test"),r.length>0?r.join(" && "):i.build?"npm run build":"node --version"}(this.workspaceRoot)).trim();await this.companyBrain.build({maxFiles:e.maxBrainFiles??1200}).catch(()=>null);const[s,o,a,l]=await Promise.all([this.companyBrain.query({query:i,limit:10}).catch(t=>({ok:!1,error:t.message,citations:[],recommendedFiles:[]})),this.safeTool("workspace.intent_compile",{intent:i,verificationCommand:r}),this.safeTool("workspace.impact_map",{symbol:t.title}),this.safeTool("workspace.model_route",{task:i})]),u=o?.contract??o??null,p=function(t,e=100){return Array.from(new Set(t)).slice(0,e)}([...n(u?.likelyFiles),...n(s?.recommendedFiles),...n((a?.ranked??[]).map(t=>t.file??t.path))],14),d=await this.loadImplementationContext(p),h={issue:t,intent:i,verificationCommand:r,branchName:function(t){const e=t.toLowerCase().replace(/[^a-z0-9._/-]+/g,"-").replace(/\/+/g,"/").replace(/^-+|-+$/g,"").slice(0,96);return e.startsWith("mesh/")?e:`mesh/${e||Date.now().toString(36)}`}(String(e.branchName??`mesh/${t.provider}-${t.id}-${t.title}`)),prTitle:String(e.prTitle??`[mesh] ${t.title}`).slice(0,240),likelyFiles:p,brainCitations:Array.isArray(s?.citations)?s.citations.slice(0,10):[],route:l?.route??l??null,contract:u,impact:a??null,implementationContext:d,patchPrompt:""};return h.patchPrompt=function(t){return["Implement this issue as a raw git patch.","","Issue:",`${t.issue.provider}:${t.issue.id} ${t.issue.title}`,t.issue.body,"","Verification command:",t.verificationCommand,"","Likely files:",t.likelyFiles.map(t=>`- ${t}`).join("\n")||"- none","","Company Brain citations:",t.brainCitations.map(t=>`- ${t.file??t.title??t.id}: ${String(t.snippet??"").slice(0,240)}`).join("\n")||"- none","","Implementation context:",t.implementationContext||"No source context available.","","Return only a raw git patch."].join("\n")}(h),h}async generatePatch(t,e,i){if(!this.options.callLlm)return"";const r=["You are Mesh Issue Autopilot.","Return only a raw git patch in unified diff format.","Do not include markdown fences, explanations, summaries, or commands.","Make the smallest production-quality change that satisfies the issue.","Update tests when behavior changes."].join("\n"),s=1===e?t.patchPrompt:[t.patchPrompt,"","The previous patch failed to apply. Produce a corrected raw git patch.",`Apply error:\n${i.slice(0,4e3)}`].join("\n");return this.options.callLlm({system:r,user:s,temperature:.1,maxTokens:8192})}async loadImplementationContext(t){const e=[];for(const i of t.slice(0,8)){const t=s(this.workspaceRoot,i),r=await a.readFile(t,"utf8").catch(()=>"");r&&e.push([`--- ${i} ---`,r.split(/\r?\n/g).slice(0,260).map((t,e)=>`${e+1}: ${t}`).join("\n")].join("\n"))}return e.join("\n\n").slice(0,55e3)}async createPullRequest(t,e,s,n){const o=t.branchName;await i(e,["checkout","-B",o]),await i(e,["add","-A"]);const a=await async function(t,e){try{return await w("git",e,{cwd:t,maxBuffer:1048576}),!0}catch{return!1}}(e,["diff","--cached","--quiet"]);if(a)return{ok:!1,branchName:o,error:"No staged changes to commit."};await i(e,["commit","-m",t.prTitle,"-m",this.prBody(t,s)]);const c=!1!==n.push;c&&await i(e,["push","-u","origin",`HEAD:${o}`]);const l=function(t){const e=t.trim().replace(/\.git$/,""),i=e.match(/^https:\/\/github\.com\/([^/]+)\/([^/]+)$/i);if(i)return{owner:i[1],repo:i[2]};const r=e.match(/^git@github\.com:([^/]+)\/([^/]+)$/i);return r?{owner:r[1],repo:r[2]}:null}(await r(e,["config","--get","remote.origin.url"])),u=String(n.baseBranch??await async function(t){const e=(await r(t,["symbolic-ref","--short","refs/remotes/origin/HEAD"])).trim().replace(/^origin\//,"");return e||((await r(t,["branch","--show-current"])).trim()||"main")}(e));if(!c)return{ok:!0,branchName:o,pushed:!1,message:"Branch committed in timeline. Push is disabled, so PR creation was skipped.",timelineRoot:e};if(!l)return{ok:!0,branchName:o,pushed:!0,message:"Branch pushed, but remote repository could not be parsed for PR creation."};const p=await async function(t,e){const i=process.env.MESH_GITHUB_TOKEN||process.env.GITHUB_TOKEN||process.env.GH_TOKEN;if(i){const r=await fetch(`https://api.github.com/repos/${t.owner}/${t.repo}/pulls`,{method:"POST",headers:{accept:"application/vnd.github+json",authorization:`Bearer ${i}`,"content-type":"application/json"},body:JSON.stringify(e)}),s=await r.json().catch(()=>({}));if(!r.ok)throw new Error(`GitHub PR create failed: HTTP ${r.status} ${String(s.message??"")}`);return{url:String(s.html_url??""),number:s.number,state:s.state}}try{const{stdout:i}=await w("gh",["pr","create","--repo",`${t.owner}/${t.repo}`,"--title",e.title,"--body",e.body,"--base",e.base,"--head",e.head],{maxBuffer:1048576});return{url:i.trim(),via:"gh"}}catch(t){throw new Error(`No GitHub token available and gh pr create failed: ${String(t.stderr??t.message)}`)}}(l,{title:t.prTitle,body:this.prBody(t,s),head:o,base:u});return{ok:!0,branchName:o,pushed:!0,provider:"github",...p}}prBody(t,e){return["## Source Issue",`- ${t.issue.provider}:${t.issue.id} ${t.issue.title}`,t.issue.url?`- ${t.issue.url}`:"","","## Mesh Autopilot Proof",`- Verification: ${t.verificationCommand}`,`- Changed files: ${Array.isArray(e?.changedFiles)?e.changedFiles.join(", "):"n/a"}`,`- Changed lines: ${e?.changedLineCount??"n/a"}`,"","## Company Brain Context",...t.brainCitations.slice(0,8).map(t=>`- ${t.file??t.title??t.id}`),"","## Review Gates","- Timeline verification completed before PR creation.","- Diff review and red-team heuristics evaluated.","- Proof bundle stored in .mesh/autopilot/."].filter(Boolean).join("\n")}async resolveIssue(t){const e=String(t.title??"").trim(),i=String(t.body??t.description??"").trim();if(e)return{provider:"manual",id:(r=String(t.issueId??Date.now().toString(36)),r.replace(/[^a-zA-Z0-9._-]+/g,"-").slice(0,80)||"manual"),title:e,body:i,labels:n(t.labels),url:"string"==typeof t.issueUrl?t.issueUrl:void 0};var r;const s=String(t.issueUrl??t.url??"").trim();if(s){const t=function(t){const e=t.match(/^https?:\/\/github\.com\/([^/]+)\/([^/]+)\/issues\/(\d+)/i);return e?{owner:e[1],repo:e[2],number:Number(e[3])}:null}(s);if(t)return async function(t){const e=process.env.MESH_GITHUB_TOKEN||process.env.GITHUB_TOKEN||process.env.GH_TOKEN,i=new AbortController,r=setTimeout(()=>i.abort(),15e3);try{const r=await fetch(`https://api.github.com/repos/${t.owner}/${t.repo}/issues/${t.number}`,{headers:{accept:"application/vnd.github+json",...e?{authorization:`Bearer ${e}`}:{}},signal:i.signal});if(!r.ok)throw new Error(`GitHub issue fetch failed: HTTP ${r.status}`);const s=await r.json();return{provider:"github",id:String(s.number??t.number),title:String(s.title??`GitHub issue #${t.number}`),body:String(s.body??""),labels:Array.isArray(s.labels)?s.labels.map(t=>String(t.name??t)).slice(0,30):[],url:String(s.html_url??`https://github.com/${t.owner}/${t.repo}/issues/${t.number}`),repository:`${t.owner}/${t.repo}`}}finally{clearTimeout(r)}}(t).catch(()=>({provider:"github",id:String(t.number),title:`GitHub issue ${t.owner}/${t.repo}#${t.number}`,body:`Fetch failed for ${s}. Provide title/body or configure network/token access.`,labels:[],url:s,repository:`${t.owner}/${t.repo}`}))}const o=await m(c.join(this.workspaceRoot,".mesh","issues-snapshot.json"),[]),a=String(t.issueId??"").trim(),l=String(t.provider??"").trim().toLowerCase(),u=o.find(t=>!(a&&String(t.id)!==a||l&&String(t.provider).toLowerCase()!==l));if(u)return{provider:["github","linear","jira"].includes(u.provider)?u.provider:"manual",id:String(u.id),title:String(u.title),body:String(u.body??""),labels:n(u.labels),url:u.url?String(u.url):void 0};throw new Error("Issue Autopilot requires title/body, issueUrl, or an issueId present in .mesh/issues-snapshot.json")}async safeTool(t,e){try{return await this.options.callTool(t,e)}catch{return null}}emptyRecord(t,e,i,r){const s=`auto-${Date.now().toString(36)}-${l.randomBytes(3).toString("hex")}`;return{id:s,action:t,status:e,ok:i,startedAt:(new Date).toISOString(),plan:r,artifacts:{runPath:`.mesh/autopilot/runs/${s}.json`,latestPath:".mesh/autopilot/latest.json"}}}async finishAndWrite(t){t.finishedAt=(new Date).toISOString(),await this.writeRun(t)}async writeRun(t){const e=c.join(this.workspaceRoot,t.artifacts.runPath),i=c.join(this.workspaceRoot,t.artifacts.latestPath);await d(e,t),await d(i,t)}async status(){const t=await m(c.join(this.workspaceRoot,".mesh","autopilot","latest.json"),null);return t?{ok:!0,action:"status",status:t.status,runId:t.id,issue:t.plan.issue,lastRunOk:t.ok,startedAt:t.startedAt,finishedAt:t.finishedAt,artifacts:t.artifacts}:{ok:!0,action:"status",status:"missing",message:"No Issue Autopilot run exists yet. Run workspace.issue_autopilot action=plan or action=run."}}publicRun(e){return{ok:e.ok,action:e.action,status:e.status,runId:e.id,issue:e.plan.issue,plan:t(e.plan),timeline:e.timeline?{id:e.timeline.id,applyAttempts:e.timeline.applyAttempts,verification:e.timeline.verification,comparison:e.timeline.comparison}:void 0,review:e.review,proof:e.proof,pr:e.pr,artifacts:e.artifacts}}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
function e(e){const t=e.length;if(0===t)return 0;const o={};for(const t of e)o[t]=(o[t]||0)+1;let s=0;for(const e in o){const n=o[e]/t;s-=n*Math.log2(n)}return s}import{DEFAULT_MODEL_ID as t,MODEL_CATALOG as o}from"./model-catalog.js";import{DEFAULT_NVIDIA_CHAT_MODELS as s,isNvidiaHostedModel as n,nvidiaChatCompletion as i}from"./nvidia-services.js";export function isGoogleHostedModel(e){return"google"===o.find(t=>t.value===e)?.provider||e.startsWith("google/")}export class BedrockLlmClient{options;constructor(e){this.options=e}logEndpoint(){process.stderr.write(`[Mesh] LLM endpoint: ${this.options.endpointBase}\n`)}async converse(e,t,o,s,i,r){const a=[];for(const l of this.candidateModelIds(s)){const s=i?AbortSignal.any([i,AbortSignal.timeout(6e4)]):AbortSignal.timeout(6e4);if(n(l)||isGoogleHostedModel(l)){let n;try{n=await this.fetchOpenAiResponse(l,e,t,o,s,r)}catch(e){a.push(`${l} -> error: ${e.message.slice(0,220)}`),process.stderr.write(`[Mesh] Model ${l} failed (${e.message}), trying fallback...\n`);continue}if(n.response.ok)return this.parseNvidiaResponse(n.data);const i=this.buildErrorHint(n.response.status,n.rawText,l);if(a.push(`${l} -> ${n.response.status}: ${n.rawText.slice(0,220)}${i}`),!this.shouldTryFallback(n.response.status))break;process.stderr.write(`[Mesh] Model ${l} failed (${n.response.status}), trying fallback...\n`);continue}const c=this.buildBody(e,t,o,r),d={"content-type":"application/json"};this.options.bearerToken&&(d.authorization=`Bearer ${this.options.bearerToken}`);const p=await this.fetchWithRetry(this.buildUrl(l),{method:"POST",headers:d,body:JSON.stringify(c),signal:s});if(p.ok){const e=await p.json();return this.parseResponse(e)}const u=await p.text(),h=this.buildErrorHint(p.status,u,l);if(a.push(`${l} -> ${p.status}: ${u.slice(0,220)}${h}`),!this.shouldTryFallback(p.status))break;process.stderr.write(`[Mesh] Model ${l} failed (${p.status}), trying fallback...\n`)}throw new Error(`LLM request failed after ${a.length} attempt(s): ${a.join(" | ")}`)}async*converseStream(e,t,o,s,i,r){const a=s||this.options.modelId;if(n(a)||isGoogleHostedModel(a)){const n=await this.converse(e,t,o,s,i,r);if("text"===n.kind)n.text&&(yield{kind:"text",text:n.text});else{n.text&&(yield{kind:"text",text:n.text});for(const e of n.toolUses)yield{kind:"tool_use",toolUse:e}}return void(yield{kind:"stop",usage:n.usage})}const l=this.buildBody(e,t,o,r),c={"content-type":"application/json"};this.options.bearerToken&&(c.authorization=`Bearer ${this.options.bearerToken}`);const d=i?AbortSignal.any([i,AbortSignal.timeout(6e4)]):AbortSignal.timeout(6e4);let p=null;const u=[];for(const e of this.candidateModelIds(s)){if(p=await fetch(this.buildUrl(e).replace("/converse","/converse-stream"),{method:"POST",headers:c,body:JSON.stringify(l),signal:d}),p.ok)break;const t=await p.text().catch(()=>""),o=this.buildErrorHint(p.status,t,e);if(u.push(`${e} -> ${p.status}: ${t.slice(0,220)}${o}`),!this.shouldTryFallback(p.status))throw new Error(`LLM streaming failed after ${u.length} attempt(s): ${u.join(" | ")}`)}if(!p?.ok)throw new Error(`LLM streaming failed after ${u.length} attempt(s): ${u.join(" | ")}`);if(!p.body)return;const h=p.body.getReader(),m=new TextDecoder;let g="";for(;;){const{done:e,value:t}=await h.read();if(e)break;g+=m.decode(t,{stream:!0});const o=g.split("\n");g=o.pop()||"";for(const e of o)if(e.trim())try{const t=JSON.parse(e);if(t.contentBlockDelta?.delta?.text){const e=t.contentBlockDelta.delta.text,o=detectStreamingHazard(g,e);if(o)return void(yield{kind:"stop",text:`\n[JIT REVERSION] Aborted: ${o}`});yield{kind:"text",text:e}}t.contentBlockStart?.start?.toolUse&&(yield{kind:"tool_use",toolUse:t.contentBlockStart.start.toolUse}),t.metadata?.usage&&(yield{kind:"stop",usage:t.metadata.usage})}catch{}}}buildUrl(e){return`${this.options.endpointBase.replace(/\/+$/,"")}/model/${encodeURIComponent(e)}/converse`}async fetchOpenAiResponse(e,t,o,s,n,r){const a=isGoogleHostedModel(e),l=a?"google":"nvidia",c=process.env.NVIDIA_API_KEY||process.env.NVAPI_KEY,d=this.options.googleApiKey||process.env.GOOGLE_API_KEY||process.env.GEMINI_API_KEY;if(a&&d){const a="https://generativelanguage.googleapis.com/v1beta/openai";return i({model:e.replace(/^(google\/|xai\/)/,""),messages:this.buildOpenAiMessages(t,s),tools:o.length>0?this.buildOpenAiTools(o):void 0,temperature:this.options.temperature,maxTokens:r??this.options.maxTokens},{apiKey:d,baseUrl:a,abortSignal:n,extraHeaders:{}})}return i({model:a?e.replace(/^(google\/|xai\/)/,""):e,messages:this.buildOpenAiMessages(t,s),tools:o.length>0?this.buildOpenAiTools(o):void 0,temperature:this.options.temperature,maxTokens:r??this.options.maxTokens},{apiKey:c||this.options.bearerToken,baseUrl:c?void 0:this.options.endpointBase,abortSignal:n,extraHeaders:{"x-mesh-provider":l,"x-mesh-model-id":e}})}candidateModelIds(e){const o=e||this.options.modelId,n=new Set;if(n.add(o),this.options.fallbackModelIds)for(const e of this.options.fallbackModelIds)n.add(e);if(n.add(t),process.env.NVIDIA_API_KEY||process.env.NVAPI_KEY)for(const e of s)n.add(e);return Array.from(n).filter(Boolean)}shouldTryFallback(e){return 401===e||404===e||429===e||e>=500}isRetryableStatus(e){return 429===e||408===e||e>=500}async fetchWithRetry(e,t,o=3){const s=[1e3,2e3,4e3];for(let n=0;n<=o;n++){const i=await fetch(e,t);if(i.ok||!this.isRetryableStatus(i.status))return i;if(!(n<o))return i;{const e=s[n]??4e3,t=Math.random()*e*.25;await new Promise(o=>setTimeout(o,e+t))}}return fetch(e,t)}buildErrorHint(e,o,s){return 400===e&&o.includes("on-demand throughput isn’t supported")?` | Hint: model '${s}' needs an inference profile id. Try '/model ${t}'`:403===e&&o.includes('"model_not_allowed"')?" | Hint: this model is blocked by worker ALLOWED_MODELS.":""}buildBody(e,t,o,s){const n=e.map(e=>({role:e.role,content:e.content.map(e=>"image"in e?{image:{format:e.image.format,source:{bytes:e.image.source.bytes}}}:e)}));let i;i="string"==typeof o?[{text:o,...o.length>1e3?{cache_control:{type:"ephemeral"}}:{}}]:o;const r={messages:n,system:i,inferenceConfig:{temperature:this.options.temperature,maxTokens:s??this.options.maxTokens}},a=e.some(e=>e.content.some(e=>"toolUse"in e||"toolResult"in e));if(t.length>0||a){const e={tools:t.map(e=>({toolSpec:{name:e.name,description:e.description??"",inputSchema:{json:e.inputSchema??{type:"object",properties:{}}}}}))};if(e.tools.length>0){e.tools[e.tools.length-1].toolSpec.cache_control={type:"ephemeral"}}r.toolConfig=e}return r}buildOpenAiTools(e){return e.map(e=>({type:"function",function:{name:e.name,description:e.description??"",parameters:e.inputSchema??{type:"object",properties:{}}}}))}buildOpenAiMessages(e,t){const o=[],s="string"==typeof t?t:t.map(e=>e.text).filter(Boolean).join("\n\n");s.trim()&&o.push({role:"system",content:s});for(const t of e){const e=[],s=[],n=[],i=[];for(const o of t.content)if("text"in o&&"string"==typeof o.text)e.push(o.text);else if("image"in o)s.push({type:"image_url",image_url:{url:`data:image/${o.image.format};base64,${o.image.source.bytes}`}});else if("toolUse"in o)n.push({id:o.toolUse.toolUseId,type:"function",function:{name:o.toolUse.name,arguments:JSON.stringify(o.toolUse.input??{})}});else if("toolResult"in o){const e=o.toolResult.content.map(e=>"text"in e?e.text:JSON.stringify("json"in e?e.json:e.image)).join("\n").trim();i.push({role:"tool",tool_call_id:o.toolResult.toolUseId,content:e||(o.toolResult.status??"ok")})}if(n.length>0)o.push({role:"assistant",content:e.join("\n").trim()||null,tool_calls:n});else if(s.length>0){const n=[...e.map(e=>({type:"text",text:e})),...s];o.push({role:t.role,content:n})}else e.length>0&&o.push({role:t.role,content:e.join("\n").trim()});o.push(...i)}return o}parseResponse(e){const t=e.output?.message?.content??[],o=e.stopReason??"end_turn",s=e.usage,n=[],i=[];for(const e of t)"text"in e&&"string"==typeof e.text?n.push(e.text):"toolUse"in e&&e.toolUse&&i.push({toolUseId:e.toolUse.toolUseId,name:e.toolUse.name,input:e.toolUse.input??{}});const r=n.join("\n").trim();return i.length>0?{kind:"tool_use",toolUses:i,text:r||void 0,stopReason:o,usage:s}:{kind:"text",text:r,stopReason:o,usage:s}}parseNvidiaResponse(e){const t=e?.choices?.[0],o=e?.usage?{inputTokens:e.usage.prompt_tokens,outputTokens:e.usage.completion_tokens,totalTokens:e.usage.total_tokens}:void 0,s=t?.message?.content,n="string"==typeof s?s.trim():Array.isArray(s)?s.map(e=>e?.text??"").join("\n").trim():"",i=t?.message?.tool_calls??[];return i.length>0?{kind:"tool_use",text:n||void 0,stopReason:t?.finish_reason??"tool_use",usage:o,toolUses:i.map((e,t)=>{let o={};try{o=JSON.parse(e.function?.arguments??"{}")}catch{o={}}return{toolUseId:e.id||`tool_call_${t+1}`,name:e.function?.name||"unknown_tool",input:o}})}:{kind:"text",text:n,stopReason:t?.finish_reason??"end_turn",usage:o}}}export function detectStreamingHazard(t,o){const s=`${t}${o}`,n=s.slice(-1600).toLowerCase(),i=s.slice(-300).toLowerCase(),r=(/```[a-z]*[\s\S]*$/.test(n),/```(?:bash|sh|zsh|shell|powershell)[\s\S]*$/.test(n));let a=0;const l=[];/(?:\\x[0-9a-f]{2}){4,}/i.test(i)&&(a+=60,l.push("hex-encoded-payload")),/\b(?:base64|atob|btoa|decode|eval\(|unescape)\b/i.test(i)&&(a+=30,l.push("dynamic-decoding"));const c=["/etc/shadow","/etc/passwd","/etc/sudoers","~/.ssh","~/.aws","~/.docker",".git/config",".env","secrets.json","/dev/mem","/dev/kmem","/proc/kcore"];for(const e of c)n.includes(e)&&(a+=80,l.push(`sensitive-path:${e}`));const d=[{re:/\brm\s+-rf\b/i,weight:100,msg:"destructive-rm"},{re:/\bmkfs\b|\bparted\b|\bformat\b\s+[a-z]:/i,weight:100,msg:"disk-format"},{re:/\bchmod\s+(?:-r\s+)?777\b/i,weight:40,msg:"insecure-permissions"},{re:/\bkill\s+-9\s+(?:-1|0)\b/i,weight:70,msg:"process-mass-kill"},{re:/>\s*\/etc\/[a-z]+/i,weight:90,msg:"system-config-overwrite"}];for(const{re:e,weight:t,msg:o}of d)e.test(i)&&(a+=t,l.push(o));if(/(?:ignore previous instructions|you are now|system override|developer mode active)/i.test(i)&&(a+=50,l.push("meta-instruction-override")),a>=100)return`CRITICAL HAZARD: ${l.join(", ")} (Score: ${a})`;if(r&&a>=60)return`SHELL HAZARD: Suspicious command sequence in shell block (Score: ${a})`;const p=s.match(/[A-Za-z0-9/+]{32,}/g)||[];for(const t of p){const o=e(t);if(o>4.3&&t.length<500&&!/^[A-F0-9]+$/i.test(t))return`SECRET HAZARD: High-entropy string detected (${o.toFixed(2)})`}return/\bprocess\.env\.[A-Z0-9_]+\s*\.\s*(?:trim|toLowerCase|toUpperCase|split|replace)\s*\(/i.test(i)?"CODE HAZARD: unsafe chained env access":/\b(?:undefined|null)\s*(?:\.|\[)\s*[a-zA-Z_$]/i.test(i)?"CODE HAZARD: Potential null/undefined property access":null}
|