workspai 0.62.0 → 0.64.0

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 (98) hide show
  1. package/contracts/create-planner-capabilities.v1.json +251 -8
  2. package/contracts/studio-card-repair-capabilities.v1.json +65 -1
  3. package/contracts/workspace-intelligence/studio-blocker-handoff.v1.json +28 -0
  4. package/dist/analyze-NUGNB256.js +1 -0
  5. package/dist/{artifact-remediation-plan-HPNQTNJ2.js → artifact-remediation-plan-XIQNI35L.js} +1 -1
  6. package/dist/autopilot-release-TWJWSVVF.js +1 -0
  7. package/dist/capabilities-command-LHM3XIS6.js +1 -0
  8. package/dist/chunk-2VJUAKMS.js +2 -0
  9. package/dist/{chunk-O6R7SE6Y.js → chunk-3A23KJAQ.js} +1 -1
  10. package/dist/{chunk-GGOQHTZV.js → chunk-5B2GAZAC.js} +1 -1
  11. package/dist/{chunk-PPQL5UTI.js → chunk-6DAQ7PYT.js} +1 -1
  12. package/dist/{chunk-HS3DJMU5.js → chunk-6TBTMWNA.js} +1 -1
  13. package/dist/{chunk-46USUSIK.js → chunk-CCAXADKP.js} +26 -26
  14. package/dist/chunk-CJHWKXDN.js +1 -0
  15. package/dist/{chunk-NBJ6AP7K.js → chunk-CT4IODPG.js} +1 -1
  16. package/dist/{chunk-UZNACYV7.js → chunk-DK6JNE6K.js} +1 -1
  17. package/dist/{chunk-3VU7ROHY.js → chunk-DOXNVBX6.js} +1 -1
  18. package/dist/{chunk-A4BK7C7M.js → chunk-DWB2RRF4.js} +1 -1
  19. package/dist/{chunk-VDEFHP6I.js → chunk-FQSBOLM7.js} +1 -1
  20. package/dist/chunk-GQSRNUCU.js +105 -0
  21. package/dist/chunk-ISOOENLW.js +8 -0
  22. package/dist/chunk-J7RU5WR5.js +2 -0
  23. package/dist/{chunk-DIJGQUEV.js → chunk-JQLJBK5N.js} +1 -1
  24. package/dist/chunk-KANAJH65.js +681 -0
  25. package/dist/{chunk-JNPXLZA6.js → chunk-KJXMLBSY.js} +1 -1
  26. package/dist/{chunk-VRQLHCE2.js → chunk-KV6PS54A.js} +1 -1
  27. package/dist/{chunk-GPOZILMY.js → chunk-L22EABIC.js} +1 -1
  28. package/dist/{chunk-GPGEJVVO.js → chunk-NHTDPXTW.js} +1 -1
  29. package/dist/{chunk-KG3TUTXU.js → chunk-Q2WF7D5U.js} +1 -1
  30. package/dist/chunk-RGNCL5OB.js +1 -0
  31. package/dist/{chunk-TVCJKE2U.js → chunk-RSG2GJXT.js} +1 -1
  32. package/dist/{chunk-KCJ3VS6R.js → chunk-SFO5GVRT.js} +1 -1
  33. package/dist/{chunk-MWCKJOOU.js → chunk-TOYN76K4.js} +1 -1
  34. package/dist/chunk-U5WVR74V.js +1 -0
  35. package/dist/{chunk-W3HXTCSY.js → chunk-UXEO5QCF.js} +1 -1
  36. package/dist/{chunk-PKKP5H3T.js → chunk-VB6I52ZT.js} +3 -3
  37. package/dist/{chunk-QJCCZLOF.js → chunk-VRGEPPUB.js} +1 -1
  38. package/dist/chunk-VYDURWN7.js +1 -0
  39. package/dist/chunk-WRQWVSBJ.js +3 -0
  40. package/dist/{chunk-SS7NJMFL.js → chunk-WY4DOMEA.js} +1 -1
  41. package/dist/{chunk-ZCPT6KC3.js → chunk-XKDR5BGS.js} +6 -6
  42. package/dist/{chunk-E4LJ3PQD.js → chunk-ZGS5NKEO.js} +1 -1
  43. package/dist/chunk-ZH7CXQH3.js +94 -0
  44. package/dist/create-PWJDTKDN.js +1 -0
  45. package/dist/{doctor-MAPZ2ZCD.js → doctor-CGXY4IDE.js} +1 -1
  46. package/dist/{goal-lifecycle-7L5JFYOI.js → goal-lifecycle-BRFFTIU2.js} +1 -1
  47. package/dist/{goal-pack-SGHXUPMU.js → goal-pack-FG3QDNQH.js} +1 -1
  48. package/dist/index.d.ts +2 -1
  49. package/dist/index.js +161 -157
  50. package/dist/{pipeline-W2CKUZBS.js → pipeline-DF4UIHAD.js} +1 -1
  51. package/dist/{platform-capabilities-PR6YL4KC.js → platform-capabilities-DB4BZPTD.js} +1 -1
  52. package/dist/{project-agent-entry-66GTQQPX.js → project-agent-entry-IWUCV72J.js} +1 -1
  53. package/dist/{project-intelligence-lens-NWNWLJMB.js → project-intelligence-lens-PZPPSCUW.js} +1 -1
  54. package/dist/{project-test-coverage-E2Q4QL44.js → project-test-coverage-4S7MEQ6T.js} +1 -1
  55. package/dist/{pythonRapidkitExec-4YTAMLBD.js → pythonRapidkitExec-VAW5XE4Z.js} +1 -1
  56. package/dist/{verified-goal-AY5VU6LG.js → verified-goal-BBHZRYYH.js} +1 -1
  57. package/dist/{workspace-FSOLFNAJ.js → workspace-35Q2IXAR.js} +1 -1
  58. package/dist/{workspace-agent-sync-ZURWHL3H.js → workspace-agent-sync-FFNSW2PD.js} +1 -1
  59. package/dist/{workspace-context-DPDGFTWJ.js → workspace-context-IJ36ZP6G.js} +1 -1
  60. package/dist/{workspace-contract-3BWIRSVQ.js → workspace-contract-JS4LZZQZ.js} +1 -1
  61. package/dist/{workspace-explain-OU2PEVYO.js → workspace-explain-TITIT5XN.js} +1 -1
  62. package/dist/workspace-foundation-GMGDUMPR.js +1 -0
  63. package/dist/{workspace-graph-stream-XTSDKRLM.js → workspace-graph-stream-7UU2YVHC.js} +1 -1
  64. package/dist/{workspace-intelligence-625UN27X.js → workspace-intelligence-5NO4K5SC.js} +1 -1
  65. package/dist/{workspace-intelligence-runner-7RIOUCCM.js → workspace-intelligence-runner-FGEBFVVM.js} +1 -1
  66. package/dist/{workspace-knowledge-graph-3ZBPSAS7.js → workspace-knowledge-graph-RSDP2E36.js} +1 -1
  67. package/dist/workspace-knowledge-graph-snapshot-3FJHH5IK.js +1 -0
  68. package/dist/{workspace-mcp-serve-PYKYJIE6.js → workspace-mcp-serve-WUIQ2AE6.js} +1 -1
  69. package/dist/{workspace-model-ETCLINRB.js → workspace-model-OKY4CQ3X.js} +1 -1
  70. package/dist/{workspace-onboarding-RP3RZ3CC.js → workspace-onboarding-VS3YYNGK.js} +1 -1
  71. package/dist/{workspace-registry-summary-VSOBKAJG.js → workspace-registry-summary-MIDFG6EC.js} +1 -1
  72. package/dist/workspace-repair-engine-VUBT77Y7.js +3 -0
  73. package/dist/workspace-run-SSF6Z26G.js +1 -0
  74. package/dist/{workspace-verify-7ENGIY4S.js → workspace-verify-4R7QHUPO.js} +1 -1
  75. package/dist/{workspace-watch-2YFSB2WL.js → workspace-watch-IOPSHQS5.js} +1 -1
  76. package/docs/ci-workflows.md +1 -1
  77. package/docs/creating-workspaces-and-projects.md +49 -8
  78. package/docs/real-world-qualification.md +7 -0
  79. package/package.json +1 -1
  80. package/dist/analyze-K6JDMF5C.js +0 -1
  81. package/dist/autopilot-release-GNTOXKIL.js +0 -1
  82. package/dist/capabilities-command-VBLZXP2T.js +0 -1
  83. package/dist/chunk-7DSYI7YN.js +0 -3
  84. package/dist/chunk-BQCGULHR.js +0 -1
  85. package/dist/chunk-NA2NXX5P.js +0 -1
  86. package/dist/chunk-NVQUBUTY.js +0 -2
  87. package/dist/chunk-PTNLVI62.js +0 -16
  88. package/dist/chunk-PVXSIYLP.js +0 -1
  89. package/dist/chunk-RJIYCDVC.js +0 -1
  90. package/dist/chunk-SCP5LJNO.js +0 -2
  91. package/dist/chunk-TFOOSYGO.js +0 -8
  92. package/dist/chunk-TR6OFSJM.js +0 -691
  93. package/dist/chunk-VDFHUYAQ.js +0 -91
  94. package/dist/create-CKUQRSJF.js +0 -1
  95. package/dist/workspace-foundation-PPZKC36U.js +0 -1
  96. package/dist/workspace-knowledge-graph-snapshot-ZI4W735H.js +0 -1
  97. package/dist/workspace-repair-engine-L47XZXYZ.js +0 -3
  98. package/dist/workspace-run-QV5ER2VW.js +0 -1
