@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.
Files changed (95) hide show
  1. package/assets/mesh-banner.svg +23 -0
  2. package/bin/mesh-daemon.cjs +25 -0
  3. package/bin/mesh.cjs +25 -0
  4. package/dist/agent-loop.js +1 -0
  5. package/dist/agent-os.js +1 -0
  6. package/dist/agents/critic.js +1 -0
  7. package/dist/agents/persona-loader.js +1 -0
  8. package/dist/agents/redteam.js +1 -0
  9. package/dist/audit/logger.js +1 -0
  10. package/dist/auth.js +1 -0
  11. package/dist/cache-manager.js +1 -0
  12. package/dist/command-filter.js +1 -0
  13. package/dist/command-safety.js +1 -0
  14. package/dist/company-brain.js +1 -0
  15. package/dist/composite-backend.js +1 -0
  16. package/dist/config.js +1 -0
  17. package/dist/context-artifacts.js +1 -0
  18. package/dist/context-assembler.js +1 -0
  19. package/dist/daemon-protocol.js +1 -0
  20. package/dist/daemon.js +2 -0
  21. package/dist/dashboard/assets/index-Co1IW0HE.css +1 -0
  22. package/dist/dashboard/assets/index-DIj6iOWd.js +1 -0
  23. package/dist/dashboard/index.html +13 -0
  24. package/dist/dashboard-server.js +1 -0
  25. package/dist/doctor.js +1 -0
  26. package/dist/index.js +2 -0
  27. package/dist/integrations/chatops/manager.js +1 -0
  28. package/dist/integrations/issues/github.js +1 -0
  29. package/dist/integrations/issues/jira.js +1 -0
  30. package/dist/integrations/issues/linear.js +1 -0
  31. package/dist/integrations/issues/manager.js +1 -0
  32. package/dist/integrations/issues/types.js +1 -0
  33. package/dist/integrations/telemetry/datadog.js +1 -0
  34. package/dist/integrations/telemetry/manager.js +1 -0
  35. package/dist/integrations/telemetry/otel.js +1 -0
  36. package/dist/integrations/telemetry/posthog.js +1 -0
  37. package/dist/integrations/telemetry/sentry.js +1 -0
  38. package/dist/issue-autopilot.js +1 -0
  39. package/dist/llm-client.js +1 -0
  40. package/dist/local-tools.js +1 -0
  41. package/dist/mcp-client.js +1 -0
  42. package/dist/mesh-brain.js +1 -0
  43. package/dist/mesh-core-adapter.js +1 -0
  44. package/dist/mesh-gateway.js +1 -0
  45. package/dist/mesh-portal.js +1 -0
  46. package/dist/model-catalog.js +1 -0
  47. package/dist/model-router.js +1 -0
  48. package/dist/moonshots/causal-autopsy.js +1 -0
  49. package/dist/moonshots/common.js +1 -0
  50. package/dist/moonshots/conversational-codebase.js +1 -0
  51. package/dist/moonshots/ephemeral-execution.js +1 -0
  52. package/dist/moonshots/fluid-mesh.js +1 -0
  53. package/dist/moonshots/hive-mind.js +1 -0
  54. package/dist/moonshots/live-wire.js +1 -0
  55. package/dist/moonshots/living-software.js +1 -0
  56. package/dist/moonshots/natural-language-source.js +1 -0
  57. package/dist/moonshots/precrime.js +1 -0
  58. package/dist/moonshots/probabilistic-codebase.js +1 -0
  59. package/dist/moonshots/proof-carrying-change.js +1 -0
  60. package/dist/moonshots/schrodingers-ast.js +1 -0
  61. package/dist/moonshots/semantic-git.js +1 -0
  62. package/dist/moonshots/semantic-sheriff.js +1 -0
  63. package/dist/moonshots/session-resurrection.js +1 -0
  64. package/dist/moonshots/shadow-deploy.js +1 -0
  65. package/dist/moonshots/spec-code.js +1 -0
  66. package/dist/moonshots/todo-resolver.js +1 -0
  67. package/dist/moonshots/tribunal.js +1 -0
  68. package/dist/nvidia-services.js +1 -0
  69. package/dist/production-readiness.js +1 -0
  70. package/dist/quality/property-tests.js +1 -0
  71. package/dist/quality/smt.js +1 -0
  72. package/dist/refactor/ts-compiler.js +1 -0
  73. package/dist/runtime/replay.js +1 -0
  74. package/dist/runtime-api.js +1 -0
  75. package/dist/runtime-observer.js +1 -0
  76. package/dist/security/self-defending.js +1 -0
  77. package/dist/session-capsule-store.js +1 -0
  78. package/dist/session-manager.js +1 -0
  79. package/dist/structured-logger.js +1 -0
  80. package/dist/support.js +1 -0
  81. package/dist/terminal-preview.js +1 -0
  82. package/dist/timeline/symptom-bisect.js +1 -0
  83. package/dist/timeline-manager.js +1 -0
  84. package/dist/tool-backend.js +1 -0
  85. package/dist/tool-schema.js +1 -0
  86. package/dist/voice-manager.js +1 -0
  87. package/dist/workspace-index.js +1 -0
  88. package/package.json +94 -0
  89. package/scripts/minify.js +114 -0
  90. package/scripts/postinstall.cjs +81 -0
  91. package/scripts/published-install-smoke.cjs +103 -0
  92. package/scripts/release-smoke.cjs +116 -0
  93. package/scripts/run-eval.ts +84 -0
  94. package/scripts/run-tests.cjs +54 -0
  95. package/scripts/update-brew.sh +57 -0