@@ -0,0 +1,8 @@
1
+ import {a as a$1}from'./chunk-2647BYBC.js';import {l}from'./chunk-CJHWKXDN.js';import {d,c}from'./chunk-EWZZUQBR.js';import {a}from'./chunk-GR6442P7.js';import {f,e,i}from'./chunk-NZ3WZYD5.js';import p from'path';import {createHash}from'crypto';import {createReadStream}from'fs';import {execFile}from'child_process';import {promisify}from'util';import A from'fs-extra';import {parseAllDocuments}from'yaml';var pe=f.knowledgeGraph;var uo=e.knowledgeGraph;function mo(e$1,t){if(e$1.source.kind!=="workspace-model")throw new Error(`Workspace knowledge graph is not bound to the canonical workspace model (source: ${e$1.source.kind}).`);if(e$1.source.artifact!==e.model)throw new Error(`Workspace knowledge graph source artifact is ${e$1.source.artifact}; expected ${e.model}.`);if(e$1.source.hashAlgorithm!=="sha256")throw new Error(`Workspace knowledge graph source hash algorithm is ${e$1.source.hashAlgorithm}; expected sha256.`);let o=d(t);if(e$1.source.hash!==o)throw new Error("Workspace knowledge graph is stale: its source hash does not match the canonical workspace model.");if(e$1.workspace.name!==t.workspace.name||(e$1.workspace.profile??void 0)!==(t.workspace.profile??void 0))throw new Error("Workspace knowledge graph identity does not match the canonical workspace model.");let i=l(t);if(!i)throw new Error("Canonical workspace model has no project topology for the workspace knowledge graph.");let s=c=>({...c,generatedAt:"<ignored>"});if(c(s(e$1.projectTopology))!==c(s(i)))throw new Error("Workspace knowledge graph project topology does not match the canonical workspace model.")}var Ae=new Set([".git",".hg",".svn",".workspai",".rapidkit",".venv","venv","vendor","node_modules","dist","build","target","coverage",".next",".turbo",".cache",".vscode-test","graphify-out",".pytest_cache",".mypy_cache",".ruff_cache",".tox",".gradle","fixture","fixtures","__fixtures__","testdata"]),Ge=new Set(["test","tests","spec","specs","e2e","integration","integration-tests","integration_tests","__tests__","fixture","fixtures","__fixtures__","testdata"]),xe=new Set(["examples","samples","worked"]);function re(e,t){let o=p.relative(e,t).split(p.sep).map(s=>s.toLowerCase()),i=p.basename(t).toLowerCase();return o.some(s=>Ge.has(s))||/(?:\.test|\.spec|_test)\.[a-z0-9]+$/i.test(i)||/^test_.+\.[a-z0-9]+$/i.test(i)||/(?:tests?|specs?)\.(?:cs|fs|vb|java|kt|kts)$/i.test(i)}function ie(e,t){return p.relative(e,t).split(p.sep).map(o=>o.toLowerCase()).some(o=>xe.has(o))}function z(e,t){return re(e,t)||ie(e,t)}function oe(e,t){return p.relative(e,t).split(p.sep).some(o=>o.toLowerCase()==="generated")}var fe=new Set(["package.json","pyproject.toml","requirements.txt","Pipfile","go.mod","Cargo.toml","pom.xml","build.gradle","build.gradle.kts","composer.json","Gemfile","mix.exs","pubspec.yaml","Package.swift","CMakeLists.txt","deno.json","deno.jsonc","project.clj","deps.edn","build.sbt","BUILD","BUILD.bazel","WORKSPACE.bazel"]),qe=new Set(["get","put","post","delete","options","head","patch","trace"]),F=new Set([".c",".cc",".cpp",".cs",".dart",".ex",".exs",".go",".h",".hpp",".java",".cjs",".cts",".js",".jsx",".kt",".kts",".mjs",".mts",".php",".py",".r",".rb",".rs",".scala",".svelte",".swift",".ts",".tsx",".vue",".clj",".cljs",".fs",".fsx",".lua",".vb"]);function L(e,t){let o=p.extname(e).toLowerCase();return o===".h"&&t==="cpp"?"cpp":{".c":"c",".cc":"cpp",".cpp":"cpp",".cs":"csharp",".dart":"dart",".ex":"elixir",".exs":"elixir",".go":"go",".h":"c",".hpp":"cpp",".java":"java",".cjs":"javascript",".cts":"typescript",".js":"javascript",".jsx":"javascript",".kt":"kotlin",".kts":"kotlin",".mjs":"javascript",".mts":"typescript",".php":"php",".py":"python",".r":"r",".rb":"ruby",".rs":"rust",".scala":"scala",".svelte":"svelte",".swift":"swift",".ts":"typescript",".tsx":"typescript",".vue":"vue",".clj":"clojure",".cljs":"clojure",".fs":"fsharp",".fsx":"fsharp",".lua":"lua",".vb":"visual-basic"}[o]??o.slice(1)}function Ze(e,t){if(e.length<=t)return [...e];let o=new Map;for(let c of e){let r=L(c),a=o.get(r)??[];a.push(c),o.set(r,a);}let i=new Set,s=Math.max(1,Math.min(25,Math.floor(t/Math.max(o.size,1))));for(let c of [...o.values()])for(let r of c.slice(0,s))i.add(r);for(let c of e){if(i.size>=t)break;i.add(c);}return [...i].sort((c,r)=>c.localeCompare(r))}function Q(e,t,o){let i=[],s=e.split(/\r?\n/);for(let c=0;c<s.length&&i.length<o;c+=1)for(let r of t){let n=s[c].match(r.pattern)?.[1]?.trim();if(n){i.push({name:n,line:c+1,detail:r.detail});break}}return i}var He=[{pattern:/^\s*(?:export\s+)?(?:async\s+)?function\s+([A-Za-z_$][\w$]*)/,detail:"function"},{pattern:/^\s*(?:export\s+)?(?:abstract\s+)?(?:class|interface|enum|type)\s+([A-Za-z_$][\w$]*)/,detail:"type"},{pattern:/^\s*(?:export\s+)?(?:declare\s+)?(?:const|let|var)\s+([A-Za-z_$][\w$]*)/,detail:"value"},{pattern:/^\s*(?:async\s+)?def\s+([A-Za-z_]\w*)/,detail:"function"},{pattern:/^\s*class\s+([A-Za-z_]\w*)/,detail:"type"},{pattern:/^\s*func\s+(?:\([^)]*\)\s*)?([A-Za-z_]\w*)/,detail:"function"},{pattern:/^\s*type\s+([A-Za-z_]\w*)\s+/,detail:"type"},{pattern:/^\s*(?:public\s+|private\s+|protected\s+|internal\s+|abstract\s+|final\s+)*(?:class|interface|record|enum)\s+([A-Za-z_]\w*)/,detail:"type"},{pattern:/^\s*(?:public|protected|internal)\s+(?:(?:static|virtual|override|abstract|async|sealed|final|synchronized|native|unsafe|partial|extern|new)\s+)*(?:<[^>]+>\s*)?[A-Za-z_$][\w$<>,.?\[\]: ]*\s+([A-Za-z_$][\w$]*)\s*\(/,detail:"method"},{pattern:/^\s*(?:pub(?:\([^)]*\))?\s+)?(?:async\s+)?fn\s+([A-Za-z_]\w*)/,detail:"function"},{pattern:/^\s*(?:pub(?:\([^)]*\))?\s+)?(?:struct|trait|enum|type)\s+([A-Za-z_]\w*)/,detail:"type"},{pattern:/^\s*(?:public\s+|private\s+|protected\s+)?function\s+([A-Za-z_]\w*)/,detail:"function"},{pattern:/^\s*(?:class|module|struct|protocol|mixin)\s+([A-Za-z_]\w*)/,detail:"type"}],Se=[{pattern:/^\s*import(?:.+?from\s*)?["']([^"']+)["']/,detail:"import"},{pattern:/require\(["']([^"']+)["']\)/,detail:"require"}],_e=[{pattern:/^\s*from\s+([A-Za-z0-9_.]+)\s+import\s+/,detail:"import"},{pattern:/^\s*import\s+([A-Za-z0-9_.]+)(?:\s|$)/,detail:"import"}],Ve=[{pattern:/^\s*#\s*include\s*["<]([^">]+)[">]/,detail:"include"}],Je=[{pattern:/^\s*use\s+([A-Za-z0-9_:*.-]+)/,detail:"use"}],Ue=[{pattern:/^\s*import\s+(?:static\s+)?([A-Za-z0-9_.*]+)\s*;?/,detail:"import"}],Ye=[{pattern:/^\s*(?:global\s+)?using\s+([A-Za-z0-9_.]+)/,detail:"using"}],Xe=[{pattern:/^\s*import\s+(?:[A-Za-z0-9_.]+\s+)?["']([^"']+)["']/,detail:"import"}],We=[{pattern:/^\s*require(?:_relative)?\s+["']([^"']+)["']/,detail:"require"}],Qe=[{pattern:/^\s*use\s+([A-Za-z0-9_\\]+)/,detail:"use"}],et=[{pattern:/^\s*(?:alias|import|require|use)\s+([A-Za-z0-9_.]+)/,detail:"import"}],tt=[{pattern:/^\s*import\s+["']([^"']+)["']/,detail:"import"}],ot=[{pattern:/\brequire\s*\(?\s*["']([^"']+)["']/,detail:"require"}],st=[{pattern:/^\s*(?:library|require)\s*\(\s*["']?([^"')\s]+)["']?/,detail:"import"}],rt=[...Se,..._e,{pattern:/^\s*(?:import|using|use)\s+([A-Za-z0-9_:.*\\/.-]+)/,detail:"import"},...We];function it(e){let t=p.extname(e).toLowerCase();return [".cjs",".cts",".js",".jsx",".mjs",".mts",".ts",".tsx",".vue",".svelte"].includes(t)?Se:t===".py"?_e:[".c",".cc",".cpp",".h",".hpp"].includes(t)?Ve:t===".rs"?Je:[".java",".kt",".kts",".scala"].includes(t)?Ue:[".cs",".fs",".fsx",".vb"].includes(t)?Ye:t===".go"?Xe:t===".rb"?We:t===".php"?Qe:[".ex",".exs"].includes(t)?et:t===".dart"?tt:t===".lua"?ot:t===".r"?st:rt}function nt(e,t,o,i,s){let c=p.extname(e).toLowerCase()===".py",r=[];if(c){let n=t.match(/^\.+/)?.[0].length??0,d=n>0?p.dirname(e):p.resolve(i??"");for(let f=1;f<n;f+=1)d=p.dirname(d);let l=t.slice(n).replace(/\./g,p.sep);r.push(l?p.join(d,l):d);}else if(t.startsWith("."))r.push(p.resolve(p.dirname(e),t));else if(s==="include")r.push(p.resolve(p.dirname(e),t)),i&&r.push(p.resolve(i,t));else return null;let a=new Set;for(let n of r){a.add(n);let d=p.extname(n).toLowerCase(),l=F.has(d);if(c&&(a.add(`${n}.py`),a.add(p.join(n,"__init__.py"))),l){let f=n.slice(0,-d.length);if([".js",".jsx",".mjs"].includes(d))for(let u of [".ts",".tsx",".js",".jsx",".mjs"])a.add(`${f}${u}`);}else for(let f of F)a.add(`${n}${f}`),a.add(p.join(n,`index${f}`));}return [...a].find(n=>o.has(p.resolve(n)))??null}function at(e,t){let o=t.trimStart(),i=p.extname(e).toLowerCase();return [".py",".rb",".sh",".bash",".zsh"].includes(i)?o.startsWith("#"):[".sql",".lua",".hs"].includes(i)?o.startsWith("--"):o.startsWith("//")||o.startsWith("/*")||o.startsWith("*")}function ct(e,t){if(p.extname(e).toLowerCase()!==".py")return t;let o=null;return t.split(/\r?\n/).map(i=>{let s=0,c="";for(;s<i.length;){if(o){let l=i.indexOf(o,s);if(l<0)return c;s=l+3,o=null;continue}let r=i.indexOf("'''",s),a=i.indexOf('"""',s),n=i.indexOf("#",s),d=r<0?a:a<0?r:Math.min(r,a);if(n>=0&&(d<0||n<d)){c+=i.slice(s,n);break}if(d<0){c+=i.slice(s);break}c+=i.slice(s,d),o=i.startsWith("'''",d)?"'''":'"""',s=d+3;}return c}).join(`
2
+ `)}function dt(e,t){if(![".js",".jsx",".mjs",".ts",".tsx"].includes(p.extname(e).toLowerCase()))return t;let o=false,i=false;return t.split(/\r?\n/).map(s=>{let c="",r=null,a=false;for(let n=0;n<s.length;n+=1){let d=s[n],l=s[n+1];if(o){c+=" ",d==="*"&&l==="/"&&(c+=" ",n+=1,o=false);continue}if(i){c+=" ",d==="`"&&!a&&(i=false),a=d==="\\"&&!a,d!=="\\"&&(a=false);continue}if(r){c+=d,d===r&&!a&&(r=null),a=d==="\\"&&!a,d!=="\\"&&(a=false);continue}if(d==="/"&&l==="/")return c.padEnd(s.length," ");if(d==="/"&&l==="*"){c+=" ",n+=1,o=true;continue}if(d==="`"){c+=" ",i=true,a=false;continue}(d==="'"||d==='"')&&(r=d),c+=d;}return c}).join(`
3
+ `)}function lt(e,t){return dt(e,ct(e,t))}var pt=[{pattern:/@(?:Get|Post|Put|Delete|Patch|Options|Head)\s*\(\s*["']([^"']*)["']/i,detail:"decorated route"},{pattern:/\b(?:app|router|server|api|route|fastify|fiber)\.(?:get|post|put|delete|patch|options|head)\s*\(\s*["']([^"']+)["']/i,detail:"router route"},{pattern:/@(?:GetMapping|PostMapping|PutMapping|DeleteMapping|PatchMapping|RequestMapping)\s*\([^"']*["']([^"']*)["']/,detail:"mapped route"},{pattern:/\[Http(?:Get|Post|Put|Delete|Patch)\s*\(\s*["']([^"']*)["']/i,detail:"HTTP route"},{pattern:/^\s*(?:get|post|put|delete|patch)\s+["']([^"']+)["']/i,detail:"HTTP route"}];function V(e){return createHash("sha256").update(e).digest("hex")}function E(e,t){return `wkg:${e}:${V(`${e}\0${t}`).slice(0,20)}`}function T(e){return e.replace(/\\/g,"/")}function x(e){let t=T(e).replace(/^\.\//,"");return !t||t.startsWith("/")||/^[A-Za-z]:\//.test(t)||t.split("/").includes("..")?"unknown":t}function $(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function P(e){return typeof e=="string"&&e.trim()?e.trim():void 0}function K(e){if(Array.isArray(e))return e.filter(o=>typeof o=="string").map(o=>o.trim()).filter(Boolean).sort();let t=$(e);return t?Object.keys(t).map(o=>o.trim()).filter(Boolean).sort():[]}function ft(e){if(Array.isArray(e))return e.map(o=>typeof o=="string"?o.split("=",1)[0]?.trim():"").filter(o=>!!o).sort();let t=$(e);return t?Object.keys(t).sort():[]}function ut(e){return Object.fromEntries(Object.entries(e).filter(t=>t[1]!==void 0).sort(([t],[o])=>t.localeCompare(o)))}async function q(e,t){let o=[],i=[e],s=0;for(;s<i.length&&o.length<t;){let c=i[s++],r;try{r=await A.readdir(c,{withFileTypes:true});}catch{continue}r.sort((a,n)=>a.name.localeCompare(n.name));for(let a$1 of r){if(o.length>=t)break;if(a$1.isSymbolicLink())continue;let n=p.join(c,a$1.name);a$1.isDirectory()?!Ae.has(a$1.name)&&!a(a$1.name)&&i.push(n):a$1.isFile()&&o.push(n);}}return o.sort((c,r)=>c.localeCompare(r))}async function Ke(e){return new Promise(t=>{let o=createHash("sha256"),i=createReadStream(e);i.on("data",s=>o.update(s)),i.on("error",s=>{t(`unreadable:${s.code??"unknown"}`);}),i.on("end",()=>t(o.digest("hex")));})}var mt=promisify(execFile);async function M(e,t){let o=await mt("git",t,{cwd:e,encoding:"buffer",maxBuffer:268435456,windowsHide:true});return Buffer.isBuffer(o.stdout)?o.stdout:Buffer.from(o.stdout)}function gt(){return [".",...[...Ae].sort((e,t)=>e.localeCompare(t)).map(e=>`:(exclude,glob)**/${e}/**`)]}async function ht(e){try{let t=(await M(e.root,["rev-parse","--show-prefix"])).toString("utf8").trim().replace(/\\/gu,"/"),o=t?`${t.replace(/^\/+|\/+$/gu,"")}/`:"";if(p.posix.isAbsolute(o)||o==="../"||o.startsWith("../")||o.includes("/../"))return null;let i=gt(),[s,c,r,a,n,d]=await Promise.all([M(e.root,["ls-files","--full-name","-s","--",...i]),M(e.root,["diff","--no-ext-diff","--no-textconv","--binary","HEAD","--",...i]),M(e.root,["ls-files","--full-name","--others","--exclude-standard","-z","--",...i]),M(e.root,["ls-files","--full-name","--others","--ignored","--exclude-standard","-z","--",...i]),M(e.root,["ls-files","-v","--",...i]),M(e.root,["ls-files","--full-name","-s","--",...i])]);if(n.toString("utf8").split(/\r?\n/u).some(y=>/^[a-z] /u.test(y)))return null;let l=e.files.map(y=>{let m=T(p.relative(e.root,y));return `${o}${m}`});if(d.toString("utf8").split(/\r?\n/u).filter(y=>y.startsWith("160000 ")).map(y=>y.split(" ",2)[1]).filter(y=>!!y).map(y=>y.replace(/\\/gu,"/").replace(/\/$/u,"")).some(y=>l.some(m=>m.startsWith(`${y}/`))))return null;let u=new Set(l),v=Buffer.concat([r,a]).toString("utf8").split("\0").filter(Boolean).map(y=>y.replace(/\\/gu,"/")).filter(y=>u.has(y)),g=await Te([...new Set(v)].sort((y,m)=>y.localeCompare(m)),16,async y=>{let m=o?y.slice(o.length):y;return {path:m,hash:await Ke(p.resolve(e.root,...m.split("/").filter(Boolean)))}}),w=createHash("sha256");w.update(`git-worktree-v2\0${e.kind}\0${e.id}\0${e.fileLimit}\0`),w.update(s),w.update(createHash("sha256").update(c).digest());for(let y of g)w.update(`${y.path}\0${y.hash}\0`);return {kind:e.kind,id:e.id,strategy:"git-worktree-v2",hash:w.digest("hex"),fileCount:e.files.length,fileLimit:e.fileLimit,truncated:e.files.length>=e.fileLimit}}catch{return null}}async function Te(e,t,o){let i=new Array(e.length),s=0,c=Array.from({length:Math.min(t,Math.max(e.length,1))},async()=>{for(;s<e.length;){let r=s++;i[r]=await o(e[r]);}});return await Promise.all(c),i}async function ue(e){let t=await ht(e);if(t)return t;let o=await Te(e.files,16,async s=>({path:T(p.relative(e.root,s)),hash:await Ke(s)}));o.sort((s,c)=>s.path.localeCompare(c.path));let i=createHash("sha256");i.update(`content-merkle-v1\0${e.kind}\0${e.id}\0${e.fileLimit}\0`);for(let s of o)i.update(`${s.path}\0${s.hash}\0`);return {kind:e.kind,id:e.id,strategy:"content-merkle-v1",hash:i.digest("hex"),fileCount:o.length,fileLimit:e.fileLimit,truncated:o.length>=e.fileLimit}}async function yt(e){let t=p.resolve(e.workspacePath),o=[...e.projects].sort((r,a)=>r.id.localeCompare(a.id)),i=e.inventories?.workspaceFiles??await q(t,e.workspaceFileLimit),s=await Promise.all([ue({kind:"workspace",id:"workspace",root:t,files:i,fileLimit:e.workspaceFileLimit}),...o.map(async r=>{let a=r.absolutePath?p.resolve(r.absolutePath):p.resolve(t,r.path),n=e.inventories?.projectFiles?.get(r.id)??await q(a,e.projectFileLimit);return ue({kind:"project",id:r.id,root:a,files:n,fileLimit:e.projectFileLimit})})]);s.sort((r,a)=>r.kind.localeCompare(a.kind)||r.id.localeCompare(a.id));let c=createHash("sha256");c.update("workspace-knowledge-graph-inputs.v1\0hybrid-git-content-v2\0");for(let r of s)c.update(`${r.kind}\0${r.id}\0${r.hash}\0${r.fileCount}\0${r.fileLimit}\0${r.truncated}\0`);return {schemaVersion:"workspace-knowledge-graph-inputs.v1",strategy:"hybrid-git-content-v2",hashAlgorithm:"sha256",hash:c.digest("hex"),scopes:s}}async function B(e){let t=await A.readFile(e,"utf8");if(e.toLowerCase().endsWith(".json")){let o=JSON.parse(t),i=$(o);return i?[i]:[]}return parseAllDocuments(t,{logLevel:"silent"}).map(o=>$(o.toJSON())).filter(o=>o!==null)}function J(e){return [...new Set([...e.workspaceFiles,...e.projects.flatMap(t=>e.filesByProject.get(t.id)??[])])].sort((t,o)=>t.localeCompare(o))}function me(e){return /^(?:openapi|swagger)(?:\.[^.]+)?\.(?:json|ya?ml)$/i.test(p.basename(e))}function ge(e){let t=p.basename(e).toLowerCase();return /\.(?:graphql|gql|proto)$/.test(t)||/^asyncapi(?:\.[^.]+)?\.(?:json|ya?ml)$/.test(t)}function he(e){let t=p.basename(e);return /^Dockerfile(?:\..+)?$/i.test(t)||/\.tf$/i.test(t)||t==="Chart.yaml"}function ye(e){return /(?:^|[\\/])(?:README|ARCHITECTURE|CONTRIBUTING|SECURITY)\.md$/i.test(e)}function vt(e,t){let o=T(p.relative(e,t));return /^\.github\/workflows\/.+\.ya?ml$/i.test(o)||/^(?:\.gitlab-ci\.ya?ml|azure-pipelines\.ya?ml|Jenkinsfile|bitbucket-pipelines\.ya?ml|\.woodpecker\.ya?ml)$/i.test(o)||/^\.circleci\/config\.ya?ml$/i.test(o)}function ve(e,t){let o=T(p.relative(e,t));return /(?:^|\/)(?:adr|adrs|decisions)(?:\/).+\.md$/i.test(o)||/(?:^|\/)ADR[-_0-9].+\.md$/i.test(o)}async function ke(e){let t=new Set;for(let o of [e.workspacePath,...e.projects.map(i=>i.root)])for(let i of ["compose.yml","compose.yaml","docker-compose.yml","docker-compose.yaml"]){let s=p.join(o,i);await A.pathExists(s)&&t.add(s);}return [...t].sort((o,i)=>o.localeCompare(i))}async function be(e){let o=[e.workspacePath,...e.projects.map(s=>s.root)].flatMap(s=>[p.join(s,"CODEOWNERS"),p.join(s,".github","CODEOWNERS"),p.join(s,"docs","CODEOWNERS")]),i=await Promise.all(o.map(async s=>await A.pathExists(s)?s:null));return [...new Set(i.filter(s=>!!s))].sort((s,c)=>s.localeCompare(c))}function we(e){let t=[{root:e.workspacePath,files:e.workspaceFiles},...e.projects.map(o=>({root:o.root,files:e.filesByProject.get(o.id)??[]}))];return [...new Set(t.flatMap(o=>o.files.filter(i=>vt(o.root,i))))].sort((o,i)=>o.localeCompare(i))}async function Pe(e){let t=[];for(let o of J(e))if(/\.ya?ml$/i.test(o))try{(await B(o)).some(s=>{let c=$(s.metadata);return !!(P(s.apiVersion)&&P(s.kind)&&P(c?.name))})&&t.push(o);}catch{}return t.sort((o,i)=>o.localeCompare(i))}function N(e,t){let o=p.resolve(t);return e.filter(i=>o===i.root||o.startsWith(`${i.root}${p.sep}`)).sort((i,s)=>s.root.length-i.root.length)[0]??null}var se=class{constructor(t,o,i){this.workspacePath=t;this.now=o;this.workspaceName=i;}workspacePath;now;workspaceName;entities=new Map;relations=new Map;proofs=new Map;providers=[];diagnostics=[];contentHashes=new Map;attributeConflicts=new Set;emptyLabelDiagnostics=new Set;artifactPath(t,o){if(o){let i=T(p.relative(o.root,t));return x(p.posix.join(o.artifactPrefix,i))}return x(p.relative(this.workspacePath,t))}async addProof(t){let o;if(t.absolutePath){if(!this.contentHashes.has(t.absolutePath))try{this.contentHashes.set(t.absolutePath,V(await A.readFile(t.absolutePath)));}catch{this.contentHashes.set(t.absolutePath,null);}o=this.contentHashes.get(t.absolutePath)??void 0;}let i=x(t.artifact),s=E("proof",[t.provider,i,t.pointer??"",t.line??"",t.detail??""].join("\0"));return this.proofs.has(s)||this.proofs.set(s,{id:s,provider:t.provider,artifact:i,...t.pointer?{pointer:t.pointer}:{},...t.line?{line:t.line}:{},...t.column?{column:t.column}:{},...o?{contentHash:o}:{},observedAt:this.now.toISOString(),derivation:t.derivation??"extracted",trust:t.trust??"observed",confidence:t.confidence??"high",freshness:"fresh",...t.detail?{detail:t.detail}:{}}),s}addEntity(t){let o=E(t.kind,t.key),i=ut(t.attributes??{}),s=this.entities.get(o),c=t.label.trim(),r=c||s?.label||t.key.trim()||t.kind;!c&&!this.emptyLabelDiagnostics.has(o)&&(this.emptyLabelDiagnostics.add(o),this.diagnostics.push({code:"graph.knowledge.empty_label_normalized",severity:"warning",message:`An empty ${t.kind} label was normalized to ${r}.`,entityIds:[o],recommendation:"Inspect the provider proof and preserve a non-empty source identifier before publishing the entity."}));let a={...s?.attributes??{}};for(let[l,f]of Object.entries(i)){if(l in a&&JSON.stringify(a[l])!==JSON.stringify(f)){let u=`${o}\0${l}`;this.attributeConflicts.has(u)||(this.attributeConflicts.add(u),this.diagnostics.push({code:"graph.knowledge.attribute_conflict",severity:"warning",message:`Conflicting ${l} values were observed for ${t.kind} ${r}.`,entityIds:[o],recommendation:"Inspect the entity proof paths and make the authoritative source explicit."}));continue}a[l]=f;}let n=[...new Set([...s?.identity.aliases??[],...t.aliases??[]].map(l=>l.trim()).filter(Boolean))].sort(),d=[...new Set([...s?.proofIds??[],...t.proofIds??[]])].sort();return this.entities.set(o,{id:o,kind:t.kind,label:r,...t.projectId?{projectId:t.projectId}:{},identity:{key:t.key,scope:t.projectId?"project":"workspace",aliases:n,fingerprint:V(JSON.stringify({kind:t.kind,key:t.key,attributes:a}))},attributes:a,proofIds:d}),o}addRelation(t){let o=E("relation",`${t.from}\0${t.kind}\0${t.to}`),i=this.relations.get(o),s=[...new Set([...i?.proofIds??[],...t.proofIds])].sort(),c=new Set(s.map(n=>this.proofs.get(n)?.provider).filter(Boolean)).size,r=t.trust??i?.trust??"observed",a=c>=2&&r!=="ambiguous"?"corroborated":r;return this.relations.set(o,{id:o,from:t.from,to:t.to,kind:t.kind,derivation:t.derivation??i?.derivation??"extracted",trust:a,confidence:a==="corroborated"?"high":t.confidence??i?.confidence??"high",proofIds:s}),o}};function ee(e){let t=[],o=null;for(let i of e.split(/\r?\n/)){let s=i.match(/^\s*\[\[([^\]]+)\]\]\s*(?:#.*)?$/)?.[1]?.trim()??i.match(/^\s*\[([^\]]+)\]\s*(?:#.*)?$/)?.[1]?.trim();if(s){o&&t.push({name:o.name,body:o.lines.join(`
4
+ `)}),o={name:s,lines:[]};continue}o?.lines.push(i);}return o&&t.push({name:o.name,body:o.lines.join(`
5
+ `)}),t}function kt(e){return [...e.matchAll(/["']([^"']+)["']/g)].map(t=>t[1])}function je(e,t){let o=t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),i=new RegExp(`^\\s*${o}\\s*=\\s*\\[`,"m").exec(e);if(!i)return [];let s=i.index+i[0].lastIndexOf("["),c=null,r=false;for(let a=s+1;a<e.length;a+=1){let n=e[a];if(c){n===c&&!r&&(c=null),r=n==="\\"&&!r,n!=="\\"&&(r=false);continue}if(n==="'"||n==='"'){c=n;continue}if(n==="]")return kt(e.slice(s+1,a))}return []}function $e(e){return e.trim().match(/^([A-Za-z0-9][A-Za-z0-9_.-]*)/)?.[1]??""}function ne(e){return e.replace(/\.(?:workspace|version|path|git|optional|features|default-features|package)$/,"")}function bt(e,t){let o=p.basename(e);try{if(o==="package.json"||o==="composer.json"){let r=JSON.parse(t);return {ecosystem:o==="package.json"?"npm":"composer",name:P(r.name),version:P(r.version),dependencies:[...K(r.dependencies),...K(r.devDependencies),...K(r.require),...K(r["require-dev"])].filter((a,n,d)=>d.indexOf(a)===n).sort(),metadata:o==="package.json"?{entrypoints:[P(r.main),P(r.module),P(r.types)].filter(a=>!!a),exports:$(r.exports)?Object.keys($(r.exports)).sort():P(r.exports)?["."]:[],executables:$(r.bin)?Object.keys($(r.bin)).sort():P(r.bin)?[P(r.name)??"default"]:[],runtimeConstraints:Object.entries($(r.engines)??{}).map(([a,n])=>`${a}:${String(n)}`).sort()}:void 0}}if(o==="deno.json"||o==="deno.jsonc"){let r=JSON.parse(t.replace(/\/\*[\s\S]*?\*\/|^\s*\/\/.*$/gm,""));return {ecosystem:"deno",name:P(r.name),version:P(r.version),dependencies:K(r.imports)}}}catch{}let i=r=>t.match(r)?.[1]?.trim();if(o==="pyproject.toml"){let a=ee(t).filter(({name:n})=>n==="project"||n==="project.optional-dependencies"||n==="dependency-groups"||n==="tool.poetry.dependencies"||/^tool\.poetry\.group\.[^.]+\.dependencies$/.test(n)).flatMap(({name:n,body:d})=>n==="project"?je(d,"dependencies").map($e):n==="project.optional-dependencies"||n==="dependency-groups"?[...d.matchAll(/^\s*(?:["']([^"']+)["']|([A-Za-z0-9_.-]+))\s*=\s*\[/gm)].flatMap(l=>je(d,l[1]??l[2])).map($e):[...d.matchAll(/^\s*(?:["']([^"']+)["']|([A-Za-z0-9_.-]+))\s*=/gm)].map(l=>l[1]??l[2]).filter(l=>l!=="python"));return {ecosystem:"python",name:i(/^(?:name)\s*=\s*["']([^"']+)["']/m),version:i(/^(?:version)\s*=\s*["']([^"']+)["']/m),dependencies:a.filter(Boolean).filter((n,d,l)=>l.indexOf(n)===d).sort(),metadata:{requiresPython:i(/^requires-python\s*=\s*["']([^"']+)["']/m)??"unknown"}}}if(o==="go.mod")return {ecosystem:"go",name:i(/^module\s+(\S+)/m),dependencies:[...t.matchAll(/^\s*([A-Za-z0-9_.~/-]+)\s+v\d+/gm)].map(r=>r[1]).sort(),metadata:{goVersion:i(/^go\s+(\S+)/m)??"unknown"}};if(o==="Cargo.toml"){let r=ee(t).filter(({name:a})=>/(?:^|\.)(?:dev-|build-)?dependencies$/.test(a)).map(({body:a})=>a).join(`
6
+ `);return {ecosystem:"cargo",name:i(/^name\s*=\s*["']([^"']+)["']/m),version:i(/^version\s*=\s*["']([^"']+)["']/m),dependencies:[...r.matchAll(/^\s*(?:["']([^"']+)["']|([A-Za-z0-9_.-]+))\s*=/gm)].map(a=>a[1]??a[2]).map(ne).filter((a,n,d)=>d.indexOf(a)===n).sort(),metadata:{edition:i(/^edition\s*=\s*["']([^"']+)["']/m)??"unknown",rustVersion:i(/^rust-version\s*=\s*["']([^"']+)["']/m)??"unknown",features:ee(t).find(({name:a})=>a==="features")?.body.match(/^\s*([A-Za-z0-9_.-]+)\s*=/gm)?.map(a=>a.split("=",1)[0].trim()).sort()??[]}}}if(o==="pom.xml"){let r=[...t.matchAll(/<dependency>([\s\S]*?)<\/dependency>/g)].map(a=>{let n=a[1].match(/<groupId>([^<]+)<\/groupId>/)?.[1]?.trim(),d=a[1].match(/<artifactId>([^<]+)<\/artifactId>/)?.[1]?.trim();return n&&d?`${n}:${d}`:d}).filter(a=>!!a);return {ecosystem:"maven",name:i(/<artifactId>([^<]+)<\/artifactId>/),version:i(/<version>([^<]+)<\/version>/),dependencies:r.filter((a,n,d)=>d.indexOf(a)===n).sort(),metadata:{groupId:i(/<groupId>([^<]+)<\/groupId>/)??"unknown",packaging:i(/<packaging>([^<]+)<\/packaging>/)??"jar"}}}if(/\.(?:cs|fs|vb)proj$/i.test(o))return {ecosystem:"nuget",name:i(/<AssemblyName>([^<]+)<\/AssemblyName>/)??o.replace(/\.[^.]+$/,""),version:i(/<Version>([^<]+)<\/Version>/),dependencies:[...t.matchAll(/<PackageReference\s+Include=["']([^"']+)["']/g)].map(r=>r[1]).sort(),metadata:{targetFrameworks:(i(/<TargetFrameworks?>([^<]+)<\/TargetFrameworks?>/)??"unknown").split(";"),rootNamespace:i(/<RootNamespace>([^<]+)<\/RootNamespace>/)??"unknown"}};let s={"requirements.txt":"python",Pipfile:"python","build.gradle":"gradle","build.gradle.kts":"gradle",Gemfile:"ruby","mix.exs":"elixir","pubspec.yaml":"dart","Package.swift":"swift","CMakeLists.txt":"cmake","deno.json":"deno","deno.jsonc":"deno","project.clj":"clojure","deps.edn":"clojure","build.sbt":"scala",BUILD:"bazel","BUILD.bazel":"bazel","WORKSPACE.bazel":"bazel"},c=o==="requirements.txt"?t.split(/\r?\n/).map(r=>r.trim().match(/^([A-Za-z0-9_.-]+)/)?.[1]):o.startsWith("build.gradle")?[...t.matchAll(/(?:implementation|api|compileOnly|runtimeOnly|testImplementation)\s*\(?["']([^:"']+):([^:"']+)/g)].map(r=>`${r[1]}:${r[2]}`):o==="Gemfile"?[...t.matchAll(/^\s*gem\s+["']([^"']+)["']/gm)].map(r=>r[1]):o==="mix.exs"?[...t.matchAll(/\{:\s*([A-Za-z0-9_]+)\s*,/g)].map(r=>r[1]):o==="pubspec.yaml"?[...t.matchAll(/^\s{2}([A-Za-z0-9_]+):\s+/gm)].map(r=>r[1]):o==="Package.swift"?[...t.matchAll(/\.package\s*\(\s*url:\s*["']([^"']+)["']/g)].map(r=>r[1]):o==="CMakeLists.txt"?[...t.matchAll(/find_package\s*\(\s*([A-Za-z0-9_.+-]+)/gi)].map(r=>r[1]):o==="project.clj"||o==="deps.edn"?[...t.matchAll(/\[?([A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+)\s+/g)].map(r=>r[1]):o==="build.sbt"?[...t.matchAll(/["']([^"']+)["']\s*%%?\s*["']([^"']+)["']/g)].map(r=>`${r[1]}:${r[2]}`):[];return {ecosystem:s[o]??"unknown",dependencies:c.filter(r=>!!r).filter((r,a,n)=>n.indexOf(r)===a).sort()}}function Ie(e,t){let o=e==="cargo"?ne(t):t;return e==="cargo"?o.toLowerCase().replace(/[-_]/g,""):o.toLowerCase()}function wt(e,t){let o=[...e.entities.values()].filter(s=>s.kind==="package"&&s.projectId===t),i=new Map;for(let s of o){let c=String(s.attributes.ecosystem??"unknown");for(let r of new Set([s.label,...s.identity.aliases])){let a=`${c}\0${Ie(c,r)}`,n=i.get(a)??[];n.push(s),i.set(a,n);}}for(let s of o){let c=String(s.attributes.ecosystem??"unknown"),r=Array.isArray(s.attributes.dependencies)?s.attributes.dependencies.filter(a=>typeof a=="string"):[];for(let a of r){let n=`${c}\0${Ie(c,a)}`,d=(i.get(n)??[]).filter(u=>u.id!==s.id);if(d.length!==1)continue;let l=d[0];e.addRelation({from:s.id,to:l.id,kind:"depends-on",trust:"authoritative",derivation:"authored",confidence:"high",proofIds:s.proofIds});let f=E("module",`dependency:${c}:${ne(a)}`);e.relations.delete(E("relation",`${s.id}\0depends-on\0${f}`));}}for(let s of [...e.entities.values()]){if(s.kind!=="module"||s.projectId)continue;[...e.relations.values()].some(r=>r.from===s.id||r.to===s.id)||e.entities.delete(s.id);}}var Pt={id:"workspace-foundation",version:"1.0.0",async run(e){let{state:t}=e,o=await t.addProof({provider:this.id,artifact:i.workspaceContract,absolutePath:p.join(e.workspacePath,".workspai","workspace.contract.json"),trust:"authoritative",derivation:"authored",detail:"Workspace identity and project registry boundary"}),i$1=t.addEntity({kind:"workspace",key:`workspace:${t.workspaceName}`,label:t.workspaceName,aliases:[t.workspaceName],proofIds:[o]});for(let s of e.projects){let c=e.filesByProject.get(s.id)??[],r=c.find(v=>/[\\/]\.(?:workspai|rapidkit)[\\/](?:project|context)\.json$/.test(v)),a=c.find(v=>fe.has(p.basename(v))),n=r??a,d=await t.addProof({provider:this.id,artifact:n?t.artifactPath(n,s):x(p.posix.join(s.artifactPrefix,".workspai/project.json")),...n?{absolutePath:n}:{},trust:r?"authoritative":"observed",derivation:r?"authored":"inferred",detail:`Project ${s.id}`}),l=t.addEntity({kind:"project",key:`project:${s.id}`,label:s.id,projectId:s.id,aliases:[s.id,s.path],attributes:{path:s.path,runtime:s.runtime,runtimeCandidates:s.runtimeCandidates,framework:s.framework,kit:s.kit,kind:s.kind,category:s.category},proofIds:[d]});t.addRelation({from:i$1,to:l,kind:"contains",trust:"authoritative",derivation:"authored",proofIds:[d]});let f=new Set,u=[];for(let v of c){let g=p.basename(v);if(/^(?:\.env\.example|\.env\.sample|\.env\.template)$/i.test(g))try{let y=await A.readFile(v,"utf8");for(let m of y.split(/\r?\n/)){let k=m.match(/^\s*([A-Za-z_][A-Za-z0-9_]*)\s*=/)?.[1];k&&f.add(k);}}catch{}let w=re(s.root,v);if(w&&u.push(v),!(w||ie(s.root,v))&&!(!fe.has(g)&&!/\.(?:cs|fs|vb)proj$/i.test(g)))try{let y=await A.readFile(v,"utf8"),m=bt(v,y),k=t.artifactPath(v,s),j=await t.addProof({provider:this.id,artifact:k,absolutePath:v,pointer:"/",confidence:m.name?"high":"medium",detail:`${m.ecosystem} manifest`}),b=t.addEntity({kind:"package",key:`package:${s.id}:${m.ecosystem}:${m.name??"anonymous"}:${k}`,label:m.name??`${s.id}/${T(p.relative(s.root,v))}`,projectId:s.id,aliases:[g,...m.name?[m.name]:[]],attributes:{ecosystem:m.ecosystem,version:m.version,manifest:k,dependencies:m.dependencies,...m.metadata??{}},proofIds:[j]});t.addRelation({from:l,to:b,kind:"contains",proofIds:[j]});for(let C of m.dependencies.slice(0,500)){let R=t.addEntity({kind:"module",key:`dependency:${m.ecosystem}:${C}`,label:C,aliases:[C],attributes:{ecosystem:m.ecosystem,external:true},proofIds:[j]});t.addRelation({from:b,to:R,kind:"depends-on",trust:"authoritative",derivation:"authored",proofIds:[j]});}}catch{}}if(wt(t,s.id),f.size>0){let v=c.find(g=>/^\.env\.(?:example|sample|template)$/i.test(p.basename(g)));if(v){let g=await t.addProof({provider:this.id,artifact:t.artifactPath(v,s),absolutePath:v,detail:"Public environment template keys only; values are intentionally excluded"}),w=t.addEntity({kind:"environment",key:`environment:${s.id}:template`,label:`${s.id} environment contract`,projectId:s.id,attributes:{keys:[...f].sort(),valuesEmitted:false},proofIds:[g]});t.addRelation({from:l,to:w,kind:"configured-by",proofIds:[g]});}}if(u.length>0){let v=await t.addProof({provider:this.id,artifact:t.artifactPath(u[0],s),absolutePath:u[0],detail:`${u.length} test file(s) discovered`}),g=t.addEntity({kind:"test-suite",key:`tests:${s.id}`,label:`${s.id} tests`,projectId:s.id,attributes:{fileCount:u.length},proofIds:[v]});t.addRelation({from:g,to:l,kind:"tests",proofIds:[v]});let w=new Map;for(let y of u){if(!F.has(p.extname(y).toLowerCase()))continue;let m=L(y,s.runtime),k=w.get(m)??[];k.push(y),w.set(m,k);}for(let[y,m]of [...w].sort(([k],[j])=>k.localeCompare(j))){let k=await t.addProof({provider:this.id,artifact:t.artifactPath(m[0],s),absolutePath:m[0],detail:`${m.length} ${y} test source file(s) discovered`}),j=t.addEntity({kind:"test-suite",key:`tests:${s.id}:${y}`,label:`${s.id} ${y} tests`,projectId:s.id,attributes:{fileCount:m.length,language:y},proofIds:[k]});t.addRelation({from:j,to:l,kind:"tests",proofIds:[k]});}}}}};function te(e){return e.replace(/~/g,"~0").replace(/\//g,"~1")}function jt(e){if(Array.isArray(e))return e.length;let t=$(e);return t?Object.keys(t).length:0}var $t={id:"vscode-extension-manifest",version:"1.0.0",async applicable(e){for(let t of e.projects){let o=p.join(t.root,"package.json");try{let i=$(await A.readJson(o));if(P($(i?.engines)?.vscode)||$(i?.contributes))return true}catch{}}return false},async run(e){for(let t of e.projects){let o=p.join(t.root,"package.json"),i=null;try{i=$(await A.readJson(o));}catch{continue}let s=$(i?.contributes),c=P($(i?.engines)?.vscode);if(!c&&!s)continue;let r=e.state.artifactPath(o,t),a=await e.state.addProof({provider:this.id,artifact:r,absolutePath:o,pointer:"/",trust:"authoritative",derivation:"authored",confidence:"high",detail:`VS Code extension manifest for ${t.id}`}),n=e.state.addEntity({kind:"project",key:`project:${t.id}`,label:t.id,projectId:t.id,attributes:{vscodeExtension:true,vscodeEngine:c,extensionEntry:P(i?.main)??P(i?.browser),extensionKind:K(i?.extensionKind),activationEvents:K(i?.activationEvents),contributionCounts:Object.entries(s??{}).map(([k,j])=>`${k}:${jt(j)}`).sort()},proofIds:[a]}),d=Array.isArray(s?.commands)?s.commands:[],l=$(s?.menus),f=Object.values(l??{}).flatMap(k=>Array.isArray(k)?k:[]),u=Array.isArray(s?.keybindings)?s.keybindings:[];for(let[k,j]of d.entries()){let b=$(j),C=P(b?.command);if(!C)continue;let R=`/contributes/commands/${k}`,h=await e.state.addProof({provider:this.id,artifact:r,absolutePath:o,pointer:R,trust:"authoritative",derivation:"authored",confidence:"high",detail:`VS Code command ${C}`}),I=f.filter(_=>P($(_)?.command)===C).length,S=u.filter(_=>P($(_)?.command)===C).length,W=e.state.addEntity({kind:"api",key:`vscode-command:${t.id}:${C}`,label:C,projectId:t.id,aliases:[P(b?.title),P(b?.shortTitle)].filter(_=>!!_),attributes:{surface:"vscode-command",title:P(b?.title),shortTitle:P(b?.shortTitle),category:P(b?.category),enablement:P(b?.enablement),icon:P(b?.icon),menuCount:I,keybindingCount:S,manifest:r,pointer:R},proofIds:[h]});e.state.addRelation({from:n,to:W,kind:"exposes",trust:"authoritative",derivation:"authored",confidence:"high",proofIds:[h]});}let v=$(s?.viewsContainers),g=new Map;for(let[k,j]of Object.entries(v??{}))if(Array.isArray(j))for(let[b,C]of j.entries()){let R=$(C),h=P(R?.id);if(!h)continue;let I=`/contributes/viewsContainers/${te(k)}/${b}`,S=await e.state.addProof({provider:this.id,artifact:r,absolutePath:o,pointer:I,trust:"authoritative",derivation:"authored",detail:`VS Code view container ${h}`}),W=e.state.addEntity({kind:"service",key:`vscode-view-container:${t.id}:${h}`,label:h,projectId:t.id,aliases:[P(R?.title)].filter(_=>!!_),attributes:{surface:"vscode-view-container",title:P(R?.title),location:k,icon:P(R?.icon),manifest:r,pointer:I},proofIds:[S]});g.set(h,W),e.state.addRelation({from:n,to:W,kind:"contains",trust:"authoritative",derivation:"authored",proofIds:[S]});}let w=$(s?.views);for(let[k,j]of Object.entries(w??{}))if(Array.isArray(j))for(let[b,C]of j.entries()){let R=$(C),h=P(R?.id);if(!h)continue;let I=`/contributes/views/${te(k)}/${b}`,S=await e.state.addProof({provider:this.id,artifact:r,absolutePath:o,pointer:I,trust:"authoritative",derivation:"authored",detail:`VS Code view ${h}`}),W=e.state.addEntity({kind:"service",key:`vscode-view:${t.id}:${h}`,label:h,projectId:t.id,aliases:[P(R?.name),P(R?.contextualTitle)].filter(_=>!!_),attributes:{surface:R?.type==="webview"?"vscode-webview":"vscode-view",name:P(R?.name),contextualTitle:P(R?.contextualTitle),containerId:k,viewType:P(R?.type)??"tree",manifest:r,pointer:I},proofIds:[S]});e.state.addRelation({from:g.get(k)??n,to:W,kind:"contains",trust:"authoritative",derivation:"authored",proofIds:[S]});}let y=Array.isArray(s?.configuration)?s.configuration:s?.configuration?[s.configuration]:[];for(let[k,j]of y.entries()){let b=$(j),C=$(b?.properties);for(let[R,h]of Object.entries(C??{})){let I=$(h),W=`${Array.isArray(s?.configuration)?`/contributes/configuration/${k}`:"/contributes/configuration"}/properties/${te(R)}`,_=await e.state.addProof({provider:this.id,artifact:r,absolutePath:o,pointer:W,trust:"authoritative",derivation:"authored",detail:`VS Code configuration ${R}`}),O=e.state.addEntity({kind:"schema",key:`vscode-configuration:${t.id}:${R}`,label:R,projectId:t.id,attributes:{surface:"vscode-configuration",title:P(b?.title),type:P(I?.type),scope:P(I?.scope),description:P(I?.description)??P(I?.markdownDescription),manifest:r,pointer:W},proofIds:[_]});e.state.addRelation({from:n,to:O,kind:"configured-by",trust:"authoritative",derivation:"authored",proofIds:[_]});}}let m=Array.isArray(s?.chatParticipants)?s.chatParticipants:[];for(let[k,j]of m.entries()){let b=$(j),C=P(b?.id);if(!C)continue;let R=`/contributes/chatParticipants/${k}`,h=await e.state.addProof({provider:this.id,artifact:r,absolutePath:o,pointer:R,trust:"authoritative",derivation:"authored",detail:`VS Code chat participant ${C}`}),I=e.state.addEntity({kind:"api",key:`vscode-chat-participant:${t.id}:${C}`,label:C,projectId:t.id,aliases:[P(b?.name),P(b?.fullName)].filter(S=>!!S),attributes:{surface:"vscode-chat-participant",name:P(b?.name),fullName:P(b?.fullName),description:P(b?.description),manifest:r,pointer:R},proofIds:[h]});e.state.addRelation({from:n,to:I,kind:"exposes",trust:"authoritative",derivation:"authored",proofIds:[h]});}}}};function Ee(e,t){let o=[],i=false;for(let s of e.split(/\r?\n/)){let c=s.match(/^\s*\[([^\]]+)\]\s*(?:#.*)?$/)?.[1]?.trim();if(c){i=c===t;continue}if(!i||/^\s*(?:#|$)/.test(s))continue;let r=s.match(/^\s*(?:"([^"]+)"|'([^']+)'|([A-Za-z0-9_.-]+))\s*=\s*["']([^"']+)["']/),a=r?.[1]??r?.[2]??r?.[3],n=r?.[4];a&&n&&o.push([a,n]);}return o}var It={id:"python-project-manifest",version:"1.0.0",async applicable(e){for(let t of e.projects){let o=(e.filesByProject.get(t.id)??[]).find(i=>p.dirname(i)===t.root&&p.basename(i).toLowerCase()==="pyproject.toml");if(o)try{if(Ee(await A.readFile(o,"utf8"),"project.scripts").length>0)return true}catch{}}return false},async run(e){for(let t of e.projects){let o=(e.filesByProject.get(t.id)??[]).find(n=>p.dirname(n)===t.root&&p.basename(n).toLowerCase()==="pyproject.toml");if(!o)continue;let i=await A.readFile(o,"utf8"),s=Ee(i,"project.scripts"),c=e.state.artifactPath(o,t),r=await e.state.addProof({provider:this.id,artifact:c,absolutePath:o,pointer:"/project",trust:"authoritative",derivation:"authored",detail:"Python project manifest"}),a=e.state.addEntity({kind:"project",key:`project:${t.id}`,label:t.id,projectId:t.id,attributes:{pythonProject:true,requiresPython:i.match(/^requires-python\s*=\s*["']([^"']+)["']/m)?.[1],buildBackend:i.match(/^build-backend\s*=\s*["']([^"']+)["']/m)?.[1],consoleScriptCount:s.length},proofIds:[r]});for(let[n,d]of s){let l=`/project/scripts/${n}`,f=await e.state.addProof({provider:this.id,artifact:c,absolutePath:o,pointer:l,trust:"authoritative",derivation:"authored",detail:`Python console script ${n}`}),u=e.state.addEntity({kind:"api",key:`python-console-script:${t.id}:${n}`,label:n,projectId:t.id,aliases:[d],attributes:{surface:"python-console-script",entrypoint:d,manifest:c,pointer:l},proofIds:[f]});e.state.addRelation({from:a,to:u,kind:"exposes",trust:"authoritative",derivation:"authored",proofIds:[f]});}}}},Et={id:"source-language-inventory",version:"1.0.0",applicable(e){return e.projects.some(t=>(e.semanticFilesByProject.get(t.id)??[]).some(o=>F.has(p.extname(o).toLowerCase())))},async run(e){for(let t of e.projects){let o=e.semanticFilesByProject.get(t.id)??[],i=o.filter(r=>F.has(p.extname(r).toLowerCase())),s=new Map;for(let r of i){let a=L(r,t.runtime),n=s.get(a)??{files:[],production:[],tests:[],examples:[],generated:[],extensions:new Set};n.files.push(r),n.extensions.add(p.extname(r).toLowerCase()),oe(t.root,r)&&n.generated.push(r),re(t.root,r)?n.tests.push(r):ie(t.root,r)?n.examples.push(r):n.production.push(r),s.set(a,n);}let c=E("project",`project:${t.id}`);for(let[r,a]of [...s].sort(([n],[d])=>n.localeCompare(d))){let n=[a.production[0],a.tests[0],a.examples[0],a.generated[0],a.files[0]].filter((u,v,g)=>!!u&&g.indexOf(u)===v),d=await Promise.all(n.map(u=>e.state.addProof({provider:this.id,artifact:e.state.artifactPath(u,t),absolutePath:u,derivation:"extracted",trust:"observed",confidence:"high",detail:`${r} source-language inventory evidence`}))),l=[...a.production.length>0?["production"]:[],...a.tests.length>0?["test"]:[],...a.examples.length>0?["example"]:[],...a.generated.length>0?["generated"]:[]],f=e.state.addEntity({kind:"language",key:`language:${t.id}:${r}`,label:`${t.id} programming language: ${r}`,projectId:t.id,aliases:[r,`${r} source`,`${r} programming language`,"programming languages actually used"],attributes:{language:r,usage:"source-build-test",roles:l,fileCount:a.files.length,productionFileCount:a.production.length,testFileCount:a.tests.length,exampleFileCount:a.examples.length,generatedFileCount:a.generated.length,extensions:[...a.extensions].sort(),inventoryTruncated:o.length>=e.semanticScanLimit},proofIds:d});e.state.addRelation({from:c,to:f,kind:"uses-language",derivation:"extracted",trust:"observed",confidence:o.length>=e.semanticScanLimit?"medium":"high",proofIds:d});}o.length>=e.semanticScanLimit&&e.state.diagnostics.push({code:"graph.provider.source_language_inventory.limit_reached",severity:"warning",message:`Language inventory for ${t.id} reached ${e.semanticScanLimit} files. Counts are lower bounds.`,recommendation:"Increase maxFilesPerProject or use a scoped project run before treating language counts as complete."});}}},Ct={id:"source-structure",version:"1.0.0",applicable(e){return e.projects.some(t=>(e.filesByProject.get(t.id)??[]).some(o=>F.has(p.extname(o).toLowerCase())&&!z(t.root,o)))},async run(e){for(let t of e.projects){let o=(e.filesByProject.get(t.id)??[]).filter(d=>!z(t.root,d)),i=e.semanticFilesByProject.get(t.id)??o,s=Ze((e.filesByProject.get(t.id)??[]).filter(d=>F.has(p.extname(d).toLowerCase())&&!z(t.root,d)),1e3),c=new Set(i.filter(d=>!z(t.root,d)).map(d=>p.resolve(d))),r=new Map;await Promise.all(o.map(async d=>{try{let l=await A.stat(d);if(l.isFile()&&l.size<=2*1024*1024){let f=p.resolve(d);c.add(f),r.set(f,l.size);}}catch{}}));let a=0,n=0;for(let d of s){let l;try{if((await A.stat(d)).size>2*1024*1024)continue;l=await A.readFile(d,"utf8");}catch{continue}let f=lt(d,l),u=e.state.artifactPath(d,t),v=await e.state.addProof({provider:this.id,artifact:u,absolutePath:d,derivation:"extracted",trust:"observed",confidence:"high",detail:`${L(d,t.runtime)} source file`}),g=e.state.addEntity({kind:"file",key:`file:${t.id}:${u}`,label:u,projectId:t.id,aliases:[p.basename(d)],attributes:{artifact:u,language:L(d,t.runtime),bytes:Buffer.byteLength(l),...oe(t.root,d)?{generated:true}:{}},proofIds:[v]});e.state.addRelation({from:E("project",`project:${t.id}`),to:g,kind:"contains",proofIds:[v]});let w=Q(f,it(d),250);for(let m of w){let k=await e.state.addProof({provider:this.id,artifact:u,absolutePath:d,line:m.line,derivation:"extracted",trust:"observed",confidence:"medium",detail:`${m.detail}: ${m.name}`}),j=nt(d,m.name,c,t.root,m.detail);if(j){let b=e.state.artifactPath(j,t),C=E("file",`file:${t.id}:${b}`);if(!e.state.entities.has(C)){let R=await A.stat(j).catch(()=>null),h=await e.state.addProof({provider:this.id,artifact:b,...R?.isFile()&&R.size<=2*1024*1024?{absolutePath:j}:{},derivation:"extracted",trust:"observed",confidence:"high",detail:"Locally imported artifact resolved from the project inventory"}),I=e.state.addEntity({kind:"file",key:`file:${t.id}:${b}`,label:b,projectId:t.id,aliases:[p.basename(j)],attributes:{artifact:b,language:L(j,t.runtime),bytes:r.get(p.resolve(j))??(R?.isFile()?R.size:void 0)},proofIds:[h]});e.state.addRelation({from:E("project",`project:${t.id}`),to:I,kind:"contains",proofIds:[h]});}e.state.addRelation({from:g,to:C,kind:"imports",confidence:"high",proofIds:[k]});}else {let b=m.name.startsWith(".");b&&(n+=1);let C=e.state.addEntity({kind:"module",key:`module:${t.id}:${m.name}`,label:m.name,projectId:t.id,aliases:[m.name],attributes:{specifier:m.name,resolution:b?"unresolved-local":"external"},proofIds:[k]});e.state.addRelation({from:g,to:C,kind:"imports",confidence:b?"low":"medium",proofIds:[k]});}}if(a<1e4){let m=Q(f,He,Math.min(100,1e4-a));a+=m.length;for(let k of m){let j=await e.state.addProof({provider:this.id,artifact:u,absolutePath:d,line:k.line,derivation:"extracted",trust:"observed",confidence:"medium",detail:`${k.detail}: ${k.name}`}),b=e.state.addEntity({kind:"symbol",key:`symbol:${t.id}:${u}:${k.detail}:${k.name}`,label:k.name,projectId:t.id,attributes:{symbolKind:k.detail,language:L(d,t.runtime),...oe(t.root,d)?{generated:true}:{}},proofIds:[j]});e.state.addRelation({from:g,to:b,kind:"defines",confidence:"medium",proofIds:[j]});}}let y=t.framework!=="vscode-extension"&&t.kind!=="extension";for(let m of y?Q(f,pt,100):[]){let k=l.split(/\r?\n/)[m.line-1]??"";if(at(d,k))continue;let j=k.match(/(?:@|\.|\[|^\s*)(get|post|put|delete|patch|options|head)/i)?.[1]?.toUpperCase()??"HTTP",b=await e.state.addProof({provider:this.id,artifact:u,absolutePath:d,line:m.line,derivation:"extracted",trust:"observed",confidence:"medium",detail:`${j} ${m.name}`}),C=e.state.addEntity({kind:"endpoint",key:`source-endpoint:${t.id}:${u}:${j}:${m.name}`,label:`${j} ${m.name||"/"}`,projectId:t.id,attributes:{method:j,path:m.name||"/",source:u},proofIds:[b]});e.state.addRelation({from:g,to:C,kind:"defines",confidence:"medium",proofIds:[b]});}}(s.length>=1e3||a>=1e4)&&e.state.diagnostics.push({code:"graph.provider.source_structure.limit_reached",severity:"info",message:`Source extraction for ${t.id} sampled ${s.length} file(s) from ${o.length} indexed candidate(s).`,recommendation:"Use bounded graph search, evidence, and path queries for proof-backed retrieval; do not treat the sampled symbol inventory as exhaustive."}),n>0&&e.state.diagnostics.push({code:"graph.provider.source_structure.unresolved_local_imports",severity:"warning",message:`${n} local import(s) in ${t.id} could not be resolved to an indexed source file.`,recommendation:"Check path aliases, generated sources, extension mapping, or provider limits before treating the import graph as complete."});}}};function Rt(e){let i=e.slice(0,12e3).match(/^[\t ]*(?:\/\/|#|\/\*+|\*|<!--|--)[\t ]*(?:code generated by|generated from:|this file is autogenerated from:|@generated by)\s*(?:(?:\/\/|#|\*|--)[\t ]*)?[`"']?([^`"'\s;*,]+)/im)?.[1]?.replace(/^\.\//,"").replace(/[.,:]+$/,"")??"";return !i||!p.posix.basename(i.replace(/\\/g,"/"))?null:i}function At(e,t){let o=0,i=null,s=false;for(let c=t;c<e.length;c+=1){let r=e[c];if(i){r===i&&!s&&(i=null),s=r==="\\"&&!s,r!=="\\"&&(s=false);continue}if(r==='"'){i=r;continue}if(r==="("&&(o+=1),r===")"&&(o-=1,o===0))return e.slice(t+1,c)}return null}function St(e){let t=[],o=/(?<![A-Za-z0-9_:])(?:deno_core::)?extension!\s*\(/g;for(let i of e.matchAll(o)){let s=(i.index??0)+i[0].lastIndexOf("("),c=At(e,s);if(!c)continue;let r=c.match(/^\s*([A-Za-z_][A-Za-z0-9_]*)\s*,/)?.[1];if(!r)continue;let a=[...new Set([...c.matchAll(/\bops\s*=\s*\[([\s\S]*?)\]/g)].flatMap(d=>[...d[1].matchAll(/\b(op_[A-Za-z0-9_]+)\b/g)].map(l=>l[1])))].sort(),n=[...new Set([...c.matchAll(/\b(?:esm|js|lazy_loaded_esm|lazy_loaded_js)\s*=\s*\[([\s\S]*?)\]/g)].flatMap(d=>[...d[1].matchAll(/["']([^"']+\.(?:[cm]?[jt]s|tsx?|jsx?))["']/g)].map(l=>l[1])))].sort();t.push({name:r,line:e.slice(0,i.index??0).split(/\r?\n/).length,operations:a,scripts:n});}return t}function Ce(e,t){let o=e.indexOf(t);return o<0?void 0:e.slice(0,o).split(/\r?\n/).length}var _t={id:"runtime-bridge-semantics",version:"1.0.0",async applicable(e){for(let t of e.projects)for(let o of e.semanticFilesByProject.get(t.id)??[])if(!(p.extname(o).toLowerCase()!==".rs"||z(t.root,o)))try{let i=await A.readFile(o,"utf8");if(/(?<![A-Za-z0-9_:])(?:deno_core::)?extension!\s*\(/.test(i))return true}catch{}return false},async run(e){for(let t of e.projects){let i=(e.semanticFilesByProject.get(t.id)??[]).filter(s=>p.extname(s).toLowerCase()===".rs"&&!z(t.root,s));for(let s of i){let c="";try{if((await A.stat(s)).size>2*1024*1024)continue;c=await A.readFile(s,"utf8");}catch{continue}let r=St(c);if(r.length===0)continue;let a=e.state.artifactPath(s,t),n=await e.state.addProof({provider:this.id,artifact:a,absolutePath:s,derivation:"extracted",trust:"observed",confidence:"high",detail:"Deno Core Rust extension declaration"}),d=e.state.addEntity({kind:"file",key:`file:${t.id}:${a}`,label:a,projectId:t.id,aliases:[p.basename(s)],attributes:{artifact:a,language:"rust",runtimeBridge:"deno-core"},proofIds:[n]});e.state.addRelation({from:E("project",`project:${t.id}`),to:d,kind:"contains",proofIds:[n]});for(let l of r){let f=await e.state.addProof({provider:this.id,artifact:a,absolutePath:s,line:l.line,derivation:"extracted",trust:"observed",confidence:"high",detail:`Deno Core extension ${l.name}`}),u=e.state.addEntity({kind:"protocol",key:`runtime-bridge:${t.id}:deno-core:${a}:${l.name}`,label:`${l.name} Rust JavaScript runtime bridge`,projectId:t.id,aliases:[l.name,`${l.name} cross-language bridge`,"Rust JavaScript TypeScript bridge"],attributes:{mechanism:"deno_core::extension!",languages:["javascript","rust","typescript"]},proofIds:[f]});e.state.addRelation({from:E("project",`project:${t.id}`),to:u,kind:"contains",proofIds:[f]}),e.state.addRelation({from:d,to:u,kind:"implements-protocol",proofIds:[f]});for(let g of ["rust","javascript","typescript"]){let w=E("language",`language:${t.id}:${g}`);e.state.entities.has(w)&&e.state.addRelation({from:u,to:w,kind:"uses-language",proofIds:[f]});}let v=new Map;for(let g of l.operations){let w=Ce(c,g),y=await e.state.addProof({provider:this.id,artifact:a,absolutePath:s,...w?{line:w}:{},derivation:"extracted",trust:"observed",confidence:"high",detail:`Rust op2 bridge operation ${g}`}),m=e.state.addEntity({kind:"symbol",key:`symbol:${t.id}:${a}:function:${g}`,label:g,projectId:t.id,aliases:[`rust:${g}`,`javascript:${g}`],attributes:{symbolKind:"function",language:"rust",bridgeMechanism:"op2"},proofIds:[y]});v.set(g,m),e.state.addRelation({from:d,to:m,kind:"defines",proofIds:[y]}),e.state.addRelation({from:m,to:u,kind:"implements-protocol",proofIds:[y,f]});}for(let g of l.scripts){let w=p.resolve(p.dirname(s),g);if(!await A.pathExists(w))continue;let y="";try{y=await A.readFile(w,"utf8");}catch{continue}let m=e.state.artifactPath(w,t),k=await e.state.addProof({provider:this.id,artifact:m,absolutePath:w,derivation:"extracted",trust:"observed",confidence:"high",detail:`${l.name} JavaScript/TypeScript extension source`}),j=e.state.addEntity({kind:"file",key:`file:${t.id}:${m}`,label:m,projectId:t.id,aliases:[p.basename(w)],attributes:{artifact:m,language:L(w,t.runtime),runtimeBridge:"deno-core"},proofIds:[k]});e.state.addRelation({from:d,to:j,kind:"references",confidence:"high",proofIds:[f,k]}),e.state.addRelation({from:j,to:u,kind:"implements-protocol",proofIds:[k,f]});for(let[b,C]of v){let R=Ce(y,b);if(!R)continue;let h=await e.state.addProof({provider:this.id,artifact:m,absolutePath:w,line:R,derivation:"extracted",trust:"observed",confidence:"high",detail:`JavaScript/TypeScript call to Rust operation ${b}`});e.state.addRelation({from:j,to:C,kind:"calls",confidence:"high",proofIds:[h,f]});}}}}}}},Wt=/^[A-Z][A-Za-z0-9_]{3,}$/,Kt=new Set(["Client","Config","Context","Data","Error","Event","Message","Options","Request","Response","Result","Schema","Type","Value"]),Tt={id:"polyglot-semantics",version:"1.0.0",applicable(e){return e.projects.some(t=>new Set((t.runtimeCandidates??[]).filter(i=>i&&i!=="unknown"&&i!=="generic")).size>1||a$1(t.root).polyglot)},async run(e){for(let t of e.projects){let o=E("project",`project:${t.id}`),i=e.filesByProject.get(t.id)??[],s=a$1(t.root),c=[...e.state.entities.values()].filter(n=>n.kind==="package"&&n.projectId===t.id);for(let n of s.units){let d=n.runtime,l=p.resolve(t.root,n.manifest),f=e.state.artifactPath(l,t),u=c.find(m=>m.attributes.manifest===f),v=u?.proofIds??[await e.state.addProof({provider:this.id,artifact:f,absolutePath:l,derivation:"extracted",trust:"observed",confidence:"high",detail:`${d} runtime-unit manifest`})],g=e.state.artifactPath(p.dirname(l),t),w=Object.fromEntries(n.stages.map(m=>[m.stage,m.command])),y=e.state.addEntity({kind:"runtime-unit",key:`runtime-unit:${t.id}:${d}:${f}`,label:`${d}:${g}:${p.basename(l)}`,projectId:t.id,aliases:[d,g],attributes:{runtime:d,root:g,ecosystem:n.ecosystem,role:n.role,manifest:f,stages:Object.keys(w).sort(),orchestrationMode:"native-manifest"},proofIds:v});e.state.addRelation({from:o,to:y,kind:"contains",confidence:"high",proofIds:v}),u&&e.state.addRelation({from:y,to:u.id,kind:"configured-by",confidence:"high",proofIds:v});for(let m of n.stages){let{stage:k,command:j}=m,b=e.state.addEntity({kind:"lifecycle-stage",key:`lifecycle-stage:${t.id}:${d}:${f}:${k}`,label:`${k} \xB7 ${d}:${g}:${p.basename(l)}`,projectId:t.id,aliases:[`${d}:${k}`,k],attributes:{stage:k,command:j,runtime:d,workingDirectory:g,commandConfidence:m.confidence,preflight:m.preflight},proofIds:v});e.state.addRelation({from:y,to:b,kind:"contains",confidence:"high",proofIds:v});}}for(let n of i.filter(d=>F.has(p.extname(d).toLowerCase()))){let d="";try{d=await A.readFile(n,"utf8");}catch{continue}let l=Rt(d);if(!l)continue;let f=e.state.artifactPath(n,t),u=E("file",`file:${t.id}:${f}`);if(!e.state.entities.has(u))continue;let v=await e.state.addProof({provider:this.id,artifact:f,absolutePath:n,line:1,derivation:"extracted",trust:"observed",confidence:"high",detail:`Generated from ${l}`}),g=e.state.entities.get(u);g&&e.state.addEntity({kind:"file",key:g.identity.key,label:g.label,projectId:t.id,aliases:g.identity.aliases,attributes:{...g.attributes,generated:true},proofIds:[...g.proofIds,v]});let w=[...e.state.relations.values()].filter(b=>b.kind==="defines"&&b.from===u).map(b=>e.state.entities.get(b.to)).filter(b=>b?.kind==="symbol");for(let b of w)e.state.addEntity({kind:"symbol",key:b.identity.key,label:b.label,projectId:t.id,aliases:b.identity.aliases,attributes:{...b.attributes,generated:true},proofIds:[...b.proofIds,v]});let y=l.replace(/^\.\//,"").replace(/[.,:]$/,""),k=[p.resolve(t.root,y),p.resolve(p.dirname(n),y)].find(b=>i.includes(b));if(k){let b=e.state.artifactPath(k,t),C=E("file",`file:${t.id}:${b}`);if(e.state.entities.has(C)){e.state.addRelation({from:u,to:C,kind:"generated-by",derivation:"extracted",trust:"observed",confidence:"high",proofIds:[v]});continue}}let j=e.state.addEntity({kind:"schema",key:`generation-source:${t.id}:${y}`,label:p.posix.basename(y),projectId:t.id,aliases:[y],attributes:{sourceReference:y,discoveredFromGeneratedHeader:true},proofIds:[v]});e.state.addRelation({from:u,to:j,kind:"generated-from",derivation:"extracted",trust:"observed",confidence:"medium",proofIds:[v]});}let r=[...e.state.entities.values()].filter(n=>n.projectId===t.id&&n.kind==="symbol"&&n.attributes.generated===true&&n.attributes.symbolKind==="type"&&typeof n.attributes.language=="string"&&Wt.test(n.label)&&!Kt.has(n.label)),a=new Map;for(let n of r){let d=a.get(n.label)??[];d.push(n),a.set(n.label,d);}for(let[n,d]of [...a.entries()].filter(([,l])=>new Set(l.map(f=>f.attributes.language)).size>1).sort(([l],[f])=>l.localeCompare(f)).slice(0,1e3)){let l=d.sort((w,y)=>String(w.attributes.language).localeCompare(String(y.attributes.language))||w.id.localeCompare(y.id)),f=[...new Set(l.map(w=>String(w.attributes.language)))],u=[...new Set(l.flatMap(w=>w.proofIds))],v=e.state.addEntity({kind:"protocol",key:`protocol:${t.id}:${n}`,label:n,projectId:t.id,aliases:f.map(w=>`${w}:${n}`),attributes:{languages:f,implementationCount:l.length,source:"generated-types"},proofIds:u});for(let w of l)e.state.addRelation({from:w.id,to:v,kind:"implements-protocol",derivation:"inferred",trust:"corroborated",confidence:"high",proofIds:w.proofIds});let g=l[0];for(let w of l.slice(1))e.state.addRelation({from:w.id,to:g.id,kind:"equivalent-to",derivation:"inferred",trust:"corroborated",confidence:"high",proofIds:[...g.proofIds,...w.proofIds]});}}}},Ot={id:"workspace-service-contract",version:"1.0.0",applicable(e){return !!e.contract?.projects.some(t=>t.ports.length>0||t.contracts.owns.length>0||t.contracts.apis.length>0||t.contracts.publishes.length>0||t.contracts.consumes.length>0||t.contracts.env.length>0)},async run(e){if(!e.contract)return;let t=new Map;for(let o of [...e.contract.projects].sort((i,s)=>i.slug.localeCompare(s.slug))){let i$1=o.contracts;if(o.ports.length===0&&i$1.owns.length===0&&i$1.apis.length===0&&i$1.publishes.length===0&&i$1.consumes.length===0&&i$1.env.length===0)continue;let s=await e.state.addProof({provider:this.id,artifact:i.workspaceContract,absolutePath:p.join(e.workspacePath,".workspai","workspace.contract.json"),pointer:`/projects/${o.slug}/contracts`,trust:"authoritative",derivation:"authored",detail:`Service contract for ${o.slug}`}),c=E("project",`project:${o.slug}`),r=e.state.addEntity({kind:"service",key:`contract-service:${o.slug}`,label:o.slug,projectId:o.slug,attributes:{ports:o.ports.map(a=>`${a.protocol}:${a.port}`),owns:[...i$1.owns].sort(),environmentKeys:[...i$1.env].sort()},proofIds:[s]});e.state.addRelation({from:c,to:r,kind:"implements",trust:"authoritative",derivation:"authored",proofIds:[s]});for(let a of [...i$1.apis].sort((n,d)=>n.name.localeCompare(d.name))){let n=e.state.addEntity({kind:"api",key:`contract-api:${o.slug}:${a.name}:${a.basePath}`,label:a.name,projectId:o.slug,attributes:{basePath:a.basePath},proofIds:[s]});e.state.addRelation({from:r,to:n,kind:"exposes",trust:"authoritative",derivation:"authored",proofIds:[s]});}for(let a of [...i$1.publishes,...i$1.consumes].sort())t.has(a)||t.set(a,e.state.addEntity({kind:"queue",key:`event:${a}`,label:a,attributes:{protocol:"workspace-event"},proofIds:[s]}));for(let a of [...i$1.publishes].sort()){let n=t.get(a);n&&e.state.addRelation({from:r,to:n,kind:"publishes",trust:"authoritative",derivation:"authored",proofIds:[s]});}for(let a of [...i$1.consumes].sort()){let n=t.get(a);n&&e.state.addRelation({from:r,to:n,kind:"consumes",trust:"authoritative",derivation:"authored",proofIds:[s]});}}}},Lt={id:"openapi",version:"1.0.0",applicable(e){return e.projects.some(t=>(e.filesByProject.get(t.id)??[]).some(me))},async run(e){for(let t of e.projects){let o=(e.filesByProject.get(t.id)??[]).filter(me);for(let i of o){let s;try{s=await B(i);}catch(c){e.state.diagnostics.push({code:"graph.provider.openapi.parse_failed",severity:"warning",message:`Could not parse ${e.state.artifactPath(i,t)}: ${c instanceof Error?c.message:String(c)}`});continue}for(let c of s){if(!("openapi"in c)&&!("swagger"in c))continue;let r=$(c.info),a=P(r?.title)??`${t.id} API`,n=await e.state.addProof({provider:this.id,artifact:e.state.artifactPath(i,t),absolutePath:i,pointer:"/info",trust:"authoritative",detail:"Authored OpenAPI contract"}),d=E("project",`project:${t.id}`),l=e.state.addEntity({kind:"api",key:`api:${t.id}:${a}`,label:a,projectId:t.id,attributes:{version:P(r?.version),specification:P(c.openapi)??P(c.swagger)},proofIds:[n]});e.state.addRelation({from:d,to:l,kind:"exposes",trust:"authoritative",derivation:"authored",proofIds:[n]});let f=$($(c.components)?.schemas)??$(c.definitions),u=new Map;for(let g of Object.keys(f??{}).sort()){let w=await e.state.addProof({provider:this.id,artifact:e.state.artifactPath(i,t),absolutePath:i,pointer:`/components/schemas/${g}`,trust:"authoritative",detail:`OpenAPI schema ${g}`}),y=e.state.addEntity({kind:"schema",key:`schema:${t.id}:${a}:${g}`,label:g,projectId:t.id,proofIds:[w]});u.set(g,y),e.state.addRelation({from:l,to:y,kind:"contains",trust:"authoritative",derivation:"authored",proofIds:[w]});}let v=$(c.paths);for(let g of Object.keys(v??{}).sort()){let w=$(v?.[g]);for(let y of Object.keys(w??{}).filter(m=>qe.has(m.toLowerCase())).sort()){let m=$(w?.[y]),k=`/paths/${g.replace(/~/g,"~0").replace(/\//g,"~1")}/${y}`,j=await e.state.addProof({provider:this.id,artifact:e.state.artifactPath(i,t),absolutePath:i,pointer:k,trust:"authoritative",detail:`${y.toUpperCase()} ${g}`}),b=e.state.addEntity({kind:"endpoint",key:`endpoint:${t.id}:${a}:${y.toUpperCase()}:${g}`,label:`${y.toUpperCase()} ${g}`,projectId:t.id,aliases:K(m?.tags),attributes:{method:y.toUpperCase(),path:g,operationId:P(m?.operationId),deprecated:typeof m?.deprecated=="boolean"?m.deprecated:void 0,tags:K(m?.tags)},proofIds:[j]});e.state.addRelation({from:l,to:b,kind:"contains",trust:"authoritative",derivation:"authored",proofIds:[j]});let C=JSON.stringify(m??{});for(let[R,h]of u)C.includes(`/${R}`)&&e.state.addRelation({from:b,to:h,kind:"references",trust:"authoritative",derivation:"authored",proofIds:[j]});}}}}}}},Ft={id:"interface-contracts",version:"1.0.0",applicable(e){return e.projects.some(t=>(e.filesByProject.get(t.id)??[]).some(ge))},async run(e){for(let t of e.projects){let o=(e.filesByProject.get(t.id)??[]).filter(ge);for(let i of o){let s=e.state.artifactPath(i,t),c=p.extname(i).toLowerCase();if(c===".graphql"||c===".gql"){let r=await A.readFile(i,"utf8"),a=await e.state.addProof({provider:this.id,artifact:s,absolutePath:i,trust:"authoritative",derivation:"authored",detail:"GraphQL schema"}),n=e.state.addEntity({kind:"api",key:`graphql:${t.id}:${s}`,label:`${t.id} GraphQL API`,projectId:t.id,attributes:{specification:"graphql",artifact:s},proofIds:[a]});e.state.addRelation({from:E("project",`project:${t.id}`),to:n,kind:"exposes",trust:"authoritative",derivation:"authored",proofIds:[a]});for(let d of r.matchAll(/^\s*(?:type|input|interface|enum|scalar|union)\s+([A-Za-z_]\w*)/gm)){let l=e.state.addEntity({kind:"schema",key:`graphql-schema:${t.id}:${s}:${d[1]}`,label:d[1],projectId:t.id,proofIds:[a]});e.state.addRelation({from:n,to:l,kind:"contains",trust:"authoritative",derivation:"authored",proofIds:[a]});}continue}if(c===".proto"){let r=await A.readFile(i,"utf8"),a=V(r.replace(/\r\n/g,`
7
+ `).trim()),n=r.match(/^\s*package\s+([A-Za-z_][\w.]*)\s*;/m)?.[1],d=n||"unscoped",l=a.slice(0,16),f=await e.state.addProof({provider:this.id,artifact:s,absolutePath:i,trust:"authoritative",derivation:"authored",detail:"Protocol Buffers contract"});for(let u of r.matchAll(/^\s*service\s+([A-Za-z_]\w*)/gm)){let v=e.state.addEntity({kind:"api",key:`protobuf-service:${d}:${u[1]}:${l}`,label:u[1],aliases:[...n?[`${n}.${u[1]}`]:[],u[1]],attributes:{specification:"protobuf",package:n,definitionHash:a},proofIds:[f]});e.state.addRelation({from:E("project",`project:${t.id}`),to:v,kind:"exposes",trust:"authoritative",derivation:"authored",proofIds:[f]});}for(let u of r.matchAll(/^\s*message\s+([A-Za-z_]\w*)/gm)){let v=e.state.addEntity({kind:"schema",key:`protobuf-message:${d}:${u[1]}:${l}`,label:u[1],aliases:[...n?[`${n}.${u[1]}`]:[],u[1]],attributes:{specification:"protobuf",package:n,definitionHash:a},proofIds:[f]});e.state.addRelation({from:E("project",`project:${t.id}`),to:v,kind:"contains",trust:"authoritative",derivation:"authored",proofIds:[f]});}continue}try{let r=(await B(i))[0];if(!r||!("asyncapi"in r))continue;let a=await e.state.addProof({provider:this.id,artifact:s,absolutePath:i,trust:"authoritative",derivation:"authored",detail:"AsyncAPI contract"}),n=e.state.addEntity({kind:"api",key:`asyncapi:${t.id}:${s}`,label:P($(r.info)?.title)??`${t.id} AsyncAPI`,projectId:t.id,attributes:{specification:`asyncapi ${String(r.asyncapi)}`,artifact:s},proofIds:[a]});e.state.addRelation({from:E("project",`project:${t.id}`),to:n,kind:"exposes",trust:"authoritative",derivation:"authored",proofIds:[a]});for(let d of Object.keys($(r.channels)??{}).sort()){let l=e.state.addEntity({kind:"queue",key:`asyncapi-channel:${t.id}:${d}`,label:d,projectId:t.id,attributes:{protocol:"asyncapi"},proofIds:[a]});e.state.addRelation({from:n,to:l,kind:"publishes",trust:"authoritative",derivation:"authored",proofIds:[a]});}}catch{}}}}},Nt={id:"infrastructure-as-code",version:"1.0.0",applicable(e){return J(e).some(he)},async run(e){let t=J(e).filter(he);for(let o of t){let i=N(e.projects,o),s=i?.id??e.state.workspaceName,c=i?E("project",`project:${i.id}`):E("workspace",`workspace:${e.state.workspaceName}`),r=e.state.artifactPath(o,i),a=await A.readFile(o,"utf8"),n=await e.state.addProof({provider:this.id,artifact:r,absolutePath:o,trust:"authoritative",derivation:"authored",detail:"Infrastructure definition"});if(/^Dockerfile/i.test(p.basename(o))){let l=[...a.matchAll(/^\s*FROM\s+([^\s]+)(?:\s+AS\s+([^\s]+))?/gim)],f=e.state.addEntity({kind:"container",key:`dockerfile:${s}:${r}`,label:`${s} container image`,...i?{projectId:i.id}:{},attributes:{artifact:r,baseImages:l.map(u=>u[1])},proofIds:[n]});e.state.addRelation({from:c,to:f,kind:"deploys",trust:"authoritative",derivation:"authored",proofIds:[n]});continue}if(/\.tf$/i.test(o)){for(let l of a.matchAll(/^\s*resource\s+["']([^"']+)["']\s+["']([^"']+)["']/gm)){let f=l[1],u=/(?:db|sql|rds|database)/i.test(f)?"database":/(?:queue|kafka|sqs|pubsub|servicebus)/i.test(f)?"queue":"deployment",v=e.state.addEntity({kind:u,key:`terraform:${s}:${f}:${l[2]}`,label:`${f}.${l[2]}`,...i?{projectId:i.id}:{},attributes:{resourceType:f,artifact:r},proofIds:[n]});e.state.addRelation({from:c,to:v,kind:"deploys",trust:"authoritative",derivation:"authored",proofIds:[n]});}continue}let d=e.state.addEntity({kind:"deployment",key:`helm:${s}:${r}`,label:`${s} Helm chart`,...i?{projectId:i.id}:{},attributes:{artifact:r,format:"helm"},proofIds:[n]});e.state.addRelation({from:c,to:d,kind:"deploys",trust:"authoritative",derivation:"authored",proofIds:[n]});}}};function Re(e){let t=e.toLowerCase();return /(?:postgres|mysql|mariadb|mongo|cassandra|cockroach|mssql|oracle)/.test(t)?"database":/(?:rabbitmq|kafka|nats|pulsar|activemq|redis)/.test(t)?"queue":"container"}var Mt={id:"compose",version:"1.0.0",async applicable(e){return (await ke(e)).length>0},async run(e){for(let t of await ke(e)){let o;try{o=(await B(t))[0];}catch(r){e.state.diagnostics.push({code:"graph.provider.compose.parse_failed",severity:"warning",message:`Could not parse ${e.state.artifactPath(t)}: ${r instanceof Error?r.message:String(r)}`});}let i=$(o?.services);if(!i)continue;let s=N(e.projects,t),c=new Map;for(let r of Object.keys(i).sort()){let a=$(i[r]),n=a?.build,d=P(n)??P($(n)?.context),l=d?N(e.projects,p.resolve(p.dirname(t),d)):e.projects.find(g=>g.id.toLowerCase()===r.toLowerCase()||p.basename(g.path).toLowerCase()===r.toLowerCase())??s,f=await e.state.addProof({provider:this.id,artifact:e.state.artifactPath(t,s),absolutePath:t,pointer:`/services/${r}`,trust:"authoritative",derivation:"authored",detail:`Compose service ${r}`}),u=P(a?.image),v=e.state.addEntity({kind:"service",key:`compose-service:${e.state.artifactPath(t,s)}:${r}`,label:r,...l?{projectId:l.id}:{},attributes:{image:u,ports:K(a?.ports).map(String),networks:K(a?.networks),environmentKeys:ft(a?.environment)},proofIds:[f]});if(c.set(r,v),l&&e.state.addRelation({from:E("project",`project:${l.id}`),to:v,kind:"contains",trust:"authoritative",derivation:"authored",proofIds:[f]}),u){let g=e.state.addEntity({kind:Re(u),key:`image:${u}`,label:u,...l?{projectId:l.id}:{},attributes:{image:u},proofIds:[f]});e.state.addRelation({from:v,to:g,kind:Re(u)==="container"?"runs-on":"depends-on",trust:"authoritative",derivation:"authored",proofIds:[f]});}}for(let r of Object.keys(i).sort()){let a=$(i[r]),n=c.get(r);if(n)for(let d of K(a?.depends_on)){let l=c.get(d);if(!l)continue;let f=await e.state.addProof({provider:this.id,artifact:e.state.artifactPath(t,s),absolutePath:t,pointer:`/services/${r}/depends_on/${d}`,trust:"authoritative",derivation:"authored",detail:`${r} depends on ${d}`});e.state.addRelation({from:n,to:l,kind:"depends-on",trust:"authoritative",derivation:"authored",proofIds:[f]});}}}}},zt={id:"documentation",version:"1.0.0",applicable(e){return J(e).some(ye)},async run(e){let t=new Set,o=[e.workspaceFiles,...e.projects.map(i=>e.filesByProject.get(i.id)??[])];for(let i of o){let s=i.filter(c=>ye(c)&&!e.projects.some(r=>c.startsWith(`${r.root}${p.sep}`)&&z(r.root,c)));for(let c of s){if(t.has(c))continue;t.add(c);let r=N(e.projects,c),n=(await A.readFile(c,"utf8")).match(/^#\s+(.+)$/m)?.[1]?.trim()??p.basename(c),d=await e.state.addProof({provider:this.id,artifact:e.state.artifactPath(c,r),absolutePath:c,line:1,trust:"authoritative",derivation:"authored",detail:`Documentation: ${n}`}),l=e.state.addEntity({kind:"document",key:`document:${e.state.artifactPath(c,r)}`,label:n,...r?{projectId:r.id}:{},attributes:{artifact:e.state.artifactPath(c,r)},proofIds:[d]}),f=r?E("project",`project:${r.id}`):E("workspace",`workspace:${e.state.workspaceName}`);e.state.addRelation({from:l,to:f,kind:"documents",trust:"authoritative",derivation:"authored",proofIds:[d]});}}}},Dt={id:"kubernetes",version:"1.0.0",async applicable(e){return (await Pe(e)).length>0},async run(e){for(let t of await Pe(e)){let o=N(e.projects,t),i=o?E("project",`project:${o.id}`):E("workspace",`workspace:${e.state.workspaceName}`),s=await B(t);for(let c=0;c<s.length;c+=1){let r=s[c],a=P(r.kind),n=$(r.metadata),d=P(n?.name);if(!a||!d)continue;let l=P(n?.namespace)??"default",f=/Deployment|StatefulSet|DaemonSet/i.test(a)?"deployment":/Service|Ingress/i.test(a)?"service":/ConfigMap|Secret/i.test(a)?"environment":"deployment",u=await e.state.addProof({provider:this.id,artifact:e.state.artifactPath(t,o),absolutePath:t,pointer:`/documents/${c}`,trust:"authoritative",derivation:"authored",detail:`${a} ${l}/${d}`}),v=e.state.addEntity({kind:f,key:`kubernetes:${a}:${l}:${d}`,label:`${a}/${d}`,...o?{projectId:o.id}:{},attributes:{resourceKind:a,namespace:l,secret:a==="Secret",keys:a==="Secret"||a==="ConfigMap"?Object.keys($(r.data)??{}).sort():void 0},proofIds:[u]});e.state.addRelation({from:i,to:v,kind:f==="deployment"?"deploys":"contains",trust:"authoritative",derivation:"authored",proofIds:[u]});let g=e.state.addEntity({kind:"environment",key:`kubernetes-namespace:${l}`,label:`Kubernetes namespace ${l}`,attributes:{namespace:l},proofIds:[u]});e.state.addRelation({from:v,to:g,kind:"runs-on",trust:"authoritative",derivation:"authored",proofIds:[u]});}}}},Bt={id:"ci-workflow",version:"1.0.0",applicable(e){return we(e).length>0},async run(e){let t=we(e);for(let o of t){let i=N(e.projects,o),s=e.state.artifactPath(o,i),c=p.basename(o)==="Jenkinsfile",r=p.basename(o),a=[],n=[];if(c)a=[...(await A.readFile(o,"utf8")).matchAll(/\bstage\s*\(\s*["']([^"']+)["']/g)].map(u=>u[1]);else {let f;try{f=(await B(o))[0];}catch{continue}if(!f)continue;r=P(f.name)??r;let u=T(p.relative(i?.root??e.workspacePath,o));if(/^\.gitlab-ci\./i.test(u)){let v=new Set(["stages","variables","workflow","include","default","image","services","cache","before_script","after_script"]);a=Object.keys(f).filter(g=>!g.startsWith(".")&&!v.has(g)).sort();}else a=[...new Set([...Object.keys($(f.jobs)??{}),...Object.keys($($(f.workflows)?.jobs)??{}),...K(f.stages)])].sort();n=K(f.on);}a.length===0&&(a=["pipeline"]);let d=await e.state.addProof({provider:this.id,artifact:s,absolutePath:o,...c?{}:{pointer:"/jobs"},trust:"authoritative",derivation:"authored",detail:"CI/CD workflow"}),l=e.state.addEntity({kind:"pipeline",key:`pipeline:${s}`,label:r,attributes:{jobs:a,triggers:n,artifact:s},proofIds:[d]});e.state.addRelation({from:i?E("project",`project:${i.id}`):E("workspace",`workspace:${e.state.workspaceName}`),to:l,kind:"contains",trust:"authoritative",derivation:"authored",proofIds:[d]});}}},Gt={id:"codeowners",version:"1.0.0",async applicable(e){return (await be(e)).length>0},async run(e){for(let t of await be(e)){let o=N(e.projects,t),s=(await A.readFile(t,"utf8")).split(/\r?\n/);for(let c=0;c<s.length;c+=1){let r=s[c].trim();if(!r||r.startsWith("#"))continue;let[a,...n]=r.split(/\s+/);for(let d of n.filter(l=>l.startsWith("@"))){let l=await e.state.addProof({provider:this.id,artifact:e.state.artifactPath(t,o),absolutePath:t,line:c+1,trust:"authoritative",derivation:"authored",detail:`${a} ${d}`}),f=e.state.addEntity({kind:"owner",key:`owner:${d.toLowerCase()}`,label:d,aliases:[d],proofIds:[l]}),u=e.projects.filter(g=>{let w=a.replace(/^\//,"").replace(/\*.*$/,""),y=p.dirname(t),m=[".github","docs"].includes(p.basename(y))?p.dirname(y):y,k=T(p.relative(m,g.root));return w&&(k==="."||k.startsWith(w.replace(/\/$/,""))||g.path.startsWith(w.replace(/\/$/,"")))}),v=u.length>0?u.map(g=>E("project",`project:${g.id}`)):o?[E("project",`project:${o.id}`)]:[E("workspace",`workspace:${e.state.workspaceName}`)];for(let g of v)e.state.addRelation({from:f,to:g,kind:"owns",trust:"authoritative",derivation:"authored",proofIds:[l]});}}}}},xt={id:"architecture-decisions",version:"1.0.0",applicable(e){return [{root:e.workspacePath,files:e.workspaceFiles},...e.projects.map(t=>({root:t.root,files:e.filesByProject.get(t.id)??[]}))].some(t=>t.files.some(o=>ve(t.root,o)))},async run(e){let t=new Set,o=[{root:e.workspacePath,files:e.workspaceFiles},...e.projects.map(i=>({root:i.root,files:e.filesByProject.get(i.id)??[]}))];for(let i of o){let s=i.files.filter(c=>ve(i.root,c));for(let c of s){if(t.has(c))continue;t.add(c);let r=N(e.projects,c),a=await A.readFile(c,"utf8"),n=a.match(/^#\s+(.+)$/m)?.[1]?.trim()??p.basename(c,".md"),d=a.match(/^status\s*:\s*(.+)$/im)?.[1]?.trim(),l=await e.state.addProof({provider:this.id,artifact:e.state.artifactPath(c,r),absolutePath:c,line:1,trust:"authoritative",derivation:"authored",detail:`Architecture decision: ${n}`}),f=e.state.addEntity({kind:"decision",key:`decision:${e.state.artifactPath(c,r)}`,label:n,...r?{projectId:r.id}:{},attributes:{status:d,artifact:e.state.artifactPath(c,r)},proofIds:[l]}),u=r?E("project",`project:${r.id}`):E("workspace",`workspace:${e.state.workspaceName}`);e.state.addRelation({from:u,to:f,kind:"decided-by",trust:"authoritative",derivation:"authored",proofIds:[l]});}}}},qt=[Pt,$t,It,Et,Ct,_t,Tt,Ot,Lt,Ft,Mt,Nt,Dt,Bt,Gt,zt,xt];async function Zt(e$1,t){for(let o of t.edges){let i=[];for(let s of o.evidence){let c=x(s.file);i.push(await e$1.addProof({provider:"project-topology",artifact:c,absolutePath:p.resolve(e$1.workspacePath,c),derivation:o.source==="inferred"?"inferred":"authored",trust:o.source==="inferred"?"observed":"authoritative",confidence:o.confidence,detail:s.detail??`${o.kind} relationship`}));}i.length===0&&i.push(await e$1.addProof({provider:"project-topology",artifact:e.model,derivation:"inferred",trust:"ambiguous",confidence:o.confidence,detail:`${o.kind} relationship without source locator`})),e$1.addRelation({from:E("project",`project:${o.from}`),to:E("project",`project:${o.to}`),kind:o.kind==="event-pub-sub"?"consumes":"depends-on",derivation:o.source==="inferred"?"inferred":"authored",trust:o.source==="inferred"?"observed":"authoritative",confidence:o.confidence,proofIds:i});}}function Ht(e){let t=[...e.entities.values()].filter(i=>i.kind==="endpoint"),o=new Map;for(let i of t){let s=String(i.attributes.method??"").toUpperCase(),c=String(i.attributes.path??"");if(!i.projectId||!s||!c)continue;let r=`${i.projectId}\0${s}\0${c}`,a=o.get(r)??[];a.push(i),o.set(r,a);}for(let i of o.values()){if(i.length<2)continue;let s=i.find(c=>c.proofIds.some(r=>e.proofs.get(r)?.trust==="authoritative"));if(s)for(let c of i.filter(r=>r.id!==s.id))e.addRelation({from:c.id,to:s.id,kind:"implements",derivation:"extracted",trust:"corroborated",confidence:"high",proofIds:[...c.proofIds,...s.proofIds]});}}function H(e,t){let o=[...new Set(e)],i=o.filter(s=>t.has(s)).length;return {eligibleCount:o.length,boundCount:i,unknownCount:o.length-i,coverageRatio:o.length===0?null:i/o.length}}function Vt(e,t){let o=e.filter(n=>n.kind==="project").map(n=>n.id),i=e.filter(n=>n.kind==="endpoint").map(n=>n.id),s=new Set(t.filter(n=>n.kind==="implements").flatMap(n=>[n.from,n.to])),c=new Set(t.filter(n=>n.kind==="tests").flatMap(n=>[n.from,n.to]).filter(n=>o.includes(n))),r=new Set(t.filter(n=>n.kind==="deploys").flatMap(n=>[n.from,n.to]).filter(n=>o.includes(n))),a=new Set(t.filter(n=>n.kind==="owns").flatMap(n=>[n.from,n.to]).filter(n=>o.includes(n)));return {apiImplementation:H(i,s),projectTests:H(o,c),projectDeployment:H(o,r),projectOwnership:H(o,a)}}async function go(e){let t=p.resolve(e.workspacePath),o=e.now??new Date,i=e.projects.map(h=>{let I=h.absolutePath?p.resolve(h.absolutePath):p.resolve(t,h.path),S=p.relative(t,I),W=S.startsWith(`..${p.sep}`)||S===".."||p.isAbsolute(S);return {...h,root:I,artifactPrefix:W?`external/${h.id}`:T(S||h.id)}}).sort((h,I)=>h.id.localeCompare(I.id)),s=new se(t,o,e.workspace.name),c=Math.max(100,Math.min(e.maxFilesPerProject??2e3,1e4)),r=Math.min(Math.max(c*10,2e4),5e4),a=new Map(await Promise.all(i.map(async h=>[h.id,await q(h.root,c)]))),n=new Map(await Promise.all(i.map(async h=>[h.id,await q(h.root,r)]))),d=Math.min(c*Math.max(i.length,1),2e4),l=await q(t,d),f=await yt({workspacePath:t,projects:i,projectFileLimit:r,workspaceFileLimit:d,inventories:{workspaceFiles:l,projectFiles:n}}),u={workspacePath:t,projects:i,filesByProject:a,semanticFilesByProject:n,semanticScanLimit:r,workspaceFiles:l,now:o,maxFilesPerProject:c,contract:e.contract??null,state:s};for(let h of qt){let I={entities:s.entities.size,relations:s.relations.size,proofs:s.proofs.size,diagnostics:s.diagnostics.length},S="passed",W=null;try{if(!(h.applicable?await h.applicable(u):true))S="skipped";else {await h.run(u);let Z=s.entities.size-I.entities,Oe=s.relations.size-I.relations,Le=s.proofs.size-I.proofs;Z===0&&Oe===0&&Le===0?(S="partial",s.diagnostics.push({code:`graph.provider.${h.id}.empty_result`,severity:"warning",message:`${h.id} found an applicable source surface but produced no graph evidence.`,recommendation:"Inspect the matching source format or extend the provider before treating this graph dimension as complete."})):s.diagnostics.length>I.diagnostics&&(S="partial");}}catch(O){S="failed";let Z=O instanceof Error?O.message:String(O);W=Z,s.diagnostics.push({code:`graph.provider.${h.id}.failed`,severity:"warning",message:`${h.id} provider failed: ${Z}`,recommendation:"Repair the referenced source artifact and rerun workspace graph emit."});}let _=s.diagnostics.slice(I.diagnostics).map(O=>`${O.code}: ${O.message}`);W&&_.length===0&&_.push(W),s.providers.push({id:h.id,version:h.version,status:S,permission:"filesystem-read",discoveredEntities:s.entities.size-I.entities,discoveredRelations:s.relations.size-I.relations,proofCount:s.proofs.size-I.proofs,diagnostics:_});}Ht(s),await Zt(s,e.projectTopology);let v=[...s.entities.values()].sort((h,I)=>h.id.localeCompare(I.id)),g=[...s.relations.values()].sort((h,I)=>h.id.localeCompare(I.id)),w=[...s.proofs.values()].sort((h,I)=>h.id.localeCompare(I.id)),y=v.filter(h=>h.proofIds.length>0).length,m=g.filter(h=>h.proofIds.length>0).length,k=s.providers.filter(h=>h.status!=="failed").length,j=e.projectTopology.diagnostics?.filter(h=>h.code==="graph.edges.missing").flatMap(h=>h.nodeIds??[])??[];j.length>0&&s.diagnostics.push({code:"graph.knowledge.project_relationships_unknown",severity:"warning",message:`${j.length} project(s) have no proven inter-project relationship. This is unknown topology, not proof of independence.`,entityIds:j.map(h=>E("project",`project:${h}`)),recommendation:"Author service contracts or add OpenAPI, Compose, Kubernetes, package or import evidence."});let b=s.diagnostics.filter(h=>h.code.includes("unknown")||h.code.includes("unresolved")||h.code.includes("limit_reached")||h.code.endsWith(".empty_result")).reduce((h,I)=>h+Math.max(I.entityIds?.length??0,I.relationIds?.length??0,1),0),C=Vt(v,g),R=Object.values(C).reduce((h,I)=>h+I.unknownCount,0);return {schemaVersion:pe,generatedAt:o.toISOString(),source:{...e.source,inputs:f},workspace:e.workspace,projectTopology:e.projectTopology,entities:v,relations:g,proofs:w,providers:[...s.providers].sort((h,I)=>h.id.localeCompare(I.id)),quality:{entityCount:v.length,relationCount:g.length,proofCount:w.length,entityProofCoverageRatio:v.length===0?1:y/v.length,relationProofCoverageRatio:g.length===0?1:m/g.length,providerSuccessRatio:s.providers.length===0?1:k/s.providers.length,conflictCount:s.diagnostics.filter(h=>h.code.includes("conflict")).length,unknownCount:b+R,bindingCoverage:C,portable:true,secretValuesEmitted:false},diagnostics:[...s.diagnostics].sort((h,I)=>h.code.localeCompare(I.code)||h.message.localeCompare(I.message))}}function ho(e,t){return E(e,t)}
8
+ export{pe as a,uo as b,mo as c,yt as d,go as e,ho as f};
@@ -0,0 +1,2 @@
1
+ import {a as a$1,c,j as j$1,i,g,h}from'./chunk-XKDR5BGS.js';import {t,u}from'./chunk-MOSXTVPU.js';import B from'fs';import a from'path';import C from'fs-extra';var Z=[{id:"fastapi.standard",aliases:["fastapi","fastapi.standard"],label:"fastapi \u2014 FastAPI Standard Kit",description:"Core-backed FastAPI service scaffold.",owner:"core",runtime:"python",framework:"fastapi",category:"backend",moduleSupport:true,workspacePythonEngine:"required",stability:"stable",versionPolicy:"tested-baseline"},{id:"fastapi.ddd",aliases:["fastapi.ddd","fastapi-ddd"],label:"fastapi \u2014 FastAPI DDD Kit",description:"Core-backed FastAPI DDD service scaffold.",owner:"core",runtime:"python",framework:"fastapi",category:"backend",moduleSupport:true,workspacePythonEngine:"required",stability:"stable",versionPolicy:"tested-baseline"},{id:"nestjs.standard",aliases:["nestjs","nest","nestjs.standard"],label:"nestjs \u2014 NestJS Standard Kit",description:"Core-backed NestJS service scaffold.",owner:"core",runtime:"node",framework:"nestjs",category:"backend",moduleSupport:true,workspacePythonEngine:"optional",stability:"stable",versionPolicy:"tested-baseline"},{id:"springboot.standard",aliases:["spring","springboot","springboot.standard","java"],label:"spring \u2014 Spring Boot Standard Kit",description:"npm-backed Spring Boot service scaffold.",owner:"npm",runtime:"java",framework:"springboot",category:"backend",moduleSupport:false,workspacePythonEngine:"none",stability:"stable",versionPolicy:"tested-baseline",generator:"springboot",createUsage:"workspai create project springboot.standard <name> [--java-version <major>] [--spring-boot-version <semver>] [--group-id <com.example>] [--package-name <com.example.app>] [--port <number>]"},{id:"gofiber.standard",aliases:["go","go.standard","fiber","gofiber","gofiber.standard","go/fiber"],label:"go/fiber \u2014 Go Fiber Standard Kit",description:"npm-backed Go Fiber service scaffold.",owner:"npm",runtime:"go",framework:"gofiber",category:"backend",moduleSupport:false,workspacePythonEngine:"none",stability:"stable",versionPolicy:"tested-baseline",generator:"gofiber",createUsage:"workspai create project gofiber.standard <name> [--output <dir>]"},{id:"gogin.standard",aliases:["gin","gogin","gogin.standard","go/gin"],label:"go/gin \u2014 Go Gin Standard Kit",description:"npm-backed Go Gin service scaffold.",owner:"npm",runtime:"go",framework:"gogin",category:"backend",moduleSupport:false,workspacePythonEngine:"none",stability:"stable",versionPolicy:"tested-baseline",generator:"gogin",createUsage:"workspai create project gogin.standard <name> [--output <dir>]"},{id:"dotnet.webapi.clean",aliases:["dotnet","dotnet.webapi","dotnet.webapi.clean","aspnet","aspnetcore","asp.net","asp.net-core","csharp","c#"],label:"dotnet \u2014 ASP.NET Core Clean Web API",description:"npm-backed ASP.NET Core Web API with clean architecture boundaries.",owner:"npm",runtime:"dotnet",framework:"dotnet",category:"backend",moduleSupport:false,workspacePythonEngine:"none",stability:"preview",versionPolicy:"tested-baseline",generator:"dotnet-webapi-clean",createUsage:"workspai create project dotnet.webapi.clean <name> [--target-framework net8.0] [--root-namespace <Company.Product>] [--port <number>]"},{id:"rust.axum",aliases:["rust.axum","axum","rust-axum"],label:"rust/axum \u2014 Rust Axum API",description:"Workspai-owned Axum service with health, tests, CI, and container baseline.",owner:"npm",runtime:"rust",framework:"axum",category:"backend",moduleSupport:false,workspacePythonEngine:"none",stability:"preview",versionPolicy:"tested-baseline",generator:"rust-axum",createUsage:"workspai create project rust.axum <name> [--port <number>] [--output <dir>] [--skip-git]"}],K=new Map;for(let e of Z){K.set(e.id.toLowerCase(),e);for(let t of e.aliases)K.set(t.toLowerCase(),e);}function _(e){return e?K.get(e.trim().toLowerCase())??null:null}function Ze(e){return _(e)?.id??e}function et(){return Z.filter(e=>e.owner==="core"||e.generator)}function tt(e){return _(e)?.owner==="npm"}async function rt(e,t){if(!e.generator)throw new Error(`Kit is not backed by an npm generator: ${e.id}`);if(e.generator==="gofiber"){let{generateGoFiberKit:r}=await import('./gofiber-standard-47S2GYAO.js');await r(t.projectPath,{project_name:t.projectName,module_path:t.projectName,skipGit:t.skipGit,skipInstall:t.skipInstall});return}if(e.generator==="gogin"){let{generateGoGinKit:r}=await import('./gogin-standard-EWB4XNOI.js');await r(t.projectPath,{project_name:t.projectName,module_path:t.projectName,skipGit:t.skipGit,skipInstall:t.skipInstall});return}if(e.generator==="springboot"){let{generateSpringBootKit:r}=await import('./springboot-standard-Y5ADLZMQ.js');await r(t.projectPath,{project_name:t.projectName,artifact_id:t.projectName,java_version:m(t.args,"--java-version")?.trim(),spring_boot_version:m(t.args,"--spring-boot-version")?.trim(),springdoc_version:m(t.args,"--springdoc-version")?.trim(),group_id:m(t.args,"--group-id")?.trim(),package_name:m(t.args,"--package-name")?.trim(),description:m(t.args,"--description")?.trim(),port:m(t.args,"--port")?.trim(),skipGit:t.skipGit,skipInstall:t.skipInstall});return}if(e.generator==="dotnet-webapi-clean"){let{generateDotnetWebApiCleanKit:r}=await import('./dotnet-webapi-clean-AVHPJG7Y.js');await r(t.projectPath,{project_name:t.projectName,target_framework:m(t.args,"--target-framework")?.trim(),root_namespace:m(t.args,"--root-namespace")?.trim(),description:m(t.args,"--description")?.trim(),port:m(t.args,"--port")?.trim(),skipGit:t.skipGit,skipInstall:t.skipInstall});return}if(e.generator==="rust-axum"){let{generateRustAxumKit:r}=await import('./rust-axum-M5X4ZC4Z.js');await r(t.projectPath,{project_name:t.projectName,description:m(t.args,"--description")?.trim(),port:m(t.args,"--port")?.trim(),skipGit:t.skipGit,skipInstall:t.skipInstall});return}throw new Error(`Unhandled npm kit generator: ${e.generator}`)}function m(e,t){let r=e.indexOf(t);if(r>=0&&r+1<e.length)return e[r+1];let n=e.find(i=>i.startsWith(`${t}=`));return n?n.slice(t.length+1):void 0}var y=["init","dev","start","build","test","lint","format","help"],ee={python:{runtime:"python",displayName:"Python",tier:"first-class",scaffoldSupport:true,importSupport:true,lifecycleCommands:y,moduleCommands:true,doctorSupport:"full",notes:["Core-backed Python projects support RapidKit Core modules and lifecycle commands."]},node:{runtime:"node",displayName:"Node.js",tier:"extended",scaffoldSupport:true,importSupport:true,lifecycleCommands:y,moduleCommands:true,doctorSupport:"full",notes:["Node projects support npm-owned lifecycle commands; NestJS is the first-class Node framework."]},go:{runtime:"go",displayName:"Go",tier:"extended",scaffoldSupport:true,importSupport:true,lifecycleCommands:y,moduleCommands:false,doctorSupport:"readiness",notes:["Go projects support workspace governance and lifecycle commands via Go tooling."]},java:{runtime:"java",displayName:"Java / Spring Boot",tier:"extended",scaffoldSupport:true,importSupport:true,lifecycleCommands:y,moduleCommands:false,doctorSupport:"readiness",notes:["Java projects support Maven/Gradle lifecycle commands and workspace governance."]},dotnet:{runtime:"dotnet",displayName:".NET / ASP.NET Core",tier:"extended",scaffoldSupport:true,importSupport:true,lifecycleCommands:y,moduleCommands:false,doctorSupport:"readiness",notes:[".NET projects support dotnet CLI lifecycle commands and workspace governance."]},php:{runtime:"php",displayName:"PHP",tier:"extended",scaffoldSupport:true,importSupport:true,lifecycleCommands:y,moduleCommands:false,doctorSupport:"readiness",notes:["Laravel projects use the official Composer generator and PHP/Composer lifecycle adapter."]},ruby:{runtime:"ruby",displayName:"Ruby",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["Ruby projects are importable and governed as observed projects until a kit exists."]},rust:{runtime:"rust",displayName:"Rust",tier:"extended",scaffoldSupport:true,importSupport:true,lifecycleCommands:y,moduleCommands:false,doctorSupport:"readiness",notes:["Rust projects support Axum and Tauri scaffolding plus Cargo lifecycle commands."]},elixir:{runtime:"elixir",displayName:"Elixir",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["Elixir projects are importable and governed as observed projects until a kit exists."]},clojure:{runtime:"clojure",displayName:"Clojure",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["Clojure projects are importable and governed as observed projects until a kit exists."]},scala:{runtime:"scala",displayName:"Scala",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["Scala projects are importable and governed as observed projects until a kit exists."]},kotlin:{runtime:"kotlin",displayName:"Kotlin",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["Kotlin projects are importable and governed as observed projects until a kit exists."]},deno:{runtime:"deno",displayName:"Deno",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["Deno projects are importable and governed as observed projects until a kit exists."]},bun:{runtime:"bun",displayName:"Bun",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["Bun projects are importable and governed as observed projects until a kit exists."]},c:{runtime:"c",displayName:"C",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["C projects are importable and receive manifest, test, quality, security, and coverage evidence without assuming a package manager."]},cpp:{runtime:"cpp",displayName:"C++",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["C++ projects are importable and receive manifest, test, quality, security, and coverage evidence without assuming a package manager."]},unknown:{runtime:"unknown",displayName:"Unknown",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["Unknown projects are tracked safely but require manual command configuration."]}},ke=["fastapi","nestjs"],Ce=["django","flask","nextjs","remix","nuxt","react","vite","vue","sveltekit","svelte","angular","astro","solid","express","fastify","koa","echo","gofiber","gogin","springboot","dotnet","laravel","symfony","rails","sinatra","actix","axum","rocket","phoenix","clojure","scala","kotlin","deno","bun","tauri","electron","vscode-extension","c","cpp"];function x(e){return ee[e||"unknown"]??ee.unknown}function te(e){return ke.includes(e)?"first-class":Ce.includes(e)?"extended":"observed"}function re(e){let t=x(e.runtime);return {lifecycleCommands:t.lifecycleCommands,moduleCommands:e.moduleSupport&&t.moduleCommands,unsupportedLifecycleCommands:y.filter(r=>!t.lifecycleCommands.includes(r))}}var Se=["python","node","go","java","dotnet","rust","php"];function j(e){return !!e&&Se.includes(e)}function A(e,t){return t!=="lint"&&t!=="format"&&t!=="docs"?false:e==="python"}function ne(e){let t=x(e),r=j(t.runtime),n=we[t.runtime]??[],i=je[t.runtime]??[];return {runtime:t.runtime,displayName:t.displayName,lifecycleCommands:t.lifecycleCommands,hasExecutor:r,packageManagers:n,primaryFiles:i,notes:t.notes}}var we={python:["poetry","pip","uv"],node:["npm","pnpm","yarn","bun"],go:["go"],java:["maven","gradle"],dotnet:["dotnet"],php:["composer"],ruby:["bundle"],rust:["cargo"],elixir:["mix"],kotlin:["gradle"],deno:["deno"],bun:["bun"]},je={python:["pyproject.toml","requirements.txt","requirements.in"],node:["package.json"],go:["go.mod"],java:["pom.xml","build.gradle","build.gradle.kts"],dotnet:["*.csproj","*.sln"],php:["composer.json"],ruby:["Gemfile"],rust:["Cargo.toml"],elixir:["mix.exs"],kotlin:["settings.gradle.kts"],deno:["deno.json","deno.jsonc"],bun:["package.json","bunfig.toml"]};function v(e,t){let r=g({runtime:typeof e?.runtime=="string"?e.runtime:void 0,framework:typeof e?.framework=="string"?e.framework:void 0,kitName:typeof e?.kit_name=="string"?e.kit_name:typeof e?.kit=="string"?e.kit:void 0});return r.runtime!=="unknown"?r.runtime:j$1(t,e).runtime}function ie(e){let t$1=e;for(;;){for(let n of t(t$1,"project.json"))if(B.existsSync(n))try{return JSON.parse(B.readFileSync(n,"utf8"))}catch{return null}let r=a.dirname(t$1);if(r===t$1)break;t$1=r;}return null}function ft(e,t){return v(e,t)==="go"}function gt(e,t){return v(e,t)==="node"}function yt(e,t){return v(e,t)==="java"}function bt(e,t){return v(e,t)==="dotnet"}function kt(e,t){return v(e,t)==="python"}var xe=["project.json","context.json","file-hashes.json"];async function Rt(e){let t=a.resolve(e),r=[];for(let n of xe){let i=u(t,n);if(await C.pathExists(i))continue;let c=a.join(t,".rapidkit",n);if(!await C.pathExists(c))continue;let k=await C.readJson(c);await C.ensureDir(a.dirname(i));let S=`${i}.${process.pid}.${Date.now()}.tmp`;try{await C.writeJson(S,k,{spaces:2}),await C.move(S,i,{overwrite:false}),r.push(i);}finally{await C.remove(S).catch(()=>{});}}return r}function ve(e){for(let t$1 of t(e,"context.json"))if(B.existsSync(t$1))try{return JSON.parse(B.readFileSync(t$1,"utf8"))}catch{return null}return null}function Pe(e){let t=e?.engine;return t==="npm"||t==="pip"||t==="python"?t:"unknown"}function Ne(e,t){if(e?.module_support===false||t?.module_support===false||!e&&t)return false;let r=typeof e?.kit_name=="string"?e.kit_name:typeof e?.kit=="string"?e.kit:typeof t?.kit=="string"?t.kit:void 0,n=r?_(r):void 0;return n?.owner==="core"&&n.moduleSupport===true}function Re(e,t,r){let n=g({runtime:typeof t?.runtime=="string"?t.runtime:typeof r?.runtime=="string"?r.runtime:void 0,framework:typeof t?.framework=="string"?t.framework:typeof r?.framework=="string"?r.framework:void 0,kitName:typeof t?.kit_name=="string"?t.kit_name:typeof t?.kit=="string"?t.kit:typeof r?.kit=="string"?r.kit:void 0});return n.key!=="unknown"?n:j$1(e,t)}function ae(e){let t$1=a.resolve(e);if(![...t(t$1,"project.json"),...t(t$1,"context.json")].some(k=>B.existsSync(k)))return null;let n=ie(t$1),i=ve(t$1),c=Re(t$1,n,i);return {projectRoot:t$1,projectJson:n,contextJson:i,detection:c,moduleSupport:Ne(n,i),engine:Pe(i)}}var Ee=["build","dev","start","test","lint","format"],G=["init","test","build","start"],_t=["lint","format","docs"];function At(e){return !!e&&Ee.includes(e)}var Me={dev:["dev","start:dev"],start:["start","start:prod","preview"],build:["build"],test:["test","test:unit","test:ci"],lint:["lint"],format:["format","prettier"]},ce={nestjs:{dev:["dev","start:dev"],start:["start","start:prod"],build:["build"],test:["test","test:e2e"],lint:["lint"],format:["format"]},express:{dev:["dev","start:dev"],start:["start"],build:["build"],test:["test"],lint:["lint"],format:["format"]},fastify:{dev:["dev","start:dev"],start:["start"],build:["build"],test:["test"],lint:["lint"],format:["format"]},koa:{dev:["dev","start:dev"],start:["start"],build:["build"],test:["test"],lint:["lint"],format:["format"]}};function _e(e){let t=a.join(e,"package.json");if(!B.existsSync(t))return {};try{let n=JSON.parse(B.readFileSync(t,"utf8")).scripts??{};return Object.fromEntries(Object.entries(n).filter(i=>typeof i[1]=="string"))}catch{return {}}}function Ae(e,t){let r=t?c(t):"unknown",n=r!=="unknown"?a$1(r,e):[],i=t?ce[t]?.[e]??[]:[],c$1=Me[e]??[],k=[...n,...i,...c$1];return [...new Set(k)]}function me(e,t,r){let n=_e(e),i=new Set(Object.keys(n));if(i.has(t))return {scriptName:t,source:"package.json"};for(let c$1 of Ae(t,r?.framework))if(i.has(c$1))return {scriptName:c$1,source:a$1(c(r?.framework??"unknown"),t).includes(c$1)||ce[r?.framework??""]?.[t]?.includes(c$1)?"framework-candidate":"generic-candidate"};return null}function W(e){return B.existsSync(a.join(e,"package.json"))}function pe(e){let t=ne(e);return t.runtime==="unknown"&&e!=="unknown"?null:{runtime:t.runtime,displayName:t.displayName,supportedCommands:t.lifecycleCommands,packageManagers:t.packageManagers,primaryFiles:t.primaryFiles,notes:t.notes,hasExecutor:t.hasExecutor}}function s(e){try{return B.existsSync(e)}catch{return false}}function b(e){try{return s(e)?B.readFileSync(e,"utf8"):""}catch{return ""}}function f(e,t){let r=b(a.join(e,"Makefile"));return r?new RegExp(`^${t}\\s*:`).test(r):false}function Fe(e){let t=[e];for(;t.length>0;){let r=t.shift();if(!r)break;let n=[];try{n=B.readdirSync(r,{withFileTypes:true});}catch{continue}for(let i of n){if(i.name==="node_modules"||i.name===".git"||i.name==="dist")continue;let c=a.join(r,i.name);if(i.isFile()&&i.name.endsWith(".csproj"))return true;i.isDirectory()&&t.push(c);}}return false}function de(e,t){let r=s(a.join(e,"pyproject.toml")),n=s(a.join(e,"requirements.txt"))||s(a.join(e,"requirements.in")),i=s(a.join(e,"manage.py"));switch(t){case "init":return r||n;case "dev":case "start":return r||i||n;case "test":return r||n||s(a.join(e,"tests"));case "build":return r||n;case "lint":case "format":return r||n||i||s(a.join(e,"setup.py"))||s(a.join(e,"setup.cfg"));default:return false}}function Le(e,t){if(!s(a.join(e,"go.mod")))return false;switch(t){case "init":return true;case "dev":return f(e,"run")||s(a.join(e,"main.go"));case "test":return true;case "build":return true;case "start":return f(e,"run")||s(a.join(e,"main.go"))||s(a.join(e,"cmd"));case "lint":return s(a.join(e,".golangci.yml"))||s(a.join(e,".golangci.yaml"))||f(e,"lint");case "format":return f(e,"fmt")||f(e,"format");default:return false}}function De(e,t){let r=s(a.join(e,"pom.xml")),n=s(a.join(e,"build.gradle"))||s(a.join(e,"build.gradle.kts"));if(!r&&!n)return false;switch(t){case "init":case "test":case "build":case "dev":case "start":return true;case "lint":return f(e,"lint")||b(a.join(e,"pom.xml")).includes("checkstyle")||b(a.join(e,"build.gradle")).includes("checkstyle")||b(a.join(e,"build.gradle.kts")).includes("checkstyle");case "format":return f(e,"format")||b(a.join(e,"build.gradle")).includes("spotless")||b(a.join(e,"build.gradle.kts")).includes("spotless");default:return false}}function Oe(e,t){if(!Fe(e))return false;switch(t){case "init":case "dev":case "test":case "build":case "start":return true;case "lint":return f(e,"lint")||b(a.join(e,"Directory.Build.props")).includes("EnforceCodeStyleInBuild");case "format":return f(e,"format")||s(a.join(e,".editorconfig"));default:return false}}function Te(e,t,r){return t==="init"?W(e):me(e,t,{framework:r})!==null}function Ie(e,t,r){switch(t){case "php":return r==="init"&&s(a.join(e,"composer.json"));case "ruby":return r==="init"&&s(a.join(e,"Gemfile"));case "rust":return s(a.join(e,"Cargo.toml"))?r==="init"||r==="test"||r==="build"||r==="start":false;case "elixir":return r==="init"&&s(a.join(e,"mix.exs"));case "deno":return s(a.join(e,"deno.json"))||s(a.join(e,"deno.jsonc"))?r==="init"||r==="dev"||r==="test"||r==="start":r==="init"&&s(a.join(e,"package.json"));case "bun":return s(a.join(e,"bunfig.toml"))||s(a.join(e,"bun.lock"))?r==="init"||r==="dev"||r==="test"||r==="build"||r==="start":r==="init"&&s(a.join(e,"package.json"));default:return false}}function Ke(e){try{let t=JSON.parse(b(a.join(e,"composer.json")));return new Set(Object.keys(t.scripts??{}))}catch{return new Set}}function Be(e,t){if(!s(a.join(e,"composer.json")))return false;let r=Ke(e),n=s(a.join(e,"artisan"));switch(t){case "init":return true;case "dev":return n||r.has("dev");case "start":return n||r.has("start");case "test":return n||r.has("test");case "build":return r.has("build");case "lint":return r.has("lint")||r.has("analyse")||r.has("analyze");case "format":return r.has("format")||r.has("fmt")||s(a.join(e,"pint.json"))||s(a.join(e,"vendor","bin","pint"));default:return false}}function Ge(e,t){return s(a.join(e,"Cargo.toml"))?t==="init"||t==="dev"||t==="start"||t==="build"||t==="test"||t==="lint"||t==="format":false}function L(e,t,r,n){if(A(t,r))return de(e,r);if(!j(t))return Ie(e,t,r);switch(t){case "node":return Te(e,r,n);case "python":return de(e,r);case "go":return Le(e,r);case "java":return De(e,r);case "dotnet":return Oe(e,r);case "rust":return Ge(e,r);case "php":return Be(e,r);default:return false}}function Ue(e,t,r){return ["init","dev","start","build","test","lint","format"].filter(i=>L(e,t,i,r))}function le(e){let t=re({runtime:e.runtime,moduleSupport:e.moduleSupport});if(!e.projectPath)return t;let r=Ue(e.projectPath,e.runtime,e.framework),n=new Set(["help"]);for(let c of r)t.lifecycleCommands.includes(c)&&n.add(c);e.runtime==="node"&&W(e.projectPath)&&n.add("init");let i=[...n].sort();return {lifecycleCommands:i,moduleCommands:t.moduleCommands,unsupportedLifecycleCommands:t.lifecycleCommands.filter(c=>!i.includes(c)).sort()}}var q=["version","commands","doctor","project","help"],N=["init","dev","start","build","test","lint","format"],Y=["add","modules","upgrade","diff","merge","reconcile","rollback","uninstall","checkpoint","snapshot","optimize"],H=["create","list","info","frameworks","license"];q.filter(e=>e!=="help");function $e(e){let t$1=a.resolve(e);for(;;){if([...t(t$1,"project.json"),...t(t$1,"context.json")].some(i=>B.existsSync(i)))return t$1;let n=a.dirname(t$1);if(n===t$1)break;t$1=n;}return null}function P(e,t){return {command:e,...t}}var Je=new Set(["dev","lint","format"]),qe=new Set(G);function Ye(e,t){return t?qe.has(e)?{executionScope:"fleet",fleetEligible:true}:Je.has(e)?{executionScope:"local-only",fleetEligible:false}:{executionScope:"local-only",fleetEligible:false}:{executionScope:"local-only",fleetEligible:false}}function He(e,t){return A(t.runtime,e)?"core":"runtime"}function ze(e,t,r,n){return !e||!n.lifecycleCommands.includes(t)?false:L(e,r.runtime,t,r.key)}function Ve(e,t){let r=!!e&&(t.runtime==="python"||j(t.runtime)&&L(e,t.runtime,"build",t.key));return P("docs",{owner:t.runtime==="python"?"core":"runtime",status:r?"supported":"unsupported",reason:r?t.runtime==="python"?"Documentation generation is delegated to Python Core for this project.":"Project documentation commands are available through the npm wrapper for this runtime.":"Documentation commands require a supported Python or npm-executor project manifest."})}function Xe(e){let t=a.resolve(e),r=$e(e);return r||(h(t).length>0?t:null)}function Qe(e=process.cwd()){let t=Xe(e),r=t?ae(t):null,n=r?.detection??j$1(e,r?.projectJson??null),i$1=r?.moduleSupport??false,c=r?.engine??"unknown",k=pe(n.runtime),S=x(n.runtime),fe=t?i(t):[],h=[n.runtime,...fe.filter(o=>o!==n.runtime)].filter((o,p,E)=>o!=="unknown"&&E.indexOf(o)===p);h.length===0&&h.push("unknown");let D=h.filter(o=>o!=="unknown").length>1,ge=le({runtime:n.runtime,moduleSupport:i$1,projectPath:t??void 0,framework:n.key}),g={};for(let o of q)g[o]=P(o,{owner:o==="project"?"core":"npm",status:"supported",reason:o==="project"?"Project detection is a Core contract; workspace project lifecycle remains npm-owned.":o==="help"?"Help is available for every Workspai project through the npm CLI.":"Universal command available across Workspai project types."});for(let o of N){let p=ze(t,o,n,ge),E=He(o,n),O=Ye(o,p);g[o]=P(o,{owner:E,status:p?"supported":"unsupported",executionScope:O.executionScope,fleetEligible:O.fleetEligible,reason:p?E==="core"?`Delegated to Python Core for ${n.displayName} projects.`:O.fleetEligible?`Handled by runtime adapter and eligible for workspace fleet stages (${o}).`:o==="dev"?"Local development command only; workspace fleet excludes dev by design.":n.runtime==="node"?`Handled by npm/pnpm/yarn via the resolved ${o} script in package.json.`:`Handled by the ${k?.displayName??n.displayName} runtime adapter for local project execution.`:t?n.runtime==="node"?`No ${o} script was found in package.json for this ${n.displayName} project.`:j(n.runtime)?`The ${n.displayName} runtime is tracked, but ${o} is not available from detected project manifests.`:`${n.displayName} is tracked as an observed runtime; ${o} requires project manifests or explicit scripts.`:"No Workspai project was detected."});}if(D)for(let o of N){let p=g[o];p&&(p.reason=`Composite runtime boundary detected (${h.join(", ")}). This capability describes only the primary ${n.runtime} adapter; nested runtime lifecycle coverage requires explicit project boundaries or command contracts. ${p.reason??""}`.trim());}g.docs=Ve(t,n);for(let o of Y)g[o]=P(o,{owner:i$1?"core":"none",status:i$1?"supported":"unsupported",reason:i$1?"Core module/template command supported for this project.":`Core module/template commands are not available for ${n.displayName} projects.`});for(let o of H)g[o]=P(o,{owner:o==="create"?"npm":"core",status:"global",reason:o==="create"?"Create is orchestrated by npm for multi-language workspace support.":"Engine catalog command; not specific to the selected project runtime."});let R=Object.values(g),z=R.filter(o=>N.includes(o.command)).filter(o=>o.status==="supported"),ye=G.filter(o=>z.some(p=>p.fleetEligible===true&&p.command===o)),be=z.filter(o=>o.executionScope==="local-only").map(o=>o.command).sort();return {schemaVersion:1,scope:"project",projectRoot:t,engine:c,runtime:n.runtime,runtimeCandidates:h,compositeRuntime:D,lifecycleCoverage:D?"primary-runtime-only":"complete",framework:n.key,frameworkDisplayName:n.displayName,frameworkConfidence:n.confidence,frameworkSupportTier:te(n.key),runtimeSupportTier:S.tier,runtimeDoctorSupport:S.doctorSupport,moduleSupport:i$1,fleetStages:ye,localOnlyCommands:be,commandMap:g,supportedCommands:R.filter(o=>o.status==="supported").map(o=>o.command).sort(),unsupportedCommands:R.filter(o=>o.status==="unsupported").map(o=>o.command).sort(),globalCommands:R.filter(o=>o.status==="global").map(o=>o.command).sort()}}function lr(e,t=process.cwd()){let r=e[0];return r?Qe(t).commandMap[r]??null:null}function ur(e){if(e[0]==="project"&&e[1]==="commands")return true;if(e[0]==="commands"&&e.includes("--scope")){let t=e.indexOf("--scope");return e[t+1]==="project"}return e.some(t=>t==="--scope=project")&&e[0]==="commands"}function fr(e,t){return [`Workspai command not supported for this project: ${e.command}`,"",`Project: ${t.projectRoot??"not detected"}`,`Runtime: ${t.runtime}`,`Framework: ${t.frameworkDisplayName}`,`Reason: ${e.reason??"Unsupported for this project type."}`,"","Run `workspai project commands` to inspect supported commands for this project."].join(`
2
+ `)}export{_ as a,Ze as b,et as c,tt as d,rt as e,x as f,te as g,j as h,ie as i,ft as j,gt as k,yt as l,bt as m,kt as n,Rt as o,ae as p,Ee as q,_t as r,At as s,me as t,le as u,$e as v,Qe as w,lr as x,ur as y,fr as z};
@@ -1 +1 @@
1
- import {a}from'./chunk-QJCCZLOF.js';import {a as a$1}from'./chunk-GR6442P7.js';import {f,e}from'./chunk-CCDGHPEJ.js';import {h,i}from'./chunk-NZ3WZYD5.js';import {createHash}from'crypto';import c from'path';import {execa}from'execa';import u from'fs-extra';var D=h.projectTestCoverage.schemaVersion,E=i.projectTestCoverage,G=["package.json","pyproject.toml","requirements.txt","go.mod","pom.xml","build.gradle","build.gradle.kts","Cargo.toml","composer.json","Gemfile","mix.exs","deps.edn","project.clj","build.sbt","CMakeLists.txt","meson.build","deno.json","deno.jsonc"];function p(e){let t=Number(e);return Number.isFinite(t)&&t>=0?t:0}function g(e,t,o=0){let n=p(e),a=Math.min(p(t),n),r=p(o);return {total:n,covered:a,skipped:r,percent:n>0?Math.round(a/n*1e4)/100:null}}function W(e){if(!e||typeof e!="object"||Array.isArray(e))return;let t=e;return g(t.total,t.covered,t.skipped)}function y(e,t){let o=c.isAbsolute(t)?t:c.resolve(e,t),n=c.relative(e,o);return n&&!n.startsWith("..")?n.split(c.sep).join("/"):t}async function x(e){return createHash("sha256").update(await u.readFile(e)).digest("hex")}async function I(e){let t=c.resolve(e);for(;;){if(await u.pathExists(c.join(t,".workspai","project.json"))||await u.pathExists(c.join(t,".rapidkit","project.json"))||(await Promise.all(G.map(a=>u.pathExists(c.join(t,a))))).some(Boolean))return t;let n=c.dirname(t);if(n===t)return c.resolve(e);t=n;}}async function V(e){if(await u.pathExists(c.join(e,"deno.json"))||await u.pathExists(c.join(e,"deno.jsonc")))return "deno";if(await u.pathExists(c.join(e,"bun.lock"))||await u.pathExists(c.join(e,"bun.lockb")))return "bun";if(await u.pathExists(c.join(e,"package.json")))return "node";if(await u.pathExists(c.join(e,"pyproject.toml"))||await u.pathExists(c.join(e,"requirements.txt")))return "python";if(await u.pathExists(c.join(e,"go.mod")))return "go";let t=await u.pathExists(c.join(e,"pom.xml"))||await u.pathExists(c.join(e,"build.gradle"))||await u.pathExists(c.join(e,"build.gradle.kts"));return t&&(await P(e,o=>o.endsWith(".kt")||o.endsWith(".kts")&&o!=="build.gradle.kts"&&o!=="settings.gradle.kts",4)).length>0?"kotlin":t?"java":await u.pathExists(c.join(e,"Cargo.toml"))?"rust":await u.pathExists(c.join(e,"composer.json"))?"php":await u.pathExists(c.join(e,"Gemfile"))?"ruby":await u.pathExists(c.join(e,"mix.exs"))?"elixir":await u.pathExists(c.join(e,"deps.edn"))||await u.pathExists(c.join(e,"project.clj"))?"clojure":await u.pathExists(c.join(e,"build.sbt"))?"scala":await u.pathExists(c.join(e,"CMakeLists.txt"))?(await P(e,n=>/\.(c|cc|cpp|cxx)$/.test(n),3)).some(n=>/\.(cc|cpp|cxx)$/.test(n))?"cpp":"c":(await P(e,o=>/\.(sln|csproj)$/.test(o),2)).length>0?"dotnet":"unknown"}async function P(e,t,o=5){let n=[],a=[{dir:e,depth:0}],r=new Set([".git",".workspai",".rapidkit","node_modules",".venv","vendor","deps"]);for(;a.length>0;){let s=a.shift();if(!s)break;let i=await u.readdir(s.dir,{withFileTypes:true}).catch(()=>[]);for(let l of i){if(r.has(l.name)||a$1(l.name))continue;let d=c.join(s.dir,l.name),m=c.relative(e,d).split(c.sep).join("/");l.isFile()&&t(l.name,m)&&n.push(d),l.isDirectory()&&s.depth<o&&a.push({dir:d,depth:s.depth+1});}}return n}async function L(e,t){let o=await u.readJson(t),n=o.total??o,a={};for(let s of ["lines","branches","functions","statements"]){let i=W(n[s]);i&&(a[s]=i);}let r=[];for(let[s,i]of Object.entries(o)){if(s==="total"||!i||typeof i!="object"||Array.isArray(i))continue;let l=i,d={};for(let m of ["lines","branches","functions","statements"]){let b=W(l[m]);b&&(d[m]=b);}r.push({path:y(e,s),metrics:d});}return {metrics:a,files:r,source:{format:"istanbul-json",path:t,sha256:await x(t)}}}async function U(e,t){let o=await u.readJson(t),n=o.totals??{},a={lines:g(n.num_statements,n.covered_lines)};p(n.num_branches)>0&&(a.branches=g(n.num_branches,n.covered_branches));let r=[];for(let[s,i]of Object.entries(o.files??{})){let l=i?.summary??{};r.push({path:y(e,s),metrics:{lines:g(l.num_statements,l.covered_lines),...p(l.num_branches)>0?{branches:g(l.num_branches,l.covered_branches)}:{}}});}return {metrics:a,files:r,source:{format:"coverage-py-json",path:t,sha256:await x(t)}}}function j(e){if(!e||typeof e!="object"||Array.isArray(e))return;let t=e,o=p(t.count),n=p(t.covered);return o>0?g(o,n):void 0}async function z(e,t){let o=await u.readJson(t),n=Array.isArray(o.data)?o.data[0]??{}:o,a=n.totals??{},r={};r.lines=j(a.lines),r.functions=j(a.functions),r.branches=j(a.branches),r.statements=j(a.regions);let s=[];for(let i of Array.isArray(n.files)?n.files:[]){if(!i||typeof i!="object"||Array.isArray(i))continue;let l=i,d=l.summary??{};s.push({path:y(e,String(l.filename??"unknown")),metrics:{lines:j(d.lines),functions:j(d.functions),branches:j(d.branches),statements:j(d.regions)}});}return {metrics:r,files:s,source:{format:"llvm-cov-json",path:t,sha256:await x(t)}}}async function A(e,t){let o=await u.readFile(t,"utf8"),n=[],a="",r=0,s=0,i=0,l=0,d=0,m=0,b=v=>{a&&(n.push({path:y(e,a),metrics:{lines:g(v.lineTotal,v.lineCovered),functions:g(v.functionTotal,v.functionCovered),branches:g(v.branchTotal,v.branchCovered)}}),r+=v.lineTotal,s+=v.lineCovered,i+=v.functionTotal,l+=v.functionCovered,d+=v.branchTotal,m+=v.branchCovered);},h={lineTotal:0,lineCovered:0,functionTotal:0,functionCovered:0,branchTotal:0,branchCovered:0};for(let v of o.split(/\r?\n/))v.startsWith("SF:")?a=v.slice(3):v.startsWith("LF:")?h.lineTotal=p(v.slice(3)):v.startsWith("LH:")?h.lineCovered=p(v.slice(3)):v.startsWith("FNF:")?h.functionTotal=p(v.slice(4)):v.startsWith("FNH:")?h.functionCovered=p(v.slice(4)):v.startsWith("BRF:")?h.branchTotal=p(v.slice(4)):v.startsWith("BRH:")?h.branchCovered=p(v.slice(4)):v==="end_of_record"&&(b(h),a="",h={lineTotal:0,lineCovered:0,functionTotal:0,functionCovered:0,branchTotal:0,branchCovered:0});return {metrics:{lines:g(r,s),functions:g(i,l),branches:g(d,m)},files:n,source:{format:"lcov",path:t,sha256:await x(t)}}}async function B(e,t){let o=await u.readFile(t,"utf8"),n=new Map;for(let s of o.split(/\r?\n/).slice(1)){let i=/^(.+?):\d+\.\d+,\d+\.\d+\s+(\d+)\s+(\d+)$/.exec(s.trim());if(!i)continue;let l=n.get(i[1])??{total:0,covered:0},d=p(i[2]);l.total+=d,p(i[3])>0&&(l.covered+=d),n.set(i[1],l);}let a=[...n.entries()].map(([s,i])=>({path:y(e,s),metrics:{statements:g(i.total,i.covered)}})),r=[...n.values()].reduce((s,i)=>({total:s.total+i.total,covered:s.covered+i.covered}),{total:0,covered:0});return {metrics:{statements:g(r.total,r.covered)},files:a,source:{format:"go-coverprofile",path:t,sha256:await x(t)}}}function T(e,t){let n=[...e.matchAll(new RegExp(`<counter\\s+type=["']${t}["']\\s+missed=["'](\\d+)["']\\s+covered=["'](\\d+)["']\\s*\\/?\\s*>`,"gi"))].at(-1);return n?g(Number(n[1])+Number(n[2]),n[2]):void 0}async function C(e,t){let o=await u.readFile(e,"utf8"),n={};if(t==="cobertura-xml"){let a=/<coverage\b([^>]*)>/i.exec(o)?.[1]??"",r=/\bline-rate=["']([\d.]+)["']/i.exec(a)?.[1],s=/\bbranch-rate=["']([\d.]+)["']/i.exec(a)?.[1];r&&(n.lines=g(1e4,Math.round(Number(r)*1e4))),s&&(n.branches=g(1e4,Math.round(Number(s)*1e4)));}if(t==="clover-xml"){let r=[...o.matchAll(/<metrics\b([^>]*)\/?>/gi)].at(-1)?.[1]??"",s=m=>p(new RegExp(`\\b${m}=["'](\\d+)["']`,"i").exec(r)?.[1]),i=s("statements"),l=s("methods"),d=s("conditionals");i>0&&(n.statements=g(i,s("coveredstatements"))),l>0&&(n.functions=g(l,s("coveredmethods"))),d>0&&(n.branches=g(d,s("coveredconditionals")));}return n.lines??=T(o,"LINE"),n.branches??=T(o,"BRANCH"),n.functions??=T(o,"METHOD"),n.statements??=T(o,"INSTRUCTION"),{metrics:n,files:[],source:{format:t,path:e,sha256:await x(e)}}}async function K(e){let t=await u.readFile(e,"utf8"),o=/<scoverage\b([^>]*)>/i.exec(t)?.[1]??"",n=b=>p(new RegExp(`\\b${b}=["']([\\d.]+)["']`,"i").exec(o)?.[1]),a=n("statement-count"),r=n("statements-invoked"),s=n("branch-count"),i=n("branches-invoked"),l=n("statement-rate"),d=n("branch-rate"),m={};return a>0?m.statements=g(a,r):l>0&&(m.statements=g(1e4,Math.round(l*100))),s>0?m.branches=g(s,i):d>0&&(m.branches=g(1e4,Math.round(d*100))),{metrics:m,files:[],source:{format:"scoverage-xml",path:e,sha256:await x(e)}}}async function X(e,t){let o=await u.readJson(t),n=new Map;for(let s of Object.values(o)){let i=s?.coverage;if(!(!i||typeof i!="object"||Array.isArray(i)))for(let[l,d]of Object.entries(i)){if(!Array.isArray(d))continue;let m=n.get(l)??[];d.forEach((b,h)=>{typeof b=="number"&&(m[h]=Math.max(m[h]??0,b));}),n.set(l,m);}}let a=[...n.entries()].map(([s,i])=>{let l=i.filter(d=>typeof d=="number");return {path:y(e,s),metrics:{lines:g(l.length,l.filter(d=>d>0).length)}}}),r=a.reduce((s,i)=>{let l=i.metrics.lines;return {total:s.total+(l?.total??0),covered:s.covered+(l?.covered??0)}},{total:0,covered:0});return {metrics:{lines:g(r.total,r.covered)},files:a,source:{format:"simplecov-json",path:t,sha256:await x(t)}}}async function $(e,t={}){let o=[{relativePath:"coverage/coverage-summary.json",parser:r=>L(e,r)},{relativePath:"coverage.json",parser:async r=>{let s=await u.readJson(r);return Array.isArray(s.data)?z(e,r):U(e,r)}},{relativePath:"coverage/lcov.info",parser:r=>A(e,r)},{relativePath:"cover/lcov.info",parser:r=>A(e,r)},{relativePath:"lcov.info",parser:r=>A(e,r)},{relativePath:"coverage.out",parser:r=>B(e,r)},{relativePath:"target/site/jacoco/jacoco.xml",parser:r=>C(r,"jacoco-xml")},{relativePath:"build/reports/jacoco/test/jacocoTestReport.xml",parser:r=>C(r,"jacoco-xml")},{relativePath:"coverage.xml",parser:r=>C(r,"clover-xml")},{relativePath:".resultset.json",parser:r=>X(e,r)}];for(let r of o){let s=c.join(e,r.relativePath);if(await u.pathExists(s))return r.parser(s)}if(t.recursive===false)return null;let a=(await P(e,(r,s)=>r==="coverage.cobertura.xml"||r==="jacoco.xml"||r==="clover.xml"||r==="scoverage.xml"||s.endsWith("/coverage-summary.json"),7)).sort()[0];return a?a.endsWith("coverage-summary.json")?L(e,a):a.endsWith("jacoco.xml")?C(a,"jacoco-xml"):a.endsWith("coverage.cobertura.xml")?C(a,"cobertura-xml"):a.endsWith("scoverage.xml")?K(a):C(a,"clover-xml"):null}async function Q(e){return u.readJson(c.join(e,"package.json")).catch(()=>null)}async function q(e,t){let o=(n,a)=>({cwd:e,executable:n,args:a});if(t==="node"||t==="bun"){let a=(await Q(e))?.scripts??{},r=["test:coverage","test:cov","coverage"].find(i=>typeof a[i]=="string"),s=t==="bun"?"bun":await u.pathExists(c.join(e,"pnpm-lock.yaml"))?"pnpm":await u.pathExists(c.join(e,"yarn.lock"))?"yarn":"npm";if(r)return {runner:String(a[r]).split(/\s+/)[0]||s,invocations:[o(s,s==="yarn"?[r]:["run",r])],diagnostics:[]};if(typeof a.test=="string"){let i=s==="yarn"?["test","--coverage"]:s==="bun"?["test","--coverage","--coverage-reporter=lcov"]:["test","--","--coverage"];return {runner:String(a.test).split(/\s+/)[0]||s,invocations:[o(s,i)],diagnostics:[]}}return {runner:null,invocations:[],diagnostics:["No project-owned test or coverage script was detected."]}}if(t==="deno")return {runner:"deno",invocations:[o("deno",["test","--coverage=coverage"]),o("deno",["coverage","--lcov","--output=coverage/lcov.info","coverage"])],diagnostics:[]};if(t==="python")return {runner:"pytest-cov",invocations:[o(await u.pathExists(c.join(e,".venv",process.platform==="win32"?"Scripts":"bin",process.platform==="win32"?"python.exe":"python"))?c.join(".venv",process.platform==="win32"?"Scripts":"bin",process.platform==="win32"?"python.exe":"python"):process.platform==="win32"?"python":"python3",["-m","pytest","--cov=.","--cov-report=json:coverage.json"])],diagnostics:[]};if(t==="go")return {runner:"go test",invocations:[o("go",["test","./...","-coverprofile=coverage.out"])],diagnostics:[]};if(t==="java"){let n=await u.pathExists(c.join(e,"gradlew")),a=await u.pathExists(c.join(e,"gradlew.bat")),r=n||a,s=await u.pathExists(c.join(e,"mvnw")),i=await u.pathExists(c.join(e,"mvnw.cmd")),l=r?process.platform==="win32"&&a?".\\gradlew.bat":"./gradlew":await u.pathExists(c.join(e,"pom.xml"))?process.platform==="win32"&&i?".\\mvnw.cmd":s?"./mvnw":"mvn":"gradle";return {runner:r?"jacoco/gradle":"jacoco/maven",invocations:[o(l,r?["test","jacocoTestReport"]:["test","jacoco:report"])],diagnostics:[]}}return t==="dotnet"?{runner:"dotnet coverlet",invocations:[o("dotnet",["test","--collect:XPlat Code Coverage"])],diagnostics:[]}:t==="rust"?{runner:"cargo llvm-cov",invocations:[o("cargo",["llvm-cov","--json","--output-path","coverage.json"])],diagnostics:["cargo-llvm-cov must be available in the project toolchain."]}:t==="php"?{runner:"phpunit",invocations:[o(process.platform==="win32"?"vendor\\bin\\phpunit.bat":"vendor/bin/phpunit",["--coverage-clover","coverage.xml"])],diagnostics:[]}:t==="ruby"?{runner:"simplecov",invocations:[o("bundle",["exec","rspec"])],diagnostics:["The test suite must enable SimpleCov to emit .resultset.json."]}:t==="elixir"?{runner:"mix cover",invocations:[o("mix",["test","--cover"])],diagnostics:["Configure ExCoveralls for JSON or LCOV interchange when machine-readable coverage is required."]}:t==="clojure"?{runner:"cloverage",invocations:[o("clojure",["-M:coverage"])],diagnostics:["The project must declare a coverage alias such as cloverage."]}:t==="scala"?{runner:"sbt-scoverage",invocations:[o("sbt",["clean","coverage","test","coverageReport"])],diagnostics:["The project must declare the scoverage plugin."]}:t==="kotlin"?{runner:"jacoco/gradle",invocations:[o(await u.pathExists(c.join(e,process.platform==="win32"?"gradlew.bat":"gradlew"))?process.platform==="win32"?".\\gradlew.bat":"./gradlew":"gradle",["test","jacocoTestReport"])],diagnostics:["The project must declare the JaCoCo Gradle plugin."]}:t==="c"||t==="cpp"?{runner:"CTest/LLVM coverage",invocations:[o("ctest",["--test-dir","build","--output-on-failure"])],diagnostics:["The native build must be instrumented for coverage and export LCOV, Cobertura, or LLVM JSON evidence."]}:{runner:null,invocations:[],diagnostics:["Project runtime could not be detected."]}}async function ue(e,t){let o=await I(e),n=t??await V(o),a=await q(o,n),r=await $(o,{recursive:false}).catch(()=>null),s=r?.source.path&&r.source.sha256?[{path:c.relative(o,r.source.path).split(c.sep).join("/"),sha256:r.source.sha256}]:[],i=[...a.diagnostics],l=r?"available":a.invocations.length===0||n==="unknown"?"unsupported":i.length>0?"requires-setup":"available";return {runtime:n,runner:a.runner,status:l,existingEvidence:s,invocations:a.invocations,prerequisites:i}}function Y(e,t){let o=e?c.relative(e,t).split(c.sep).join("/"):c.resolve(t),n=c.basename(t).toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"").slice(0,48)||"project",a=createHash("sha256").update(o).digest("hex").slice(0,12);return `${n}--${a}`}function Z(e){return e.lines?"lines":e.statements?"statements":e.branches?"branches":"functions"}async function de(e$1={}){let t=await I(e$1.projectPath??process.cwd()),o=a(t),n=e$1.runtime??await V(t),a$1=Math.max(0,Math.min(100,Math.round(e$1.target??80))),r=await q(t,n),s=[],i=Date.now();if(e$1.run)for(let f of r.invocations){let w=await execa(f.executable,f.args,{cwd:f.cwd,reject:false,timeout:6e5}).catch(()=>({exitCode:1}));if(s.push(Number(w.exitCode??1)),Number(w.exitCode??1)!==0)break}let l=await $(t).catch(()=>null),d=l?Z(l.metrics):"lines",m=l?.metrics[d]?.percent??null,b=e$1.run&&s.some(f=>f!==0)?"failed":m===null?"unavailable":m>=a$1?"passed":"below-target",h=Y(o,t),v=c.join(t,E),R=o?`.workspai/reports/projects/${h}/project-test-coverage-last-run.json`:null,k={schemaVersion:D,generatedAt:new Date().toISOString(),status:b,project:{id:h,name:c.basename(t),path:t,workspacePath:o},runtime:n,runner:r.runner,target:{metric:d,percent:a$1},metrics:l?.metrics??{},files:l?.files??[],lowCoverageFiles:(l?.files??[]).map(f=>{let w=f.metrics[d]??f.metrics.lines??f.metrics.statements;return {path:f.path,percent:w?.percent??null,uncovered:Math.max(0,(w?.total??0)-(w?.covered??0))}}).filter(f=>f.percent===null||f.percent<a$1).sort((f,w)=>w.uncovered-f.uncovered||f.path.localeCompare(w.path)),source:l?.source??{format:"unknown",path:null,sha256:null},execution:{requested:e$1.run===true,invocations:r.invocations,exitCodes:s,durationMs:Date.now()-i},diagnostics:[...r.diagnostics,...l?[]:["No supported machine-readable coverage artifact was found."]],artifactPaths:{project:v,workspaceLatest:o?c.join(o,E):null,workspaceProject:o&&R?c.join(o,R):null}};return o&&R&&await f(o,E,[{relativePath:E,payload:k},{relativePath:R,payload:k}]),await e(t,E,k),k}export{D as a,E as b,ue as c,de as d};
1
+ import {a}from'./chunk-VRGEPPUB.js';import {a as a$1}from'./chunk-GR6442P7.js';import {f,e}from'./chunk-CCDGHPEJ.js';import {h,i}from'./chunk-NZ3WZYD5.js';import {createHash}from'crypto';import c from'path';import {execa}from'execa';import u from'fs-extra';var D=h.projectTestCoverage.schemaVersion,E=i.projectTestCoverage,G=["package.json","pyproject.toml","requirements.txt","go.mod","pom.xml","build.gradle","build.gradle.kts","Cargo.toml","composer.json","Gemfile","mix.exs","deps.edn","project.clj","build.sbt","CMakeLists.txt","meson.build","deno.json","deno.jsonc"];function p(e){let t=Number(e);return Number.isFinite(t)&&t>=0?t:0}function g(e,t,o=0){let n=p(e),a=Math.min(p(t),n),r=p(o);return {total:n,covered:a,skipped:r,percent:n>0?Math.round(a/n*1e4)/100:null}}function W(e){if(!e||typeof e!="object"||Array.isArray(e))return;let t=e;return g(t.total,t.covered,t.skipped)}function y(e,t){let o=c.isAbsolute(t)?t:c.resolve(e,t),n=c.relative(e,o);return n&&!n.startsWith("..")?n.split(c.sep).join("/"):t}async function x(e){return createHash("sha256").update(await u.readFile(e)).digest("hex")}async function I(e){let t=c.resolve(e);for(;;){if(await u.pathExists(c.join(t,".workspai","project.json"))||await u.pathExists(c.join(t,".rapidkit","project.json"))||(await Promise.all(G.map(a=>u.pathExists(c.join(t,a))))).some(Boolean))return t;let n=c.dirname(t);if(n===t)return c.resolve(e);t=n;}}async function V(e){if(await u.pathExists(c.join(e,"deno.json"))||await u.pathExists(c.join(e,"deno.jsonc")))return "deno";if(await u.pathExists(c.join(e,"bun.lock"))||await u.pathExists(c.join(e,"bun.lockb")))return "bun";if(await u.pathExists(c.join(e,"package.json")))return "node";if(await u.pathExists(c.join(e,"pyproject.toml"))||await u.pathExists(c.join(e,"requirements.txt")))return "python";if(await u.pathExists(c.join(e,"go.mod")))return "go";let t=await u.pathExists(c.join(e,"pom.xml"))||await u.pathExists(c.join(e,"build.gradle"))||await u.pathExists(c.join(e,"build.gradle.kts"));return t&&(await P(e,o=>o.endsWith(".kt")||o.endsWith(".kts")&&o!=="build.gradle.kts"&&o!=="settings.gradle.kts",4)).length>0?"kotlin":t?"java":await u.pathExists(c.join(e,"Cargo.toml"))?"rust":await u.pathExists(c.join(e,"composer.json"))?"php":await u.pathExists(c.join(e,"Gemfile"))?"ruby":await u.pathExists(c.join(e,"mix.exs"))?"elixir":await u.pathExists(c.join(e,"deps.edn"))||await u.pathExists(c.join(e,"project.clj"))?"clojure":await u.pathExists(c.join(e,"build.sbt"))?"scala":await u.pathExists(c.join(e,"CMakeLists.txt"))?(await P(e,n=>/\.(c|cc|cpp|cxx)$/.test(n),3)).some(n=>/\.(cc|cpp|cxx)$/.test(n))?"cpp":"c":(await P(e,o=>/\.(sln|csproj)$/.test(o),2)).length>0?"dotnet":"unknown"}async function P(e,t,o=5){let n=[],a=[{dir:e,depth:0}],r=new Set([".git",".workspai",".rapidkit","node_modules",".venv","vendor","deps"]);for(;a.length>0;){let s=a.shift();if(!s)break;let i=await u.readdir(s.dir,{withFileTypes:true}).catch(()=>[]);for(let l of i){if(r.has(l.name)||a$1(l.name))continue;let d=c.join(s.dir,l.name),m=c.relative(e,d).split(c.sep).join("/");l.isFile()&&t(l.name,m)&&n.push(d),l.isDirectory()&&s.depth<o&&a.push({dir:d,depth:s.depth+1});}}return n}async function L(e,t){let o=await u.readJson(t),n=o.total??o,a={};for(let s of ["lines","branches","functions","statements"]){let i=W(n[s]);i&&(a[s]=i);}let r=[];for(let[s,i]of Object.entries(o)){if(s==="total"||!i||typeof i!="object"||Array.isArray(i))continue;let l=i,d={};for(let m of ["lines","branches","functions","statements"]){let b=W(l[m]);b&&(d[m]=b);}r.push({path:y(e,s),metrics:d});}return {metrics:a,files:r,source:{format:"istanbul-json",path:t,sha256:await x(t)}}}async function U(e,t){let o=await u.readJson(t),n=o.totals??{},a={lines:g(n.num_statements,n.covered_lines)};p(n.num_branches)>0&&(a.branches=g(n.num_branches,n.covered_branches));let r=[];for(let[s,i]of Object.entries(o.files??{})){let l=i?.summary??{};r.push({path:y(e,s),metrics:{lines:g(l.num_statements,l.covered_lines),...p(l.num_branches)>0?{branches:g(l.num_branches,l.covered_branches)}:{}}});}return {metrics:a,files:r,source:{format:"coverage-py-json",path:t,sha256:await x(t)}}}function j(e){if(!e||typeof e!="object"||Array.isArray(e))return;let t=e,o=p(t.count),n=p(t.covered);return o>0?g(o,n):void 0}async function z(e,t){let o=await u.readJson(t),n=Array.isArray(o.data)?o.data[0]??{}:o,a=n.totals??{},r={};r.lines=j(a.lines),r.functions=j(a.functions),r.branches=j(a.branches),r.statements=j(a.regions);let s=[];for(let i of Array.isArray(n.files)?n.files:[]){if(!i||typeof i!="object"||Array.isArray(i))continue;let l=i,d=l.summary??{};s.push({path:y(e,String(l.filename??"unknown")),metrics:{lines:j(d.lines),functions:j(d.functions),branches:j(d.branches),statements:j(d.regions)}});}return {metrics:r,files:s,source:{format:"llvm-cov-json",path:t,sha256:await x(t)}}}async function A(e,t){let o=await u.readFile(t,"utf8"),n=[],a="",r=0,s=0,i=0,l=0,d=0,m=0,b=v=>{a&&(n.push({path:y(e,a),metrics:{lines:g(v.lineTotal,v.lineCovered),functions:g(v.functionTotal,v.functionCovered),branches:g(v.branchTotal,v.branchCovered)}}),r+=v.lineTotal,s+=v.lineCovered,i+=v.functionTotal,l+=v.functionCovered,d+=v.branchTotal,m+=v.branchCovered);},h={lineTotal:0,lineCovered:0,functionTotal:0,functionCovered:0,branchTotal:0,branchCovered:0};for(let v of o.split(/\r?\n/))v.startsWith("SF:")?a=v.slice(3):v.startsWith("LF:")?h.lineTotal=p(v.slice(3)):v.startsWith("LH:")?h.lineCovered=p(v.slice(3)):v.startsWith("FNF:")?h.functionTotal=p(v.slice(4)):v.startsWith("FNH:")?h.functionCovered=p(v.slice(4)):v.startsWith("BRF:")?h.branchTotal=p(v.slice(4)):v.startsWith("BRH:")?h.branchCovered=p(v.slice(4)):v==="end_of_record"&&(b(h),a="",h={lineTotal:0,lineCovered:0,functionTotal:0,functionCovered:0,branchTotal:0,branchCovered:0});return {metrics:{lines:g(r,s),functions:g(i,l),branches:g(d,m)},files:n,source:{format:"lcov",path:t,sha256:await x(t)}}}async function B(e,t){let o=await u.readFile(t,"utf8"),n=new Map;for(let s of o.split(/\r?\n/).slice(1)){let i=/^(.+?):\d+\.\d+,\d+\.\d+\s+(\d+)\s+(\d+)$/.exec(s.trim());if(!i)continue;let l=n.get(i[1])??{total:0,covered:0},d=p(i[2]);l.total+=d,p(i[3])>0&&(l.covered+=d),n.set(i[1],l);}let a=[...n.entries()].map(([s,i])=>({path:y(e,s),metrics:{statements:g(i.total,i.covered)}})),r=[...n.values()].reduce((s,i)=>({total:s.total+i.total,covered:s.covered+i.covered}),{total:0,covered:0});return {metrics:{statements:g(r.total,r.covered)},files:a,source:{format:"go-coverprofile",path:t,sha256:await x(t)}}}function T(e,t){let n=[...e.matchAll(new RegExp(`<counter\\s+type=["']${t}["']\\s+missed=["'](\\d+)["']\\s+covered=["'](\\d+)["']\\s*\\/?\\s*>`,"gi"))].at(-1);return n?g(Number(n[1])+Number(n[2]),n[2]):void 0}async function C(e,t){let o=await u.readFile(e,"utf8"),n={};if(t==="cobertura-xml"){let a=/<coverage\b([^>]*)>/i.exec(o)?.[1]??"",r=/\bline-rate=["']([\d.]+)["']/i.exec(a)?.[1],s=/\bbranch-rate=["']([\d.]+)["']/i.exec(a)?.[1];r&&(n.lines=g(1e4,Math.round(Number(r)*1e4))),s&&(n.branches=g(1e4,Math.round(Number(s)*1e4)));}if(t==="clover-xml"){let r=[...o.matchAll(/<metrics\b([^>]*)\/?>/gi)].at(-1)?.[1]??"",s=m=>p(new RegExp(`\\b${m}=["'](\\d+)["']`,"i").exec(r)?.[1]),i=s("statements"),l=s("methods"),d=s("conditionals");i>0&&(n.statements=g(i,s("coveredstatements"))),l>0&&(n.functions=g(l,s("coveredmethods"))),d>0&&(n.branches=g(d,s("coveredconditionals")));}return n.lines??=T(o,"LINE"),n.branches??=T(o,"BRANCH"),n.functions??=T(o,"METHOD"),n.statements??=T(o,"INSTRUCTION"),{metrics:n,files:[],source:{format:t,path:e,sha256:await x(e)}}}async function K(e){let t=await u.readFile(e,"utf8"),o=/<scoverage\b([^>]*)>/i.exec(t)?.[1]??"",n=b=>p(new RegExp(`\\b${b}=["']([\\d.]+)["']`,"i").exec(o)?.[1]),a=n("statement-count"),r=n("statements-invoked"),s=n("branch-count"),i=n("branches-invoked"),l=n("statement-rate"),d=n("branch-rate"),m={};return a>0?m.statements=g(a,r):l>0&&(m.statements=g(1e4,Math.round(l*100))),s>0?m.branches=g(s,i):d>0&&(m.branches=g(1e4,Math.round(d*100))),{metrics:m,files:[],source:{format:"scoverage-xml",path:e,sha256:await x(e)}}}async function X(e,t){let o=await u.readJson(t),n=new Map;for(let s of Object.values(o)){let i=s?.coverage;if(!(!i||typeof i!="object"||Array.isArray(i)))for(let[l,d]of Object.entries(i)){if(!Array.isArray(d))continue;let m=n.get(l)??[];d.forEach((b,h)=>{typeof b=="number"&&(m[h]=Math.max(m[h]??0,b));}),n.set(l,m);}}let a=[...n.entries()].map(([s,i])=>{let l=i.filter(d=>typeof d=="number");return {path:y(e,s),metrics:{lines:g(l.length,l.filter(d=>d>0).length)}}}),r=a.reduce((s,i)=>{let l=i.metrics.lines;return {total:s.total+(l?.total??0),covered:s.covered+(l?.covered??0)}},{total:0,covered:0});return {metrics:{lines:g(r.total,r.covered)},files:a,source:{format:"simplecov-json",path:t,sha256:await x(t)}}}async function $(e,t={}){let o=[{relativePath:"coverage/coverage-summary.json",parser:r=>L(e,r)},{relativePath:"coverage.json",parser:async r=>{let s=await u.readJson(r);return Array.isArray(s.data)?z(e,r):U(e,r)}},{relativePath:"coverage/lcov.info",parser:r=>A(e,r)},{relativePath:"cover/lcov.info",parser:r=>A(e,r)},{relativePath:"lcov.info",parser:r=>A(e,r)},{relativePath:"coverage.out",parser:r=>B(e,r)},{relativePath:"target/site/jacoco/jacoco.xml",parser:r=>C(r,"jacoco-xml")},{relativePath:"build/reports/jacoco/test/jacocoTestReport.xml",parser:r=>C(r,"jacoco-xml")},{relativePath:"coverage.xml",parser:r=>C(r,"clover-xml")},{relativePath:".resultset.json",parser:r=>X(e,r)}];for(let r of o){let s=c.join(e,r.relativePath);if(await u.pathExists(s))return r.parser(s)}if(t.recursive===false)return null;let a=(await P(e,(r,s)=>r==="coverage.cobertura.xml"||r==="jacoco.xml"||r==="clover.xml"||r==="scoverage.xml"||s.endsWith("/coverage-summary.json"),7)).sort()[0];return a?a.endsWith("coverage-summary.json")?L(e,a):a.endsWith("jacoco.xml")?C(a,"jacoco-xml"):a.endsWith("coverage.cobertura.xml")?C(a,"cobertura-xml"):a.endsWith("scoverage.xml")?K(a):C(a,"clover-xml"):null}async function Q(e){return u.readJson(c.join(e,"package.json")).catch(()=>null)}async function q(e,t){let o=(n,a)=>({cwd:e,executable:n,args:a});if(t==="node"||t==="bun"){let a=(await Q(e))?.scripts??{},r=["test:coverage","test:cov","coverage"].find(i=>typeof a[i]=="string"),s=t==="bun"?"bun":await u.pathExists(c.join(e,"pnpm-lock.yaml"))?"pnpm":await u.pathExists(c.join(e,"yarn.lock"))?"yarn":"npm";if(r)return {runner:String(a[r]).split(/\s+/)[0]||s,invocations:[o(s,s==="yarn"?[r]:["run",r])],diagnostics:[]};if(typeof a.test=="string"){let i=s==="yarn"?["test","--coverage"]:s==="bun"?["test","--coverage","--coverage-reporter=lcov"]:["test","--","--coverage"];return {runner:String(a.test).split(/\s+/)[0]||s,invocations:[o(s,i)],diagnostics:[]}}return {runner:null,invocations:[],diagnostics:["No project-owned test or coverage script was detected."]}}if(t==="deno")return {runner:"deno",invocations:[o("deno",["test","--coverage=coverage"]),o("deno",["coverage","--lcov","--output=coverage/lcov.info","coverage"])],diagnostics:[]};if(t==="python")return {runner:"pytest-cov",invocations:[o(await u.pathExists(c.join(e,".venv",process.platform==="win32"?"Scripts":"bin",process.platform==="win32"?"python.exe":"python"))?c.join(".venv",process.platform==="win32"?"Scripts":"bin",process.platform==="win32"?"python.exe":"python"):process.platform==="win32"?"python":"python3",["-m","pytest","--cov=.","--cov-report=json:coverage.json"])],diagnostics:[]};if(t==="go")return {runner:"go test",invocations:[o("go",["test","./...","-coverprofile=coverage.out"])],diagnostics:[]};if(t==="java"){let n=await u.pathExists(c.join(e,"gradlew")),a=await u.pathExists(c.join(e,"gradlew.bat")),r=n||a,s=await u.pathExists(c.join(e,"mvnw")),i=await u.pathExists(c.join(e,"mvnw.cmd")),l=r?process.platform==="win32"&&a?".\\gradlew.bat":"./gradlew":await u.pathExists(c.join(e,"pom.xml"))?process.platform==="win32"&&i?".\\mvnw.cmd":s?"./mvnw":"mvn":"gradle";return {runner:r?"jacoco/gradle":"jacoco/maven",invocations:[o(l,r?["test","jacocoTestReport"]:["test","jacoco:report"])],diagnostics:[]}}return t==="dotnet"?{runner:"dotnet coverlet",invocations:[o("dotnet",["test","--collect:XPlat Code Coverage"])],diagnostics:[]}:t==="rust"?{runner:"cargo llvm-cov",invocations:[o("cargo",["llvm-cov","--json","--output-path","coverage.json"])],diagnostics:["cargo-llvm-cov must be available in the project toolchain."]}:t==="php"?{runner:"phpunit",invocations:[o(process.platform==="win32"?"vendor\\bin\\phpunit.bat":"vendor/bin/phpunit",["--coverage-clover","coverage.xml"])],diagnostics:[]}:t==="ruby"?{runner:"simplecov",invocations:[o("bundle",["exec","rspec"])],diagnostics:["The test suite must enable SimpleCov to emit .resultset.json."]}:t==="elixir"?{runner:"mix cover",invocations:[o("mix",["test","--cover"])],diagnostics:["Configure ExCoveralls for JSON or LCOV interchange when machine-readable coverage is required."]}:t==="clojure"?{runner:"cloverage",invocations:[o("clojure",["-M:coverage"])],diagnostics:["The project must declare a coverage alias such as cloverage."]}:t==="scala"?{runner:"sbt-scoverage",invocations:[o("sbt",["clean","coverage","test","coverageReport"])],diagnostics:["The project must declare the scoverage plugin."]}:t==="kotlin"?{runner:"jacoco/gradle",invocations:[o(await u.pathExists(c.join(e,process.platform==="win32"?"gradlew.bat":"gradlew"))?process.platform==="win32"?".\\gradlew.bat":"./gradlew":"gradle",["test","jacocoTestReport"])],diagnostics:["The project must declare the JaCoCo Gradle plugin."]}:t==="c"||t==="cpp"?{runner:"CTest/LLVM coverage",invocations:[o("ctest",["--test-dir","build","--output-on-failure"])],diagnostics:["The native build must be instrumented for coverage and export LCOV, Cobertura, or LLVM JSON evidence."]}:{runner:null,invocations:[],diagnostics:["Project runtime could not be detected."]}}async function ue(e,t){let o=await I(e),n=t??await V(o),a=await q(o,n),r=await $(o,{recursive:false}).catch(()=>null),s=r?.source.path&&r.source.sha256?[{path:c.relative(o,r.source.path).split(c.sep).join("/"),sha256:r.source.sha256}]:[],i=[...a.diagnostics],l=r?"available":a.invocations.length===0||n==="unknown"?"unsupported":i.length>0?"requires-setup":"available";return {runtime:n,runner:a.runner,status:l,existingEvidence:s,invocations:a.invocations,prerequisites:i}}function Y(e,t){let o=e?c.relative(e,t).split(c.sep).join("/"):c.resolve(t),n=c.basename(t).toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"").slice(0,48)||"project",a=createHash("sha256").update(o).digest("hex").slice(0,12);return `${n}--${a}`}function Z(e){return e.lines?"lines":e.statements?"statements":e.branches?"branches":"functions"}async function de(e$1={}){let t=await I(e$1.projectPath??process.cwd()),o=a(t),n=e$1.runtime??await V(t),a$1=Math.max(0,Math.min(100,Math.round(e$1.target??80))),r=await q(t,n),s=[],i=Date.now();if(e$1.run)for(let f of r.invocations){let w=await execa(f.executable,f.args,{cwd:f.cwd,reject:false,timeout:6e5}).catch(()=>({exitCode:1}));if(s.push(Number(w.exitCode??1)),Number(w.exitCode??1)!==0)break}let l=await $(t).catch(()=>null),d=l?Z(l.metrics):"lines",m=l?.metrics[d]?.percent??null,b=e$1.run&&s.some(f=>f!==0)?"failed":m===null?"unavailable":m>=a$1?"passed":"below-target",h=Y(o,t),v=c.join(t,E),R=o?`.workspai/reports/projects/${h}/project-test-coverage-last-run.json`:null,k={schemaVersion:D,generatedAt:new Date().toISOString(),status:b,project:{id:h,name:c.basename(t),path:t,workspacePath:o},runtime:n,runner:r.runner,target:{metric:d,percent:a$1},metrics:l?.metrics??{},files:l?.files??[],lowCoverageFiles:(l?.files??[]).map(f=>{let w=f.metrics[d]??f.metrics.lines??f.metrics.statements;return {path:f.path,percent:w?.percent??null,uncovered:Math.max(0,(w?.total??0)-(w?.covered??0))}}).filter(f=>f.percent===null||f.percent<a$1).sort((f,w)=>w.uncovered-f.uncovered||f.path.localeCompare(w.path)),source:l?.source??{format:"unknown",path:null,sha256:null},execution:{requested:e$1.run===true,invocations:r.invocations,exitCodes:s,durationMs:Date.now()-i},diagnostics:[...r.diagnostics,...l?[]:["No supported machine-readable coverage artifact was found."]],artifactPaths:{project:v,workspaceLatest:o?c.join(o,E):null,workspaceProject:o&&R?c.join(o,R):null}};return o&&R&&await f(o,E,[{relativePath:E,payload:k},{relativePath:R,payload:k}]),await e(t,E,k),k}export{D as a,E as b,ue as c,de as d};