@@ -0,0 +1 @@
1
+ function t(t,e){const s=n(e).slice(0,8e4),i=s.split(/\r?\n/g),o=function(t){return/(\.test|\.spec)\.(ts|tsx|js|jsx|mjs|cjs)$|(^|\/)(test|tests|__tests__)\//.test(t)?"test":/\.(md|mdx)$/.test(t)?"doc":/(^|\/)(package\.json|tsconfig\.json|.*config.*|Dockerfile|\.github\/workflows|.*\.ya?ml|.*\.toml)$/.test(t)?"config":"source"}(t),l=t.split("/")[0]||".",m=[],u=function(t){const e=Array.from(t.matchAll(/\b(export\s+)?(class|function|interface|type|const|let|var|enum)\s+([A-Za-z_$][\w$]*)/g));return a(e.map(t=>`${t[2]} ${t[3]}`),120)}(s);u.length>0&&m.push({i:c(t,"symbols",1),k:"symbol",f:t,t:`Symbols in ${t}`,s:1,e:Math.min(i.length,200),x:u.slice(0,80).join("\n"),w:r(`${t} ${u.join(" ")}`),d:l});const h=function(t){const e=[];for(const s of t.matchAll(/\b(app|router)\.(get|post|put|patch|delete|all)\(\s*["'`]([^"'`]+)["'`]/g))e.push(`${s[2].toUpperCase()} ${s[3]}`);for(const s of t.matchAll(/\b(method|path|route)\s*:\s*["'`]([^"'`]+)["'`]/g))e.push(`${s[1]}=${s[2]}`);return a(e,120)}(s);h.length>0&&m.push({i:c(t,"routes",1),k:"route",f:t,t:`Routes in ${t}`,s:1,e:Math.min(i.length,200),x:h.slice(0,80).join("\n"),w:r(`${t} ${h.join(" ")}`),d:l});const p="doc"===o?90:70;for(let e=0;e<i.length;e+=p){const s=i.slice(e,e+p),n=s.join("\n").trim();n&&m.push({i:c(t,o,e+1),k:o,f:t,t:`${t}:${e+1}`,s:e+1,e:Math.min(i.length,e+s.length),x:n.slice(0,2400),w:r(`${t}\n${n}`),d:l})}return m}function e(t,e){const s=r(t);if(0===s.length)return 0;const i=` ${e.toLowerCase()} `;let n=0;for(const t of s)i.includes(` ${t} `)?n+=1.8:i.includes(t)&&(n+=.75);const o=t.toLowerCase().replace(/\s+/g," ").trim();return o.length>5&&i.includes(o)&&(n+=4),n/Math.sqrt(s.length)}function s(t,e,s){if(0===e.length&&0===s.length)return`No strong Company Brain matches for "${t}". Rebuild the brain after indexing or ask a narrower question.`;const i=a(e.map(t=>t.f).filter(t=>Boolean(t)),5),r=a(e.map(t=>t.k),5);return[`Company Brain found ${e.length} grounded match(es) for "${t}".`,i.length>0?`Most relevant files: ${i.join(", ")}.`:"",r.length>0?`Evidence types: ${r.join(", ")}.`:"",s.length>0?`Relevant rules: ${s.slice(0,3).join(" | ")}`:""].filter(Boolean).join(" ")}function i(t,e=!1){const s=["# Mesh Company Brain","",`Built: ${t.builtAt}`,`Workspace: ${t.workspace.name}`,`Package: ${t.workspace.packageName??"unknown"} ${t.workspace.packageVersion??""}`.trim(),"","## Operating Context",`- Files indexed: ${t.summary.files}`,`- Evidence documents: ${t.summary.documents}`,`- Branch: ${t.git.branch??"unknown"}`,"","## Core Domains",...t.summary.domains.slice(0,10).map(t=>`- ${t.name}: ${t.files} files, ${t.risks} risk signals`),"","## Rules",...t.memory.rules.length>0?t.memory.rules.slice(0,e?40:12).map(t=>`- ${t}`):["- No rules recorded yet."],"","## Decisions",...t.memory.decisions.length>0?t.memory.decisions.slice(0,e?40:12).map(t=>`- ${t}`):["- No decisions recorded yet."],"","## Risk Hotspots",...t.summary.topRisks.length>0?t.summary.topRisks.slice(0,e?40:12).map(t=>`- ${t.file}: ${t.risks.join(", ")}`):["- No risk hotspots detected."],"","## Verification Commands",...t.summary.commands.length>0?t.summary.commands.slice(0,16).map(t=>`- ${t}`):["- No package scripts detected."]];return e&&s.push("","## Recent Commits",...t.git.recentCommits.slice(0,25).map(t=>`- ${t}`)),s.join("\n")+"\n"}function r(t){const e=new Set(["the","and","for","with","from","this","that","into","are","was","were","und","der","die","das","ein","eine","ist","mit","von"]);return a(t.toLowerCase().split(/[^a-z0-9_.$/-]+/i).map(t=>t.trim()).filter(t=>t.length>2&&!e.has(t)),80)}function n(t){return t.replace(/\b(nvapi-[A-Za-z0-9_-]{12,})\b/g,"[REDACTED_NVIDIA_KEY]").replace(/\b(sk-[A-Za-z0-9_-]{12,})\b/g,"[REDACTED_API_KEY]").replace(/\b(gh[pousr]_[A-Za-z0-9_]{12,})\b/g,"[REDACTED_GITHUB_TOKEN]").replace(/\b([A-Za-z0-9_]*TOKEN[A-Za-z0-9_]*|[A-Za-z0-9_]*SECRET[A-Za-z0-9_]*|[A-Za-z0-9_]*KEY[A-Za-z0-9_]*)\s*=\s*.+/gi,"$1=[REDACTED]")}function o(t,e){return Array.isArray(t)?a(t.map(String).filter(Boolean),e):[]}function a(t,e=100){return Array.from(new Set(t)).slice(0,e)}function c(t,e,s){return y.createHash("sha1").update(`${t}:${e}:${s}`).digest("hex").slice(0,16)}function l(t,e,s,i){const r=Number(t);return Number.isFinite(r)?Math.max(s,Math.min(i,Math.trunc(r))):e}function m(t,e){const s=d.resolve(t,e),i=d.resolve(t),r=d.relative(i,s);if(r.startsWith("..")||d.isAbsolute(r))throw new Error(`Path escapes workspace root: ${e}`);return s}function u(t){const e=`${d.sep}.mesh${d.sep}`,s=t.indexOf(e);return s>=0?`.mesh/${b(t.slice(s+e.length))}`:t}async function h(t,e){try{const{stdout:s}=await j("git",e,{cwd:t,maxBuffer:2097152});return s}catch(t){return String(t.stdout??"")}}import{promises as p}from"node:fs";import d from"node:path";import y from"node:crypto";import{execFile as f}from"node:child_process";import{promisify as g}from"node:util";import{appendJsonl as w,collectWorkspaceFiles as k,readJson as $,toPosix as b,writeJson as A}from"./moonshots/common.js";const j=g(f);export class CompanyBrainEngine{workspaceRoot;callTool;constructor(t,e){this.workspaceRoot=t,this.callTool=e}async run(t={}){const e=function(t){const e=t.trim().toLowerCase().replace("-","_");return"ask"===e||"search"===e?"query":["build","query","status","record","ingest","export"].includes(e)?e:"status"}(String(t.action??"status"));return"build"===e?this.build(t):"query"===e?this.query(t):"record"===e?this.record(t):"ingest"===e?this.ingest(t):"export"===e?this.export(t):this.status()}async build(e={}){const s=l(e.maxFiles,1200,50,5e3),[a,h,f,g,w]=await Promise.all([$(d.join(this.workspaceRoot,"package.json"),null),this.gitContext(),this.safeTool("workspace.digital_twin",{action:"build"}),this.safeTool("workspace.engineering_memory",{action:"read"}),$(d.join(this.workspaceRoot,".mesh","issues-snapshot.json"),[])]),b=await k(this.workspaceRoot,{extensions:[".ts",".tsx",".js",".jsx",".mjs",".cjs",".json",".md",".mdx",".yml",".yaml",".toml",".sql",".graphql"],maxFiles:s}),j=[];for(const e of b){const s=m(this.workspaceRoot,e),i=await p.stat(s).catch(()=>null);if(!i?.isFile()||i.size>15e5)continue;const r=await p.readFile(s,"utf8").catch(()=>"");r.trim()&&j.push(...t(e,r))}const x=f?.twin??f??{},S=g?.memory??{};j.push(...function(t){const e=[];for(const[s,i]of Object.entries({rules:t.rules,decisions:t.decisions,acceptedPatterns:t.acceptedPatterns,rejectedPatterns:t.rejectedPatterns})){const t=o(i,200).join("\n");t.trim()&&e.push({i:c(`memory:${s}`,"memory",1),k:"memory",t:`Engineering memory: ${s}`,x:t,w:r(t)})}return e}(S)),j.push(...function(t){const e=[],s=Array.isArray(t?.routes)?t.routes:[];if(s.length>0){const t=s.slice(0,250).map(t=>`${t.file??""} ${t.method??""} ${t.path??t.route??""}`).join("\n");e.push({i:"digital-twin-routes",k:"route",t:"Digital Twin Routes",x:t,w:r(t)})}const i=Array.isArray(t?.riskHotspots)?t.riskHotspots:[];if(i.length>0){const t=i.slice(0,200).map(t=>`${t.file}: ${(t.risks??[]).join(", ")}`).join("\n");e.push({i:"digital-twin-risks",k:"runtime",t:"Digital Twin Risk Hotspots",x:t,w:r(t)})}return e}(x)),j.push(...function(t){return Array.isArray(t)?t.slice(0,200).map((t,e)=>{const s=`${t.provider??"issue"} ${t.id??e}: ${t.title??""}\n${t.body??""}`;return{i:`issue-${t.provider??"local"}-${t.id??e}`,k:"issue",t:String(t.title??`Issue ${e+1}`),x:n(s).slice(0,2e3),w:r(s)}}):[]}(w));const P=Array.isArray(x?.riskHotspots)?x.riskHotspots:[],v=function(t,e){const s=new Map;for(const t of e){const e=String(t.file??"").split("/")[0]||".";s.set(e,(s.get(e)??0)+1)}const i=new Map;for(const e of t){const t=e.split("/")[0]||".";i.set(t,(i.get(t)??0)+1)}return Array.from(i.entries()).map(([t,e])=>({name:t,files:e,risks:s.get(t)??0})).sort((t,e)=>e.files+4*e.risks-(t.files+4*t.risks)).slice(0,30)}(b,P),R={schemaVersion:2,builtAt:(new Date).toISOString(),workspace:{rootHash:(_=this.workspaceRoot,y.createHash("sha256").update(d.resolve(_)).digest("hex").slice(0,24)),name:d.basename(this.workspaceRoot),packageName:a?.name,packageVersion:a?.version},summary:{files:b.length,documents:j.length,domains:v,topRisks:P.slice(0,20).map(t=>({file:String(t.file??""),risks:Array.isArray(t.risks)?t.risks.map(String).slice(0,8):[],score:Number(t.score??0)})),commands:Object.entries(a?.scripts??{}).filter(([t])=>/test|typecheck|lint|build|start|dev|deploy/i.test(t)).map(([t,e])=>`${t}: ${e}`).slice(0,24)},memory:{rules:o(S.rules,200),decisions:o(S.decisions,200),acceptedPatterns:o(S.acceptedPatterns,200),rejectedPatterns:o(S.rejectedPatterns,200),events:Array.isArray(S.events)?S.events.slice(0,100).map(t=>({id:String(t.id??`mem-${y.randomUUID()}`),at:String(t.at??t.createdAt??(new Date).toISOString()),kind:String(t.outcome??t.kind??"memory"),title:String(t.rule??t.note??"Memory event").slice(0,160),body:String(t.note??t.rule??""),files:Array.isArray(t.files)?t.files.map(String).slice(0,20):[],source:String(t.source??"engineering_memory")})):[]},documents:j.slice(0,6e3),git:h,sourceArtifacts:{digitalTwinPath:f?.path?String(f.path):void 0,engineeringMemoryPath:g?.path?String(g.path):void 0,brainPath:u(this.brainPath()),summaryPath:u(this.summaryPath())}};var _;return await A(this.brainPath(),R),await p.mkdir(d.dirname(this.summaryPath()),{recursive:!0}),await p.writeFile(this.summaryPath(),i(R),"utf8"),{ok:!0,action:"build",path:u(this.brainPath()),summaryPath:u(this.summaryPath()),stats:R.summary,memory:{rules:R.memory.rules.length,decisions:R.memory.decisions.length,events:R.memory.events.length}}}async query(t={}){const i=String(t.query??t.question??"").trim();if(!i)throw new Error("workspace.company_brain query requires query");const r=l(t.limit,8,1,25),n=await this.readOrBuild(),o=(c=i,m=n.documents,m.map(t=>({...t,z:e(c,`${t.t}\n${t.f??""}\n${t.x}\n${t.w.join(" ")}`)})).filter(t=>(t.z??0)>0).sort((t,e)=>(e.z??0)-(t.z??0))).slice(0,r);var c,m;const h=n.memory.rules.filter(t=>e(i,t)>0).slice(0,8);return{ok:!0,action:"query",query:i,builtAt:n.builtAt,answer:s(i,o,h),citations:o.map(t=>({id:t.i,kind:t.k,file:t.f,lineStart:t.s,lineEnd:t.e,title:t.t,score:Number((t.z??0).toFixed(3)),snippet:t.x.slice(0,600)})),memoryRules:h,recommendedFiles:a(o.map(t=>t.f).filter(t=>Boolean(t)),12),path:u(this.brainPath())}}async record(t={}){const e=String(t.kind??"decision").trim().toLowerCase(),s=String(t.title??t.rule??t.note??"").trim(),n=String(t.body??t.note??t.rule??"").trim();if(!s&&!n)throw new Error("workspace.company_brain record requires title/body/rule/note");const o=await this.readOrBuild(),c={id:`cb-${Date.now().toString(36)}-${y.randomBytes(3).toString("hex")}`,at:(new Date).toISOString(),kind:e,title:s||n.slice(0,120),body:n,files:Array.isArray(t.files)?a(t.files.map(String),40):[],source:String(t.source??"manual")};return o.memory.events.unshift(c),"rule"===e&&n&&(o.memory.rules=a([n,...o.memory.rules],200)),"decision"===e&&(s||n)&&(o.memory.decisions=a([`${c.title}${c.body&&c.body!==c.title?`: ${c.body}`:""}`,...o.memory.decisions],200)),o.documents.unshift(function(t){const e=`${t.kind}: ${t.title}\n${t.body}\n${t.files.join("\n")}`;return{i:t.id,k:"memory",t:t.title,x:e,w:r(e)}}(c)),o.builtAt=(new Date).toISOString(),await A(this.brainPath(),o),await w(this.eventsPath(),c),await p.writeFile(this.summaryPath(),i(o),"utf8"),"rule"===e&&this.callTool&&await this.safeTool("workspace.engineering_memory",{action:"record",outcome:"neutral",rule:n||s,note:c.title,files:c.files}),{ok:!0,action:"record",event:c,path:u(this.brainPath())}}async ingest(t={}){const e=String(t.source??"runtime").trim().toLowerCase(),s=String(t.title??t.summary??e).trim(),i=String(t.body??t.details??t.summary??"").trim();return this.record({kind:e,title:s,body:i,files:Array.isArray(t.files)?t.files:[],source:e})}async status(){const t=await $(this.brainPath(),null);return t?{ok:!0,action:"status",status:"ready",builtAt:t.builtAt,path:u(this.brainPath()),summaryPath:u(this.summaryPath()),files:t.summary.files,documents:t.summary.documents,domains:t.summary.domains.slice(0,10),rules:t.memory.rules.length,decisions:t.memory.decisions.length,events:t.memory.events.length}:{ok:!0,action:"status",status:"missing",path:u(this.brainPath()),message:"Company Brain has not been built yet. Run workspace.company_brain action=build."}}async export(t={}){const e=await this.readOrBuild(),s=String(t.path??".mesh/company-brain/export.md").trim(),r=m(this.workspaceRoot,s);return await p.mkdir(d.dirname(r),{recursive:!0}),await p.writeFile(r,i(e,!0),"utf8"),{ok:!0,action:"export",path:b(d.relative(this.workspaceRoot,r))}}async readOrBuild(){const t=await $(this.brainPath(),null);if(2===t?.schemaVersion)return t;await this.build();const e=await $(this.brainPath(),null);if(!e)throw new Error("Company Brain build failed");return e}async safeTool(t,e){if(!this.callTool)return null;try{return await this.callTool(t,e)}catch{return null}}async gitContext(){const t=await h(this.workspaceRoot,["branch","--show-current"]),e=await h(this.workspaceRoot,["log","--max-count=25","--pretty=format:%h %ad %s","--date=short"]),s=await h(this.workspaceRoot,["log","--max-count=80","--name-only","--pretty=format:"]),i=new Map;for(const t of s.split(/\r?\n/g)){const e=t.trim();e&&!/(^|\/)(node_modules|dist|\.git|\.mesh)(\/|$)/.test(e)&&i.set(e,(i.get(e)??0)+1)}return{branch:t.trim()||void 0,recentCommits:e.split(/\r?\n/g).filter(Boolean).slice(0,25),activeFiles:Array.from(i.entries()).sort((t,e)=>e[1]-t[1]).map(([t])=>t).slice(0,30)}}brainPath(){return d.join(this.workspaceRoot,".mesh","company-brain","brain.json")}summaryPath(){return d.join(this.workspaceRoot,".mesh","company-brain","summary.md")}eventsPath(){return d.join(this.workspaceRoot,".mesh","company-brain","events.jsonl")}}
@@ -0,0 +1 @@
1
+ export class CompositeToolBackend{backends;constructor(o){this.backends=o}async listTools(){const o=[];for(const s of this.backends){const n=await s.listTools();o.push(...n)}return Array.from(new Map(o.map(o=>[o.name,o])).values())}async callTool(o,s,n){for(const t of this.backends){if((await t.listTools()).some(s=>s.name===o))return t.callTool(o,s,n)}throw new Error(`Tool not found: ${o}`)}async close(){await Promise.all(this.backends.map(o=>o.close()))}indexEverything(){for(const o of this.backends)if(o.indexEverything)return o.indexEverything();return async function*(){}()}}
package/dist/config.js ADDED
@@ -0,0 +1 @@
1
+ function e(e,o){const r=process.env[e];return r&&r.trim()?r.trim():o}function o(e,o){const r=process.env[e];if(!r)return o;const t=Number(r);if(Number.isNaN(t))throw new Error(`Invalid numeric env var ${e}: ${r}`);return t}function r(e,o){try{const o=JSON.parse(e);if(!Array.isArray(o)||o.some(e=>"string"!=typeof e))throw new Error("must be a JSON array of strings");return o}catch(e){throw new Error(`Invalid ${o}: ${e.message}`)}}function t(e){const o=e?.trim();return!o||p.has(o)?u:o}function n(){const e=process.env.GOOGLE_API_KEY||process.env.GEMINI_API_KEY;return e?.trim()||void 0}function s(e){const o=Number(e?.speed);return{configured:!0===e?.configured,language:e?.language?.trim()||E.language,speed:Number.isFinite(o)?o:E.speed,voice:e?.voice?.trim()||E.voice,microphone:e?.microphone?.trim()||E.microphone}}import c from"node:fs/promises";import i from"node:os";import a from"node:path";import{config as m}from"dotenv";import{DEFAULT_FALLBACK_MODEL_IDS as l,DEFAULT_MODEL_ID as u}from"./model-catalog.js";m();const p=new Set(["us.anthropic.claude-sonnet-4-5-20250929-v1:0","us.anthropic.claude-3-5-sonnet-20240620-v1:0","us.anthropic.claude-sonnet-4-6","us.anthropic.claude-opus-4-6-v1","us.anthropic.claude-haiku-4-5-20251001-v1:0"]);export function shortPathLabel(e){return e.replace(/\\/g,"/").split("/").filter(Boolean).at(-1)||e}const d=a.join(i.homedir(),".config","mesh","settings.json"),E={configured:!1,language:"auto",speed:260,voice:"auto",microphone:"default"};export async function loadUserSettings(){try{const e=await c.readFile(d,"utf-8"),o=JSON.parse(e);return{modelId:t(o.modelId),themeColor:o.themeColor||"cyan",enableCloudCache:"boolean"!=typeof o.enableCloudCache||o.enableCloudCache,telemetry:o.telemetry,customApiKey:o.customApiKey,customEndpoint:o.customEndpoint,voice:s(o.voice)}}catch{return{modelId:u,themeColor:"cyan",enableCloudCache:!0,voice:E}}}export async function saveUserSettings(e){const o=a.dirname(d);await c.mkdir(o,{recursive:!0,mode:448}),await c.writeFile(d,JSON.stringify(e,null,2),{encoding:"utf-8",mode:384})}export async function loadConfig(){const i=await loadUserSettings(),m=a.resolve(process.env.WORKSPACE_ROOT||process.cwd());let u={};try{const e=await c.readFile(a.join(m,".mesh","config.json"),"utf-8");u=JSON.parse(e)}catch{}const p=(d=process.env.AGENT_MODE,"mcp"===String(d||"local").trim().toLowerCase()?"mcp":"local");var d;const E=process.env.MESH_MCP_ARGS??"[]",h=process.env.MESH_MCP_COMMAND?.trim(),v=t(process.env.MESH_MODEL_ID||process.env.BEDROCK_MODEL_ID||u.modelId||i.modelId),_=(f="MESH_FALLBACK_MODEL_IDS",(process.env[f]??"").split(",").map(e=>e.trim()).filter(Boolean)).map(t).filter(e=>e!==v);var f;if("mcp"===p&&!h)throw new Error("Missing required env var in mcp mode: MESH_MCP_COMMAND");const S=u.customEndpoint||i.customEndpoint||e("MESH_ENDPOINT",e("BEDROCK_ENDPOINT","https://mesh-llm.edgar-baumann.workers.dev"));return{bedrock:{endpointBase:(()=>{try{const e=new URL(S);if("https:"!==e.protocol&&"127.0.0.1"!==e.hostname&&"localhost"!==e.hostname)throw new Error(`MESH_ENDPOINT must use HTTPS (got ${S})`);return S}catch(e){if(e.message.startsWith("MESH_ENDPOINT"))throw e;throw new Error(`Invalid MESH_ENDPOINT URL: ${S}`)}})(),bearerToken:u.customApiKey||i.customApiKey||process.env.NVIDIA_API_KEY||process.env.NVAPI_KEY,googleApiKey:n(),modelId:v,fallbackModelIds:_.length>0?_:l.filter(e=>e!==v),temperature:o("MESH_TEMPERATURE",o("BEDROCK_TEMPERATURE",0)),maxTokens:o("MESH_MAX_TOKENS",o("BEDROCK_MAX_TOKENS",8e3))},agent:{maxSteps:o("AGENT_MAX_STEPS",8),mode:p,workspaceRoot:m,enableCloudCache:u.enableCloudCache??i.enableCloudCache,themeColor:u.themeColor||i.themeColor,voice:s(u.voice??i.voice)},mcp:{command:h,args:r(E,"MESH_MCP_ARGS")},supabase:{url:process.env.SUPABASE_URL?.trim()||void 0,key:process.env.SUPABASE_KEY?.trim()||void 0},telemetry:{contribute:!0===i.telemetry||"1"===process.env.MESH_TELEMETRY||"true"===process.env.MESH_TELEMETRY,meshBrainEndpoint:process.env.MESH_BRAIN_ENDPOINT?.trim()||void 0}}}
@@ -0,0 +1 @@
1
+ function t(t){if(null==t)return"null result";if("string"==typeof t)return i(t);if(Array.isArray(t))return`array with ${t.length} items: ${i(JSON.stringify(t.slice(0,5)))}`;if("object"!=typeof t)return String(t);const e=t,r=[];"boolean"==typeof e.ok&&r.push(`ok=${e.ok}`),e.status&&r.push(`status=${String(e.status)}`),e.path&&r.push(`path=${String(e.path)}`),e.error&&r.push(`error=${i(String(e.error),180)}`),e.output&&r.push(`output=${i(String(e.output),220)}`),e.content&&r.push(`content=${i(String(e.content),220)}`);for(const t of["files","entries","results","matches","diagnostics","queue","insights"])Array.isArray(e[t])&&r.push(`${t}=${e[t].length}`);return r.length>0?r.join(", "):i(JSON.stringify(e),280)}function e(t){if(!t||"object"!=typeof t)return null;const e=t;return"boolean"==typeof e.ok?e.ok:null}function r(t){if(!t||"object"!=typeof t||Array.isArray(t))return{};const e=t,r={};for(const t of["ok","status","path","branch","exitCode","resultsFound","cachedFiles","totalFiles","percent"])null!=e[t]&&"object"!=typeof e[t]&&(r[t]=e[t]);for(const t of["files","entries","results","matches","diagnostics","queue","insights","nodes","links"])Array.isArray(e[t])&&(r[`${t}Count`]=e[t].length);return e.summary&&"object"!=typeof e.summary&&(r.summary=i(String(e.summary),180)),e.error&&(r.error=i(String(e.error),180)),r}function s(t,r){const s=new Set;return/ask_codebase|search|grep|list_files|list_directory/i.test(t)&&s.add("workspace.read_file"),/read_file|open_artifact/i.test(t)&&s.add("workspace.impact_map"),/diagnostics|predictive_repair/i.test(t)&&(s.add("workspace.read_file"),s.add("workspace.impact_map")),!1===e(r)&&s.add("answer_or_try_different_tool"),Array.from(s).slice(0,3)}function n(t){const e=new Set,r=JSON.stringify(t);for(const t of r.matchAll(/"([^"]+\.(?:ts|tsx|js|jsx|mjs|cjs|json|md|css|html))"/g))if(e.add(t[1]),e.size>=8)break;return Array.from(e)}function i(t,e=280){const r=t.replace(/\s+/g," ").trim();return r?r.length>e?`${r.slice(0,e-3)}...`:r:"empty"}import{promises as a}from"node:fs";import o from"node:crypto";import c from"node:path";export class ContextArtifactStore{workspaceRoot;basePath;indexPath;constructor(t){this.workspaceRoot=t,this.basePath=c.join(t,".mesh","context","artifacts"),this.indexPath=c.join(this.basePath,"index.json")}async saveToolResult(e,r,s){await a.mkdir(this.basePath,{recursive:!0});const i=JSON.stringify(s,null,2),o=this.createId(e,i),l=c.join(this.basePath,`${o}.json`),u={id:o,toolName:e,args:r,createdAt:(new Date).toISOString(),storagePath:l,originalChars:i.length,summary:t(s),hints:n(s)};return await a.writeFile(l,JSON.stringify({record:u,result:s},null,2),"utf8"),await this.upsertIndex(u),u}buildCard(t){const e=JSON.stringify(t.args);return[`Artifact ${t.id}`,`tool: ${t.toolName}`,`args: ${e.length>500?`${e.slice(0,500)}...`:e}`,`size: ${t.originalChars.toLocaleString()} chars stored locally`,`summary: ${t.summary}`,t.hints.length>0?`hints: ${t.hints.join("; ")}`:"hints: none",`open: workspace.open_artifact({ "id": "${t.id}", "query": "...", "maxChars": 4000 })`].join("\n")}buildEnvelope(t,n){return{type:"mesh.tool_result.v2",tool:t.toolName,ok:e(n),artifact:{id:t.id,charsStored:t.originalChars,open:`workspace.open_artifact({ "id": "${t.id}", "query": "...", "maxChars": 4000 })`},summary:t.summary,refs:t.hints,facts:r(n),nextSuggestedTools:s(t.toolName,n),tokensSavedEstimate:Math.max(0,Math.ceil(t.originalChars/4)-220)}}buildEnvelopeText(t,e){return JSON.stringify(this.buildEnvelope(t,e))}createId(t,e){return`${t.replace(/[^a-z0-9]+/gi,"-").replace(/^-+|-+$/g,"").toLowerCase()}-${o.createHash("sha1").update(`${t}\n${e}\n${Date.now()}`).digest("hex").slice(0,10)}`}async upsertIndex(t){const e=await this.readIndex(),r=[t,...e.filter(e=>e.id!==t.id)].slice(0,200);await a.writeFile(this.indexPath,JSON.stringify(r,null,2),"utf8")}async readIndex(){const t=await a.readFile(this.indexPath,"utf8").catch(()=>"[]");try{const e=JSON.parse(t);return Array.isArray(e)?e:[]}catch{return[]}}}export async function readContextArtifactIndex(t,e=20){const r=c.join(t,".mesh","context","artifacts","index.json"),s=await a.readFile(r,"utf8").catch(()=>"[]");try{const t=JSON.parse(s);return Array.isArray(t)?t.slice(0,Math.max(0,e)):[]}catch{return[]}}export async function openContextArtifact(t,e){const r=String(e.id??"").trim();if(!/^[a-z0-9-]+$/i.test(r))throw new Error("workspace.open_artifact requires a valid artifact id");const s=Math.max(500,Math.min(12e3,Number(e.maxChars??4e3)||4e3)),n=String(e.query??"").trim().toLowerCase(),i=c.join(t,".mesh","context","artifacts",`${r}.json`),o=await a.readFile(i,"utf8"),l=JSON.parse(o),u=JSON.stringify(l.result,null,2),h=n?function(t,e,r){const s=e.split(/\s+/g).filter(Boolean),n=t.split(/\r?\n/g),i=[];for(let t=0;t<n.length;t+=1){const e=n[t].toLowerCase();if(!s.every(t=>e.includes(t)))continue;const a=Math.max(0,t-2),o=Math.min(n.length,t+3);if(i.push(n.slice(a,o).join("\n")),i.join("\n---\n").length>=r)break}const a=i.join("\n---\n");return a?a.slice(0,r):t.slice(0,r)}(u,n,s):u.slice(0,s);return{ok:!0,id:r,toolName:l.record.toolName,args:l.record.args,originalChars:l.record.originalChars,summary:l.record.summary,query:n||null,content:h,truncated:h.length<u.length}}
@@ -0,0 +1 @@
1
+ function t(t){return{name:t.name,description:o(t.description??"",80),inputSchema:e(t.inputSchema??{type:"object",properties:{}},0)}}function e(t,s){if(!t||"object"!=typeof t||s>3)return{type:"object"};if(Array.isArray(t))return{type:"array"};const n=t,r={};for(const t of["type","required","properties","items","enum","description","default"])if(t in n)if("description"===t)r[t]=o(String(n[t]??""),40);else if("properties"===t&&n[t]&&"object"==typeof n[t]&&!Array.isArray(n[t])){const o={};for(const[r,i]of Object.entries(n[t]).slice(0,12))o[r]=e(i,s+1);r[t]=o}else r[t]=n[t];return r}function s(t,e){const s=JSON.stringify(t);return s.length<=e?t:{preview:`${s.slice(0,e-40)}...`,omittedChars:s.length-e}}function o(t,e){return t.length<=e?t:`${t.slice(0,e-3)}...`}export class ContextAssembler{maxInputTokens;historyTokenBudget;currentTurnTokenBudget;toolTokenBudget;toolResultTokenBudget;constructor(t={}){this.maxInputTokens=t.maxInputTokens??16e3,this.historyTokenBudget=t.historyTokenBudget??2e3,this.currentTurnTokenBudget=t.currentTurnTokenBudget??8e3,this.toolTokenBudget=t.toolTokenBudget??3e3,this.toolResultTokenBudget=t.toolResultTokenBudget??900}assemble(e){const s=Math.max(0,Math.min(e.currentTurnStart,e.transcript.length)),o=e.transcript.slice(0,s),n=e.transcript.slice(s);let r=0;const i=this.clampText(e.runtimeContext??"",2800),l=this.clampText(e.sessionSummary??"",1600);let a=l;i&&l&&l.includes(i.slice(0,100))&&(a=l.replace(i,"[Context Deduplicated]").trim());const c=[{text:e.systemPrompt,...e.systemPrompt.length>1e3?{cache_control:{type:"ephemeral"}}:{}},...a?[{text:`Session capsule:\n${a}`}]:[],...i?[{text:`Local compressed context:\n${i}`}]:[]],u=[];let m=0;for(let t=o.length-1;t>=0;t-=1){const e=this.compactMessage(o[t],"history"),s=estimateTokensForMessage(e);if(m+s>this.historyTokenBudget&&u.length>=2)r+=estimateCharsForMessage(o[t]);else if(u.unshift(e),m+=s,m>=this.historyTokenBudget)break}const h=[];let p=0;for(const t of n){const e=this.compactMessage(t,"current"),s=estimateTokensForMessage(e);if(p+s>this.currentTurnTokenBudget){const t=this.trimMessageToTokenBudget(e,Math.max(300,this.currentTurnTokenBudget-p));h.push(t),r+=Math.max(0,estimateCharsForMessage(e)-estimateCharsForMessage(t));break}h.push(e),p+=s}const g=function(e){return e.map(t)}(e.tools,this.toolTokenBudget),T=[...u,...h];let f=this.report(e,T,g,r);const x=Math.max(1,h.length);for(;f.totalTokens>this.maxInputTokens&&T.length>x;){const t=T[0];let s=!1;if(t.content.length>0)for(const e of t.content)"text"in e&&e.text.length>500&&!e.text.includes("[Turn semantically compressed]")&&(r+=e.text.length-100,e.text=e.text.substring(0,100)+"... [Turn semantically compressed due to token budget]",s=!0);s||(r+=estimateCharsForMessage(T[0]),T.shift()),f=this.report(e,T,g,r)}return{messages:T,tools:g,systemPromptArray:c,report:f}}report(t,e,s,o){const n=estimateTokens(t.runtimeContext??""),r=estimateTokens(t.systemPrompt)+estimateTokens(t.sessionSummary??"")+n,i=estimateTokens(JSON.stringify(s)),l=e.reduce((t,e)=>t+estimateTokensForMessage(e),0);return{maxInputTokens:this.maxInputTokens,systemTokens:r,runtimeContextTokens:n,historyTokens:Math.max(0,l-n),currentTurnTokens:l,toolTokens:i,totalTokens:r+l+i,messagesIn:t.transcript.length,messagesOut:e.length,toolsIn:t.tools.length,toolsOut:s.length,trimmedMessages:Math.max(0,t.transcript.length-e.length),trimmedChars:o}}compactMessage(t,e){return{role:t.role,content:t.content.map(t=>this.compactBlock(t,e))}}compactBlock(t,e){if("text"in t){const s="current"===e?4e3:900;return{text:this.clampText(t.text,s)}}if("toolUse"in t)return{toolUse:{toolUseId:t.toolUse.toolUseId,name:t.toolUse.name,input:s(t.toolUse.input,900)}};if("toolResult"in t){const s=t.toolResult.content.map(t=>"text"in t?t.text:"").filter(Boolean).join("\n"),o="history"===e?function(t,e){const s=String(t||"").trim();if(!s)return`tool result -> ${e||"unknown"}`;const o=s.match(/Tool called:\s*([^\n]+)/i),n=o?.[1]?.trim()||"tool",r=e||(/error|failed|exception/i.test(s)?"error":"success");try{const t=s.indexOf("{");if(t>=0){const e=JSON.parse(s.slice(t)),o=e?.result??e,i=[...Array.isArray(o?.matches)?o.matches.map(t=>t.path||t.file):[],...Array.isArray(o?.results)?o.results.map(t=>t.path||t.file):[],...Array.isArray(o?.topMatches)?o.topMatches.map(t=>t.path||t.file):[]].filter(Boolean).slice(0,3);if(i.length>0)return`${n} -> ${r}: ${i.length} matches: ${i.join(", ")}`;const l=o?.summary||o?.note||o?.error||o?.path||o?.ok;if(void 0!==l)return`${n} -> ${r}: ${String(l).replace(/\s+/g," ").slice(0,140)}`}}catch{}return`${n} -> ${r}: ${(s.split(/\r?\n/).find(t=>t.trim())||s).replace(/\s+/g," ").slice(0,160)}`}(s,t.toolResult.status):s;return{toolResult:{toolUseId:t.toolResult.toolUseId,status:t.toolResult.status,content:[{text:this.clampText(o,"current"===e?4*this.toolResultTokenBudget:200)}]}}}return t}trimMessageToTokenBudget(t,e){let s=Math.max(200,4*e);const o=[];for(const e of t.content){if("text"in e){const t=this.clampText(e.text,s);s-=t.length,o.push({text:t})}else if("toolResult"in e){const t=e.toolResult.content.map(t=>"text"in t?t.text:"").filter(Boolean).join("\n"),n=this.clampText(t,s);s-=n.length,o.push({toolResult:{toolUseId:e.toolResult.toolUseId,status:e.toolResult.status,content:[{text:n}]}})}else o.push(e);if(s<=80)break}return{role:t.role,content:o.length?o:[{text:"[context trimmed]"}]}}messageFromText(t,e){return{role:t,content:[{text:e}]}}clampText(t,e){if(t.length<=e)return t;const s=Math.floor((e-80)/2),o=t.slice(0,s),n=t.slice(-s);return`${o}\n...[context trimmed: ${t.length-e} chars omitted]...\n${n}`}}export function estimateTokens(t){return Math.ceil(String(t||"").length/4)}export function estimateTokensForMessage(t){return estimateTokens(JSON.stringify(t))}export function estimateCharsForMessage(t){return JSON.stringify(t).length}
@@ -0,0 +1 @@
1
+ import o from"node:os";import n from"node:path";export const DAEMON_DIR=n.join(o.homedir(),".mesh");export const DAEMON_SOCKET_PATH=n.join(DAEMON_DIR,"daemon.sock");export const DAEMON_PID_PATH=n.join(DAEMON_DIR,"daemon.pid");export const DAEMON_STATE_PATH=n.join(DAEMON_DIR,"daemon-state.json");
package/dist/daemon.js ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ async function t(){await o.mkdir(l,{recursive:!0,mode:448}),await o.rm(m,{force:!0}).catch(()=>{}),await o.writeFile(p,String(process.pid),{encoding:"utf8",mode:384}),s(0,10);const t=await u(),e=new d(t.agent.workspaceRoot,t),i={startedAt:(new Date).toISOString(),updatedAt:(new Date).toISOString(),workspaceRoot:t.agent.workspaceRoot,status:"idle",runs:0,lastTasks:[]};await n(i);const g=async()=>{if(!function(){const t=.25*r.cpus().length,[e]=r.loadavg();if(e>t)return!1;if("darwin"!==process.platform)return!0;const n=`${c("pmset",["-g","batt"],{encoding:"utf8"}).stdout??""}`;return!/Battery Power/i.test(n)}())return i.status="paused",i.updatedAt=(new Date).toISOString(),void await n(i);i.status="running",i.updatedAt=(new Date).toISOString();const t=[];try{await e.callTool("workspace.predictive_repair",{action:"analyze"}),t.push("predictive_repair"),await e.callTool("workspace.digital_twin",{action:"build"}),t.push("digital_twin"),await e.callTool("workspace.engineering_memory",{action:"learn"}),t.push("engineering_memory"),i.runs+=1,i.lastTasks=t,i.lastDigest=`While you were away: refreshed ${t.join(", ")} at ${(new Date).toLocaleString()}.`,i.lastError=void 0}catch(t){i.lastError=t.message}finally{i.status="idle",i.updatedAt=(new Date).toISOString(),await n(i)}};let w=!1,f=null;const y=t=>{f=setTimeout(async()=>{await g(),w||y(9e5)},t),f.unref()};y(0);const h=a.createServer(t=>{let n="";t.on("data",t=>{n+=t.toString()}),t.on("end",async()=>{const a=function(t){try{const e=JSON.parse(t);return e?.action?e:null}catch{return null}}(n),r=await async function(t,e){if(!t)return{ok:!1,action:"ping",message:"Invalid request payload."};if("ping"===t.action)return{ok:!0,action:"ping",message:"alive"};if("status"===t.action)return{ok:!0,action:"status",state:e};if("digest"===t.action)return{ok:!0,action:"digest",digest:e.lastDigest||`While you were away: daemon is active, ${e.runs} maintenance run(s) completed.`};if("stop"===t.action)return{ok:!0,action:"stop",message:"Stopping daemon."};return{ok:!1,action:t.action,message:"Unsupported action."}}(a,i);t.write(JSON.stringify(r)),t.end(),"stop"===a?.action&&(w=!0,f&&clearTimeout(f),h.close(),await e.close(),await o.rm(m,{force:!0}).catch(()=>{}),process.exit(0))})});await new Promise((t,e)=>{h.once("error",e),h.listen(m,()=>{o.chmod(m,384).finally(t)})})}async function e(t){return new Promise((e,n)=>{const o=a.createConnection(m,()=>{o.write(JSON.stringify(t)),o.end()});let r="";o.on("data",t=>{r+=t.toString()}),o.on("error",n),o.on("end",()=>{try{e(JSON.parse(r))}catch{e({ok:!1,action:t.action,message:"Invalid daemon response."})}})})}async function n(t){await o.writeFile(g,JSON.stringify(t,null,2),{encoding:"utf8",mode:384})}import{promises as o}from"node:fs";import a from"node:net";import r from"node:os";import{setPriority as s}from"node:os";import{spawn as i,spawnSync as c}from"node:child_process";import{loadConfig as u}from"./config.js";import{LocalToolBackend as d}from"./local-tools.js";import{DAEMON_DIR as l,DAEMON_PID_PATH as p,DAEMON_SOCKET_PATH as m,DAEMON_STATE_PATH as g}from"./daemon-protocol.js";const w={action:"ping"};export async function runDaemonCli(n){const a=(n[0]||"status").toLowerCase();return"run"===a?(await t(),0):"start"===a?async function(){const t=await e(w).catch(()=>null);if(t?.ok)return process.stdout.write("Mesh daemon already running.\n"),0;await o.mkdir(l,{recursive:!0,mode:448});const n=new URL("./daemon.js",import.meta.url).pathname;return i(process.execPath,[n,"run"],{detached:!0,stdio:"ignore"}).unref(),process.stdout.write("Mesh daemon start requested.\n"),0}():"status"===a||"digest"===a||"stop"===a?e({action:a}).then(t=>(process.stdout.write(JSON.stringify(t,null,2)+"\n"),t.ok?0:1)):(process.stderr.write("Usage: mesh-daemon [start|status|digest|stop]\n"),1)}import.meta.url===`file://${process.argv[1]}`&&runDaemonCli(process.argv.slice(2)).then(t=>{process.exitCode=t}).catch(t=>{process.stderr.write(`mesh-daemon fatal: ${t.message}\n`),process.exitCode=1});
@@ -0,0 +1 @@
1
+ @import "https://fonts.googleapis.com/css2?family=Fira+Code:wght@400;500;600;700&family=Fira+Sans:wght@400;500;600;700;800&display=swap";:root{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark;--bg:#080b0e;--panel:#10161b;--panel-2:#151d23;--panel-3:#1b252c;--line:#24323b;--line-2:#354653;--text:#edf7f4;--muted:#9dadb6;--dim:#687983;--green:#25d0b5;--green-soft:#25d0b529;--amber:#f0a942;--amber-soft:#f0a94229;--red:#ff6464;--red-soft:#ff646426;--blue:#8aa3ff;--radius:8px;--shadow:0 18px 44px #00000047;font-family:Fira Sans,ui-sans-serif,system-ui,sans-serif}*{box-sizing:border-box}html,body,#root{min-height:100%;margin:0}body{color:var(--text);background:radial-gradient(circle at 20% 0,#25d0b51a,#0000 34%),linear-gradient(#090d10 0%,#06080a 100%)}button,input,select{font:inherit}button{color:inherit}button:focus-visible,input:focus-visible,select:focus-visible{outline-offset:2px;outline:2px solid #25d0b5b8}.boot-shell{place-items:center;min-height:100vh;padding:24px;display:grid}.boot-panel{border:1px solid var(--line);border-radius:var(--radius);background:var(--panel);width:min(420px,100%);box-shadow:var(--shadow);padding:28px}.boot-icon{color:var(--green)}.boot-panel h1{margin:12px 0 6px;font-size:26px}.boot-panel p{color:var(--muted);margin:0 0 18px}.dashboard-shell{grid-template-rows:64px 116px minmax(0,1fr);gap:10px;min-height:100vh;padding:12px;display:grid}.topbar,.metric-card,.health-card,.context-card,.panel,.graph-stage,.file-rail{border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);background:#10161beb}.topbar{grid-template-columns:260px minmax(0,1fr) auto;align-items:center;display:grid;overflow:hidden}.brand-block{border-right:1px solid var(--line);align-content:center;height:100%;padding:0 18px;display:grid}.brand-block span{color:var(--green);text-transform:uppercase;font:700 11px Fira Code,monospace}.brand-block strong{font-size:18px;line-height:1.1}.workspace-path{text-overflow:ellipsis;white-space:nowrap;min-width:0;color:var(--muted);border:1px solid var(--line);background:#0b1013;border-radius:999px;margin:0 16px;padding:8px 12px;font:600 12px Fira Code,monospace;overflow:hidden}.top-actions{border-left:1px solid var(--line);align-items:center;gap:10px;padding:0 14px;display:flex}.socket-pill{border:1px solid var(--line-2);min-height:32px;color:var(--muted);text-transform:uppercase;border-radius:999px;align-items:center;gap:7px;padding:0 11px;font:700 11px Fira Code,monospace;display:inline-flex}.socket-pill.live{color:var(--green);background:var(--green-soft);border-color:#25d0b56b}.socket-pill.error,.socket-pill.closed{color:var(--red);background:var(--red-soft);border-color:#ff64645c}.icon-button{border:1px solid var(--line-2);background:var(--panel-2);cursor:pointer;border-radius:7px;place-items:center;width:34px;height:34px;display:grid}.metric-strip{grid-template-columns:1.25fr repeat(4,minmax(0,1fr));gap:10px;min-height:0;display:grid}.metric-card,.context-card,.health-card{min-width:0;padding:15px 16px;overflow:hidden}.metric-label{color:var(--muted);text-transform:uppercase;align-items:center;gap:8px;font:700 10px Fira Code,monospace;display:flex}.metric-card strong,.context-card strong{margin-top:8px;font:800 30px Fira Code,monospace;display:block}.metric-card p,.context-card p{color:var(--muted);white-space:nowrap;text-overflow:ellipsis;margin:2px 0 0;overflow:hidden}.metric-card.ok strong{color:var(--green)}.metric-card.warn strong{color:var(--amber)}.health-card{grid-template-columns:82px minmax(0,1fr);align-items:center;gap:12px;display:grid}.dial{--score:0;background:conic-gradient(var(--green) calc(var(--score) * 1%), #25333b 0);border-radius:50%;place-items:center;width:76px;height:76px;display:grid;position:relative}.health-card.warn .dial{background:conic-gradient(var(--amber) calc(var(--score) * 1%), #25333b 0)}.health-card.danger .dial{background:conic-gradient(var(--red) calc(var(--score) * 1%), #25333b 0)}.dial:after{content:"";background:var(--panel);border-radius:50%;position:absolute;inset:8px}.dial span{z-index:1;font:800 24px Fira Code,monospace;position:relative}.health-card p{color:var(--muted);margin:0}.health-card strong{text-transform:capitalize;margin:3px 0;font-size:20px;display:block}.health-card span{color:var(--muted)}.budget-track{background:#25333b;border-radius:99px;height:7px;margin-top:8px;overflow:hidden}.budget-track span{background:var(--green);height:100%;display:block}.work-grid{grid-template-columns:286px minmax(460px,1fr) 340px;gap:10px;min-height:0;display:grid}.left-rail{flex-direction:column;gap:10px;min-height:0;display:flex}.panel{min-height:0;padding:14px}.panel.fill{flex-direction:column;flex:1;display:flex;overflow:hidden}.panel-head{justify-content:space-between;align-items:center;gap:12px;margin-bottom:12px;display:flex}.panel-head h3{color:var(--muted);text-transform:uppercase;margin:0;font:700 11px Fira Code,monospace}.panel-head span{color:var(--dim);font:600 11px Fira Code,monospace}.mix-list{gap:9px;display:grid}.mix-row{color:var(--muted);grid-template-columns:54px minmax(0,1fr) 44px;align-items:center;gap:8px;font:600 12px Fira Code,monospace;display:grid}.mix-row div{background:#26343d;border-radius:99px;height:7px;overflow:hidden}.mix-row i{height:100%;display:block}.mix-row b{color:var(--text);text-align:right}.risk-list{gap:7px;display:grid;overflow:auto}.risk-list button,.file-list button{text-align:left;border:1px solid var(--line);color:var(--text);cursor:pointer;background:#0c1115;border-radius:7px}.risk-list button{padding:9px 42px 9px 10px;position:relative}.risk-list button.active,.file-list button.active{background:var(--green-soft);border-color:#25d0b599}.risk-list span,.risk-list small{text-overflow:ellipsis;display:block;overflow:hidden}.risk-list span{font:700 12px Fira Code,monospace}.risk-list small{color:var(--muted);margin-top:3px}.risk-list b{color:var(--amber);position:absolute;top:10px;right:10px}.command-list{gap:8px;display:grid}.command-item{grid-template-columns:minmax(0,1fr) 34px;align-items:center;gap:8px;display:grid}.command-item strong,.command-item span,.command-item em{display:block}.command-item strong{color:var(--green);font:700 12px Fira Code,monospace}.command-item span,.command-item em{color:var(--muted);margin-top:2px;font-size:12px;font-style:normal}.command-item .error-text{color:var(--red)}.command-item button{border:1px solid var(--line-2);background:var(--panel-2);cursor:pointer;border-radius:7px;place-items:center;width:34px;height:34px;display:grid}.command-item button:disabled{opacity:.55;cursor:default}.graph-stage{grid-template-rows:58px minmax(0,1fr) 88px;min-height:0;display:grid;overflow:hidden}.stage-toolbar{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;padding:0 14px;display:flex}.stage-toolbar strong,.stage-toolbar span{display:block}.stage-toolbar strong{font-size:17px}.stage-toolbar span{color:var(--muted);font:600 11px Fira Code,monospace}.segmented{border:1px solid var(--line-2);border-radius:7px;display:flex;overflow:hidden}.segmented button{color:var(--muted);cursor:pointer;background:0 0;border:0;padding:7px 12px}.segmented button.active{background:var(--green-soft);color:var(--green)}.dependency-canvas{cursor:crosshair;width:100%;height:100%;display:block}.package-row{border-top:1px solid var(--line);flex-wrap:wrap;align-content:flex-start;gap:7px;padding:12px 14px;display:flex;overflow:auto}.package-row span,.pill-wrap span{border:1px solid var(--line-2);color:var(--muted);background:#0c1115;border-radius:999px;padding:4px 8px;font:600 11px Fira Code,monospace}.package-row b{color:var(--text);margin-left:7px}.file-rail{grid-template-rows:auto auto 220px minmax(0,1fr);min-height:0;display:grid;overflow:hidden}.file-hero{border-bottom:1px solid var(--line);padding:14px}.eyebrow{color:var(--muted);text-transform:uppercase;margin:0;font:700 10px Fira Code,monospace}.file-hero h2{overflow-wrap:anywhere;margin:5px 0 2px;font:800 18px Fira Code,monospace}.file-hero p:last-of-type{color:var(--muted);overflow-wrap:anywhere;margin:0}.file-kpis{grid-template-columns:repeat(4,minmax(0,1fr));gap:6px;margin-top:12px;display:grid}.mini-kpi{border:1px solid var(--line);background:#0c1115;border-radius:7px;padding:7px 6px}.mini-kpi span{color:var(--dim);text-transform:uppercase;font:700 9px Fira Code,monospace;display:block}.mini-kpi b{margin-top:2px;font:800 18px Fira Code,monospace;display:block}.file-tools{border-bottom:1px solid var(--line);grid-template-columns:minmax(0,1fr) 96px;gap:8px;padding:11px 12px;display:grid}.file-tools label{border:1px solid var(--line-2);background:#0c1115;border-radius:7px;align-items:center;gap:7px;padding:0 9px;display:flex}.file-tools input,.file-tools select{width:100%;min-width:0;height:34px;color:var(--text);background:0 0;border:0}.file-tools select{border:1px solid var(--line-2);background:#0c1115;border-radius:7px;padding:0 8px}.file-list{border-bottom:1px solid var(--line);min-height:0;overflow:hidden}.file-list p{color:var(--dim);margin:0;padding:8px 12px;font:600 11px Fira Code,monospace}.file-list div{height:calc(100% - 31px);padding:0 8px 8px;overflow:auto}.file-list button{grid-template-columns:minmax(0,1fr) auto;gap:8px;width:100%;margin-bottom:5px;padding:7px 8px;display:grid}.file-list button.hot{box-shadow:inset 3px 0 0 var(--red)}.file-list span{text-overflow:ellipsis;white-space:nowrap;font:600 12px Fira Code,monospace;overflow:hidden}.file-list small{color:var(--dim)}.file-detail{min-height:0;padding:14px;overflow:auto}.detail-section{border-bottom:1px solid var(--line);padding:10px 0}.detail-section:first-child{padding-top:0}.detail-section h4{color:var(--dim);text-transform:uppercase;margin:0 0 8px;font:700 10px Fira Code,monospace}.balance-row{color:var(--muted);grid-template-columns:72px minmax(0,1fr) 34px;align-items:center;gap:8px;margin:7px 0;font:600 11px Fira Code,monospace;display:grid}.balance-row div{background:#25333b;border-radius:99px;height:7px;overflow:hidden}.balance-row i{background:var(--green);height:100%;display:block}.balance-row b{color:var(--text);text-align:right}.pill-wrap{flex-wrap:wrap;gap:6px;display:flex}.pill-wrap .pkg{color:var(--amber);background:var(--amber-soft);border-color:#f0a94252}.pill-wrap .risk{color:var(--red);background:var(--red-soft);border-color:#ff64645c}.quiet,.empty{color:var(--muted);margin:0}::-webkit-scrollbar{width:7px;height:7px}::-webkit-scrollbar-thumb{background:var(--line-2);border-radius:9px}@media (width<=1180px){.metric-strip{grid-template-columns:repeat(3,minmax(0,1fr))}.work-grid{grid-template-columns:250px minmax(360px,1fr) 310px}}@media (width<=920px){.dashboard-shell{grid-template-rows:auto;min-height:auto}.topbar,.metric-strip,.work-grid{grid-template-columns:1fr}.topbar{gap:0}.brand-block,.top-actions{border:0;padding:12px 16px}.graph-stage{min-height:580px}.file-rail{min-height:760px}}