workspai 0.64.0 → 0.66.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 (207) hide show
  1. package/README.md +40 -44
  2. package/contracts/agent-customization-pack.v1.json +4 -2
  3. package/contracts/analyze-last-run.v1.json +9 -1
  4. package/contracts/cli-runtime-command-inventory.v1.snapshot.json +117 -0
  5. package/contracts/extension-cli-compatibility.v1.json +2 -0
  6. package/contracts/published-contract-catalog.v1.json +10 -0
  7. package/contracts/runtime-command-surface.v1.json +59 -3
  8. package/contracts/workspace-activity-event.v1.json +132 -0
  9. package/contracts/workspace-contract.v1.json +51 -6
  10. package/contracts/workspace-intelligence/agent-bootstrap-receipt.v1.json +17 -0
  11. package/contracts/workspace-intelligence/mcp-design.v1.json +49 -2
  12. package/contracts/workspace-intelligence/project-agent-entry.v1.json +3 -0
  13. package/contracts/workspace-intelligence/project-context-agent.v1.json +78 -7
  14. package/contracts/workspace-intelligence/project-knowledge-graph-reference.v1.json +51 -0
  15. package/contracts/workspace-intelligence/workspace-knowledge-graph.v1.json +108 -3
  16. package/contracts/workspace-intelligence/workspace-model.v1.json +28 -1
  17. package/contracts/workspace-intelligence/workspace-skills-index.v1.json +34 -0
  18. package/contracts/workspace-model-cache.v1.json +4 -0
  19. package/contracts/workspace-repair-capabilities.v1.json +66 -0
  20. package/dist/analyze-UJQWGNM2.js +1 -0
  21. package/dist/{artifact-remediation-plan-XIQNI35L.js → artifact-remediation-plan-M2XBS2IU.js} +1 -1
  22. package/dist/autopilot-release-U6F4M2BQ.js +1 -0
  23. package/dist/capabilities-command-XUKPO25Z.js +1 -0
  24. package/dist/chunk-2LIVMG5C.js +2 -0
  25. package/dist/{chunk-ZGS5NKEO.js → chunk-2PACEMNE.js} +1 -1
  26. package/dist/chunk-334J2KIP.js +7 -0
  27. package/dist/{chunk-6TBTMWNA.js → chunk-3H5ACWWZ.js} +1 -1
  28. package/dist/{chunk-HCFWT42C.js → chunk-3NM3JAZW.js} +1 -1
  29. package/dist/chunk-4XEH3WNV.js +13 -0
  30. package/dist/chunk-5OA33JH2.js +2 -0
  31. package/dist/chunk-5TY74LLW.js +2 -0
  32. package/dist/{chunk-QCKWQFCD.js → chunk-5U4L6VF2.js} +1 -1
  33. package/dist/{chunk-W6FHVXNL.js → chunk-5XGR3LRI.js} +1 -1
  34. package/dist/{chunk-KTN2ARZJ.js → chunk-6JX56VAL.js} +3 -3
  35. package/dist/chunk-6UNATTB7.js +1 -0
  36. package/dist/{chunk-J3X56S7L.js → chunk-727IQFGN.js} +1 -1
  37. package/dist/chunk-7FF5EOIO.js +2 -0
  38. package/dist/chunk-AP4PV6WJ.js +1 -0
  39. package/dist/chunk-AXUA7PFV.js +2 -0
  40. package/dist/chunk-B4IVVTMQ.js +2 -0
  41. package/dist/{chunk-LNXIMF3O.js → chunk-C4S22E6S.js} +1 -1
  42. package/dist/{chunk-PXWKMPPI.js → chunk-D4UHRJAP.js} +1 -1
  43. package/dist/chunk-DUBOKZMA.js +49 -0
  44. package/dist/{chunk-VYDURWN7.js → chunk-ECLMYTWT.js} +1 -1
  45. package/dist/{chunk-VB6I52ZT.js → chunk-EHH4SKVH.js} +50 -50
  46. package/dist/chunk-EP4CUWOO.js +9 -0
  47. package/dist/chunk-FY4X2VOE.js +39 -0
  48. package/dist/chunk-GAYK3WGV.js +2 -0
  49. package/dist/{chunk-YUGKQ44M.js → chunk-H5RJCS5E.js} +1 -1
  50. package/dist/{chunk-5SFCBZOH.js → chunk-H7MRINGP.js} +1 -1
  51. package/dist/chunk-HJLGXFMK.js +1 -0
  52. package/dist/{chunk-VRGEPPUB.js → chunk-HLWDIIWL.js} +1 -1
  53. package/dist/{chunk-KJXMLBSY.js → chunk-IIFFEEMX.js} +1 -1
  54. package/dist/chunk-IVF6NEHS.js +1 -0
  55. package/dist/chunk-JC4XSU7G.js +1 -0
  56. package/dist/chunk-JRP6WP5C.js +681 -0
  57. package/dist/chunk-JZJBA2V2.js +1 -0
  58. package/dist/{chunk-N4QQADXX.js → chunk-L5CCIIF2.js} +1 -1
  59. package/dist/chunk-L5Q2S5GY.js +3 -0
  60. package/dist/chunk-LPCZHKD5.js +1 -0
  61. package/dist/chunk-MZ7U4BIQ.js +157 -0
  62. package/dist/chunk-NMXGSVMD.js +1 -0
  63. package/dist/{chunk-GQSRNUCU.js → chunk-NVND4727.js} +3 -3
  64. package/dist/chunk-O37UBRMX.js +4 -0
  65. package/dist/chunk-OI2VOU6S.js +1 -0
  66. package/dist/chunk-PD7Y6HIM.js +2 -0
  67. package/dist/chunk-PJPS7CNH.js +1 -0
  68. package/dist/chunk-QGAPGZPL.js +97 -0
  69. package/dist/chunk-R2M5OJOK.js +5 -0
  70. package/dist/chunk-SX6A656X.js +1 -0
  71. package/dist/{chunk-X6TNBARH.js → chunk-TABXSDTR.js} +2 -2
  72. package/dist/chunk-TTHO4MFC.js +2 -0
  73. package/dist/chunk-U5ENEDJA.js +7 -0
  74. package/dist/chunk-UOCERSAN.js +1 -0
  75. package/dist/chunk-UPIPSSXY.js +1 -0
  76. package/dist/chunk-UTV4DTNM.js +1 -0
  77. package/dist/chunk-VA5VSOBL.js +2 -0
  78. package/dist/chunk-VQOWB26M.js +12 -0
  79. package/dist/chunk-VQZ5PI5J.js +1 -0
  80. package/dist/chunk-WCJU3CFG.js +1 -0
  81. package/dist/chunk-WTWRSEOW.js +1 -0
  82. package/dist/{chunk-D65FCQIO.js → chunk-XESFJN52.js} +1 -1
  83. package/dist/chunk-XQFWUM2P.js +1 -0
  84. package/dist/chunk-XWKGZRHN.js +1 -0
  85. package/dist/{chunk-WRQWVSBJ.js → chunk-YX5VWPR5.js} +1 -1
  86. package/dist/chunk-ZEEV5J4I.js +1 -0
  87. package/dist/chunk-ZQH2I5RQ.js +1 -0
  88. package/dist/{create-PWJDTKDN.js → create-SOLLXXAB.js} +1 -1
  89. package/dist/{demo-kit-QHIDCSBI.js → demo-kit-5UQH2OXC.js} +1 -1
  90. package/dist/{doctor-CGXY4IDE.js → doctor-NQ5PUCUP.js} +1 -1
  91. package/dist/{dotnet-webapi-clean-AVHPJG7Y.js → dotnet-webapi-clean-YEHYIGOT.js} +1 -1
  92. package/dist/{goal-lifecycle-BRFFTIU2.js → goal-lifecycle-IPNY7KNR.js} +1 -1
  93. package/dist/goal-pack-2WV3EA4Y.js +1 -0
  94. package/dist/{gofiber-standard-47S2GYAO.js → gofiber-standard-C44IIQYH.js} +1 -1
  95. package/dist/{gogin-standard-EWB4XNOI.js → gogin-standard-X7VKACVR.js} +1 -1
  96. package/dist/index.d.ts +8 -2
  97. package/dist/index.js +170 -170
  98. package/dist/live-command-Q6E45N7S.js +18 -0
  99. package/dist/{pipeline-DF4UIHAD.js → pipeline-MIMENSI7.js} +1 -1
  100. package/dist/{project-agent-entry-IWUCV72J.js → project-agent-entry-OWLJ3IHQ.js} +1 -1
  101. package/dist/project-intelligence-lens-I67EO6AE.js +1 -0
  102. package/dist/{project-test-coverage-4S7MEQ6T.js → project-test-coverage-OPDVSFPH.js} +1 -1
  103. package/dist/{pythonRapidkitExec-VAW5XE4Z.js → pythonRapidkitExec-44ORGQ4R.js} +1 -1
  104. package/dist/{rust-axum-M5X4ZC4Z.js → rust-axum-JKZTZDRZ.js} +1 -1
  105. package/dist/{springboot-standard-Y5ADLZMQ.js → springboot-standard-PI4FLTAN.js} +1 -1
  106. package/dist/verified-goal-46JWNCDY.js +1 -0
  107. package/dist/{workspace-35Q2IXAR.js → workspace-KO37XHF6.js} +1 -1
  108. package/dist/{workspace-agent-sync-FFNSW2PD.js → workspace-agent-sync-32FIJQBH.js} +1 -1
  109. package/dist/{workspace-archive-ZBCKJHXS.js → workspace-archive-6R5DRNZW.js} +1 -1
  110. package/dist/{workspace-context-IJ36ZP6G.js → workspace-context-JKRPX775.js} +1 -1
  111. package/dist/workspace-contract-4T3NYNK5.js +1 -0
  112. package/dist/workspace-explain-MOGL4GEA.js +1 -0
  113. package/dist/workspace-explain-contract-W2E6LF4Q.js +1 -0
  114. package/dist/{workspace-feedback-RQ4TGJW6.js → workspace-feedback-6VQ7T4CR.js} +1 -1
  115. package/dist/{workspace-foundation-GMGDUMPR.js → workspace-foundation-GHWO3BZU.js} +1 -1
  116. package/dist/workspace-graph-stream-PTVS47NJ.js +1 -0
  117. package/dist/workspace-graph-token-efficiency-Z5JD5NHI.js +1 -0
  118. package/dist/{workspace-history-SYCDK7FO.js → workspace-history-M2K4M2JY.js} +1 -1
  119. package/dist/{workspace-intelligence-5NO4K5SC.js → workspace-intelligence-PJIPTXL3.js} +1 -1
  120. package/dist/{workspace-intelligence-evaluation-CQDKOYZZ.js → workspace-intelligence-evaluation-GONCRE6O.js} +1 -1
  121. package/dist/{workspace-intelligence-runner-FGEBFVVM.js → workspace-intelligence-runner-M47QR3JM.js} +1 -1
  122. package/dist/{workspace-intelligence-runtime-registry-IW6J53LO.js → workspace-intelligence-runtime-registry-FFGQF4A7.js} +1 -1
  123. package/dist/workspace-knowledge-graph-V2EAYDCL.js +1 -0
  124. package/dist/workspace-knowledge-graph-contract-VANN7RCA.js +1 -0
  125. package/dist/{workspace-knowledge-graph-query-ON45H6Y7.js → workspace-knowledge-graph-query-RASPF7FS.js} +1 -1
  126. package/dist/workspace-knowledge-graph-snapshot-5YIG6EMG.js +1 -0
  127. package/dist/{workspace-marker-7NHMDIRL.js → workspace-marker-XGAWZZDX.js} +1 -1
  128. package/dist/workspace-mcp-serve-YRORNE4P.js +3 -0
  129. package/dist/workspace-model-VSVKLX7M.js +1 -0
  130. package/dist/{workspace-onboarding-VS3YYNGK.js → workspace-onboarding-2VMJZVLZ.js} +1 -1
  131. package/dist/{workspace-python-engine-state-J4QKW55K.js → workspace-python-engine-state-BE4A3BL5.js} +1 -1
  132. package/dist/{workspace-readme-G7TZ3V5T.js → workspace-readme-6X3GLTBM.js} +2 -2
  133. package/dist/{workspace-registry-summary-MIDFG6EC.js → workspace-registry-summary-QVSJKKTX.js} +1 -1
  134. package/dist/workspace-repair-engine-WSKV3Q4V.js +3 -0
  135. package/dist/workspace-run-3BXKTLVL.js +1 -0
  136. package/dist/{workspace-verify-4R7QHUPO.js → workspace-verify-EJCSOBIK.js} +1 -1
  137. package/dist/workspace-watch-JTIFBF4Z.js +1 -0
  138. package/docs/SETUP.md +10 -0
  139. package/docs/agent-entry.md +22 -7
  140. package/docs/ci-workflows.md +1 -1
  141. package/docs/commands-reference.md +43 -7
  142. package/docs/contracts/ARTIFACT_CATALOG.md +63 -44
  143. package/docs/contracts/COMMAND_OWNERSHIP_MATRIX.md +1 -0
  144. package/docs/contracts/NAMING_AND_COEXISTENCE.md +20 -18
  145. package/docs/contracts/README.md +4 -3
  146. package/docs/real-world-qualification.md +19 -3
  147. package/docs/workspace-knowledge-graph.md +131 -27
  148. package/docs/workspace-live-activity.md +199 -0
  149. package/docs/workspace-operations.md +54 -9
  150. package/docs/workspace-repair-engine.md +17 -0
  151. package/package.json +1 -1
  152. package/dist/analyze-NUGNB256.js +0 -1
  153. package/dist/autopilot-release-TWJWSVVF.js +0 -1
  154. package/dist/capabilities-command-LHM3XIS6.js +0 -1
  155. package/dist/chunk-2647BYBC.js +0 -1
  156. package/dist/chunk-27UR373Z.js +0 -1
  157. package/dist/chunk-2VJUAKMS.js +0 -2
  158. package/dist/chunk-3A23KJAQ.js +0 -1
  159. package/dist/chunk-4PUJVYRM.js +0 -1
  160. package/dist/chunk-5B2GAZAC.js +0 -5
  161. package/dist/chunk-6DAQ7PYT.js +0 -13
  162. package/dist/chunk-CCAXADKP.js +0 -49
  163. package/dist/chunk-CCDGHPEJ.js +0 -2
  164. package/dist/chunk-CJHWKXDN.js +0 -1
  165. package/dist/chunk-CT4IODPG.js +0 -2
  166. package/dist/chunk-DK6JNE6K.js +0 -2
  167. package/dist/chunk-DOXNVBX6.js +0 -1
  168. package/dist/chunk-DWB2RRF4.js +0 -1
  169. package/dist/chunk-FQSBOLM7.js +0 -1
  170. package/dist/chunk-ILIBOMYL.js +0 -1
  171. package/dist/chunk-ISOOENLW.js +0 -8
  172. package/dist/chunk-J7RU5WR5.js +0 -2
  173. package/dist/chunk-JQLJBK5N.js +0 -1
  174. package/dist/chunk-KANAJH65.js +0 -681
  175. package/dist/chunk-KV6PS54A.js +0 -8
  176. package/dist/chunk-L22EABIC.js +0 -7
  177. package/dist/chunk-MOSXTVPU.js +0 -1
  178. package/dist/chunk-NHTDPXTW.js +0 -4
  179. package/dist/chunk-NZ3WZYD5.js +0 -1
  180. package/dist/chunk-Q2WF7D5U.js +0 -2
  181. package/dist/chunk-RSG2GJXT.js +0 -2
  182. package/dist/chunk-SFO5GVRT.js +0 -1
  183. package/dist/chunk-T5YRFRJV.js +0 -1
  184. package/dist/chunk-THIOE2PB.js +0 -2
  185. package/dist/chunk-TOYN76K4.js +0 -144
  186. package/dist/chunk-U5WVR74V.js +0 -1
  187. package/dist/chunk-UXEO5QCF.js +0 -33
  188. package/dist/chunk-VR6XMUF3.js +0 -2
  189. package/dist/chunk-WY4DOMEA.js +0 -1
  190. package/dist/chunk-XKDR5BGS.js +0 -6
  191. package/dist/chunk-Y5YAP4F3.js +0 -2
  192. package/dist/chunk-ZH7CXQH3.js +0 -94
  193. package/dist/goal-pack-FG3QDNQH.js +0 -1
  194. package/dist/project-intelligence-lens-PZPPSCUW.js +0 -1
  195. package/dist/verified-goal-BBHZRYYH.js +0 -1
  196. package/dist/workspace-contract-JS4LZZQZ.js +0 -1
  197. package/dist/workspace-explain-TITIT5XN.js +0 -1
  198. package/dist/workspace-explain-contract-V2IVSROX.js +0 -1
  199. package/dist/workspace-graph-stream-7UU2YVHC.js +0 -1
  200. package/dist/workspace-graph-token-efficiency-D7CUT6NX.js +0 -1
  201. package/dist/workspace-knowledge-graph-RSDP2E36.js +0 -1
  202. package/dist/workspace-knowledge-graph-snapshot-3FJHH5IK.js +0 -1
  203. package/dist/workspace-mcp-serve-WUIQ2AE6.js +0 -3
  204. package/dist/workspace-model-OKY4CQ3X.js +0 -1
  205. package/dist/workspace-repair-engine-VUBT77Y7.js +0 -3
  206. package/dist/workspace-run-SSF6Z26G.js +0 -1
  207. package/dist/workspace-watch-IOPSHQS5.js +0 -1
@@ -0,0 +1,12 @@
1
+ import {a as a$1}from'./chunk-LPCZHKD5.js';import {a}from'./chunk-AP4PV6WJ.js';import {m,h,i}from'./chunk-PJPS7CNH.js';import {a as a$2}from'./chunk-GR6442P7.js';import {d,c}from'./chunk-EWZZUQBR.js';import {e,i as i$1}from'./chunk-6UNATTB7.js';import u from'path';import {createHash}from'crypto';import {createReadStream}from'fs';import {execFile}from'child_process';import {promisify}from'util';import F from'fs-extra';import {parseAllDocuments}from'yaml';var Is=e.knowledgeGraph;function Cs(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 s=d(t);if(e$1.source.hash!==s)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 o=m(t);if(!o)throw new Error("Canonical workspace model has no project topology for the workspace knowledge graph.");let i=n=>({...n,generatedAt:"<ignored>"});if(c(i(e$1.projectTopology))!==c(i(o)))throw new Error("Workspace knowledge graph project topology does not match the canonical workspace model.")}function kt(e){return {path:e.path,...e.runtime!==void 0?{runtime:e.runtime}:{},...e.runtimeCandidates!==void 0?{runtimeCandidates:e.runtimeCandidates}:{},...e.framework!==void 0?{framework:e.framework}:{},...e.kit!==void 0?{kit:e.kit}:{},...e.kind!==void 0?{kind:e.kind}:{},...e.category!==void 0?{category:e.category}:{},...e.governance?{governanceCiStatus:e.governance.ci.status,governanceReleaseStatus:e.governance.release.status,governanceOwnershipStatus:e.governance.ownership.status,governanceProviders:[e.governance.ci.provider,e.governance.release.provider,e.governance.ownership.provider].filter(t=>!!t)}:{}}}var Ot=5e5,Wt=2e6;function ye(e,t){if(e!==void 0&&Number.isFinite(e)&&e>0)return Math.floor(e);let s=process.env[t];if(!s)return;let o=Number.parseInt(s,10);return Number.isFinite(o)&&o>0?o:void 0}var wt=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"]),Pt=new Set(["AGENTS.md","CLAUDE.md","GEMINI.md","QWEN.md"]),xt=[/(?:^|\/)\.agents\/skills\/workspai-[^/]+\//u,/(?:^|\/)\.amazonq\/rules\/workspai-[^/]+\.md$/u,/(?:^|\/)\.claude\/(?:rules|skills)\/(?:workspai-|rapidkit-)[^/]+(?:\/|$)/u,/(?:^|\/)\.cursor\/(?:rules|skills)\/(?:workspai-|rapidkit-)[^/]+(?:\/|$)/u,/(?:^|\/)\.grok\/(?:rules|skills)\/workspai-[^/]+(?:\/|$)/u,/(?:^|\/)\.github\/(?:instructions|prompts|skills)\/(?:workspai-|rapidkit-)[^/]+(?:\/|$)/u,/(?:^|\/)\.github\/copilot-instructions\.md$/u,/(?:^|\/)\.windsurf\/rules\/workspai-[^/]+\.md$/u,/(?:^|\/)\.windsurfrules$/u,/(?:^|\/)\.vscode\/(?:workspai|rapidkit)-agent-hooks\.json$/u];function xe(e,t){let s=N(u.relative(e,t));return Pt.has(u.posix.basename(s))||xt.some(o=>o.test(s))}var zt=new Set(["test","tests","spec","specs","e2e","integration","integration-tests","integration_tests","__tests__","fixture","fixtures","__fixtures__","testdata"]),Kt=new Set(["examples","samples","worked"]);function ze(e,t){let s=u.relative(e,t).split(u.sep).map(i=>i.toLowerCase()),o=u.basename(t).toLowerCase();return s.some(i=>zt.has(i))||/(?:\.test|\.spec|_test)\.[a-z0-9]+$/i.test(o)||/^test_.+\.[a-z0-9]+$/i.test(o)||/(?:tests?|specs?)\.(?:cs|fs|vb|java|kt|kts)$/i.test(o)}function Ke(e,t){return u.relative(e,t).split(u.sep).map(s=>s.toLowerCase()).some(s=>Kt.has(s))}function ee(e,t){return ze(e,t)||Ke(e,t)}function ue(e,t){return u.relative(e,t).split(u.sep).some(s=>s.toLowerCase()==="generated")}var Me=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"]),Nt=new Set([...Me,"go.work","go.work.sum"]),Gt=new Set(["get","put","post","delete","options","head","patch","trace"]),te=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"]),ot=new Set([...te,".adb",".ads",".asm",".bash",".bat",".cl",".cob",".cu",".cuh",".erl",".f",".f03",".f08",".f77",".f90",".f95",".fish",".for",".gql",".graphql",".groovy",".hip",".hrl",".hs",".hlsl",".jl",".ll",".m",".metal",".mir",".mlir",".mm",".nim",".pas",".pl",".pm",".proto",".ps1",".s",".sh",".sol",".sql",".sv",".td",".thrift",".v",".vhd",".vhdl",".zig",".zsh"]);function U(e,t){let s=u.extname(e).toLowerCase();return s===".h"&&t==="cpp"?"cpp":{".c":"c",".adb":"ada",".ads":"ada",".asm":"assembly",".bash":"shell",".bat":"batch",".cc":"cpp",".cl":"opencl",".cob":"cobol",".cpp":"cpp",".cs":"csharp",".cu":"cuda",".cuh":"cuda",".dart":"dart",".erl":"erlang",".ex":"elixir",".exs":"elixir",".f":"fortran",".f03":"fortran",".f08":"fortran",".f77":"fortran",".f90":"fortran",".f95":"fortran",".fish":"shell",".for":"fortran",".gql":"graphql",".go":"go",".graphql":"graphql",".groovy":"groovy",".h":"c",".hip":"hip",".hpp":"cpp",".hrl":"erlang",".hs":"haskell",".hlsl":"hlsl",".java":"java",".jl":"julia",".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",".ll":"llvm-ir",".m":"objective-c",".metal":"metal",".mir":"llvm-mir",".mlir":"mlir",".mm":"objective-cpp",".nim":"nim",".pas":"pascal",".pl":"perl",".pm":"perl",".proto":"protobuf",".ps1":"powershell",".s":"assembly",".sh":"shell",".sol":"solidity",".sql":"sql",".sv":"systemverilog",".td":"tablegen",".thrift":"thrift",".v":"verilog",".vb":"visual-basic",".vhd":"vhdl",".vhdl":"vhdl",".zig":"zig",".zsh":"shell"}[s]??s.slice(1)}var Dt=new Set(["external","third_party","third-party","vendor","vendors","vendored"]),qt=new Set(["app","apps","cli","cmd","core","extensions","internal","lib","packages","services","src"]);function st(e,t){let o=N(u.relative(t,e)).split("/").filter(Boolean),i=o[0]?.toLowerCase()??"";return (o.some(l=>Dt.has(l.toLowerCase()))?1e3:0)+(qt.has(i)?-100:0)+Math.min(o.length,20)}function Zt(e,t,s){if(e.length<=t)return [...e];let o=[...e].sort((c,r)=>st(c,s)-st(r,s)||c.localeCompare(r)),i=new Map;for(let c of o){let r=U(c),d=i.get(r)??[];d.push(c),i.set(r,d);}let n=new Set,l=Math.max(1,Math.min(25,Math.floor(t/Math.max(i.size,1))));for(let c of [...i.values()])for(let r of c.slice(0,l))n.add(r);for(let c of o){if(n.size>=t)break;n.add(c);}return [...n].sort((c,r)=>c.localeCompare(r))}function Ht(e,t){let s=N(u.relative(t,e)).split("/").filter(Boolean);if(s.length===0)return "<root>";let o=s[0].toLowerCase();return ["app","apps","cmd","components","crates","modules","packages","plugins","services"].includes(o)&&s[1]?`${o}/${s[1].toLowerCase()}`:o}function ke(e,t,s){let o=[...new Set(e)].sort((d,a)=>d.localeCompare(a));if(o.length<=t)return o;let i=new Set,n=o.filter(d=>Nt.has(u.basename(d))).sort((d,a)=>N(u.relative(s,d)).split("/").length-N(u.relative(s,a)).split("/").length||d.localeCompare(a));for(let d of n){if(i.size>=t)break;i.add(d);}let l=new Map;for(let d of o){if(i.has(d))continue;let a=`${Ht(d,s)}\0${U(d)}`,p=l.get(a)??[];p.push(d),l.set(a,p);}let c=[...l.entries()].sort(([d],[a])=>d.localeCompare(a)),r=0;for(;i.size<t;){let d=false;for(let[,a]of c){let p=a[r];if(p&&(i.add(p),d=true,i.size>=t))break}if(!d)break;r+=1;}return [...i].sort((d,a)=>d.localeCompare(a))}function Jt(e){let t=Math.max(0,e.eligibleFiles),s=Math.min(25e3,Math.max(5e3,Math.ceil(t*.2))),o=Math.max(100,Math.min(e.deepOverride??s,Math.max(t,100),1e5)),i=Math.min(1e5,Math.max(25e3,o*4,Math.ceil(t*.6))),n=Math.max(o,Math.min(e.semanticOverride??i,Math.max(t,o),25e4)),l=Math.min(2e4,Math.max(2e3,Math.ceil(Math.min(t,o)*.25))),c=Math.max(100,Math.min(e.sourceOverride??l,o,5e4));return {semanticFileBudget:n,deepFileBudget:o,sourceExtractionFileBudget:c}}function _e(e,t,s){let o=[],i=e.split(/\r?\n/);for(let n=0;n<i.length&&o.length<s;n+=1)for(let l of t){let r=i[n].match(l.pattern)?.[1]?.trim();if(r){o.push({name:r,line:n+1,detail:l.detail});break}}return o}var Ut=[{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"}],$t=[{pattern:/^\s*import(?:.+?from\s*)?["']([^"']+)["']/,detail:"import"},{pattern:/require\(["']([^"']+)["']\)/,detail:"require"}],jt=[{pattern:/^\s*from\s+([A-Za-z0-9_.]+)\s+import\s+/,detail:"import"},{pattern:/^\s*import\s+([A-Za-z0-9_.]+)(?:\s|$)/,detail:"import"}],Vt=[{pattern:/^\s*#\s*include\s*["<]([^">]+)[">]/,detail:"include"}],Yt=[{pattern:/^\s*use\s+([A-Za-z0-9_:*.-]+)/,detail:"use"}],Qt=[{pattern:/^\s*import\s+(?:static\s+)?([A-Za-z0-9_.*]+)\s*;?/,detail:"import"}],Xt=[{pattern:/^\s*(?:global\s+)?using\s+([A-Za-z0-9_.]+)/,detail:"using"}],eo=[{pattern:/^\s*import\s+(?:[A-Za-z0-9_.]+\s+)?["']([^"']+)["']/,detail:"import"}],It=[{pattern:/^\s*require(?:_relative)?\s+["']([^"']+)["']/,detail:"require"}],to=[{pattern:/^\s*use\s+([A-Za-z0-9_\\]+)/,detail:"use"}],oo=[{pattern:/^\s*(?:alias|import|require|use)\s+([A-Za-z0-9_.]+)/,detail:"import"}],so=[{pattern:/^\s*import\s+["']([^"']+)["']/,detail:"import"}],io=[{pattern:/\brequire\s*\(?\s*["']([^"']+)["']/,detail:"require"}],ro=[{pattern:/^\s*(?:library|require)\s*\(\s*["']?([^"')\s]+)["']?/,detail:"import"}],no=[...$t,...jt,{pattern:/^\s*(?:import|using|use)\s+([A-Za-z0-9_:.*\\/.-]+)/,detail:"import"},...It];function ao(e){let t=u.extname(e).toLowerCase();return [".cjs",".cts",".js",".jsx",".mjs",".mts",".ts",".tsx",".vue",".svelte"].includes(t)?$t:t===".py"?jt:[".c",".cc",".cpp",".h",".hpp"].includes(t)?Vt:t===".rs"?Yt:[".java",".kt",".kts",".scala"].includes(t)?Qt:[".cs",".fs",".fsx",".vb"].includes(t)?Xt:t===".go"?eo:t===".rb"?It:t===".php"?to:[".ex",".exs"].includes(t)?oo:t===".dart"?so:t===".lua"?io:t===".r"?ro:no}function co(e,t,s,o,i){let n=u.extname(e).toLowerCase()===".py",l=[];if(n){let r=t.match(/^\.+/)?.[0].length??0,d=r>0?u.dirname(e):u.resolve(o??"");for(let p=1;p<r;p+=1)d=u.dirname(d);let a=t.slice(r).replace(/\./g,u.sep);l.push(a?u.join(d,a):d);}else if(t.startsWith("."))l.push(u.resolve(u.dirname(e),t));else if(i==="include")l.push(u.resolve(u.dirname(e),t)),o&&l.push(u.resolve(o,t));else return null;let c=new Set;for(let r of l){c.add(r);let d=u.extname(r).toLowerCase(),a=te.has(d);if(n&&(c.add(`${r}.py`),c.add(u.join(r,"__init__.py"))),a){let p=r.slice(0,-d.length);if([".js",".jsx",".mjs"].includes(d))for(let f of [".ts",".tsx",".js",".jsx",".mjs"])c.add(`${p}${f}`);}else for(let p of te)c.add(`${r}${p}`),c.add(u.join(r,`index${p}`));}return [...c].find(r=>s.has(u.resolve(r)))??null}function lo(e,t){let s=t.trimStart(),o=u.extname(e).toLowerCase();return [".py",".rb",".sh",".bash",".zsh"].includes(o)?s.startsWith("#"):[".sql",".lua",".hs"].includes(o)?s.startsWith("--"):s.startsWith("//")||s.startsWith("/*")||s.startsWith("*")}function po(e,t){if(u.extname(e).toLowerCase()!==".py")return t;let s=null;return t.split(/\r?\n/).map(o=>{let i=0,n="";for(;i<o.length;){if(s){let a=o.indexOf(s,i);if(a<0)return n;i=a+3,s=null;continue}let l=o.indexOf("'''",i),c=o.indexOf('"""',i),r=o.indexOf("#",i),d=l<0?c:c<0?l:Math.min(l,c);if(r>=0&&(d<0||r<d)){n+=o.slice(i,r);break}if(d<0){n+=o.slice(i);break}n+=o.slice(i,d),s=o.startsWith("'''",d)?"'''":'"""',i=d+3;}return n}).join(`
2
+ `)}function uo(e,t){if(![".js",".jsx",".mjs",".ts",".tsx"].includes(u.extname(e).toLowerCase()))return t;let s=false,o=false;return t.split(/\r?\n/).map(i=>{let n="",l=null,c=false;for(let r=0;r<i.length;r+=1){let d=i[r],a=i[r+1];if(s){n+=" ",d==="*"&&a==="/"&&(n+=" ",r+=1,s=false);continue}if(o){n+=" ",d==="`"&&!c&&(o=false),c=d==="\\"&&!c,d!=="\\"&&(c=false);continue}if(l){n+=d,d===l&&!c&&(l=null),c=d==="\\"&&!c,d!=="\\"&&(c=false);continue}if(d==="/"&&a==="/")return n.padEnd(i.length," ");if(d==="/"&&a==="*"){n+=" ",r+=1,s=true;continue}if(d==="`"){n+=" ",o=true,c=false;continue}(d==="'"||d==='"')&&(l=d),n+=d;}return n}).join(`
3
+ `)}function Ct(e,t){return uo(e,po(e,t))}var fo=[{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 we(e){return createHash("sha256").update(e).digest("hex")}function E(e,t){return `wkg:${e}:${we(`${e}\0${t}`).slice(0,20)}`}function N(e){return e.replace(/\\/g,"/")}function ge(e){let t=N(e).replace(/^\.\//,"");return !t||t.startsWith("/")||/^[A-Za-z]:\//.test(t)||t.split("/").includes("..")?"unknown":t}function C(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 Z(e){if(Array.isArray(e))return e.filter(s=>typeof s=="string").map(s=>s.trim()).filter(Boolean).sort();let t=C(e);return t?Object.keys(t).map(s=>s.trim()).filter(Boolean).sort():[]}function mo(e){if(Array.isArray(e))return e.map(s=>typeof s=="string"?s.split("=",1)[0]?.trim():"").filter(s=>!!s).sort();let t=C(e);return t?Object.keys(t).sort():[]}function go(e){return Object.fromEntries(Object.entries(e).filter(t=>t[1]!==void 0).sort(([t],[s])=>t.localeCompare(s)))}async function ho(e,t,s=[]){let o=[],i=[e],n=s.map(r=>u.resolve(r)),l=r=>{let d=u.resolve(r);return n.some(a=>d===a||d.startsWith(`${a}${u.sep}`))},c=0;for(;c<i.length&&o.length<t;){let r=i[c++],d;try{d=await F.readdir(r,{withFileTypes:true});}catch{continue}d.sort((a,p)=>a.name.localeCompare(p.name));for(let a of d){if(o.length>=t)break;if(a.isSymbolicLink())continue;let p=u.join(r,a.name);l(p)||(a.isDirectory()?!wt.has(a.name)&&!a$2(a.name)&&i.push(p):a.isFile()&&(xe(e,p)||o.push(p)));}}return o.sort((r,d)=>r.localeCompare(d))}async function Ne(e){return new Promise(t=>{let s=createHash("sha256"),o=createReadStream(e);o.on("data",i=>s.update(i)),o.on("error",i=>{t(`unreadable:${i.code??"unknown"}`);}),o.on("end",()=>t(s.digest("hex")));})}var vo=promisify(execFile);async function q(e,t){let s=await vo("git",t,{cwd:e,encoding:"buffer",maxBuffer:268435456,windowsHide:true});return Buffer.isBuffer(s.stdout)?s.stdout:Buffer.from(s.stdout)}function Ge(){return [".",...[...wt].sort((e,t)=>e.localeCompare(t)).map(e=>`:(exclude,glob)**/${e}/**`),...[...Pt].sort((e,t)=>e.localeCompare(t)).map(e=>`:(exclude,glob)**/${e}`),":(exclude,glob)**/.agents/skills/workspai-*/**",":(exclude,glob)**/.amazonq/rules/workspai-*.md",":(exclude,glob)**/.claude/rules/workspai-*.md",":(exclude,glob)**/.claude/rules/rapidkit-*.md",":(exclude,glob)**/.claude/skills/workspai-*/**",":(exclude,glob)**/.cursor/rules/workspai-*.*",":(exclude,glob)**/.cursor/rules/rapidkit-*.*",":(exclude,glob)**/.cursor/skills/workspai-*/**",":(exclude,glob)**/.grok/rules/workspai-*.md",":(exclude,glob)**/.grok/skills/workspai-*/**",":(exclude,glob)**/.github/copilot-instructions.md",":(exclude,glob)**/.github/instructions/workspai-*.md",":(exclude,glob)**/.github/instructions/rapidkit-*.md",":(exclude,glob)**/.github/prompts/workspai-*.md",":(exclude,glob)**/.github/prompts/rapidkit-*.md",":(exclude,glob)**/.github/skills/workspai-*/**",":(exclude,glob)**/.github/skills/rapidkit-*/**",":(exclude,glob)**/.windsurf/rules/workspai-*.md",":(exclude,glob)**/.windsurfrules",":(exclude,glob)**/.vscode/workspai-agent-hooks.json",":(exclude,glob)**/.vscode/rapidkit-agent-hooks.json"]}function Be(e){return e.toString("utf8").split("\0").filter(Boolean).map(t=>t.replace(/\\/gu,"/"))}async function yo(e,t,s=[]){try{await q(e,["rev-parse","--show-toplevel"]);let o=Ge(),[i,n,l]=await Promise.all([q(e,["ls-files","--stage","-z","--",...o]),q(e,["ls-files","--deleted","-z","--",...o]),q(e,["ls-files","--others","--exclude-standard","-z","--",...o])]),c=new Set(Be(n)),r=i.toString("utf8").split("\0").filter(Boolean).flatMap(v=>{let g=v.match(/^(\d{6}) [0-9a-f]+ \d\t([\s\S]+)$/u);if(!g)return [];let[,h,y]=g,b=y.replace(/\\/gu,"/");return h==="120000"||h==="160000"||c.has(b)?[]:[b]}),p=(await je([...new Set([...r,...Be(l)])],64,async v=>{let g=u.normalize(v);if(u.isAbsolute(g)||g===".."||g.startsWith(`..${u.sep}`))return null;let h=u.resolve(e,g);try{let y=await F.lstat(h);return y.isFile()&&!y.isSymbolicLink()?v:null}catch{return null}})).filter(v=>v!==null).map(v=>u.resolve(e,...v.split("/").filter(Boolean))).filter(v=>!xe(e,v)).filter(v=>!s.some(g=>v===u.resolve(g)||v.startsWith(`${u.resolve(g)}${u.sep}`))).sort((v,g)=>v.localeCompare(g)),f=p.length>t;return {files:f?ke(p,t,e):p,eligibleFileCount:p.length,eligibleFileCountExact:true,truncated:f,fileLimit:t,strategy:"git-index-worktree-v1"}}catch{return null}}async function he(e,t,s=[]){let o=await yo(e,t,s);if(o)return o;let i=await ho(e,t+1,s),n=i.length>t;return {files:n?ke(i,t,e):i,eligibleFileCount:i.length,eligibleFileCountExact:!n,truncated:n,fileLimit:t,strategy:"filesystem-bfs-v1"}}async function bo(e){try{let t=(await q(e.root,["rev-parse","--show-prefix"])).toString("utf8").trim().replace(/\\/gu,"/"),s=t?`${t.replace(/^\/+|\/+$/gu,"")}/`:"";if(u.posix.isAbsolute(s)||s==="../"||s.startsWith("../")||s.includes("/../"))return null;let o=Ge(),[i,n,l,c,r,d]=await Promise.all([q(e.root,["ls-files","--full-name","-s","--",...o]),q(e.root,["diff","--no-ext-diff","--no-textconv","--binary","HEAD","--",...o]),q(e.root,["ls-files","--full-name","--others","--exclude-standard","-z","--",...o]),q(e.root,["ls-files","--full-name","--others","--ignored","--exclude-standard","-z","--",...o]),q(e.root,["ls-files","-v","--",...o]),q(e.root,["ls-files","--full-name","-s","--",...o])]);if(r.toString("utf8").split(/\r?\n/u).some(y=>/^[a-z] /u.test(y)))return null;let a=e.files.map(y=>{let b=N(u.relative(e.root,y));return `${s}${b}`});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=>a.some(b=>b.startsWith(`${y}/`))))return null;let f=new Set(a),v=Buffer.concat([l,c]).toString("utf8").split("\0").filter(Boolean).map(y=>y.replace(/\\/gu,"/")).filter(y=>f.has(y)),g=await je([...new Set(v)].sort((y,b)=>y.localeCompare(b)),16,async y=>{let b=s?y.slice(s.length):y;return {path:b,hash:await Ne(u.resolve(e.root,...b.split("/").filter(Boolean)))}}),h=createHash("sha256");h.update(`git-worktree-v2\0${e.kind}\0${e.id}\0${e.fileLimit}\0`),h.update(i),h.update(createHash("sha256").update(n).digest());for(let y of g)h.update(`${y.path}\0${y.hash}\0`);return {kind:e.kind,id:e.id,strategy:"git-worktree-v2",hash:h.digest("hex"),fileCount:e.files.length,fileLimit:e.fileLimit,truncated:e.files.length>=e.fileLimit}}catch{return null}}async function ko(e){try{let t=(await q(e.root,["rev-parse","--show-prefix"])).toString("utf8").trim().replace(/\\/gu,"/"),s=t?`${t.replace(/^\/+|\/+$/gu,"")}/`:"";if(u.posix.isAbsolute(s)||s==="../"||s.startsWith("../")||s.includes("/../"))return null;let o=Ge(),[i,n,l,c]=await Promise.all([q(e.root,["ls-files","--full-name","-s","--",...o]),q(e.root,["diff","--no-ext-diff","--no-textconv","--binary","HEAD","--",...o]),q(e.root,["ls-files","--full-name","--others","--exclude-standard","-z","--",...o]),q(e.root,["ls-files","-v","--",...o])]);if(c.toString("utf8").split(/\r?\n/u).some(p=>/^[a-z] /u.test(p)))return null;let r=(e.excludedRoots??[]).map(p=>u.resolve(p)),d=(await je([...new Set(Be(l))].sort((p,f)=>p.localeCompare(f)),16,async p=>{if(s&&!p.startsWith(s))return null;let f=s?p.slice(s.length):p,v=u.normalize(f);if(!f||u.isAbsolute(v)||v===".."||v.startsWith(`..${u.sep}`))return null;let g=u.resolve(e.root,v);if(r.some(h=>g===h||g.startsWith(`${h}${u.sep}`))||xe(e.root,g))return null;try{let h=await F.lstat(g);if(!h.isFile()||h.isSymbolicLink())return null}catch{return null}return {path:f,hash:await Ne(g)}})).filter(p=>p!==null),a=createHash("sha256");a.update(`git-worktree-v2\0${e.kind}\0${e.id}\0${e.fileLimit}\0`),a.update(i),a.update(createHash("sha256").update(n).digest());for(let p of d)a.update(`${p.path}\0${p.hash}\0`);return a.digest("hex")===e.expectedHash}catch{return null}}async function je(e,t,s){let o=new Array(e.length),i=0,n=Array.from({length:Math.min(t,Math.max(e.length,1))},async()=>{for(;i<e.length;){let l=i++;o[l]=await s(e[l]);}});return await Promise.all(n),o}async function Le(e){let t=[...new Set(e.files)].sort((d,a)=>d.localeCompare(a)),s=e.eligibleFileCount??t.length,o=s>e.fileLimit||t.length>e.fileLimit,i=t.slice(0,e.fileLimit),n=await bo({...e,files:i}),l={eligibleFileCount:s,eligibleFileCountExact:e.eligibleFileCountExact??!o,inventoryMode:o?"emergency-bounded":"complete",...e.inventoryStrategy?{inventoryStrategy:e.inventoryStrategy}:{},...e.selection?{selection:e.selection}:{}};if(n)return {...n,fileCount:i.length,truncated:o,...l};let c=await je(i,16,async d=>({path:N(u.relative(e.root,d)),hash:await Ne(d)}));c.sort((d,a)=>d.path.localeCompare(a.path));let r=createHash("sha256");r.update(`content-merkle-v1\0${e.kind}\0${e.id}\0${e.fileLimit}\0`);for(let d of c)r.update(`${d.path}\0${d.hash}\0`);return {kind:e.kind,id:e.id,strategy:"content-merkle-v1",hash:r.digest("hex"),fileCount:c.length,fileLimit:e.fileLimit,truncated:o,...l}}async function wo(e){let t=u.resolve(e.workspacePath),s=[...e.projects].sort((r,d)=>r.id.localeCompare(d.id)),o=s.map(r=>r.absolutePath?u.resolve(r.absolutePath):u.resolve(t,r.path)),i=e.inventories?.workspaceInventory??(e.inventories?.workspaceFiles?{files:[...e.inventories.workspaceFiles],eligibleFileCount:e.inventories.workspaceFiles.length,eligibleFileCountExact:e.inventories.workspaceFiles.length<=e.workspaceFileLimit,truncated:e.inventories.workspaceFiles.length>e.workspaceFileLimit,fileLimit:e.workspaceFileLimit,strategy:"filesystem-bfs-v1"}:await he(t,e.workspaceFileLimit,o)),n=i.files.filter(r=>!o.some(d=>r===d||r.startsWith(`${d}${u.sep}`))),l={...i,files:n,eligibleFileCount:i.eligibleFileCountExact&&!i.truncated?n.length:i.eligibleFileCount},c=await Promise.all([Le({kind:"workspace",id:"workspace",root:t,files:l.files,fileLimit:e.workspaceFileLimit,eligibleFileCount:l.eligibleFileCount,eligibleFileCountExact:l.eligibleFileCountExact,inventoryStrategy:l.strategy}),...s.map(async r=>{let d=r.absolutePath?u.resolve(r.absolutePath):u.resolve(t,r.path),a=e.inventories?.projectFiles?.get(r.id),p=e.inventories?.projectInventories?.get(r.id)??(a?{files:[...a],eligibleFileCount:a.length,eligibleFileCountExact:a.length<=e.projectFileLimit,strategy:"filesystem-bfs-v1"}:await he(d,e.projectFileLimit)),f=e.inventories?.scanBudgetsByProject?.get(r.id);return Le({kind:"project",id:r.id,root:d,files:p.files,fileLimit:e.projectFileLimit,eligibleFileCount:p.eligibleFileCount,eligibleFileCountExact:p.eligibleFileCountExact,inventoryStrategy:p.strategy,...f?{selection:{strategy:"component-language-round-robin-v1",semanticFileCount:Math.min(p.files.length,f.semanticFileBudget),semanticFileBudget:f.semanticFileBudget,deepFileCount:Math.min(p.files.length,f.deepFileBudget),deepFileBudget:f.deepFileBudget,sourceExtractionFileBudget:f.sourceExtractionFileBudget}}:{}})})]);return c.sort((r,d)=>r.kind.localeCompare(d.kind)||r.id.localeCompare(d.id)),Et(c)}function Et(e){let t=[...e].sort((o,i)=>o.kind.localeCompare(i.kind)||o.id.localeCompare(i.id)),s=createHash("sha256");s.update("workspace-knowledge-graph-inputs.v1\0hybrid-git-content-v2\0");for(let o of t)s.update(`${o.kind}\0${o.id}\0${o.hash}\0${o.fileCount}\0${o.fileLimit}\0${o.truncated}\0${o.eligibleFileCount??o.fileCount}\0${o.eligibleFileCountExact??!o.truncated}\0${o.inventoryMode??(o.truncated?"emergency-bounded":"complete")}\0${o.inventoryStrategy??"unknown"}\0${o.selection?c(o.selection):""}\0`);return {schemaVersion:"workspace-knowledge-graph-inputs.v1",strategy:"hybrid-git-content-v2",hashAlgorithm:"sha256",hash:s.digest("hex"),scopes:t}}async function Es(e){if(Et(e.expected.scopes).hash!==e.expected.hash)return false;let t=u.resolve(e.workspacePath),s=[...e.projects].sort((n,l)=>n.id.localeCompare(l.id)),o=s.map(n=>n.absolutePath?u.resolve(n.absolutePath):u.resolve(t,n.path)),i=new Map(s.map(n=>[n.id,n]));for(let n of e.expected.scopes){let l=n.kind==="project"?i.get(n.id):void 0;if(n.kind==="project"&&!l)return false;let c$1=l?l.absolutePath?u.resolve(l.absolutePath):u.resolve(t,l.path):t;if(n.strategy==="git-worktree-v2"){let v=await ko({kind:n.kind,id:n.id,root:c$1,fileLimit:n.fileLimit,expectedHash:n.hash,...n.kind==="workspace"?{excludedRoots:o}:{}});if(v!==null){if(!v)return false;continue}}let r=await he(c$1,n.fileLimit,n.kind==="workspace"?o:[]),d=n.kind==="workspace"?r.files.filter(v=>!o.some(g=>v===g||v.startsWith(`${g}${u.sep}`))):r.files,a={...r,files:d,eligibleFileCount:r.eligibleFileCountExact&&!r.truncated?d.length:r.eligibleFileCount},p=n.selection?{strategy:"component-language-round-robin-v1",semanticFileCount:Math.min(a.files.length,n.selection.semanticFileBudget),semanticFileBudget:n.selection.semanticFileBudget,deepFileCount:Math.min(a.files.length,n.selection.deepFileBudget),deepFileBudget:n.selection.deepFileBudget,sourceExtractionFileBudget:n.selection.sourceExtractionFileBudget}:void 0,f=await Le({kind:n.kind,id:n.id,root:c$1,files:a.files,fileLimit:n.fileLimit,eligibleFileCount:a.eligibleFileCount,eligibleFileCountExact:a.eligibleFileCountExact,inventoryStrategy:a.strategy,...p?{selection:p}:{}});if(c(f)!==c(n))return false}return true}async function ae(e){let t=await F.readFile(e,"utf8");if(e.toLowerCase().endsWith(".json")){let s=JSON.parse(t),o=C(s);return o?[o]:[]}return parseAllDocuments(t,{logLevel:"silent"}).map(s=>C(s.toJSON())).filter(s=>s!==null)}function fe(e){return [...new Set([...e.workspaceFiles,...e.projects.flatMap(t=>e.filesByProject.get(t.id)??[])])].sort((t,s)=>t.localeCompare(s))}function Pe(e){return /^(?:openapi|swagger)(?:\.[^.]+)?\.(?:json|ya?ml)$/i.test(u.basename(e))}function it(e){let t=u.basename(e).toLowerCase();return /\.(?:graphql|gql|proto)$/.test(t)||/^asyncapi(?:\.[^.]+)?\.(?:json|ya?ml)$/.test(t)}function rt(e){let t=u.basename(e),s=N(e);return !/(?:^|\/)\.devcontainer(?:\/|$)/i.test(s)&&/^Dockerfile(?:\..+)?$/i.test(t)||/\.tf$/i.test(t)||t==="Chart.yaml"}function nt(e){return /(?:^|[\\/])(?:README|ARCHITECTURE|CONTRIBUTING|SECURITY)\.md$/i.test(e)}function Po(e,t){let s=N(u.relative(e,t));return /^\.github\/workflows\/.+\.ya?ml$/i.test(s)||/^(?:\.gitlab-ci\.ya?ml|azure-pipelines\.ya?ml|Jenkinsfile|bitbucket-pipelines\.ya?ml|\.woodpecker\.ya?ml|\.drone\.ya?ml|\.travis\.ya?ml|appveyor\.ya?ml)$/i.test(s)||/^\.circleci\/config\.ya?ml$/i.test(s)||/^\.buildkite\/pipeline\.ya?ml$/i.test(s)||/^\.tekton\/.+\.ya?ml$/i.test(s)||/^prow\/[^/]+\.(?:sh|py)$/i.test(s)}function at(e,t){let s=N(u.relative(e,t));return /(?:^|\/)(?:adr|adrs|decisions)(?:\/).+\.md$/i.test(s)||/(?:^|\/)ADR[-_0-9].+\.md$/i.test(s)}async function ct(e){let t=new Set;for(let s of [e.workspacePath,...e.projects.map(o=>o.root)])for(let o of ["compose.yml","compose.yaml","docker-compose.yml","docker-compose.yaml"]){let i=u.join(s,o);await F.pathExists(i)&&t.add(i);}for(let s of fe(e))/^(?:docker-)?compose(?:\.[a-z0-9_-]+)*\.ya?ml$/i.test(u.basename(s))&&t.add(s);return [...t].sort((s,o)=>s.localeCompare(o))}async function dt(e){let s=[e.workspacePath,...e.projects.map(i=>i.root)].flatMap(i=>[u.join(i,"CODEOWNERS"),u.join(i,".github","CODEOWNERS"),u.join(i,".gitlab","CODEOWNERS"),u.join(i,"docs","CODEOWNERS")]);for(let i of fe(e))u.basename(i)==="OWNERS"&&s.push(i);let o=await Promise.all(s.map(async i=>await F.pathExists(i)?i:null));return [...new Set(o.filter(i=>!!i))].sort((i,n)=>i.localeCompare(n))}function lt(e){let t=[{root:e.workspacePath,files:e.workspaceFiles},...e.projects.map(s=>({root:s.root,files:e.filesByProject.get(s.id)??[]}))];return [...new Set(t.flatMap(s=>s.files.filter(o=>Po(s.root,o))))].sort((s,o)=>s.localeCompare(o))}async function pt(e){let t=[];for(let s of fe(e))if(/\.ya?ml$/i.test(s))try{(await ae(s)).some(i=>{let n=C(i.metadata);return !!(P(i.apiVersion)&&P(i.kind)&&P(n?.name))})&&t.push(s);}catch{}return t.sort((s,o)=>s.localeCompare(o))}function ie(e,t){let s=u.resolve(t);return e.filter(o=>s===o.root||s.startsWith(`${o.root}${u.sep}`)).sort((o,i)=>i.root.length-o.root.length)[0]??null}var Oe=class{constructor(t,s,o){this.workspacePath=t;this.now=s;this.workspaceName=o;}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,s){if(s){let o=N(u.relative(s.root,t));return ge(u.posix.join(s.artifactPrefix,o))}return ge(u.relative(this.workspacePath,t))}async addProof(t){let s;if(t.absolutePath){if(!this.contentHashes.has(t.absolutePath))try{this.contentHashes.set(t.absolutePath,we(await F.readFile(t.absolutePath)));}catch{this.contentHashes.set(t.absolutePath,null);}s=this.contentHashes.get(t.absolutePath)??void 0;}let o=ge(t.artifact),i=E("proof",[t.provider,o,t.pointer??"",t.line??"",t.detail??""].join("\0"));return this.proofs.has(i)||this.proofs.set(i,{id:i,provider:t.provider,artifact:o,...t.pointer?{pointer:t.pointer}:{},...t.line?{line:t.line}:{},...t.column?{column:t.column}:{},...s?{contentHash:s}:{},observedAt:this.now.toISOString(),derivation:t.derivation??"extracted",trust:t.trust??"observed",confidence:t.confidence??"high",freshness:"fresh",...t.detail?{detail:t.detail}:{}}),i}addEntity(t){let s=E(t.kind,t.key),o=go(t.attributes??{}),i=this.entities.get(s),n=t.label.trim(),l=n||i?.label||t.key.trim()||t.kind;!n&&!this.emptyLabelDiagnostics.has(s)&&(this.emptyLabelDiagnostics.add(s),this.diagnostics.push({code:"graph.knowledge.empty_label_normalized",severity:"warning",message:`An empty ${t.kind} label was normalized to ${l}.`,entityIds:[s],recommendation:"Inspect the provider proof and preserve a non-empty source identifier before publishing the entity."}));let c={...i?.attributes??{}};for(let[a,p]of Object.entries(o)){if(a in c&&JSON.stringify(c[a])!==JSON.stringify(p)){if(t.mergeArrayAttributes?.includes(a)&&Array.isArray(c[a])&&Array.isArray(p)){c[a]=p;continue}let f=`${s}\0${a}`;this.attributeConflicts.has(f)||(this.attributeConflicts.add(f),this.diagnostics.push({code:"graph.knowledge.attribute_conflict",severity:"warning",message:`Conflicting ${a} values were observed for ${t.kind} ${l}.`,entityIds:[s],recommendation:"Inspect the entity proof paths and make the authoritative source explicit."}));continue}c[a]=p;}let r=[...new Set([...i?.identity.aliases??[],...t.aliases??[]].map(a=>a.trim()).filter(Boolean))].sort(),d=[...new Set([...i?.proofIds??[],...t.proofIds??[]])].sort();return this.entities.set(s,{id:s,kind:t.kind,label:l,...t.projectId?{projectId:t.projectId}:{},identity:{key:t.key,scope:t.projectId?"project":"workspace",aliases:r,fingerprint:we(JSON.stringify({kind:t.kind,key:t.key,attributes:c}))},attributes:c,proofIds:d}),s}addRelation(t){let s=E("relation",`${t.from}\0${t.kind}\0${t.to}`),o=this.relations.get(s),i=[...new Set([...o?.proofIds??[],...t.proofIds])].sort(),n=new Set(i.map(r=>this.proofs.get(r)?.provider).filter(Boolean)).size,l=t.trust??o?.trust??"observed",c=n>=2&&l!=="ambiguous"?"corroborated":l;return this.relations.set(s,{id:s,from:t.from,to:t.to,kind:t.kind,derivation:t.derivation??o?.derivation??"extracted",trust:c,confidence:c==="corroborated"?"high":t.confidence??o?.confidence??"high",proofIds:i}),s}};function pe(e){let t=[],s=null;for(let o of e.split(/\r?\n/)){let i=o.match(/^\s*\[\[([^\]]+)\]\]\s*(?:#.*)?$/)?.[1]?.trim()??o.match(/^\s*\[([^\]]+)\]\s*(?:#.*)?$/)?.[1]?.trim();if(i){s&&t.push({name:s.name,body:s.lines.join(`
4
+ `)}),s={name:i,lines:[]};continue}s?.lines.push(o);}return s&&t.push({name:s.name,body:s.lines.join(`
5
+ `)}),t}function $o(e){return [...e.matchAll(/["']([^"']+)["']/g)].map(t=>t[1])}function $e(e,t){let s=t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),o=new RegExp(`^\\s*${s}\\s*=\\s*\\[`,"m").exec(e);if(!o)return [];let i=o.index+o[0].lastIndexOf("["),n=null,l=false;for(let c=i+1;c<e.length;c+=1){let r=e[c];if(n){r===n&&!l&&(n=null),l=r==="\\"&&!l,r!=="\\"&&(l=false);continue}if(r==="'"||r==='"'){n=r;continue}if(r==="]")return $o(e.slice(i+1,c))}return []}function ut(e){return e.trim().match(/^([A-Za-z0-9][A-Za-z0-9_.-]*)/)?.[1]??""}function De(e){return e.replace(/\.(?:workspace|version|path|git|optional|features|default-features|package)$/,"")}function jo(e){let t=pe(e).find(({name:o})=>o==="workspace.package")?.body;if(!t)return {};let s=o=>{let i=o.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return t.match(new RegExp(`^\\s*${i}\\s*=\\s*["']([^"']+)["']`,"m"))?.[1]};return {edition:s("edition"),rustVersion:s("rust-version"),version:s("version")}}function be(e,t,s){let o=pe(e).find(({name:c})=>c==="package")?.body;if(!o)return s;let i=t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),n=o.match(new RegExp(`^\\s*${i}\\s*=\\s*["']([^"']+)["']`,"m"))?.[1];return n||(new RegExp(`^\\s*${i}(?:\\.workspace\\s*=\\s*true|\\s*=\\s*\\{[^}]*\\bworkspace\\s*=\\s*true[^}]*\\})`,"m").test(o)?s:void 0)}function Io(e){let t=pe(e).find(({name:o})=>o==="toolchain")?.body;if(!t)return {components:[],targets:[]};let s=o=>{let i=o.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return t.match(new RegExp(`^\\s*${i}\\s*=\\s*["']([^"']+)["']`,"m"))?.[1]};return {channel:s("channel"),profile:s("profile"),components:$e(t,"components").sort(),targets:$e(t,"targets").sort()}}function Co(e,t,s={}){let o=u.basename(e);try{if(o==="package.json"||o==="composer.json"){let c=JSON.parse(t);return {ecosystem:o==="package.json"?"npm":"composer",name:P(c.name),version:P(c.version),dependencies:[...Z(c.dependencies),...Z(c.devDependencies),...Z(c.require),...Z(c["require-dev"])].filter((r,d,a)=>a.indexOf(r)===d).sort(),metadata:o==="package.json"?{entrypoints:[P(c.main),P(c.module),P(c.types)].filter(r=>!!r),exports:C(c.exports)?Object.keys(C(c.exports)).sort():P(c.exports)?["."]:[],executables:C(c.bin)?Object.keys(C(c.bin)).sort():P(c.bin)?[P(c.name)??"default"]:[],runtimeConstraints:Object.entries(C(c.engines)??{}).map(([r,d])=>`${r}:${String(d)}`).sort()}:void 0}}if(o==="deno.json"||o==="deno.jsonc"){let c=JSON.parse(t.replace(/\/\*[\s\S]*?\*\/|^\s*\/\/.*$/gm,""));return {ecosystem:"deno",name:P(c.name),version:P(c.version),dependencies:Z(c.imports)}}}catch{}let i=c=>t.match(c)?.[1]?.trim();if(o==="pyproject.toml"){let r=pe(t).filter(({name:d})=>d==="project"||d==="project.optional-dependencies"||d==="dependency-groups"||d==="tool.poetry.dependencies"||/^tool\.poetry\.group\.[^.]+\.dependencies$/.test(d)).flatMap(({name:d,body:a})=>d==="project"?$e(a,"dependencies").map(ut):d==="project.optional-dependencies"||d==="dependency-groups"?[...a.matchAll(/^\s*(?:["']([^"']+)["']|([A-Za-z0-9_.-]+))\s*=\s*\[/gm)].flatMap(p=>$e(a,p[1]??p[2])).map(ut):[...a.matchAll(/^\s*(?:["']([^"']+)["']|([A-Za-z0-9_.-]+))\s*=/gm)].map(p=>p[1]??p[2]).filter(p=>p!=="python"));return {ecosystem:"python",name:i(/^(?:name)\s*=\s*["']([^"']+)["']/m),version:i(/^(?:version)\s*=\s*["']([^"']+)["']/m),dependencies:r.filter(Boolean).filter((d,a,p)=>p.indexOf(d)===a).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(c=>c[1]).sort(),metadata:{goVersion:i(/^go\s+(\S+)/m)??"unknown"}};if(o==="Cargo.toml"){let c=pe(t).filter(({name:r})=>/(?:^|\.)(?:dev-|build-)?dependencies$/.test(r)).map(({body:r})=>r).join(`
6
+ `);return {ecosystem:"cargo",name:be(t,"name",void 0),version:be(t,"version",s.version),dependencies:[...c.matchAll(/^\s*(?:["']([^"']+)["']|([A-Za-z0-9_.-]+))\s*=/gm)].map(r=>r[1]??r[2]).map(De).filter((r,d,a)=>a.indexOf(r)===d).sort(),metadata:{edition:be(t,"edition",s.edition)??"unknown",rustVersion:be(t,"rust-version",s.rustVersion)??"unknown",features:pe(t).find(({name:r})=>r==="features")?.body.match(/^\s*([A-Za-z0-9_.-]+)\s*=/gm)?.map(r=>r.split("=",1)[0].trim()).sort()??[]}}}if(o==="pom.xml"){let c=[...t.matchAll(/<dependency>([\s\S]*?)<\/dependency>/g)].map(r=>{let d=r[1].match(/<groupId>([^<]+)<\/groupId>/)?.[1]?.trim(),a=r[1].match(/<artifactId>([^<]+)<\/artifactId>/)?.[1]?.trim();return d&&a?`${d}:${a}`:a}).filter(r=>!!r);return {ecosystem:"maven",name:i(/<artifactId>([^<]+)<\/artifactId>/),version:i(/<version>([^<]+)<\/version>/),dependencies:c.filter((r,d,a)=>a.indexOf(r)===d).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(c=>c[1]).sort(),metadata:{targetFrameworks:(i(/<TargetFrameworks?>([^<]+)<\/TargetFrameworks?>/)??"unknown").split(";"),rootNamespace:i(/<RootNamespace>([^<]+)<\/RootNamespace>/)??"unknown"}};let n={"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"},l=o==="requirements.txt"?t.split(/\r?\n/).map(c=>c.trim().match(/^([A-Za-z0-9_.-]+)/)?.[1]):o.startsWith("build.gradle")?[...t.matchAll(/(?:implementation|api|compileOnly|runtimeOnly|testImplementation)\s*\(?["']([^:"']+):([^:"']+)/g)].map(c=>`${c[1]}:${c[2]}`):o==="Gemfile"?[...t.matchAll(/^\s*gem\s+["']([^"']+)["']/gm)].map(c=>c[1]):o==="mix.exs"?[...t.matchAll(/\{:\s*([A-Za-z0-9_]+)\s*,/g)].map(c=>c[1]):o==="pubspec.yaml"?[...t.matchAll(/^\s{2}([A-Za-z0-9_]+):\s+/gm)].map(c=>c[1]):o==="Package.swift"?[...t.matchAll(/\.package\s*\(\s*url:\s*["']([^"']+)["']/g)].map(c=>c[1]):o==="CMakeLists.txt"?[...t.matchAll(/find_package\s*\(\s*([A-Za-z0-9_.+-]+)/gi)].map(c=>c[1]):o==="project.clj"||o==="deps.edn"?[...t.matchAll(/\[?([A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+)\s+/g)].map(c=>c[1]):o==="build.sbt"?[...t.matchAll(/["']([^"']+)["']\s*%%?\s*["']([^"']+)["']/g)].map(c=>`${c[1]}:${c[2]}`):[];return {ecosystem:n[o]??"unknown",dependencies:l.filter(c=>!!c).filter((c,r,d)=>d.indexOf(c)===r).sort()}}function Eo(e){let t=new Set,s=o=>{let i=o.replace(/\/\/.*$/u,"").trim().replace(/^["']|["']$/gu,"").replace(/\\/gu,"/");i&&i!=="("&&i!==")"&&t.add(i);};for(let o of e.matchAll(/^\s*use\s*\(([\s\S]*?)^\s*\)/gmu))for(let i of (o[1]??"").split(/\r?\n/u))s(i);for(let o of e.matchAll(/^\s*use\s+([^\s(][^\r\n]*)$/gmu))s(o[1]??"");return [...t].sort((o,i)=>o.localeCompare(i))}function ft(e,t){let s=e==="cargo"?De(t):t;return e==="cargo"?s.toLowerCase().replace(/[-_]/g,""):s.toLowerCase()}function Ro(e,t){let s=[...e.entities.values()].filter(i=>i.kind==="package"&&i.projectId===t),o=new Map;for(let i of s){let n=String(i.attributes.ecosystem??"unknown");for(let l of new Set([i.label,...i.identity.aliases])){let c=`${n}\0${ft(n,l)}`,r=o.get(c)??[];r.push(i),o.set(c,r);}}for(let i of s){let n=String(i.attributes.ecosystem??"unknown"),l=Array.isArray(i.attributes.dependencies)?i.attributes.dependencies.filter(c=>typeof c=="string"):[];for(let c of l){let r=`${n}\0${ft(n,c)}`,d=(o.get(r)??[]).filter(f=>f.id!==i.id);if(d.length!==1)continue;let a=d[0];e.addRelation({from:i.id,to:a.id,kind:"depends-on",trust:"authoritative",derivation:"authored",confidence:"high",proofIds:i.proofIds});let p=E("module",`dependency:${n}:${De(c)}`);e.relations.delete(E("relation",`${i.id}\0depends-on\0${p}`));}}for(let i of [...e.entities.values()]){if(i.kind!=="module"||i.projectId)continue;[...e.relations.values()].some(l=>l.from===i.id||l.to===i.id)||e.entities.delete(i.id);}}var So={id:"workspace-foundation",version:"1.0.0",scanTier:"complete-inventory",async run(e){let{state:t}=e,s=await t.addProof({provider:this.id,artifact:i$1.workspaceContract,absolutePath:u.join(e.workspacePath,".workspai","workspace.contract.json"),trust:"authoritative",derivation:"authored",detail:"Workspace identity and project registry boundary"}),o=t.addEntity({kind:"workspace",key:`workspace:${t.workspaceName}`,label:t.workspaceName,aliases:[t.workspaceName],proofIds:[s]});for(let i of e.projects){let n=e.filesByProject.get(i.id)??[],l=n.find(b=>/[\\/]\.(?:workspai|rapidkit)[\\/](?:project|context)\.json$/.test(b)),c=n.find(b=>Me.has(u.basename(b))),r=l??c,d=await t.addProof({provider:this.id,artifact:r?t.artifactPath(r,i):ge(u.posix.join(i.artifactPrefix,".workspai/project.json")),...r?{absolutePath:r}:{},trust:l?"authoritative":"observed",derivation:l?"authored":"inferred",detail:`Project ${i.id}`}),a=t.addEntity({kind:"project",key:`project:${i.id}`,label:i.id,projectId:i.id,aliases:[i.id,i.path],attributes:kt(i),proofIds:[d]});t.addRelation({from:o,to:a,kind:"contains",trust:"authoritative",derivation:"authored",proofIds:[d]});let p=new Set,f=[],v=n.find(b=>u.resolve(b)===u.resolve(i.root,"go.work")),g;if(v)try{let b=await F.readFile(v,"utf8"),w=Eo(b),R=t.artifactPath(v,i),k=await t.addProof({provider:this.id,artifact:R,absolutePath:v,pointer:"/use",trust:"authoritative",derivation:"authored",confidence:"high",detail:`Go workspace with ${w.length} member(s)`}),$=t.addEntity({kind:"module",key:`go-workspace:${i.id}:${R}`,label:`${i.id} Go workspace`,projectId:i.id,aliases:["go.work"],attributes:{ecosystem:"go",manifest:R,members:w},proofIds:[k]});t.addRelation({from:a,to:$,kind:"contains",trust:"authoritative",derivation:"authored",proofIds:[k]}),g={entityId:$,members:w,proofId:k};}catch{}let h={},y=n.find(b=>u.resolve(b)===u.resolve(i.root,"Cargo.toml"));if(y)try{h=jo(await F.readFile(y,"utf8"));}catch{}for(let b of n){let w=u.basename(b);if(/^(?:\.env\.example|\.env\.sample|\.env\.template)$/i.test(w))try{let k=await F.readFile(b,"utf8");for(let $ of k.split(/\r?\n/)){let S=$.match(/^\s*([A-Za-z_][A-Za-z0-9_]*)\s*=/)?.[1];S&&p.add(S);}}catch{}let R=ze(i.root,b);if(R&&f.push(b),!(R||Ke(i.root,b))&&!(!Me.has(w)&&!/\.(?:cs|fs|vb)proj$/i.test(w)))try{let k=await F.readFile(b,"utf8"),$=Co(b,k,h),S=t.artifactPath(b,i),I=await t.addProof({provider:this.id,artifact:S,absolutePath:b,pointer:"/",confidence:$.name?"high":"medium",detail:`${$.ecosystem} manifest`}),_=t.addEntity({kind:"package",key:`package:${i.id}:${$.ecosystem}:${$.name??"anonymous"}:${S}`,label:$.name??`${i.id}/${N(u.relative(i.root,b))}`,projectId:i.id,aliases:[w,...$.name?[$.name]:[]],attributes:{ecosystem:$.ecosystem,version:$.version,manifest:S,dependencies:$.dependencies,...$.metadata??{}},proofIds:[I]});t.addRelation({from:a,to:_,kind:"contains",proofIds:[I]});for(let M of $.dependencies.slice(0,500)){let T=t.addEntity({kind:"module",key:`dependency:${$.ecosystem}:${M}`,label:M,aliases:[M],attributes:{ecosystem:$.ecosystem,external:true},proofIds:[I]});t.addRelation({from:_,to:T,kind:"depends-on",trust:"authoritative",derivation:"authored",proofIds:[I]});}}catch{}}if(g){let b=[...t.entities.values()].filter(w=>w.kind==="package"&&w.projectId===i.id);for(let w of g.members){let R=t.artifactPath(u.join(i.root,w,"go.mod"),i),k=b.find($=>$.attributes.manifest===R);k&&t.addRelation({from:g.entityId,to:k.id,kind:"contains",trust:"authoritative",derivation:"authored",confidence:"high",proofIds:[...new Set([g.proofId,...k.proofIds])]});}}if(Ro(t,i.id),p.size>0){let b=n.find(w=>/^\.env\.(?:example|sample|template)$/i.test(u.basename(w)));if(b){let w=await t.addProof({provider:this.id,artifact:t.artifactPath(b,i),absolutePath:b,detail:"Public environment template keys only; values are intentionally excluded"}),R=t.addEntity({kind:"environment",key:`environment:${i.id}:template`,label:`${i.id} environment contract`,projectId:i.id,attributes:{keys:[...p].sort(),valuesEmitted:false},proofIds:[w]});t.addRelation({from:a,to:R,kind:"configured-by",proofIds:[w]});}}if(f.length>0){let b=await t.addProof({provider:this.id,artifact:t.artifactPath(f[0],i),absolutePath:f[0],detail:`${f.length} test file(s) discovered`}),w=t.addEntity({kind:"test-suite",key:`tests:${i.id}`,label:`${i.id} tests`,projectId:i.id,attributes:{fileCount:f.length},proofIds:[b]});t.addRelation({from:w,to:a,kind:"tests",proofIds:[b]});let R=new Map;for(let k of f){if(!te.has(u.extname(k).toLowerCase()))continue;let $=U(k,i.runtime),S=R.get($)??[];S.push(k),R.set($,S);}for(let[k,$]of [...R].sort(([S],[I])=>S.localeCompare(I))){let S=await t.addProof({provider:this.id,artifact:t.artifactPath($[0],i),absolutePath:$[0],detail:`${$.length} ${k} test source file(s) discovered`}),I=t.addEntity({kind:"test-suite",key:`tests:${i.id}:${k}`,label:`${i.id} ${k} tests`,projectId:i.id,attributes:{fileCount:$.length,language:k},proofIds:[S]});t.addRelation({from:I,to:a,kind:"tests",proofIds:[S]});}}}}};function Te(e){return e.replace(/~/g,"~0").replace(/\//g,"~1")}function mt(e){if(Array.isArray(e))return e.length;let t=C(e);return t?Object.keys(t).length:0}var Ao={id:"vscode-extension-manifest",version:"1.2.0",scanTier:"complete-inventory",async applicable(e){for(let t of e.projects){let s=(e.filesByProject.get(t.id)??[]).filter(o=>u.basename(o).toLowerCase()==="package.json");for(let o of s)try{let i=C(await F.readJson(o));if(P(C(i?.engines)?.vscode)||C(i?.contributes))return true}catch{}}return false},async run(e){for(let t of e.projects){let s=(e.filesByProject.get(t.id)??[]).filter(o=>u.basename(o).toLowerCase()==="package.json").sort((o,i)=>o.localeCompare(i));for(let o of s){let i=null;try{i=C(await F.readJson(o));}catch{continue}let n=C(i?.contributes),l=P(C(i?.engines)?.vscode);if(!l&&!n)continue;let c=u.dirname(o),r=u.resolve(c)===u.resolve(t.root),d=u.relative(t.root,c).split(u.sep).join("/"),a=P(i?.name)??(d&&d!=="."?d:t.id),p=e.state.artifactPath(o,t),f=await e.state.addProof({provider:this.id,artifact:p,absolutePath:o,pointer:"/",trust:"authoritative",derivation:"authored",confidence:"high",detail:`VS Code extension manifest for ${a}`}),v=e.state.addEntity({kind:"project",key:`project:${t.id}`,label:t.id,projectId:t.id}),g=r?e.state.addEntity({kind:"project",key:`project:${t.id}`,label:t.id,projectId:t.id,attributes:{vscodeExtension:true,vscodeEngine:l,extensionEntry:P(i?.main)??P(i?.browser),extensionKind:Z(i?.extensionKind),activationEvents:Z(i?.activationEvents),contributionCounts:Object.entries(n??{}).map(([_,M])=>`${_}:${mt(M)}`).sort()},proofIds:[f]}):e.state.addEntity({kind:"package",key:`vscode-extension:${t.id}:${d}`,label:a,projectId:t.id,attributes:{surface:"vscode-extension",extensionPath:d,manifest:p,vscodeEngine:l,extensionEntry:P(i?.main)??P(i?.browser),extensionKind:Z(i?.extensionKind),activationEvents:Z(i?.activationEvents),contributionCounts:Object.entries(n??{}).map(([_,M])=>`${_}:${mt(M)}`).sort()},proofIds:[f]});r||e.state.addRelation({from:v,to:g,kind:"contains",trust:"authoritative",derivation:"authored",confidence:"high",proofIds:[f]});let h=Array.isArray(n?.commands)?n.commands:[],y=C(n?.menus),b=Object.values(y??{}).flatMap(_=>Array.isArray(_)?_:[]),w=Array.isArray(n?.keybindings)?n.keybindings:[];for(let[_,M]of h.entries()){let T=C(M),B=P(T?.command);if(!B)continue;let O=`/contributes/commands/${_}`,W=await e.state.addProof({provider:this.id,artifact:p,absolutePath:o,pointer:O,trust:"authoritative",derivation:"authored",confidence:"high",detail:`VS Code command ${B}`}),K=b.filter(D=>P(C(D)?.command)===B).length,G=w.filter(D=>P(C(D)?.command)===B).length,J=e.state.addEntity({kind:"api",key:`vscode-command:${t.id}:${B}`,label:B,projectId:t.id,aliases:[P(T?.title),P(T?.shortTitle)].filter(D=>!!D),attributes:{surface:"vscode-command",runtimeRegistrationRequired:false,title:P(T?.title),shortTitle:P(T?.shortTitle),category:P(T?.category),enablement:P(T?.enablement),icon:P(T?.icon),menuCount:K,keybindingCount:G,manifest:p,pointer:O},proofIds:[W]});e.state.addRelation({from:g,to:J,kind:"exposes",trust:"authoritative",derivation:"authored",confidence:"high",proofIds:[W]});}let R=C(n?.viewsContainers),k=new Map;for(let[_,M]of Object.entries(R??{}))if(Array.isArray(M))for(let[T,B]of M.entries()){let O=C(B),W=P(O?.id);if(!W)continue;let K=`/contributes/viewsContainers/${Te(_)}/${T}`,G=await e.state.addProof({provider:this.id,artifact:p,absolutePath:o,pointer:K,trust:"authoritative",derivation:"authored",detail:`VS Code view container ${W}`}),J=e.state.addEntity({kind:"service",key:`vscode-view-container:${t.id}:${W}`,label:W,projectId:t.id,aliases:[P(O?.title)].filter(D=>!!D),attributes:{surface:"vscode-view-container",title:P(O?.title),location:_,icon:P(O?.icon),manifest:p,pointer:K},proofIds:[G]});k.set(W,J),e.state.addRelation({from:g,to:J,kind:"contains",trust:"authoritative",derivation:"authored",proofIds:[G]});}let $=C(n?.views);for(let[_,M]of Object.entries($??{}))if(Array.isArray(M))for(let[T,B]of M.entries()){let O=C(B),W=P(O?.id);if(!W)continue;let K=`/contributes/views/${Te(_)}/${T}`,G=await e.state.addProof({provider:this.id,artifact:p,absolutePath:o,pointer:K,trust:"authoritative",derivation:"authored",detail:`VS Code view ${W}`}),J=e.state.addEntity({kind:"service",key:`vscode-view:${t.id}:${W}`,label:W,projectId:t.id,aliases:[P(O?.name),P(O?.contextualTitle)].filter(D=>!!D),attributes:{surface:O?.type==="webview"?"vscode-webview":"vscode-view",name:P(O?.name),contextualTitle:P(O?.contextualTitle),containerId:_,viewType:P(O?.type)??"tree",manifest:p,pointer:K},proofIds:[G]});e.state.addRelation({from:k.get(_)??g,to:J,kind:"contains",trust:"authoritative",derivation:"authored",proofIds:[G]});}let S=Array.isArray(n?.configuration)?n.configuration:n?.configuration?[n.configuration]:[];for(let[_,M]of S.entries()){let T=C(M),B=C(T?.properties);for(let[O,W]of Object.entries(B??{})){let K=C(W),J=`${Array.isArray(n?.configuration)?`/contributes/configuration/${_}`:"/contributes/configuration"}/properties/${Te(O)}`,D=await e.state.addProof({provider:this.id,artifact:p,absolutePath:o,pointer:J,trust:"authoritative",derivation:"authored",detail:`VS Code configuration ${O}`}),Ie=e.state.addEntity({kind:"schema",key:`vscode-configuration:${t.id}:${O}`,label:O,projectId:t.id,attributes:{surface:"vscode-configuration",title:P(T?.title),type:P(K?.type),scope:P(K?.scope),description:P(K?.description)??P(K?.markdownDescription),manifest:p,pointer:J},proofIds:[D]});e.state.addRelation({from:g,to:Ie,kind:"configured-by",trust:"authoritative",derivation:"authored",proofIds:[D]});}}let I=Array.isArray(n?.chatParticipants)?n.chatParticipants:[];for(let[_,M]of I.entries()){let T=C(M),B=P(T?.id);if(!B)continue;let O=`/contributes/chatParticipants/${_}`,W=await e.state.addProof({provider:this.id,artifact:p,absolutePath:o,pointer:O,trust:"authoritative",derivation:"authored",detail:`VS Code chat participant ${B}`}),K=e.state.addEntity({kind:"api",key:`vscode-chat-participant:${t.id}:${B}`,label:B,projectId:t.id,aliases:[P(T?.name),P(T?.fullName)].filter(G=>!!G),attributes:{surface:"vscode-chat-participant",runtimeRegistrationRequired:false,name:P(T?.name),fullName:P(T?.fullName),description:P(T?.description),manifest:p,pointer:O},proofIds:[W]});e.state.addRelation({from:g,to:K,kind:"exposes",trust:"authoritative",derivation:"authored",proofIds:[W]});}}}}};function gt(e,t){let s=[],o=false;for(let i of e.split(/\r?\n/)){let n=i.match(/^\s*\[([^\]]+)\]\s*(?:#.*)?$/)?.[1]?.trim();if(n){o=n===t;continue}if(!o||/^\s*(?:#|$)/.test(i))continue;let l=i.match(/^\s*(?:"([^"]+)"|'([^']+)'|([A-Za-z0-9_.-]+))\s*=\s*["']([^"']+)["']/),c=l?.[1]??l?.[2]??l?.[3],r=l?.[4];c&&r&&s.push([c,r]);}return s}var Fo={id:"python-project-manifest",version:"1.1.0",scanTier:"complete-inventory",async applicable(e){for(let t of e.projects){let s=(e.filesByProject.get(t.id)??[]).find(o=>u.dirname(o)===t.root&&u.basename(o).toLowerCase()==="pyproject.toml");if(s)try{if(gt(await F.readFile(s,"utf8"),"project.scripts").length>0)return true}catch{}}return false},async run(e){for(let t of e.projects){let s=(e.filesByProject.get(t.id)??[]).find(r=>u.dirname(r)===t.root&&u.basename(r).toLowerCase()==="pyproject.toml");if(!s)continue;let o=await F.readFile(s,"utf8"),i=gt(o,"project.scripts"),n=e.state.artifactPath(s,t),l=await e.state.addProof({provider:this.id,artifact:n,absolutePath:s,pointer:"/project",trust:"authoritative",derivation:"authored",detail:"Python project manifest"}),c=e.state.addEntity({kind:"project",key:`project:${t.id}`,label:t.id,projectId:t.id,attributes:{pythonProject:true,requiresPython:o.match(/^requires-python\s*=\s*["']([^"']+)["']/m)?.[1],buildBackend:o.match(/^build-backend\s*=\s*["']([^"']+)["']/m)?.[1],consoleScriptCount:i.length},proofIds:[l]});for(let[r,d]of i){let a=`/project/scripts/${r}`,p=await e.state.addProof({provider:this.id,artifact:n,absolutePath:s,pointer:a,trust:"authoritative",derivation:"authored",detail:`Python console script ${r}`}),f=e.state.addEntity({kind:"api",key:`python-console-script:${t.id}:${r}`,label:r,projectId:t.id,aliases:[d],attributes:{surface:"python-console-script",runtimeRegistrationRequired:false,entrypoint:d,manifest:n,pointer:a},proofIds:[p]});e.state.addRelation({from:c,to:f,kind:"exposes",trust:"authoritative",derivation:"authored",proofIds:[p]});}}}},_o={id:"source-language-inventory",version:"1.2.0",scanTier:"complete-inventory",applicable(e){return e.projects.some(t=>(e.filesByProject.get(t.id)??[]).some(s=>ot.has(u.extname(s).toLowerCase())))},async run(e){for(let t of e.projects){let s=e.filesByProject.get(t.id)??[],o=e.inventoryByProject.get(t.id),i=(e.filesByProject.get(t.id)??[]).find(a=>/^rust-toolchain(?:\.toml)?$/i.test(u.basename(a))),n,l;if(i)try{n=Io(await F.readFile(i,"utf8")),l=await e.state.addProof({provider:this.id,artifact:e.state.artifactPath(i,t),absolutePath:i,pointer:"/toolchain",derivation:"authored",trust:"authoritative",confidence:"high",detail:"Rust toolchain contract"});}catch{}let c=s.filter(a=>ot.has(u.extname(a).toLowerCase())),r=new Map;for(let a of c){let p=U(a,t.runtime),f=r.get(p)??{files:[],production:[],tests:[],examples:[],generated:[],extensions:new Set};f.files.push(a),f.extensions.add(u.extname(a).toLowerCase()),ue(t.root,a)&&f.generated.push(a),ze(t.root,a)?f.tests.push(a):Ke(t.root,a)?f.examples.push(a):f.production.push(a),r.set(p,f);}let d=E("project",`project:${t.id}`);for(let[a,p]of [...r].sort(([f],[v])=>f.localeCompare(v))){let f=[p.production[0],p.tests[0],p.examples[0],p.generated[0],p.files[0]].filter((b,w,R)=>!!b&&R.indexOf(b)===w),v=await Promise.all(f.map(b=>e.state.addProof({provider:this.id,artifact:e.state.artifactPath(b,t),absolutePath:b,derivation:"extracted",trust:"observed",confidence:"high",detail:`${a} source-language inventory evidence`}))),g=[...p.production.length>0?["production"]:[],...p.tests.length>0?["test"]:[],...p.examples.length>0?["example"]:[],...p.generated.length>0?["generated"]:[]],h=a==="rust"&&l?[...v,l]:v,y=e.state.addEntity({kind:"language",key:`language:${t.id}:${a}`,label:`${t.id} programming language: ${a}`,projectId:t.id,aliases:[a,`${a} source`,`${a} programming language`,"programming languages actually used"],attributes:{language:a,usage:"source-build-test",roles:g,fileCount:p.files.length,productionFileCount:p.production.length,testFileCount:p.tests.length,exampleFileCount:p.examples.length,generatedFileCount:p.generated.length,extensions:[...p.extensions].sort(),inventoryTruncated:o?.truncated??false,...a==="rust"&&n?{toolchainChannel:n.channel,toolchainProfile:n.profile,toolchainComponents:n.components,toolchainTargets:n.targets}:{}},proofIds:h});e.state.addRelation({from:d,to:y,kind:"uses-language",derivation:"extracted",trust:"observed",confidence:o?.truncated?"medium":"high",proofIds:h});}o?.truncated&&e.state.diagnostics.push({code:"graph.provider.source_language_inventory.limit_reached",severity:"warning",message:`Language inventory for ${t.id} reached the ${o.fileLimit}-file emergency bound. Counts are lower bounds.`,recommendation:"Increase inventoryFileLimitPerProject or split the repository into explicit project boundaries before treating language counts as complete."});}}},To={id:"source-structure",version:"1.0.0",scanTier:"adaptive-deep",applicable(e){return e.projects.some(t=>(e.filesByProject.get(t.id)??[]).some(s=>te.has(u.extname(s).toLowerCase())&&!ee(t.root,s)))},async run(e){for(let t of e.projects){let s=(e.deepFilesByProject.get(t.id)??[]).filter(f=>!ee(t.root,f)),o=e.filesByProject.get(t.id)??s,i=e.scanBudgetsByProject.get(t.id)?.sourceExtractionFileBudget??2e3,n=Math.min(1e5,Math.max(1e4,i*10)),l=o.filter(f=>te.has(u.extname(f).toLowerCase())&&!ee(t.root,f)),c=Zt(l,i,t.root),r=new Set(o.filter(f=>!ee(t.root,f)).map(f=>u.resolve(f))),d=new Map;await Promise.all(s.map(async f=>{try{let v=await F.stat(f);if(v.isFile()&&v.size<=2*1024*1024){let g=u.resolve(f);r.add(g),d.set(g,v.size);}}catch{}}));let a=0,p=0;for(let f of c){let v;try{if((await F.stat(f)).size>2*1024*1024)continue;v=await F.readFile(f,"utf8");}catch{continue}let g=Ct(f,v),h=e.state.artifactPath(f,t),y=await e.state.addProof({provider:this.id,artifact:h,absolutePath:f,derivation:"extracted",trust:"observed",confidence:"high",detail:`${U(f,t.runtime)} source file`}),b=e.state.addEntity({kind:"file",key:`file:${t.id}:${h}`,label:h,projectId:t.id,aliases:[u.basename(f)],attributes:{artifact:h,language:U(f,t.runtime),bytes:Buffer.byteLength(v),...ue(t.root,f)?{generated:true}:{}},proofIds:[y]});e.state.addRelation({from:E("project",`project:${t.id}`),to:b,kind:"contains",proofIds:[y]});let w=_e(g,ao(f),250);for(let k of w){let $=await e.state.addProof({provider:this.id,artifact:h,absolutePath:f,line:k.line,derivation:"extracted",trust:"observed",confidence:"medium",detail:`${k.detail}: ${k.name}`}),S=co(f,k.name,r,t.root,k.detail);if(S){let I=e.state.artifactPath(S,t),_=E("file",`file:${t.id}:${I}`);if(!e.state.entities.has(_)){let M=await F.stat(S).catch(()=>null),T=await e.state.addProof({provider:this.id,artifact:I,...M?.isFile()&&M.size<=2*1024*1024?{absolutePath:S}:{},derivation:"extracted",trust:"observed",confidence:"high",detail:"Locally imported artifact resolved from the project inventory"}),B=e.state.addEntity({kind:"file",key:`file:${t.id}:${I}`,label:I,projectId:t.id,aliases:[u.basename(S)],attributes:{artifact:I,language:U(S,t.runtime),bytes:d.get(u.resolve(S))??(M?.isFile()?M.size:void 0)},proofIds:[T]});e.state.addRelation({from:E("project",`project:${t.id}`),to:B,kind:"contains",proofIds:[T]});}e.state.addRelation({from:b,to:_,kind:"imports",confidence:"high",proofIds:[$]});}else {let I=k.name.startsWith(".");I&&(p+=1);let _=U(f,t.runtime),M=!I&&(_==="javascript"||_==="typescript")?k.name.startsWith("@")?k.name.split("/").slice(0,2).join("/"):k.name.split("/")[0]:null,T=M?E("module",`dependency:npm:${M}`):null,B=T?e.state.entities.get(T):void 0,O=B?e.state.addEntity({kind:"module",key:B.identity.key,label:B.label,aliases:[...B.identity.aliases,k.name],attributes:B.attributes,proofIds:[...B.proofIds,$]}):e.state.addEntity({kind:"module",key:`module:${t.id}:${k.name}`,label:k.name,projectId:t.id,aliases:[k.name],attributes:{specifier:k.name,resolution:I?"unresolved-local":"external"},proofIds:[$]});e.state.addRelation({from:b,to:O,kind:"imports",confidence:I?"low":"medium",proofIds:[$]});}}if(a<n){let k=_e(g,Ut,Math.min(100,n-a));a+=k.length;for(let $ of k){let S=await e.state.addProof({provider:this.id,artifact:h,absolutePath:f,line:$.line,derivation:"extracted",trust:"observed",confidence:"medium",detail:`${$.detail}: ${$.name}`}),I=e.state.addEntity({kind:"symbol",key:`symbol:${t.id}:${h}:${$.detail}:${$.name}`,label:$.name,projectId:t.id,attributes:{symbolKind:$.detail,language:U(f,t.runtime),...ue(t.root,f)?{generated:true}:{}},proofIds:[S]});e.state.addRelation({from:b,to:I,kind:"defines",confidence:"medium",proofIds:[S]});}}let R=t.framework!=="vscode-extension"&&t.kind!=="extension";for(let k of R?_e(g,fo,100):[]){let $=v.split(/\r?\n/)[k.line-1]??"";if(lo(f,$))continue;let S=$.match(/(?:@|\.|\[|^\s*)(get|post|put|delete|patch|options|head)/i)?.[1]?.toUpperCase()??"HTTP",I=await e.state.addProof({provider:this.id,artifact:h,absolutePath:f,line:k.line,derivation:"extracted",trust:"observed",confidence:"medium",detail:`${S} ${k.name}`}),_=e.state.addEntity({kind:"endpoint",key:`source-endpoint:${t.id}:${h}:${S}:${k.name}`,label:`${S} ${k.name||"/"}`,projectId:t.id,attributes:{method:S,path:k.name||"/",source:h},proofIds:[I]});e.state.addRelation({from:b,to:_,kind:"defines",confidence:"medium",proofIds:[I]});}}c.length<l.length&&e.state.diagnostics.push({code:"graph.provider.source_structure.limit_reached",severity:"info",message:`Source extraction for ${t.id} sampled ${c.length} file(s) from ${l.length} complete-inventory source candidate(s).`,recommendation:"Use bounded graph search, evidence, and path queries for proof-backed retrieval; do not treat the sampled symbol inventory as exhaustive."}),a>=n&&e.state.diagnostics.push({code:"graph.provider.source_structure.symbol_limit_reached",severity:"info",message:`Symbol extraction for ${t.id} reached its adaptive ${n}-symbol budget across ${c.length} selected source file(s).`,recommendation:"Increase graphSourceBudget when a more exhaustive symbol inventory is worth the additional graph size and extraction cost."}),p>0&&e.state.diagnostics.push({code:"graph.provider.source_structure.unresolved_local_imports",severity:"warning",message:`${p} 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."});}}},Mo={id:"source-symbol-binding",version:"1.0.0",scanTier:"derived",applicable(e){return [...e.state.entities.values()].some(t=>t.kind==="symbol")},async run(e){let t=0;for(let s of e.projects){let o=e.scanBudgetsByProject.get(s.id)?.sourceExtractionFileBudget??2e3,i=Math.min(1e5,Math.max(1e4,o*10)),n=0,l=[...e.state.entities.values()].filter(p=>p.projectId===s.id),c=l.filter(p=>p.kind==="file"),r=new Map(l.filter(p=>p.kind==="symbol").map(p=>[p.id,p])),d=new Map,a=new Map;for(let p of e.state.relations.values()){if(p.kind==="defines"&&r.has(p.to)){let f=d.get(p.from)??[];f.push(r.get(p.to)),d.set(p.from,f);}if(p.kind==="imports"){let f=e.state.entities.get(p.to);if(f?.kind!=="file"||f.projectId!==s.id)continue;let v=a.get(p.from)??new Set;v.add(p.to),a.set(p.from,v);}}for(let p of c){if(n>=i)break;let f=P(p.attributes.artifact);if(!f)continue;let v=f.startsWith(`${s.artifactPrefix}/`)?f.slice(s.artifactPrefix.length+1):f,g=u.resolve(s.root,...v.split("/")),h;try{let w=await F.stat(g);if(!w.isFile()||w.size>2*1024*1024)continue;h=Ct(g,await F.readFile(g,"utf8"));}catch{continue}let y=[...d.get(p.id)??[],...[...a.get(p.id)??[]].flatMap(w=>d.get(w)??[])],b=new Map;for(let w of y){if(w.label.length<3)continue;let R=b.get(w.label)??[];R.some(k=>k.id===w.id)||R.push(w),b.set(w.label,R);}for(let[w,R]of b){let k=w.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),$=new RegExp(`\\b${k}\\s*\\(`,"g"),S=[...h.matchAll($)];if(S.length===0)continue;if(R.length!==1){t+=S.length;continue}let I=R[0];for(let _ of S.slice(0,20)){if(n>=i)break;let M=h.slice(0,_.index??0).split(/\r?\n/).length;if(I.proofIds.some(B=>e.state.proofs.get(B)?.line===M))continue;let T=await e.state.addProof({provider:this.id,artifact:f,absolutePath:g,line:M,derivation:"extracted",trust:"observed",confidence:"medium",detail:`Unambiguous local call to ${w}`});e.state.addRelation({from:p.id,to:I.id,kind:"calls",derivation:"extracted",trust:"observed",confidence:"medium",proofIds:[T]}),n+=1;}}}n>=i&&e.state.diagnostics.push({code:"graph.provider.source_symbol_binding.limit_reached",severity:"info",message:`Source call binding for ${s.id} reached its adaptive ${i}-relation budget.`,recommendation:"Increase graphSourceBudget or use compiler/language-server semantic evidence when more exhaustive call topology is required."});}t>0&&e.state.diagnostics.push({code:"graph.provider.source_symbol_binding.ambiguous_calls",severity:"info",message:`${t} call site(s) were left unbound because more than one proven local symbol matched.`,recommendation:"Provide compiler or language-server semantic evidence when exact overload or dynamic dispatch resolution is required."});}};function Bo(e){let o=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 !o||!u.posix.basename(o.replace(/\\/g,"/"))?null:o}function Lo(e,t){let s=0,o=null,i=false;for(let n=t;n<e.length;n+=1){let l=e[n];if(o){l===o&&!i&&(o=null),i=l==="\\"&&!i,l!=="\\"&&(i=false);continue}if(l==='"'){o=l;continue}if(l==="("&&(s+=1),l===")"&&(s-=1,s===0))return e.slice(t+1,n)}return null}function Oo(e){let t=[],s=/(?<![A-Za-z0-9_:])(?:deno_core::)?extension!\s*\(/g;for(let o of e.matchAll(s)){let i=(o.index??0)+o[0].lastIndexOf("("),n=Lo(e,i);if(!n)continue;let l=n.match(/^\s*([A-Za-z_][A-Za-z0-9_]*)\s*,/)?.[1];if(!l)continue;let c=[...new Set([...n.matchAll(/\bops\s*=\s*\[([\s\S]*?)\]/g)].flatMap(d=>[...d[1].matchAll(/\b(op_[A-Za-z0-9_]+)\b/g)].map(a=>a[1])))].sort(),r=[...new Set([...n.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(a=>a[1])))].sort();t.push({name:l,line:e.slice(0,o.index??0).split(/\r?\n/).length,operations:c,scripts:r});}return t}function ht(e,t){let s=e.indexOf(t);return s<0?void 0:e.slice(0,s).split(/\r?\n/).length}var Wo={id:"runtime-bridge-semantics",version:"1.0.0",scanTier:"adaptive-semantic",async applicable(e){for(let t of e.projects)for(let s of e.semanticFilesByProject.get(t.id)??[])if(!(u.extname(s).toLowerCase()!==".rs"||ee(t.root,s)))try{let o=await F.readFile(s,"utf8");if(/(?<![A-Za-z0-9_:])(?:deno_core::)?extension!\s*\(/.test(o))return true}catch{}return false},async run(e){for(let t of e.projects){let o=(e.semanticFilesByProject.get(t.id)??[]).filter(i=>u.extname(i).toLowerCase()===".rs"&&!ee(t.root,i));for(let i of o){let n="";try{if((await F.stat(i)).size>2*1024*1024)continue;n=await F.readFile(i,"utf8");}catch{continue}let l=Oo(n);if(l.length===0)continue;let c=e.state.artifactPath(i,t),r=await e.state.addProof({provider:this.id,artifact:c,absolutePath:i,derivation:"extracted",trust:"observed",confidence:"high",detail:"Deno Core Rust extension declaration"}),d=e.state.addEntity({kind:"file",key:`file:${t.id}:${c}`,label:c,projectId:t.id,aliases:[u.basename(i)],attributes:{artifact:c,language:"rust",runtimeBridge:"deno-core"},proofIds:[r]});e.state.addRelation({from:E("project",`project:${t.id}`),to:d,kind:"contains",proofIds:[r]});for(let a of l){let p=await e.state.addProof({provider:this.id,artifact:c,absolutePath:i,line:a.line,derivation:"extracted",trust:"observed",confidence:"high",detail:`Deno Core extension ${a.name}`}),f=e.state.addEntity({kind:"protocol",key:`runtime-bridge:${t.id}:deno-core:${c}:${a.name}`,label:`${a.name} Rust JavaScript runtime bridge`,projectId:t.id,aliases:[a.name,`${a.name} cross-language bridge`,"Rust JavaScript TypeScript bridge"],attributes:{mechanism:"deno_core::extension!",languages:["javascript","rust","typescript"]},proofIds:[p]});e.state.addRelation({from:E("project",`project:${t.id}`),to:f,kind:"contains",proofIds:[p]}),e.state.addRelation({from:d,to:f,kind:"implements-protocol",proofIds:[p]});for(let g of ["rust","javascript","typescript"]){let h=E("language",`language:${t.id}:${g}`);e.state.entities.has(h)&&e.state.addRelation({from:f,to:h,kind:"uses-language",proofIds:[p]});}let v=new Map;for(let g of a.operations){let h=ht(n,g),y=await e.state.addProof({provider:this.id,artifact:c,absolutePath:i,...h?{line:h}:{},derivation:"extracted",trust:"observed",confidence:"high",detail:`Rust op2 bridge operation ${g}`}),b=e.state.addEntity({kind:"symbol",key:`symbol:${t.id}:${c}:function:${g}`,label:g,projectId:t.id,aliases:[`rust:${g}`,`javascript:${g}`],attributes:{symbolKind:"function",language:"rust",bridgeMechanism:"op2"},proofIds:[y]});v.set(g,b),e.state.addRelation({from:d,to:b,kind:"defines",proofIds:[y]}),e.state.addRelation({from:b,to:f,kind:"implements-protocol",proofIds:[y,p]});}for(let g of a.scripts){let h=u.resolve(u.dirname(i),g);if(!await F.pathExists(h))continue;let y="";try{y=await F.readFile(h,"utf8");}catch{continue}let b=e.state.artifactPath(h,t),w=await e.state.addProof({provider:this.id,artifact:b,absolutePath:h,derivation:"extracted",trust:"observed",confidence:"high",detail:`${a.name} JavaScript/TypeScript extension source`}),R=e.state.addEntity({kind:"file",key:`file:${t.id}:${b}`,label:b,projectId:t.id,aliases:[u.basename(h)],attributes:{artifact:b,language:U(h,t.runtime),runtimeBridge:"deno-core"},proofIds:[w]});e.state.addRelation({from:d,to:R,kind:"references",confidence:"high",proofIds:[p,w]}),e.state.addRelation({from:R,to:f,kind:"implements-protocol",proofIds:[w,p]});for(let[k,$]of v){let S=ht(y,k);if(!S)continue;let I=await e.state.addProof({provider:this.id,artifact:b,absolutePath:h,line:S,derivation:"extracted",trust:"observed",confidence:"high",detail:`JavaScript/TypeScript call to Rust operation ${k}`});e.state.addRelation({from:R,to:$,kind:"calls",confidence:"high",proofIds:[I,p]});}}}}}}},xo=/^[A-Z][A-Za-z0-9_]{3,}$/,zo=new Set(["Client","Config","Context","Data","Error","Event","Message","Options","Request","Response","Result","Schema","Type","Value"]),Ko={id:"polyglot-semantics",version:"1.1.0",scanTier:"adaptive-deep",applicable(e){return e.projects.some(t=>new Set((t.runtimeCandidates??[]).filter(o=>o&&o!=="unknown"&&o!=="generic")).size>1||a$1(t.root).polyglot)},async run(e){for(let t of e.projects){let s=E("project",`project:${t.id}`),o=e.deepFilesByProject.get(t.id)??[],i=a$1(t.root),n=[...e.state.entities.values()].filter(r=>r.kind==="package"&&r.projectId===t.id);for(let r of i.units){let d=r.runtime,a=u.resolve(t.root,r.manifest),p=e.state.artifactPath(a,t),f=n.find(b=>b.attributes.manifest===p),v=f?.proofIds??[await e.state.addProof({provider:this.id,artifact:p,absolutePath:a,derivation:"extracted",trust:"observed",confidence:"high",detail:`${d} runtime-unit manifest`})],g=e.state.artifactPath(u.dirname(a),t),h=Object.fromEntries(r.stages.map(b=>[b.stage,b.command])),y=e.state.addEntity({kind:"runtime-unit",key:`runtime-unit:${t.id}:${d}:${p}`,label:`${d}:${g}:${u.basename(a)}`,projectId:t.id,aliases:[d,g],attributes:{runtime:d,root:g,ecosystem:r.ecosystem,role:r.role,manifest:p,stages:Object.keys(h).sort(),orchestrationMode:"native-manifest"},proofIds:v});e.state.addRelation({from:s,to:y,kind:"contains",confidence:"high",proofIds:v}),f&&e.state.addRelation({from:y,to:f.id,kind:"configured-by",confidence:"high",proofIds:v});for(let b of r.stages){let{stage:w,command:R}=b,k=e.state.addEntity({kind:"lifecycle-stage",key:`lifecycle-stage:${t.id}:${d}:${p}:${w}`,label:`${w} \xB7 ${d}:${g}:${u.basename(a)}`,projectId:t.id,aliases:[`${d}:${w}`,w],attributes:{stage:w,command:R,runtime:d,workingDirectory:g,commandConfidence:b.confidence,preflight:b.preflight},proofIds:v});e.state.addRelation({from:y,to:k,kind:"contains",confidence:"high",proofIds:v});}}for(let r of o.filter(d=>te.has(u.extname(d).toLowerCase()))){let d="";try{d=await F.readFile(r,"utf8");}catch{continue}let a=Bo(d);if(!a)continue;let p=e.state.artifactPath(r,t),f=E("file",`file:${t.id}:${p}`);if(!e.state.entities.has(f))continue;let v=await e.state.addProof({provider:this.id,artifact:p,absolutePath:r,line:1,derivation:"extracted",trust:"observed",confidence:"high",detail:`Generated from ${a}`}),g=e.state.entities.get(f);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 h=[...e.state.relations.values()].filter(k=>k.kind==="defines"&&k.from===f).map(k=>e.state.entities.get(k.to)).filter(k=>k?.kind==="symbol");for(let k of h)e.state.addEntity({kind:"symbol",key:k.identity.key,label:k.label,projectId:t.id,aliases:k.identity.aliases,attributes:{...k.attributes,generated:true},proofIds:[...k.proofIds,v]});let y=a.replace(/^\.\//,"").replace(/[.,:]$/,""),w=[u.resolve(t.root,y),u.resolve(u.dirname(r),y)].find(k=>o.includes(k));if(w){let k=e.state.artifactPath(w,t),$=E("file",`file:${t.id}:${k}`);if(e.state.entities.has($)){e.state.addRelation({from:f,to:$,kind:"generated-by",derivation:"extracted",trust:"observed",confidence:"high",proofIds:[v]});continue}}let R=e.state.addEntity({kind:"schema",key:`generation-source:${t.id}:${y}`,label:u.posix.basename(y),projectId:t.id,aliases:[y],attributes:{sourceReference:y,discoveredFromGeneratedHeader:true},proofIds:[v]});e.state.addRelation({from:f,to:R,kind:"generated-from",derivation:"extracted",trust:"observed",confidence:"medium",proofIds:[v]});}let l=[...e.state.entities.values()].filter(r=>r.projectId===t.id&&r.kind==="symbol"&&r.attributes.generated===true&&r.attributes.symbolKind==="type"&&typeof r.attributes.language=="string"&&xo.test(r.label)&&!zo.has(r.label)),c=new Map;for(let r of l){let d=c.get(r.label)??[];d.push(r),c.set(r.label,d);}for(let[r,d]of [...c.entries()].filter(([,a])=>new Set(a.map(p=>p.attributes.language)).size>1).sort(([a],[p])=>a.localeCompare(p)).slice(0,1e3)){let a=d.sort((h,y)=>String(h.attributes.language).localeCompare(String(y.attributes.language))||h.id.localeCompare(y.id)),p=[...new Set(a.map(h=>String(h.attributes.language)))],f=[...new Set(a.flatMap(h=>h.proofIds))],v=e.state.addEntity({kind:"protocol",key:`protocol:${t.id}:${r}`,label:r,projectId:t.id,aliases:p.map(h=>`${h}:${r}`),attributes:{languages:p,implementationCount:a.length,source:"generated-types"},proofIds:f});for(let h of a)e.state.addRelation({from:h.id,to:v,kind:"implements-protocol",derivation:"inferred",trust:"corroborated",confidence:"high",proofIds:h.proofIds});let g=a[0];for(let h of a.slice(1))e.state.addRelation({from:h.id,to:g.id,kind:"equivalent-to",derivation:"inferred",trust:"corroborated",confidence:"high",proofIds:[...g.proofIds,...h.proofIds]});}}}},No={id:"workspace-service-contract",version:"1.1.0",scanTier:"derived",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 s of [...e.contract.projects].sort((o,i)=>o.slug.localeCompare(i.slug))){let o=s.contracts;if(s.ports.length===0&&o.owns.length===0&&o.apis.length===0&&o.publishes.length===0&&o.consumes.length===0&&o.env.length===0)continue;let i=await e.state.addProof({provider:this.id,artifact:i$1.workspaceContract,absolutePath:u.join(e.workspacePath,".workspai","workspace.contract.json"),pointer:`/projects/${s.slug}/contracts`,trust:"authoritative",derivation:"authored",detail:`Service contract for ${s.slug}`}),n=E("project",`project:${s.slug}`),l=e.state.addEntity({kind:"service",key:`contract-service:${s.slug}`,label:s.slug,projectId:s.slug,attributes:{ports:s.ports.map(c=>`${c.protocol}:${c.port}`),owns:[...o.owns].sort(),environmentKeys:[...o.env].sort()},proofIds:[i]});e.state.addRelation({from:n,to:l,kind:"implements",trust:"authoritative",derivation:"authored",proofIds:[i]});for(let c of [...o.apis].sort((r,d)=>r.name.localeCompare(d.name))){let r=e.state.addEntity({kind:"api",key:`contract-api:${s.slug}:${c.name}:${c.basePath}`,label:c.name,projectId:s.slug,attributes:{basePath:c.basePath,runtimeRegistrationRequired:true},proofIds:[i]});e.state.addRelation({from:l,to:r,kind:"exposes",trust:"authoritative",derivation:"authored",proofIds:[i]});}for(let c of [...o.publishes,...o.consumes].sort())t.has(c)||t.set(c,e.state.addEntity({kind:"queue",key:`event:${c}`,label:c,attributes:{protocol:"workspace-event"},proofIds:[i]}));for(let c of [...o.publishes].sort()){let r=t.get(c);r&&e.state.addRelation({from:l,to:r,kind:"publishes",trust:"authoritative",derivation:"authored",proofIds:[i]});}for(let c of [...o.consumes].sort()){let r=t.get(c);r&&e.state.addRelation({from:l,to:r,kind:"consumes",trust:"authoritative",derivation:"authored",proofIds:[i]});}}}},Go={id:"openapi",version:"1.1.0",scanTier:"complete-inventory",applicable(e){return e.projects.some(t=>(e.filesByProject.get(t.id)??[]).some(Pe))},async run(e){for(let t of e.projects){let s=(e.filesByProject.get(t.id)??[]).filter(Pe);for(let o of s){let i;try{i=await ae(o);}catch(n){e.state.diagnostics.push({code:"graph.provider.openapi.parse_failed",severity:"warning",message:`Could not parse ${e.state.artifactPath(o,t)}: ${n instanceof Error?n.message:String(n)}`});continue}for(let n of i){if(!("openapi"in n)&&!("swagger"in n))continue;let l=C(n.info),c=P(l?.title)??`${t.id} API`,r=await e.state.addProof({provider:this.id,artifact:e.state.artifactPath(o,t),absolutePath:o,pointer:"/info",trust:"authoritative",detail:"Authored OpenAPI contract"}),d=E("project",`project:${t.id}`),a=e.state.addEntity({kind:"api",key:`api:${t.id}:${c}`,label:c,projectId:t.id,attributes:{version:P(l?.version),specification:P(n.openapi)??P(n.swagger),runtimeRegistrationRequired:true},proofIds:[r]});e.state.addRelation({from:d,to:a,kind:"exposes",trust:"authoritative",derivation:"authored",proofIds:[r]});let p=C(C(n.components)?.schemas)??C(n.definitions),f=new Map;for(let g of Object.keys(p??{}).sort()){let h=await e.state.addProof({provider:this.id,artifact:e.state.artifactPath(o,t),absolutePath:o,pointer:`/components/schemas/${g}`,trust:"authoritative",detail:`OpenAPI schema ${g}`}),y=e.state.addEntity({kind:"schema",key:`schema:${t.id}:${c}:${g}`,label:g,projectId:t.id,proofIds:[h]});f.set(g,y),e.state.addRelation({from:a,to:y,kind:"contains",trust:"authoritative",derivation:"authored",proofIds:[h]});}let v=C(n.paths);for(let g of Object.keys(v??{}).sort()){let h=C(v?.[g]);for(let y of Object.keys(h??{}).filter(b=>Gt.has(b.toLowerCase())).sort()){let b=C(h?.[y]),w=`/paths/${g.replace(/~/g,"~0").replace(/\//g,"~1")}/${y}`,R=await e.state.addProof({provider:this.id,artifact:e.state.artifactPath(o,t),absolutePath:o,pointer:w,trust:"authoritative",detail:`${y.toUpperCase()} ${g}`}),k=e.state.addEntity({kind:"endpoint",key:`endpoint:${t.id}:${c}:${y.toUpperCase()}:${g}`,label:`${y.toUpperCase()} ${g}`,projectId:t.id,aliases:Z(b?.tags),attributes:{method:y.toUpperCase(),path:g,operationId:P(b?.operationId),deprecated:typeof b?.deprecated=="boolean"?b.deprecated:void 0,tags:Z(b?.tags)},proofIds:[R]});e.state.addRelation({from:a,to:k,kind:"contains",trust:"authoritative",derivation:"authored",proofIds:[R]});let $=JSON.stringify(b??{});for(let[S,I]of f)$.includes(`/${S}`)&&e.state.addRelation({from:k,to:I,kind:"references",trust:"authoritative",derivation:"authored",proofIds:[R]});}}}}}}},We=5e3;function ne(e,t){let s=N(u.relative(e,t)).toLowerCase(),o=0;return /(^|\/)(routes?|handlers?|controllers?|server|httpapi)(\/|$)/.test(s)&&(o+=100),/(?:^|\/)(?:api|routes?|handlers?|controllers?|server)(?:\.[a-z0-9]+)$/.test(s)&&(o+=80),/(^|\/)(src|app|lib)(\/|$)/.test(s)&&(o+=20),/(^|\/)(protocol|sdk|client)(\/|$)/.test(s)&&(o-=30),o}function Do(e,t){for(let s of ['"',"'","`"]){let o=e.indexOf(`${s}${t}${s}`);if(o>=0)return o}return -1}var qo={id:"authored-api-implementation-binding",version:"1.0.0",scanTier:"adaptive-semantic",applicable(e){return [...e.state.entities.values()].some(t=>t.kind==="endpoint"&&typeof t.attributes.operationId=="string")},async run(e){for(let t of e.projects){let s=new Map;for(let n of e.state.entities.values()){let l=n.attributes.operationId;if(n.kind!=="endpoint"||n.projectId!==t.id||typeof l!="string"||l.trim().length===0)continue;let c=s.get(l)??[];c.push(n),s.set(l,c);}if(s.size===0)continue;let o=(e.semanticFilesByProject.get(t.id)??[]).filter(n=>te.has(u.extname(n).toLowerCase())&&!ee(t.root,n)&&!ue(t.root,n)).sort((n,l)=>ne(t.root,l)-ne(t.root,n)||n.localeCompare(l)).slice(0,We),i=new Map;for(let n of o){let l;try{let r=await F.stat(n);if(!r.isFile()||r.size>2*1024*1024)continue;l=await F.readFile(n,"utf8");}catch{continue}let c=ne(t.root,n);if(!(c<50))for(let r of s.keys()){let d=Do(l,r);if(d<0)continue;let a=i.get(r);a&&(a.score>c||a.score===c&&a.file.localeCompare(n)<=0)||i.set(r,{file:n,contents:l,offset:d,score:c});}}for(let[n,l]of i){let c=e.state.artifactPath(l.file,t),r=l.contents.slice(0,l.offset).split(/\r?\n/).length,d=await e.state.addProof({provider:this.id,artifact:c,absolutePath:l.file,line:r,derivation:"extracted",trust:"observed",confidence:"high",detail:`Production handler binds OpenAPI operation ${n}`}),a=e.state.addEntity({kind:"file",key:`file:${t.id}:${c}`,label:c,projectId:t.id,aliases:[u.basename(l.file)],attributes:{artifact:c,language:U(l.file,t.runtime),bytes:Buffer.byteLength(l.contents)},proofIds:[d]});e.state.addRelation({from:E("project",`project:${t.id}`),to:a,kind:"contains",derivation:"extracted",trust:"observed",proofIds:[d]});for(let p of s.get(n)??[])e.state.addRelation({from:a,to:p.id,kind:"implements",derivation:"extracted",trust:"corroborated",confidence:"high",proofIds:[...p.proofIds,d]});}}}},Zo=8,Ho=/(?:^|[,{\n]\s*)["']?(?:routes?|upstreams?|virtualHosts?|pathPrefix)["']?\s*[:=]/im;function vt(e,t){let s=u.extname(e).toLowerCase();if(/\.(?:json|ya?ml|toml)$/i.test(e))return /(?:route|routing|gateway|proxy|ingress|server)/i.test(u.basename(e))?Ho.exec(t)?.index??-1:-1;let o=s===".py"?[/\b(?:include_router|add_api_route|mount)\s*\(/]:[".js",".jsx",".mjs",".cjs",".ts",".tsx",".mts",".cts"].includes(s)?[/\b(?:router|app)\.(?:use|route|register)\s*\(/,/\b(?:registerRoutes?|configureRoutes?)\s*\(/i,/\b(?:routeModule|routeMatcher|routesManifest|appPathsManifest)\b/]:s===".go"?[/\.\s*InstallAPIGroups?\s*\(/,/\.\s*registerResourceHandlers\s*\(/,/\b(?:registerRoutes?|configureRoutes?)\s*\(/i]:[".java",".kt",".kts",".scala",".cs",".fs",".fsx",".vb"].includes(s)?[/\b(?:RouterFunction|RequestMappingHandlerMapping|MapControllers|MapGroup)\s*[<(]/,/\b(?:registerRoutes?|configureRoutes?)\s*\(/i,/\bregister(?:Rest)?(?:Action|Handler)\s*\(/]:s===".rb"?[/\broutes\.draw\s+do\b/,/\bmount\s+(?:[A-Z][\w:]*|["'])/,/\b(?:resources?|namespace|scope)\s+[:"']/,/\b(?:get|post|put|patch|delete|match)\s+["']/]:[/\b(?:registerRoutes?|configureRoutes?)\s*\(/i];for(let i of o){let n=i.exec(t);if(n)return n.index}return -1}var Jo={id:"dynamic-api-registration-binding",version:"1.1.0",scanTier:"adaptive-semantic",applicable(e){return [...e.state.entities.values()].some(t=>t.kind==="api")?e.projects.some(t=>(e.semanticFilesByProject.get(t.id)??[]).filter(s=>(te.has(u.extname(s).toLowerCase())||/\.(?:json|ya?ml|toml)$/i.test(s))&&(ne(t.root,s)>=20||/\.(?:json|ya?ml|toml)$/i.test(s))&&!ee(t.root,s)&&!ue(t.root,s)&&!Pe(s)).slice(0,We).some(s=>{try{let o=F.statSync(s);return o.isFile()&&o.size<=2*1024*1024&&vt(s,F.readFileSync(s,"utf8"))>=0}catch{return false}})):false},async run(e){for(let t of e.projects){let s=[...e.state.entities.values()].filter(l=>l.kind==="api"&&l.projectId===t.id&&l.attributes.runtimeRegistrationRequired===true);if(s.length===0)continue;let o=(e.semanticFilesByProject.get(t.id)??[]).filter(l=>(te.has(u.extname(l).toLowerCase())||/\.(?:json|ya?ml|toml)$/i.test(l))&&!ee(t.root,l)&&!ue(t.root,l)&&!Pe(l)&&(ne(t.root,l)>=20||/\.(?:json|ya?ml|toml)$/i.test(l))).sort((l,c)=>ne(t.root,c)-ne(t.root,l)||l.localeCompare(c)).slice(0,We),i=0,n=Math.max(1,s.length*Zo);for(let l of o){if(i>=n)break;let c;try{let g=await F.stat(l);if(!g.isFile()||g.size>2*1024*1024)continue;c=await F.readFile(l,"utf8");}catch{continue}let r=vt(l,c);if(r<0)continue;let d=s.length===1?s:s.filter(g=>g.label.toLowerCase().split(/[^a-z0-9]+/).filter(h=>h.length>=4).some(h=>c.toLowerCase().includes(h)));if(d.length===0)continue;let a=e.state.artifactPath(l,t),p=await e.state.addProof({provider:this.id,artifact:a,absolutePath:l,line:c.slice(0,r).split(/\r?\n/).length,derivation:"extracted",trust:"observed",confidence:"high",detail:/\.(?:json|ya?ml|toml)$/i.test(l)?"Configuration-driven API topology registration":"Runtime-generated API topology registration"}),f=e.state.addEntity({kind:"file",key:`file:${t.id}:${a}`,label:a,projectId:t.id,aliases:[u.basename(l)],attributes:{artifact:a,language:U(l,t.runtime)},proofIds:[p]}),v=e.state.addEntity({kind:"runtime-unit",key:`dynamic-api-registration:${t.id}:${a}`,label:`${u.basename(l)} API registration`,projectId:t.id,attributes:{mechanism:/\.(?:json|ya?ml|toml)$/i.test(l)?"configuration-driven-routing":"runtime-generated-routing"},proofIds:[p]});e.state.addRelation({from:E("project",`project:${t.id}`),to:v,kind:"contains",derivation:"extracted",trust:"observed",proofIds:[p]}),e.state.addRelation({from:v,to:f,kind:"configured-by",derivation:"extracted",trust:"observed",proofIds:[p]});for(let g of d)e.state.addRelation({from:v,to:g.id,kind:"implements",derivation:"extracted",trust:"corroborated",confidence:"high",proofIds:[...g.proofIds,p]});i+=1;}}}};function Uo(e){let t=[],s=1;for(let r=0;r<e.length;){let d=e[r];if(d===`
7
+ `){s+=1,r+=1;continue}if(/\s|,/.test(d)){r+=1;continue}if(d==="#"){for(;r<e.length&&e[r]!==`
8
+ `;)r+=1;continue}if(e.startsWith('"""',r)){for(r+=3;r<e.length&&!e.startsWith('"""',r);)e[r]===`
9
+ `&&(s+=1),r+=1;r=Math.min(e.length,r+3);continue}if(d==='"'){r+=1;let p=false;for(;r<e.length;){let f=e[r];if(f===`
10
+ `&&(s+=1),f==='"'&&!p){r+=1;break}p=f==="\\"&&!p,f!=="\\"&&(p=false),r+=1;}continue}let a=e.slice(r).match(/^[_A-Za-z][_0-9A-Za-z]*/)?.[0];if(a){t.push({value:a,line:s}),r+=a.length;continue}t.push({value:d,line:s}),r+=1;}let o=new Set(["schema","scalar","type","interface","union","enum","input","directive"]),i=new Set(["query","mutation","subscription","fragment"]),n=[];t[0]?.value==="{"&&n.push({kind:"query",name:`anonymous-${t[0].line}`,line:t[0].line,extended:false});let l=0,c=false;for(let r=0;r<t.length;r+=1){let d=t[r];if(d.value==="}"){l=Math.max(0,l-1);continue}if(l===0&&d.value==="extend"){c=true;continue}if(l===0){let a=d.value;if(o.has(a)){let p=a==="schema"?"schema":a==="directive"?t[r+1]?.value==="@"?t[r+2]?.value:void 0:t[r+1]?.value;p&&/^[_A-Za-z][_0-9A-Za-z]*$/.test(p)&&n.push({kind:a,name:p,line:d.line,extended:c}),c=false;}else if(i.has(a)){let p=t[r+1]?.value,f=p&&/^[_A-Za-z][_0-9A-Za-z]*$/.test(p)?p:`anonymous-${d.line}`;n.push({kind:a,name:f,line:d.line,extended:false}),c=false;}else ["@","&","|"].includes(d.value)||(c=false);}d.value==="{"&&(l+=1);}return n}var Vo={id:"interface-contracts",version:"1.1.0",scanTier:"complete-inventory",applicable(e){return e.projects.some(t=>(e.filesByProject.get(t.id)??[]).some(it))},async run(e){for(let t of e.projects){let s=(e.filesByProject.get(t.id)??[]).filter(it);for(let o of s){let i=e.state.artifactPath(o,t),n=u.extname(o).toLowerCase();if(n===".graphql"||n===".gql"){let l=await F.readFile(o,"utf8"),c=Uo(l),r=c.filter(h=>["schema","scalar","type","interface","union","enum","input","directive"].includes(h.kind)),d=c.filter(h=>["query","mutation","subscription","fragment"].includes(h.kind)),a=await e.state.addProof({provider:this.id,artifact:i,absolutePath:o,trust:"authoritative",derivation:"authored",detail:r.length>0?"GraphQL schema contract":"GraphQL executable document"}),p=e.state.addEntity({kind:"file",key:`file:${t.id}:${i}`,label:i,projectId:t.id,aliases:[u.basename(o)],attributes:{artifact:i,language:"graphql",bytes:Buffer.byteLength(l),graphqlDocumentKind:r.length>0&&d.length>0?"mixed":r.length>0?"schema":"executable"},proofIds:[a]});e.state.addRelation({from:E("project",`project:${t.id}`),to:p,kind:"contains",trust:"authoritative",derivation:"authored",proofIds:[a]});let f=e.state.addEntity({kind:"protocol",key:"protocol:graphql",label:"GraphQL",aliases:["graphql"],attributes:{specification:"GraphQL"},proofIds:[a]}),g=r.some(h=>!h.extended&&(h.kind==="schema"||h.kind==="type"&&["Query","Mutation","Subscription"].includes(h.name)))?e.state.addEntity({kind:"api",key:`graphql-api:${t.id}`,label:`${t.id} GraphQL API`,projectId:t.id,attributes:{specification:"graphql",surface:"graphql-schema",runtimeRegistrationRequired:true},proofIds:[a]}):null;g&&(e.state.addRelation({from:E("project",`project:${t.id}`),to:g,kind:"exposes",trust:"authoritative",derivation:"authored",proofIds:[a]}),e.state.addRelation({from:g,to:f,kind:"implements-protocol",trust:"authoritative",derivation:"authored",proofIds:[a]}));for(let h of r){let y=e.state.addEntity({kind:"schema",key:`graphql-schema:${t.id}:${i}:${h.kind}:${h.name}`,label:h.name,projectId:t.id,attributes:{specification:"graphql",definitionKind:h.kind,extended:h.extended,line:h.line},proofIds:[a]});e.state.addRelation({from:p,to:y,kind:"defines",trust:"authoritative",derivation:"authored",proofIds:[a]}),g&&e.state.addRelation({from:g,to:y,kind:"contains",trust:"authoritative",derivation:"authored",proofIds:[a]});}for(let h of d){let y=e.state.addEntity({kind:"symbol",key:`graphql-operation:${t.id}:${i}:${h.kind}:${h.name}`,label:h.name,projectId:t.id,attributes:{language:"graphql",symbolKind:h.kind==="fragment"?"fragment":"operation",operationKind:h.kind,artifact:i,line:h.line},proofIds:[a]});e.state.addRelation({from:p,to:y,kind:"defines",trust:"authoritative",derivation:"authored",proofIds:[a]}),e.state.addRelation({from:y,to:f,kind:"consumes",trust:"authoritative",derivation:"authored",proofIds:[a]});}continue}if(n===".proto"){let l=await F.readFile(o,"utf8"),c=we(l.replace(/\r\n/g,`
11
+ `).trim()),r=l.match(/^\s*package\s+([A-Za-z_][\w.]*)\s*;/m)?.[1],d=r||"unscoped",a=c.slice(0,16),p=await e.state.addProof({provider:this.id,artifact:i,absolutePath:o,trust:"authoritative",derivation:"authored",detail:"Protocol Buffers contract"});for(let f of l.matchAll(/^\s*service\s+([A-Za-z_]\w*)/gm)){let v=e.state.addEntity({kind:"api",key:`protobuf-service:${d}:${f[1]}:${a}`,label:f[1],aliases:[...r?[`${r}.${f[1]}`]:[],f[1]],attributes:{specification:"protobuf",package:r,definitionHash:c},proofIds:[p]});e.state.addRelation({from:E("project",`project:${t.id}`),to:v,kind:"exposes",trust:"authoritative",derivation:"authored",proofIds:[p]});}for(let f of l.matchAll(/^\s*message\s+([A-Za-z_]\w*)/gm)){let v=e.state.addEntity({kind:"schema",key:`protobuf-message:${d}:${f[1]}:${a}`,label:f[1],aliases:[...r?[`${r}.${f[1]}`]:[],f[1]],attributes:{specification:"protobuf",package:r,definitionHash:c},proofIds:[p]});e.state.addRelation({from:E("project",`project:${t.id}`),to:v,kind:"contains",trust:"authoritative",derivation:"authored",proofIds:[p]});}continue}try{let l=(await ae(o))[0];if(!l||!("asyncapi"in l))continue;let c=await e.state.addProof({provider:this.id,artifact:i,absolutePath:o,trust:"authoritative",derivation:"authored",detail:"AsyncAPI contract"}),r=e.state.addEntity({kind:"api",key:`asyncapi:${t.id}:${i}`,label:P(C(l.info)?.title)??`${t.id} AsyncAPI`,projectId:t.id,attributes:{specification:`asyncapi ${String(l.asyncapi)}`,artifact:i,runtimeRegistrationRequired:true},proofIds:[c]});e.state.addRelation({from:E("project",`project:${t.id}`),to:r,kind:"exposes",trust:"authoritative",derivation:"authored",proofIds:[c]});for(let d of Object.keys(C(l.channels)??{}).sort()){let a=e.state.addEntity({kind:"queue",key:`asyncapi-channel:${t.id}:${d}`,label:d,projectId:t.id,attributes:{protocol:"asyncapi"},proofIds:[c]});e.state.addRelation({from:r,to:a,kind:"publishes",trust:"authoritative",derivation:"authored",proofIds:[c]});}}catch{}}}}},Yo={id:"infrastructure-as-code",version:"1.0.0",scanTier:"complete-inventory",applicable(e){return fe(e).some(rt)},async run(e){let t=fe(e).filter(rt);for(let s of t){let o=ie(e.projects,s),i=o?.id??e.state.workspaceName,n=o?E("project",`project:${o.id}`):E("workspace",`workspace:${e.state.workspaceName}`),l=e.state.artifactPath(s,o),c=await F.readFile(s,"utf8"),r=await e.state.addProof({provider:this.id,artifact:l,absolutePath:s,trust:"authoritative",derivation:"authored",detail:"Infrastructure definition"});if(/^Dockerfile/i.test(u.basename(s))){let a=[...c.matchAll(/^\s*FROM\s+([^\s]+)(?:\s+AS\s+([^\s]+))?/gim)],p=e.state.addEntity({kind:"container",key:`dockerfile:${i}:${l}`,label:`${i} container image`,...o?{projectId:o.id}:{},attributes:{artifact:l,baseImages:a.map(f=>f[1])},proofIds:[r]});e.state.addRelation({from:n,to:p,kind:"deploys",trust:"authoritative",derivation:"authored",proofIds:[r]});continue}if(/\.tf$/i.test(s)){for(let a of c.matchAll(/^\s*resource\s+["']([^"']+)["']\s+["']([^"']+)["']/gm)){let p=a[1],f=/(?:db|sql|rds|database)/i.test(p)?"database":/(?:queue|kafka|sqs|pubsub|servicebus)/i.test(p)?"queue":"deployment",v=e.state.addEntity({kind:f,key:`terraform:${i}:${p}:${a[2]}`,label:`${p}.${a[2]}`,...o?{projectId:o.id}:{},attributes:{resourceType:p,artifact:l},proofIds:[r]});e.state.addRelation({from:n,to:v,kind:"deploys",trust:"authoritative",derivation:"authored",proofIds:[r]});}continue}let d=e.state.addEntity({kind:"deployment",key:`helm:${i}:${l}`,label:`${i} Helm chart`,...o?{projectId:o.id}:{},attributes:{artifact:l,format:"helm"},proofIds:[r]});e.state.addRelation({from:n,to:d,kind:"deploys",trust:"authoritative",derivation:"authored",proofIds:[r]});}}};function yt(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"}function Qo(e){if(!e)return;let t=new Set(["version","name","services","networks","volumes","configs","secrets"]),s=new Set(["image","build","command","entrypoint","ports","links","environment","volumes","depends_on","external_links"]),o=Object.entries(e).filter(([i,n])=>{if(t.has(i.toLowerCase()))return false;let l=C(n);return l?Object.keys(l).some(c=>s.has(c)):false});return o.length>0?Object.fromEntries(o):void 0}var Xo={id:"compose",version:"1.2.0",scanTier:"complete-inventory",async applicable(e){return (await ct(e)).length>0},async run(e){let t=[];for(let s of await ct(e)){let o;try{o=(await ae(s))[0];}catch(a){e.state.diagnostics.push({code:"graph.provider.compose.parse_failed",severity:"warning",message:`Could not parse ${e.state.artifactPath(s)}: ${a instanceof Error?a.message:String(a)}`});}let i=C(o?.services)??Qo(o);if(!i)continue;let n=ie(e.projects,s),l=e.state.artifactPath(s,n),c=u.basename(s).toLowerCase().startsWith("docker-compose")?"docker-compose":"compose",r=`${n?.id??"workspace"}:${u.posix.dirname(l)}:${c}`,d=a=>`compose-service:${r}:${a}`;for(let a of Object.keys(i).sort()){let p=C(i[a]),f=p?.build,v=P(f)??P(C(f)?.context),g=v?ie(e.projects,u.resolve(u.dirname(s),v)):e.projects.find(I=>I.id.toLowerCase()===a.toLowerCase()||u.basename(I.path).toLowerCase()===a.toLowerCase())??n,h=await e.state.addProof({provider:this.id,artifact:l,absolutePath:s,pointer:`/services/${a}`,trust:"authoritative",derivation:"authored",detail:`Compose service ${a}`}),y=P(p?.image),b=d(a),w=e.state.entities.get(E("service",b)),R=Array.isArray(w?.attributes.ports)?w.attributes.ports.filter(I=>typeof I=="string"):[],k=Array.isArray(w?.attributes.networks)?w.attributes.networks.filter(I=>typeof I=="string"):[],$=Array.isArray(w?.attributes.environmentKeys)?w.attributes.environmentKeys.filter(I=>typeof I=="string"):[],S=e.state.addEntity({kind:"service",key:b,label:a,...g?.id||w?.projectId?{projectId:g?.id??w?.projectId}:{},attributes:{image:y??w?.attributes.image,ports:[...new Set([...R,...Z(p?.ports).map(String)])].sort((I,_)=>I.localeCompare(_)),networks:[...new Set([...k,...Z(p?.networks)])].sort((I,_)=>I.localeCompare(_)),environmentKeys:[...new Set([...$,...mo(p?.environment)])].sort((I,_)=>I.localeCompare(_))},proofIds:[...w?.proofIds??[],h],mergeArrayAttributes:["ports","networks","environmentKeys"]});if(g&&e.state.addRelation({from:E("project",`project:${g.id}`),to:S,kind:"contains",trust:"authoritative",derivation:"authored",proofIds:[h]}),y){let I=e.state.addEntity({kind:yt(y),key:`image:${y}`,label:y,...g?{projectId:g.id}:{},attributes:{image:y},proofIds:[h]});e.state.addRelation({from:S,to:I,kind:yt(y)==="container"?"runs-on":"depends-on",trust:"authoritative",derivation:"authored",proofIds:[h]});}}for(let a of Object.keys(i).sort()){let p=C(i[a]);for(let f of Z(p?.depends_on)){let v=await e.state.addProof({provider:this.id,artifact:l,absolutePath:s,pointer:`/services/${a}/depends_on/${f}`,trust:"authoritative",derivation:"authored",detail:`${a} depends on ${f}`});t.push({from:E("service",d(a)),to:E("service",d(f)),proofId:v});}}}for(let s of t){if(!e.state.entities.has(s.from)||!e.state.entities.has(s.to)){e.state.proofs.delete(s.proofId);continue}e.state.addRelation({from:s.from,to:s.to,kind:"depends-on",trust:"authoritative",derivation:"authored",proofIds:[s.proofId]});}}},es={id:"documentation",version:"1.0.0",scanTier:"complete-inventory",applicable(e){return fe(e).some(nt)},async run(e){let t=new Set,s=[e.workspaceFiles,...e.projects.map(o=>e.filesByProject.get(o.id)??[])];for(let o of s){let i=o.filter(n=>nt(n)&&!e.projects.some(l=>n.startsWith(`${l.root}${u.sep}`)&&ee(l.root,n)));for(let n of i){if(t.has(n))continue;t.add(n);let l=ie(e.projects,n),r=(await F.readFile(n,"utf8")).match(/^#\s+(.+)$/m)?.[1]?.trim()??u.basename(n),d=await e.state.addProof({provider:this.id,artifact:e.state.artifactPath(n,l),absolutePath:n,line:1,trust:"authoritative",derivation:"authored",detail:`Documentation: ${r}`}),a=e.state.addEntity({kind:"document",key:`document:${e.state.artifactPath(n,l)}`,label:r,...l?{projectId:l.id}:{},attributes:{artifact:e.state.artifactPath(n,l)},proofIds:[d]}),p=l?E("project",`project:${l.id}`):E("workspace",`workspace:${e.state.workspaceName}`);e.state.addRelation({from:a,to:p,kind:"documents",trust:"authoritative",derivation:"authored",proofIds:[d]});}}}},ts={id:"kubernetes",version:"1.0.0",scanTier:"complete-inventory",async applicable(e){return (await pt(e)).length>0},async run(e){for(let t of await pt(e)){let s=ie(e.projects,t),o=s?E("project",`project:${s.id}`):E("workspace",`workspace:${e.state.workspaceName}`),i=await ae(t);for(let n=0;n<i.length;n+=1){let l=i[n],c=P(l.kind),r=C(l.metadata),d=P(r?.name);if(!c||!d)continue;let a=P(r?.namespace)??"default",p=/Deployment|StatefulSet|DaemonSet/i.test(c)?"deployment":/Service|Ingress/i.test(c)?"service":/ConfigMap|Secret/i.test(c)?"environment":"deployment",f=await e.state.addProof({provider:this.id,artifact:e.state.artifactPath(t,s),absolutePath:t,pointer:`/documents/${n}`,trust:"authoritative",derivation:"authored",detail:`${c} ${a}/${d}`}),v=e.state.addEntity({kind:p,key:`kubernetes:${c}:${a}:${d}`,label:`${c}/${d}`,...s?{projectId:s.id}:{},attributes:{resourceKind:c,namespace:a,secret:c==="Secret",keys:c==="Secret"||c==="ConfigMap"?Object.keys(C(l.data)??{}).sort():void 0},proofIds:[f]});e.state.addRelation({from:o,to:v,kind:p==="deployment"?"deploys":"contains",trust:"authoritative",derivation:"authored",proofIds:[f]});let g=e.state.addEntity({kind:"environment",key:`kubernetes-namespace:${a}`,label:`Kubernetes namespace ${a}`,attributes:{namespace:a},proofIds:[f]});e.state.addRelation({from:v,to:g,kind:"runs-on",trust:"authoritative",derivation:"authored",proofIds:[f]});}}}},os={id:"ci-workflow",version:"1.0.0",scanTier:"complete-inventory",applicable(e){return lt(e).length>0},async run(e){let t=lt(e);for(let s of t){let o=ie(e.projects,s),i=e.state.artifactPath(s,o),n=u.basename(s)==="Jenkinsfile",l=N(u.relative(o?.root??e.workspacePath,s)),c=/^prow\/[^/]+\.(?:sh|py)$/i.test(l),r=u.basename(s),d=[],a=[];if(n||c){let v=await F.readFile(s,"utf8");n?d=[...v.matchAll(/\bstage\s*\(\s*["']([^"']+)["']/g)].map(g=>g[1]):(r=`${u.basename(s)} \xB7 Prow`,d=[u.basename(s).replace(/\.(?:sh|py)$/i,"")],a=["external-provider"]);}else {let v;try{v=(await ae(s))[0];}catch{continue}if(!v)continue;if(r=P(v.name)??r,/^\.gitlab-ci\./i.test(l)){let g=new Set(["stages","variables","workflow","include","default","image","services","cache","before_script","after_script"]);d=Object.keys(v).filter(h=>!h.startsWith(".")&&!g.has(h)).sort();}else d=[...new Set([...Object.keys(C(v.jobs)??{}),...Object.keys(C(C(v.workflows)?.jobs)??{}),...Z(v.stages)])].sort();a=Z(v.on);}d.length===0&&(d=["pipeline"]);let p=await e.state.addProof({provider:this.id,artifact:i,absolutePath:s,...!n&&!c?{pointer:"/jobs"}:{},trust:"authoritative",derivation:"authored",detail:"CI/CD workflow"}),f=e.state.addEntity({kind:"pipeline",key:`pipeline:${i}`,label:r,...o?{projectId:o.id}:{},attributes:{jobs:d,triggers:a,artifact:i},proofIds:[p]});e.state.addRelation({from:o?E("project",`project:${o.id}`):E("workspace",`workspace:${e.state.workspaceName}`),to:f,kind:"contains",trust:"authoritative",derivation:"authored",proofIds:[p]});}}},ss={id:"codeowners",version:"1.2.0",scanTier:"complete-inventory",async applicable(e){return (await dt(e)).length>0},async run(e){for(let t of await dt(e)){let s=ie(e.projects,t);if(u.basename(t)==="OWNERS"){let n=await ae(t);for(let l of n)for(let c of ["approvers","reviewers"]){let r=Array.isArray(l[c])?l[c]:[];for(let d=0;d<r.length;d+=1){let a=P(r[d]);if(!a)continue;let p=a.startsWith("@")?a:`@${a}`,f=await e.state.addProof({provider:this.id,artifact:e.state.artifactPath(t,s),absolutePath:t,pointer:`/${c}/${d}`,trust:"authoritative",derivation:"authored",detail:`${c}: ${p}`}),v=e.state.addEntity({kind:"owner",key:`owner:${p.toLowerCase()}`,label:p,aliases:[a,p],proofIds:[f]});e.state.addRelation({from:v,to:s?E("project",`project:${s.id}`):E("workspace",`workspace:${e.state.workspaceName}`),kind:"owns",trust:"authoritative",derivation:"authored",proofIds:[f]});}}continue}let i=(await F.readFile(t,"utf8")).split(/\r?\n/);for(let n=0;n<i.length;n+=1){let l=i[n].trim();if(!l||l.startsWith("#"))continue;let[c,...r]=l.split(/\s+/);for(let d of r.filter(a=>a.startsWith("@"))){let a=await e.state.addProof({provider:this.id,artifact:e.state.artifactPath(t,s),absolutePath:t,line:n+1,trust:"authoritative",derivation:"authored",detail:`${c} ${d}`}),p=e.state.addEntity({kind:"owner",key:`owner:${d.toLowerCase()}`,label:d,aliases:[d],proofIds:[a]}),f=e.projects.filter(g=>{let h=c.replace(/^\//,"").replace(/\*.*$/,""),y=u.dirname(t),b=[".github","docs"].includes(u.basename(y))?u.dirname(y):y,w=N(u.relative(b,g.root));return h&&(w==="."||w.startsWith(h.replace(/\/$/,""))||g.path.startsWith(h.replace(/\/$/,"")))}),v=f.length>0?f.map(g=>E("project",`project:${g.id}`)):s?[E("project",`project:${s.id}`)]:[E("workspace",`workspace:${e.state.workspaceName}`)];for(let g of v)e.state.addRelation({from:p,to:g,kind:"owns",trust:"authoritative",derivation:"authored",proofIds:[a]});}}}}},is={id:"architecture-decisions",version:"1.0.0",scanTier:"complete-inventory",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(s=>at(t.root,s)))},async run(e){let t=new Set,s=[{root:e.workspacePath,files:e.workspaceFiles},...e.projects.map(o=>({root:o.root,files:e.filesByProject.get(o.id)??[]}))];for(let o of s){let i=o.files.filter(n=>at(o.root,n));for(let n of i){if(t.has(n))continue;t.add(n);let l=ie(e.projects,n),c=await F.readFile(n,"utf8"),r=c.match(/^#\s+(.+)$/m)?.[1]?.trim()??u.basename(n,".md"),d=c.match(/^status\s*:\s*(.+)$/im)?.[1]?.trim(),a=await e.state.addProof({provider:this.id,artifact:e.state.artifactPath(n,l),absolutePath:n,line:1,trust:"authoritative",derivation:"authored",detail:`Architecture decision: ${r}`}),p=e.state.addEntity({kind:"decision",key:`decision:${e.state.artifactPath(n,l)}`,label:r,...l?{projectId:l.id}:{},attributes:{status:d,artifact:e.state.artifactPath(n,l)},proofIds:[a]}),f=l?E("project",`project:${l.id}`):E("workspace",`workspace:${e.state.workspaceName}`);e.state.addRelation({from:f,to:p,kind:"decided-by",trust:"authoritative",derivation:"authored",proofIds:[a]});}}}},bt=[So,Ao,Fo,_o,To,Mo,Wo,Ko,No,Go,Vo,qo,Jo,Xo,Yo,ts,os,ss,es,is];function rs(e,t,s){let o=e.scanTier;if(!o)return;let i=t.projects;return i.length===0?[{scope:"workspace",scopeId:"workspace",tier:o,status:s==="skipped"?"not-applicable":"complete",eligibleFiles:t.workspaceFiles.length,suppliedFiles:o==="derived"?0:t.workspaceFiles.length,...o==="derived"?{}:{fileBudget:Math.max(t.workspaceFiles.length,1)},selectionStrategy:o==="derived"?"derived":"complete"}]:i.map(n=>{let l=t.inventoryByProject.get(n.id),c=t.scanBudgetsByProject.get(n.id),r=l?.eligibleFileCount??0;if(s==="skipped")return {scope:"project",scopeId:n.id,tier:o,status:"not-applicable",eligibleFiles:r,suppliedFiles:0,selectionStrategy:o==="derived"?"derived":"complete"};if(o==="derived")return {scope:"project",scopeId:n.id,tier:o,status:"complete",eligibleFiles:0,suppliedFiles:0,selectionStrategy:"derived"};let d=o==="complete-inventory"?t.filesByProject.get(n.id)?.length??0:o==="adaptive-semantic"?t.semanticFilesByProject.get(n.id)?.length??0:t.deepFilesByProject.get(n.id)?.length??0,a=o==="complete-inventory"?l?.fileLimit??Math.max(d,1):o==="adaptive-semantic"?c?.semanticFileBudget??Math.max(d,1):c?.deepFileBudget??Math.max(d,1),p=!!l?.truncated||d<r;return {scope:"project",scopeId:n.id,tier:o,status:p?"bounded":"complete",eligibleFiles:r,suppliedFiles:d,fileBudget:Math.max(a,1),selectionStrategy:o==="complete-inventory"?"complete":"component-language-round-robin-v1"}})}async function ns(e$1,t){for(let s of t.edges){let o=[];for(let i of s.evidence){let n=ge(i.file);o.push(await e$1.addProof({provider:"project-topology",artifact:n,absolutePath:u.resolve(e$1.workspacePath,n),derivation:s.source==="inferred"?"inferred":"authored",trust:s.source==="inferred"?"observed":"authoritative",confidence:s.confidence,detail:i.detail??`${s.kind} relationship`}));}o.length===0&&o.push(await e$1.addProof({provider:"project-topology",artifact:e.model,derivation:"inferred",trust:"ambiguous",confidence:s.confidence,detail:`${s.kind} relationship without source locator`})),e$1.addRelation({from:E("project",`project:${s.from}`),to:E("project",`project:${s.to}`),kind:s.kind==="event-pub-sub"?"consumes":"depends-on",derivation:s.source==="inferred"?"inferred":"authored",trust:s.source==="inferred"?"observed":"authoritative",confidence:s.confidence,proofIds:o});}}function as(e){let t=[...e.entities.values()].filter(o=>o.kind==="endpoint"),s=new Map;for(let o of t){let i=String(o.attributes.method??"").toUpperCase(),n=String(o.attributes.path??"");if(!o.projectId||!i||!n)continue;let l=`${o.projectId}\0${i}\0${n}`,c=s.get(l)??[];c.push(o),s.set(l,c);}for(let o of s.values()){if(o.length<2)continue;let i=o.find(n=>n.proofIds.some(l=>e.proofs.get(l)?.trust==="authoritative"));if(i)for(let n of o.filter(l=>l.id!==i.id))e.addRelation({from:n.id,to:i.id,kind:"implements",derivation:"extracted",trust:"corroborated",confidence:"high",proofIds:[...n.proofIds,...i.proofIds]});}}async function Rs(e){let t=u.resolve(e.workspacePath),s=e.now??new Date,o=e.projects.map(m=>{let j=m.absolutePath?u.resolve(m.absolutePath):u.resolve(t,m.path),L=u.relative(t,j),H=L.startsWith(`..${u.sep}`)||L===".."||u.isAbsolute(L);return {...m,root:j,artifactPrefix:H?`external/${m.id}`:N(L||m.id)}}).sort((m,j)=>m.id.localeCompare(j.id)),i$1=new Oe(t,s,e.workspace.name),n=ye(e.inventoryFileLimitPerProject,"WORKSPAI_GRAPH_INVENTORY_LIMIT"),l=ye(e.maxFilesPerProject,"WORKSPAI_GRAPH_DEEP_BUDGET"),c$1=ye(e.semanticFilesPerProject,"WORKSPAI_GRAPH_SEMANTIC_BUDGET"),r=ye(e.sourceFilesPerProject,"WORKSPAI_GRAPH_SOURCE_BUDGET"),d=Math.max(100,Math.min(n??Ot,Wt)),a$1=new Map(await Promise.all(o.map(async m=>[m.id,await he(m.root,d)]))),p=new Map(o.map(m=>[m.id,a$1.get(m.id)?.files??[]])),f=new Map(o.map(m=>{let j=a$1.get(m.id);return [m.id,Jt({eligibleFiles:j?.files.length??0,...l!==void 0?{deepOverride:l}:{},...c$1!==void 0?{semanticOverride:c$1}:{},...r!==void 0?{sourceOverride:r}:{}})]})),v=new Map(o.map(m=>{let j=a$1.get(m.id)?.files??[],L=f.get(m.id)?.deepFileBudget??j.length;return [m.id,ke(j,L,m.root)]})),g=new Map(o.map(m=>{let j=a$1.get(m.id)?.files??[],L=f.get(m.id)?.semanticFileBudget??j.length;return [m.id,ke(j,L,m.root)]})),h$1=await he(t,d,o.map(m=>m.root)),y=h$1.files.filter(m=>!o.some(j=>m===j.root||m.startsWith(`${j.root}${u.sep}`))),b={...h$1,files:y,eligibleFileCount:h$1.eligibleFileCountExact&&!h$1.truncated?y.length:h$1.eligibleFileCount,truncated:h$1.truncated},w=await wo({workspacePath:t,projects:o,projectFileLimit:d,workspaceFileLimit:d,inventories:{workspaceInventory:b,projectInventories:a$1,scanBudgetsByProject:f}});for(let m of w.scopes.filter(j=>j.truncated))i$1.diagnostics.push({code:`graph.input.${m.kind}_file_limit_reached`,severity:"warning",message:`${m.kind==="project"?`Project ${m.id}`:"Workspace"} graph inventory reached the ${m.fileLimit}-file emergency bound. The persisted graph remains usable, but completeness claims must be bounded.`,recommendation:"Increase inventoryFileLimitPerProject for this scope or split the repository into explicit project boundaries before claiming complete source coverage."});let R=new Map(w.scopes.filter(m=>m.kind==="project").map(m=>[m.id,m.hash])),k=new Map((e.previousGraph?.source.inputs?.scopes??[]).filter(m=>m.kind==="project").map(m=>[m.id,m.hash])),$="1.4.0",S=new Map((e.previousGraph?.providers??[]).filter(m=>m.id!=="incremental-project-cache").map(m=>[m.id,m.version])),I=new Map((e.previousGraph?.providers??[]).map(m=>[m.id,m])),_=bt.every(m=>S.get(m.id)===m.version)&&I.get("incremental-project-cache")?.version===$,M=e.previousGraph?.workspace.name===e.workspace.name&&_&&R.size>0&&R.size===k.size&&[...R.keys()].every(m=>k.has(m)),T=new Map((e.previousGraph?.entities??[]).filter(m=>m.kind==="project"&&m.projectId).map(m=>[m.projectId,m])),B=new Map(o.map(m=>[m.id,m])),O=m=>{let j=T.get(m.id);if(!j)return false;let L=kt(m),H=Object.fromEntries(Object.keys(L).map(x=>[x,j.attributes[x]]));return c(H)===c(L)},W=new Set(M?[...R].filter(([m,j])=>k.get(m)===j&&B.has(m)&&O(B.get(m))).map(([m])=>m):[]),K=new Set(["vscode-extension-manifest","python-project-manifest","source-language-inventory","source-structure","source-symbol-binding","runtime-bridge-semantics","polyglot-semantics","workspace-service-contract","openapi","authored-api-implementation-binding","dynamic-api-registration-binding","interface-contracts","compose","infrastructure-as-code","kubernetes","ci-workflow","codeowners"]),G=o.filter(m=>!W.has(m.id)),J=[];if(e.previousGraph&&W.size>0){let m=e.previousGraph.entities.filter(A=>A.projectId&&W.has(A.projectId)),j=new Set(m.map(A=>A.id)),L=new Map(e.previousGraph.entities.map(A=>[A.id,A])),H=new Map(e.previousGraph.proofs.map(A=>[A.id,A])),x=new Set(j),V=true;for(;V;){V=false;for(let A of e.previousGraph.relations){let re=x.has(A.from),le=x.has(A.to);if(re===le)continue;let Re=re?A.to:A.from,Se=L.get(Re);if(!Se||Se.projectId!==void 0)continue;[...Se.proofIds,...A.proofIds].some(_t=>{let Ue=H.get(_t)?.provider;return Ue!==void 0&&K.has(Ue)})&&(x.add(Re),V=true);}}if(G.length===0)for(let A of e.previousGraph.entities)A.projectId===void 0&&A.proofIds.some(re=>{let le=H.get(re)?.provider;return le!==void 0&&K.has(le)})&&x.add(A.id);let z=new Set([...x].filter(A=>!j.has(A))),X=[...m,...e.previousGraph.entities.filter(A=>z.has(A.id))],Y=new Set(X.map(A=>A.id)),Q=e.previousGraph.relations.filter(A=>Y.has(A.from)&&Y.has(A.to));J=e.previousGraph.relations.filter(A=>{let re=Y.has(A.from),le=Y.has(A.to);return re===le?false:L.get(re?A.to:A.from)?.projectId===void 0});let ve=new Set([...X,...Q].flatMap(A=>A.proofIds));for(let A of e.previousGraph.proofs)ve.has(A.id)&&i$1.proofs.set(A.id,A);for(let A of X)i$1.entities.set(A.id,A);for(let A of Q)i$1.relations.set(A.id,A);i$1.providers.push({id:"incremental-project-cache",version:$,status:"passed",permission:"filesystem-read",discoveredEntities:X.length,discoveredRelations:Q.length,proofCount:ve.size,diagnostics:[`Reused ${W.size} unchanged project scope(s); rescanning ${G.length}.`]});}else i$1.providers.push({id:"incremental-project-cache",version:$,status:"skipped",permission:"filesystem-read",discoveredEntities:0,discoveredRelations:0,proofCount:0,diagnostics:[`No compatible unchanged project scope was reused; scanning ${G.length}.`]});let D={workspacePath:t,projects:o,filesByProject:p,deepFilesByProject:v,semanticFilesByProject:g,inventoryByProject:a$1,scanBudgetsByProject:f,workspaceFiles:y,now:s,contract:e.contract??null,state:i$1},Ie={...D,projects:G};for(let m of bt){if(W.size>0&&G.length===0&&K.has(m.id)){let z=I.get(m.id);if(z){for(let X of z.diagnostics){let Y=e.previousGraph?.diagnostics.find(Q=>`${Q.code}: ${Q.message}`===X);Y&&!i$1.diagnostics.some(Q=>Q.code===Y.code&&Q.message===Y.message)&&i$1.diagnostics.push(Y);}i$1.providers.push({...z,diagnostics:[...new Set([...z.diagnostics,"Provider evidence reused from unchanged project scopes."])]});continue}}let j={entities:i$1.entities.size,relations:i$1.relations.size,proofs:i$1.proofs.size,diagnostics:i$1.diagnostics.length},L="passed",H=null;try{let z=W.size>0&&K.has(m.id)?Ie:D;if(!(m.applicable?await m.applicable(z):true))L="skipped";else {await m.run(z);let Y=i$1.entities.size-j.entities,Q=i$1.relations.size-j.relations,ve=i$1.proofs.size-j.proofs;Y===0&&Q===0&&ve===0?(L="partial",i$1.diagnostics.push({code:`graph.provider.${m.id}.empty_result`,severity:"warning",message:`${m.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."})):i$1.diagnostics.length>j.diagnostics&&(L="partial");}}catch(z){L="failed";let X=z instanceof Error?z.message:String(z);H=X,i$1.diagnostics.push({code:`graph.provider.${m.id}.failed`,severity:"warning",message:`${m.id} provider failed: ${X}`,recommendation:"Repair the referenced source artifact and rerun workspace graph emit."});}let x=i$1.diagnostics.slice(j.diagnostics).map(z=>`${z.code}: ${z.message}`);H&&x.length===0&&x.push(H);let V=rs(m,D,L);L==="passed"&&V?.some(z=>z.status==="bounded")&&(L="partial"),i$1.providers.push({id:m.id,version:m.version,status:L,permission:"filesystem-read",discoveredEntities:i$1.entities.size-j.entities,discoveredRelations:i$1.relations.size-j.relations,proofCount:i$1.proofs.size-j.proofs,diagnostics:x,...V?{inputCoverage:V}:{}});}if(e.previousGraph&&J.length>0){let m=new Map(e.previousGraph.proofs.map(x=>[x.id,x])),j=0,L=0;for(let x of J)if(!(!i$1.entities.has(x.from)||!i$1.entities.has(x.to))){i$1.relations.has(x.id)||(i$1.relations.set(x.id,x),j+=1);for(let V of x.proofIds){let z=m.get(V);z&&!i$1.proofs.has(V)&&(i$1.proofs.set(V,z),L+=1);}}let H=i$1.providers.find(x=>x.id==="incremental-project-cache");H&&(H.discoveredRelations+=j,H.proofCount+=L,H.diagnostics.push(`Restored ${j} reusable project-to-workspace relation(s) with ${L} additional proof(s).`));}as(i$1),await ns(i$1,e.projectTopology);let ce=[...i$1.entities.values()].sort((m,j)=>m.id.localeCompare(j.id)),de=[...i$1.relations.values()].sort((m,j)=>m.id.localeCompare(j.id)),qe=[...i$1.proofs.values()].sort((m,j)=>m.id.localeCompare(j.id)),Rt=ce.filter(m=>m.proofIds.length>0).length,St=de.filter(m=>m.proofIds.length>0).length,At=i$1.providers.filter(m=>m.status!=="failed").length,Ce=e.projectTopology.diagnostics?.filter(m=>m.code==="graph.edges.missing").flatMap(m=>m.nodeIds??[])??[];Ce.length>0&&i$1.diagnostics.push({code:"graph.knowledge.project_relationships_unknown",severity:"warning",message:`${Ce.length} project(s) have no proven inter-project relationship. This is unknown topology, not proof of independence.`,entityIds:Ce.map(m=>E("project",`project:${m}`)),recommendation:"Author service contracts or add OpenAPI, Compose, Kubernetes, package or import evidence."});let Ze=h(ce,de),He=w.scopes.filter(m=>!m.truncated).length,Je=w.scopes.length-He,Ee=i$1.providers.reduce((m,j)=>(j.status==="failed"?m.failed+=1:j.status==="skipped"||j.inputCoverage?.every(L=>L.status==="not-applicable")?m.notApplicable+=1:j.status==="partial"||j.inputCoverage?.some(L=>L.status==="bounded")?m.bounded+=1:m.complete+=1,m),{complete:0,bounded:0,notApplicable:0,failed:0}),Ft=Je>0||Ee.bounded>0||Ee.failed>0?"bounded":"complete";return {schemaVersion:a,generatedAt:s.toISOString(),source:{...e.source,inputs:w},workspace:e.workspace,projectTopology:e.projectTopology,entities:ce,relations:de,proofs:qe,providers:[...i$1.providers].sort((m,j)=>m.id.localeCompare(j.id)),quality:{entityCount:ce.length,relationCount:de.length,proofCount:qe.length,entityProofCoverageRatio:ce.length===0?1:Rt/ce.length,relationProofCoverageRatio:de.length===0?1:St/de.length,providerSuccessRatio:i$1.providers.length===0?1:At/i$1.providers.length,conflictCount:i$1.diagnostics.filter(m=>m.code.includes("conflict")).length,unknownCount:i(i$1.diagnostics,Ze),bindingCoverage:Ze,completeness:{status:Ft,inventory:{scopeCount:w.scopes.length,completeScopes:He,boundedScopes:Je,eligibleFiles:w.scopes.reduce((m,j)=>m+(j.eligibleFileCount??j.fileCount),0),indexedFiles:w.scopes.reduce((m,j)=>m+j.fileCount,0),eligibleFileCountExact:w.scopes.every(m=>m.eligibleFileCountExact!==false)},providers:Ee},portable:true,secretValuesEmitted:false},diagnostics:[...i$1.diagnostics].sort((m,j)=>m.code.localeCompare(j.code)||m.message.localeCompare(j.message))}}function Ss(e,t){return E(e,t)}
12
+ export{Is as a,Cs as b,wo as c,Es as d,Rs as e,Ss as f};
@@ -0,0 +1 @@
1
+ import s from'fs';import {homedir}from'os';import n from'path';var e=".workspai",a=".rapidkit",p=".workspai-workspace",g=".rapidkit-workspace",R="workspace-link.local.json",l="PROJECT-GROUNDING.md",P="project-context-agent.json",d="project-knowledge-graph-reference.json",h=`${e}/${R}`,K=`${e}/${l}`,y=`${e}/reports/${P}`,S=`${e}/reports/${d}`,c="workspai",G="Workspai";function k(t){return s.existsSync(n.join(t,p))||s.existsSync(n.join(t,g))||s.existsSync(n.join(t,e,"workspace.json"))||s.existsSync(n.join(t,a,"workspace.json"))}function A(t=homedir()){return n.join(t,".workspai","workspaces")}function f(t=homedir()){return n.join(t,"rapidkit","workspaces")}function x(t=homedir()){return n.join(t,"Workspai","rapidkits")}function u(t,r=homedir()){return n.join(A(r),t)}function T(t,r=homedir()){return [u(t,r),n.join(f(r),t),n.join(x(r),t)]}function N(t,r={}){let o=r.homeDir??homedir();return r.outputDir?n.resolve(r.outputDir,t):u(t,o)}function w(t,r=homedir()){for(let o of T(t,r))if(s.existsSync(o))return o}function v(t,r="my-workspace"){let o=1;for(;;){let E=o===1?r:`${r}-${o}`,_=n.join(t,E);if(!s.existsSync(_))return {name:E,targetPath:_};o+=1;}}function j(t=homedir()){return [n.join(A(t),c),n.join(f(t),c),n.join(x(t),c)]}function F(t=homedir()){for(let r of j(t))if(k(r))return r;return u(c,t)}function W(t,...r){return n.join(t,e,...r)}function C(t,...r){return n.join(t,a,...r)}function $(t){return n.join(t,p)}function J(t){return n.join(t,g)}function m(t,...r){return [W(t,...r),C(t,...r)]}function U(t,r){return [n.join(t,e,r),n.join(t,a,r)]}function H(t,r){return n.join(t,e,r)}function b(t){return t.replace(/\\/g,"/")===g?p:t.split(/[\\/]/g).map(o=>o===a?e:o).join("/")}function z(t){return t.replace(/\\/g,"/")===p?g:t.split(/[\\/]/g).map(o=>o===e?a:o).join("/")}export{e as a,a as b,p as c,g as d,R as e,h as f,K as g,y as h,S as i,G as j,k,A as l,N as m,w as n,v as o,F as p,W as q,$ as r,J as s,m as t,U as u,H as v,b as w,z as x};
@@ -0,0 +1 @@
1
+ import e from'fs';import r from'path';function i(n){try{let a=JSON.parse(e.readFileSync(r.join(n,"package.json"),"utf8"));return typeof a.packageManager!="string"?null:a.packageManager.trim().match(/^(npm|pnpm|yarn|bun)(?:@|$)/)?.[1]??null}catch{return null}}function o(n){let a=i(n);return a||(e.existsSync(r.join(n,"bun.lock"))||e.existsSync(r.join(n,"bunfig.toml"))?"bun":e.existsSync(r.join(n,"pnpm-lock.yaml"))?"pnpm":e.existsSync(r.join(n,"yarn.lock"))?"yarn":e.existsSync(r.join(n,"package-lock.json"))?"npm":e.existsSync(r.join(n,"pnpm-workspace.yaml"))?"pnpm":"npm")}function m(n,a,t=o(n)){return t==="npm"?`npm run ${a}`:`${t} run ${a}`}function p(n,a=o(n)){return `${a} install`}export{o as a,m as b,p as c};
@@ -0,0 +1 @@
1
+ import {a}from'./chunk-HLWDIIWL.js';import {m as m$1}from'./chunk-U5ENEDJA.js';import {a as a$1}from'./chunk-GR6442P7.js';import {f,e}from'./chunk-GAYK3WGV.js';import {h,i}from'./chunk-6UNATTB7.js';import {createHash}from'crypto';import l from'path';import {execa}from'execa';import v from'fs-extra';var D=h.projectTestCoverage.schemaVersion,P=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(t){let e=Number(t);return Number.isFinite(e)&&e>=0?e:0}function m(t,e,o=0){let n=p(t),s=Math.min(p(e),n),r=p(o);return {total:n,covered:s,skipped:r,percent:n>0?Math.round(s/n*1e4)/100:null}}function W(t){if(!t||typeof t!="object"||Array.isArray(t))return;let e=t;return m(e.total,e.covered,e.skipped)}function y(t,e){let o=l.isAbsolute(e)?e:l.resolve(t,e),n=l.relative(t,o);return n&&!n.startsWith("..")?n.split(l.sep).join("/"):e}async function C(t){return createHash("sha256").update(await v.readFile(t)).digest("hex")}async function I(t){let e=l.resolve(t);for(;;){let o=await v.pathExists(l.join(e,".workspai","project.json"))||await v.pathExists(l.join(e,".rapidkit","project.json")),n=(await v.readdir(e).catch(()=>[])).some(r=>r.toLowerCase().endsWith(".gemspec"));if(o||n||(await Promise.all(G.map(r=>v.pathExists(l.join(e,r))))).some(Boolean))return e;let s=l.dirname(e);if(s===e)return l.resolve(t);e=s;}}async function V(t){return m$1(t).runtime}async function U(t,e,o=5){let n=[],s=[{dir:t,depth:0}],r=new Set([".git",".workspai",".rapidkit","node_modules",".venv","vendor","deps"]);for(;s.length>0;){let a=s.shift();if(!a)break;let i=await v.readdir(a.dir,{withFileTypes:true}).catch(()=>[]);for(let c of i){if(r.has(c.name)||a$1(c.name))continue;let u=l.join(a.dir,c.name),g=l.relative(t,u).split(l.sep).join("/");c.isFile()&&e(c.name,g)&&n.push(u),c.isDirectory()&&a.depth<o&&s.push({dir:u,depth:a.depth+1});}}return n}async function L(t,e){let o=await v.readJson(e),n=o.total??o,s={};for(let a of ["lines","branches","functions","statements"]){let i=W(n[a]);i&&(s[a]=i);}let r=[];for(let[a,i]of Object.entries(o)){if(a==="total"||!i||typeof i!="object"||Array.isArray(i))continue;let c=i,u={};for(let g of ["lines","branches","functions","statements"]){let b=W(c[g]);b&&(u[g]=b);}r.push({path:y(t,a),metrics:u});}return {metrics:s,files:r,source:{format:"istanbul-json",path:e,sha256:await C(e)}}}async function z(t,e){let o=await v.readJson(e),n=o.totals??{},s={lines:m(n.num_statements,n.covered_lines)};p(n.num_branches)>0&&(s.branches=m(n.num_branches,n.covered_branches));let r=[];for(let[a,i]of Object.entries(o.files??{})){let c=i?.summary??{};r.push({path:y(t,a),metrics:{lines:m(c.num_statements,c.covered_lines),...p(c.num_branches)>0?{branches:m(c.num_branches,c.covered_branches)}:{}}});}return {metrics:s,files:r,source:{format:"coverage-py-json",path:e,sha256:await C(e)}}}function j(t){if(!t||typeof t!="object"||Array.isArray(t))return;let e=t,o=p(e.count),n=p(e.covered);return o>0?m(o,n):void 0}async function B(t,e){let o=await v.readJson(e),n=Array.isArray(o.data)?o.data[0]??{}:o,s=n.totals??{},r={};r.lines=j(s.lines),r.functions=j(s.functions),r.branches=j(s.branches),r.statements=j(s.regions);let a=[];for(let i of Array.isArray(n.files)?n.files:[]){if(!i||typeof i!="object"||Array.isArray(i))continue;let c=i,u=c.summary??{};a.push({path:y(t,String(c.filename??"unknown")),metrics:{lines:j(u.lines),functions:j(u.functions),branches:j(u.branches),statements:j(u.regions)}});}return {metrics:r,files:a,source:{format:"llvm-cov-json",path:e,sha256:await C(e)}}}async function E(t,e){let o=await v.readFile(e,"utf8"),n=[],s="",r=0,a=0,i=0,c=0,u=0,g=0,b=d=>{s&&(n.push({path:y(t,s),metrics:{lines:m(d.lineTotal,d.lineCovered),functions:m(d.functionTotal,d.functionCovered),branches:m(d.branchTotal,d.branchCovered)}}),r+=d.lineTotal,a+=d.lineCovered,i+=d.functionTotal,c+=d.functionCovered,u+=d.branchTotal,g+=d.branchCovered);},h={lineTotal:0,lineCovered:0,functionTotal:0,functionCovered:0,branchTotal:0,branchCovered:0};for(let d of o.split(/\r?\n/))d.startsWith("SF:")?s=d.slice(3):d.startsWith("LF:")?h.lineTotal=p(d.slice(3)):d.startsWith("LH:")?h.lineCovered=p(d.slice(3)):d.startsWith("FNF:")?h.functionTotal=p(d.slice(4)):d.startsWith("FNH:")?h.functionCovered=p(d.slice(4)):d.startsWith("BRF:")?h.branchTotal=p(d.slice(4)):d.startsWith("BRH:")?h.branchCovered=p(d.slice(4)):d==="end_of_record"&&(b(h),s="",h={lineTotal:0,lineCovered:0,functionTotal:0,functionCovered:0,branchTotal:0,branchCovered:0});return {metrics:{lines:m(r,a),functions:m(i,c),branches:m(u,g)},files:n,source:{format:"lcov",path:e,sha256:await C(e)}}}async function K(t,e){let o=await v.readFile(e,"utf8"),n=new Map;for(let a of o.split(/\r?\n/).slice(1)){let i=/^(.+?):\d+\.\d+,\d+\.\d+\s+(\d+)\s+(\d+)$/.exec(a.trim());if(!i)continue;let c=n.get(i[1])??{total:0,covered:0},u=p(i[2]);c.total+=u,p(i[3])>0&&(c.covered+=u),n.set(i[1],c);}let s=[...n.entries()].map(([a,i])=>({path:y(t,a),metrics:{statements:m(i.total,i.covered)}})),r=[...n.values()].reduce((a,i)=>({total:a.total+i.total,covered:a.covered+i.covered}),{total:0,covered:0});return {metrics:{statements:m(r.total,r.covered)},files:s,source:{format:"go-coverprofile",path:e,sha256:await C(e)}}}function k(t,e){let n=[...t.matchAll(new RegExp(`<counter\\s+type=["']${e}["']\\s+missed=["'](\\d+)["']\\s+covered=["'](\\d+)["']\\s*\\/?\\s*>`,"gi"))].at(-1);return n?m(Number(n[1])+Number(n[2]),n[2]):void 0}async function x(t,e){let o=await v.readFile(t,"utf8"),n={};if(e==="cobertura-xml"){let s=/<coverage\b([^>]*)>/i.exec(o)?.[1]??"",r=/\bline-rate=["']([\d.]+)["']/i.exec(s)?.[1],a=/\bbranch-rate=["']([\d.]+)["']/i.exec(s)?.[1];r&&(n.lines=m(1e4,Math.round(Number(r)*1e4))),a&&(n.branches=m(1e4,Math.round(Number(a)*1e4)));}if(e==="clover-xml"){let r=[...o.matchAll(/<metrics\b([^>]*)\/?>/gi)].at(-1)?.[1]??"",a=g=>p(new RegExp(`\\b${g}=["'](\\d+)["']`,"i").exec(r)?.[1]),i=a("statements"),c=a("methods"),u=a("conditionals");i>0&&(n.statements=m(i,a("coveredstatements"))),c>0&&(n.functions=m(c,a("coveredmethods"))),u>0&&(n.branches=m(u,a("coveredconditionals")));}return n.lines??=k(o,"LINE"),n.branches??=k(o,"BRANCH"),n.functions??=k(o,"METHOD"),n.statements??=k(o,"INSTRUCTION"),{metrics:n,files:[],source:{format:e,path:t,sha256:await C(t)}}}async function X(t){let e=await v.readFile(t,"utf8"),o=/<scoverage\b([^>]*)>/i.exec(e)?.[1]??"",n=b=>p(new RegExp(`\\b${b}=["']([\\d.]+)["']`,"i").exec(o)?.[1]),s=n("statement-count"),r=n("statements-invoked"),a=n("branch-count"),i=n("branches-invoked"),c=n("statement-rate"),u=n("branch-rate"),g={};return s>0?g.statements=m(s,r):c>0&&(g.statements=m(1e4,Math.round(c*100))),a>0?g.branches=m(a,i):u>0&&(g.branches=m(1e4,Math.round(u*100))),{metrics:g,files:[],source:{format:"scoverage-xml",path:t,sha256:await C(t)}}}async function Q(t,e){let o=await v.readJson(e),n=new Map;for(let a of Object.values(o)){let i=a?.coverage;if(!(!i||typeof i!="object"||Array.isArray(i)))for(let[c,u]of Object.entries(i)){if(!Array.isArray(u))continue;let g=n.get(c)??[];u.forEach((b,h)=>{typeof b=="number"&&(g[h]=Math.max(g[h]??0,b));}),n.set(c,g);}}let s=[...n.entries()].map(([a,i])=>{let c=i.filter(u=>typeof u=="number");return {path:y(t,a),metrics:{lines:m(c.length,c.filter(u=>u>0).length)}}}),r=s.reduce((a,i)=>{let c=i.metrics.lines;return {total:a.total+(c?.total??0),covered:a.covered+(c?.covered??0)}},{total:0,covered:0});return {metrics:{lines:m(r.total,r.covered)},files:s,source:{format:"simplecov-json",path:e,sha256:await C(e)}}}async function q(t,e={}){let o=[{relativePath:"coverage/coverage-summary.json",parser:r=>L(t,r)},{relativePath:"coverage.json",parser:async r=>{let a=await v.readJson(r);return Array.isArray(a.data)?B(t,r):z(t,r)}},{relativePath:"coverage/lcov.info",parser:r=>E(t,r)},{relativePath:"cover/lcov.info",parser:r=>E(t,r)},{relativePath:"lcov.info",parser:r=>E(t,r)},{relativePath:"coverage.out",parser:r=>K(t,r)},{relativePath:"target/site/jacoco/jacoco.xml",parser:r=>x(r,"jacoco-xml")},{relativePath:"build/reports/jacoco/test/jacocoTestReport.xml",parser:r=>x(r,"jacoco-xml")},{relativePath:"coverage.xml",parser:r=>x(r,"clover-xml")},{relativePath:".resultset.json",parser:r=>Q(t,r)}];for(let r of o){let a=l.join(t,r.relativePath);if(await v.pathExists(a))return r.parser(a)}if(e.recursive===false)return null;let s=(await U(t,(r,a)=>r==="coverage.cobertura.xml"||r==="jacoco.xml"||r==="clover.xml"||r==="scoverage.xml"||a.endsWith("/coverage-summary.json"),7)).sort()[0];return s?s.endsWith("coverage-summary.json")?L(t,s):s.endsWith("jacoco.xml")?x(s,"jacoco-xml"):s.endsWith("coverage.cobertura.xml")?x(s,"cobertura-xml"):s.endsWith("scoverage.xml")?X(s):x(s,"clover-xml"):null}async function Y(t){return v.readJson(l.join(t,"package.json")).catch(()=>null)}async function H(t,e){let o=(n,s)=>({cwd:t,executable:n,args:s});if(e==="node"||e==="bun"){let s=(await Y(t))?.scripts??{},r=["test:coverage","test:cov","coverage"].find(i=>typeof s[i]=="string"),a=e==="bun"?"bun":await v.pathExists(l.join(t,"pnpm-lock.yaml"))?"pnpm":await v.pathExists(l.join(t,"yarn.lock"))?"yarn":"npm";if(r)return {runner:String(s[r]).split(/\s+/)[0]||a,invocations:[o(a,a==="yarn"?[r]:["run",r])],diagnostics:[]};if(typeof s.test=="string"){let i=a==="yarn"?["test","--coverage"]:a==="bun"?["test","--coverage","--coverage-reporter=lcov"]:["test","--","--coverage"];return {runner:String(s.test).split(/\s+/)[0]||a,invocations:[o(a,i)],diagnostics:[]}}return {runner:null,invocations:[],diagnostics:["No project-owned test or coverage script was detected."]}}if(e==="deno")return {runner:"deno",invocations:[o("deno",["test","--coverage=coverage"]),o("deno",["coverage","--lcov","--output=coverage/lcov.info","coverage"])],diagnostics:[]};if(e==="python")return {runner:"pytest-cov",invocations:[o(await v.pathExists(l.join(t,".venv",process.platform==="win32"?"Scripts":"bin",process.platform==="win32"?"python.exe":"python"))?l.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(e==="go")return {runner:"go test",invocations:[o("go",["test","./...","-coverprofile=coverage.out"])],diagnostics:[]};if(e==="java"){let n=await v.pathExists(l.join(t,"gradlew")),s=await v.pathExists(l.join(t,"gradlew.bat")),r=n||s,a=await v.pathExists(l.join(t,"mvnw")),i=await v.pathExists(l.join(t,"mvnw.cmd")),c=r?process.platform==="win32"&&s?".\\gradlew.bat":"./gradlew":await v.pathExists(l.join(t,"pom.xml"))?process.platform==="win32"&&i?".\\mvnw.cmd":a?"./mvnw":"mvn":"gradle";return {runner:r?"jacoco/gradle":"jacoco/maven",invocations:[o(c,r?["test","jacocoTestReport"]:["test","jacoco:report"])],diagnostics:[]}}return e==="dotnet"?{runner:"dotnet coverlet",invocations:[o("dotnet",["test","--collect:XPlat Code Coverage"])],diagnostics:[]}:e==="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."]}:e==="php"?{runner:"phpunit",invocations:[o(process.platform==="win32"?"vendor\\bin\\phpunit.bat":"vendor/bin/phpunit",["--coverage-clover","coverage.xml"])],diagnostics:[]}:e==="ruby"?{runner:"simplecov",invocations:[o("bundle",["exec","rspec"])],diagnostics:["The test suite must enable SimpleCov to emit .resultset.json."]}:e==="elixir"?{runner:"mix cover",invocations:[o("mix",["test","--cover"])],diagnostics:["Configure ExCoveralls for JSON or LCOV interchange when machine-readable coverage is required."]}:e==="clojure"?{runner:"cloverage",invocations:[o("clojure",["-M:coverage"])],diagnostics:["The project must declare a coverage alias such as cloverage."]}:e==="scala"?{runner:"sbt-scoverage",invocations:[o("sbt",["clean","coverage","test","coverageReport"])],diagnostics:["The project must declare the scoverage plugin."]}:e==="kotlin"?{runner:"jacoco/gradle",invocations:[o(await v.pathExists(l.join(t,process.platform==="win32"?"gradlew.bat":"gradlew"))?process.platform==="win32"?".\\gradlew.bat":"./gradlew":"gradle",["test","jacocoTestReport"])],diagnostics:["The project must declare the JaCoCo Gradle plugin."]}:e==="c"||e==="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 ve(t,e){let o=await I(t),n=e??await V(o),s=await H(o,n),r=await q(o,{recursive:false}).catch(()=>null),a=r?.source.path&&r.source.sha256?[{path:l.relative(o,r.source.path).split(l.sep).join("/"),sha256:r.source.sha256}]:[],i=[...s.diagnostics],c=r?"available":s.invocations.length===0||n==="unknown"?"unsupported":i.length>0?"requires-setup":"available";return {runtime:n,runner:s.runner,status:c,existingEvidence:a,invocations:s.invocations,prerequisites:i}}function Z(t,e){let o=t?l.relative(t,e).split(l.sep).join("/"):l.resolve(e),n=l.basename(e).toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"").slice(0,48)||"project",s=createHash("sha256").update(o).digest("hex").slice(0,12);return `${n}--${s}`}function ee(t){return t.lines?"lines":t.statements?"statements":t.branches?"branches":"functions"}async function me(t={}){let e$1=await I(t.projectPath??process.cwd()),o=a(e$1),n=t.runtime??await V(e$1),s=Math.max(0,Math.min(100,Math.round(t.target??80))),r=await H(e$1,n),a$1=[],i=Date.now();if(t.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(a$1.push(Number(w.exitCode??1)),Number(w.exitCode??1)!==0)break}let c=await q(e$1).catch(()=>null),u=c?ee(c.metrics):"lines",g=c?.metrics[u]?.percent??null,b=t.run&&a$1.some(f=>f!==0)?"failed":g===null?"unavailable":g>=s?"passed":"below-target",h=Z(o,e$1),d=l.join(e$1,P),R=o?`.workspai/reports/projects/${h}/project-test-coverage-last-run.json`:null,T={schemaVersion:D,generatedAt:new Date().toISOString(),status:b,project:{id:h,name:l.basename(e$1),path:e$1,workspacePath:o},runtime:n,runner:r.runner,target:{metric:u,percent:s},metrics:c?.metrics??{},files:c?.files??[],lowCoverageFiles:(c?.files??[]).map(f=>{let w=f.metrics[u]??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<s).sort((f,w)=>w.uncovered-f.uncovered||f.path.localeCompare(w.path)),source:c?.source??{format:"unknown",path:null,sha256:null},execution:{requested:t.run===true,invocations:r.invocations,exitCodes:a$1,durationMs:Date.now()-i},diagnostics:[...r.diagnostics,...c?[]:["No supported machine-readable coverage artifact was found."]],artifactPaths:{project:d,workspaceLatest:o?l.join(o,P):null,workspaceProject:o&&R?l.join(o,R):null}};return o&&R&&await f(o,P,[{relativePath:P,payload:T},{relativePath:R,payload:T}]),await e(e$1,P,T),T}export{D as a,P as b,ve as c,me as d};
@@ -1,2 +1,2 @@
1
- import {a}from'./chunk-AFIFZTOY.js';import {e,g,f,h,p,j}from'./chunk-NZ3WZYD5.js';import h$1 from'path';function u(t){let r=Object.values(p).filter(e=>e.produces.includes(t)).map(e=>[...e.command]),o=j[t]??[];return [...r,...o.map(e=>[...e])]}var P=Object.keys(e).flatMap(t=>{let r=t,o=f[r],e$1=g[r];if(!o||!e$1)return [];let n=e[r];return [{artifactPath:n,schemaVersion:o,contractPath:e$1,producerCommands:u(n)}]}),T=Object.values(h).map(t=>({...t,producerCommands:t.producerCommands.map(r=>[...r])})),d=Object.freeze(Object.fromEntries([...P,...T].map(t=>[t.artifactPath,t])));function l(t){return t.split(h$1.sep).join("/").replace(/^\.\//,"")}var s=h,I=[{pattern:/^\.workspai\/reports\/bootstrap-compliance-[^/]+\.json$/,canonicalPath:s.bootstrapCompliance.artifactPath},{pattern:/^\.workspai\/reports\/mirror-ops-[^/]+\.json$/,canonicalPath:s.mirrorOps.artifactPath},{pattern:/^\.workspai\/reports\/transparency-evidence-[^/]+\.json$/,canonicalPath:s.transparencyEvidence.artifactPath},{pattern:/^\.workspai\/reports\/projects\/[^/]+\/doctor-project-last-run\.json$/,canonicalPath:s.doctorProject.artifactPath},{pattern:/^\.workspai\/reports\/projects\/[^/]+\/project-test-coverage-last-run\.json$/,canonicalPath:s.projectTestCoverage.artifactPath}];function R(t){let r=l(t),o=d[r];if(o)return o;let e=I.find(n=>n.pattern.test(r));return e?d[e.canonicalPath]??null:null}function k(t,r,o=t){let e=l(t),n=R(t);if(!n){if(e.startsWith(".workspai/reports/")&&e.endsWith(".json"))throw new Error(`${o} is a public workspace report without a registered artifact contract`);return}let f=n.schemaVersionField??"schemaVersion",i=r&&typeof r=="object"?r[f]:void 0;if(i!==n.schemaVersion)throw new Error(`${o} schemaVersion is ${String(i)}, expected ${n.schemaVersion}`);a(r,n.contractPath,o);}
1
+ import {a}from'./chunk-AFIFZTOY.js';import {e,g,f,h,p,j}from'./chunk-6UNATTB7.js';import h$1 from'path';function u(t){let r=Object.values(p).filter(e=>e.produces.includes(t)).map(e=>[...e.command]),o=j[t]??[];return [...r,...o.map(e=>[...e])]}var P=Object.keys(e).flatMap(t=>{let r=t,o=f[r],e$1=g[r];if(!o||!e$1)return [];let n=e[r];return [{artifactPath:n,schemaVersion:o,contractPath:e$1,producerCommands:u(n)}]}),T=Object.values(h).map(t=>({...t,producerCommands:t.producerCommands.map(r=>[...r])})),d=Object.freeze(Object.fromEntries([...P,...T].map(t=>[t.artifactPath,t])));function l(t){return t.split(h$1.sep).join("/").replace(/^\.\//,"")}var s=h,I=[{pattern:/^\.workspai\/reports\/bootstrap-compliance-[^/]+\.json$/,canonicalPath:s.bootstrapCompliance.artifactPath},{pattern:/^\.workspai\/reports\/mirror-ops-[^/]+\.json$/,canonicalPath:s.mirrorOps.artifactPath},{pattern:/^\.workspai\/reports\/transparency-evidence-[^/]+\.json$/,canonicalPath:s.transparencyEvidence.artifactPath},{pattern:/^\.workspai\/reports\/projects\/[^/]+\/doctor-project-last-run\.json$/,canonicalPath:s.doctorProject.artifactPath},{pattern:/^\.workspai\/reports\/projects\/[^/]+\/project-test-coverage-last-run\.json$/,canonicalPath:s.projectTestCoverage.artifactPath}];function R(t){let r=l(t),o=d[r];if(o)return o;let e=I.find(n=>n.pattern.test(r));return e?d[e.canonicalPath]??null:null}function k(t,r,o=t){let e=l(t),n=R(t);if(!n){if(e.startsWith(".workspai/reports/")&&e.endsWith(".json"))throw new Error(`${o} is a public workspace report without a registered artifact contract`);return}let f=n.schemaVersionField??"schemaVersion",i=r&&typeof r=="object"?r[f]:void 0;if(i!==n.schemaVersion)throw new Error(`${o} schemaVersion is ${String(i)}, expected ${n.schemaVersion}`);a(r,n.contractPath,o);}
2
2
  export{R as a,k as b};
@@ -0,0 +1 @@
1
+ import {a as a$1}from'./chunk-LPCWROQ3.js';import {f,e as e$1,g,i}from'./chunk-6UNATTB7.js';var R=f.repairTransaction,C=e$1.repairTransaction,E=g.repairTransaction;var y="workspai.workspace-repair-proposal.v1",j="contracts/workspace-intelligence/workspace-repair-proposal.v1.json";var A="workspai.workspace-repair-capabilities.v1",b="workspai.workspace-repair-consumer-protocol.v1",v=["project","workspace","linked-project","polyglot-project"],d=["missing-tool","stale-evidence","missing-artifact","no-op-proposal","source-drift","validation-failure","producer-failure","provider-outage","interrupted-rollback","unsupported-runtime"],u=["automatic-refresh","bounded-replan","decision-required","checkpoint-rollback","durable-resume","manual-repair"],w={"missing-tool":"decision-required","stale-evidence":"automatic-refresh","missing-artifact":"automatic-refresh","no-op-proposal":"bounded-replan","source-drift":"bounded-replan","validation-failure":"checkpoint-rollback","producer-failure":"bounded-replan","provider-outage":"durable-resume","interrupted-rollback":"durable-resume","unsupported-runtime":"manual-repair"};function P(){let i=[],s=c.map(o=>o.id);new Set(s).size!==s.length&&i.push("adapter ids are not unique"),v.length<4&&i.push("scope matrix is incomplete"),d.length<10&&i.push("failure-family matrix is incomplete"),u.length<6&&i.push("recovery-path matrix is incomplete");for(let o of d){let t=w[o];u.includes(t)||i.push(`${o} has no bounded recovery policy`);}for(let o of c)for(let t of ["reconcile","audit","test","build"])o.stages[t]||i.push(`${o.id}.${t} is undeclared`);return i}var c=[{id:"node",ecosystem:"JavaScript / TypeScript",manifests:["package.json"],lockfiles:["package-lock.json","npm-shrinkwrap.json","pnpm-lock.yaml","yarn.lock","bun.lock","bun.lockb"],packageManagers:["npm","pnpm","yarn","bun"],support:"full",stages:{reconcile:"native",audit:"native",test:"declared",build:"declared"},requiredToolFamilies:["selected package manager"]},{id:"python",ecosystem:"Python",manifests:["pyproject.toml","requirements.txt"],lockfiles:["uv.lock","poetry.lock","requirements.txt"],packageManagers:["uv","poetry","pip"],support:"conditional",stages:{reconcile:"conditional",audit:"conditional",test:"conditional",build:"declared"},requiredToolFamilies:["isolated Python","selected environment manager","pip-audit or governed Doctor audit"],limitation:"A bounded isolated environment and an installed audit surface are required."},{id:"go",ecosystem:"Go",manifests:["go.mod"],lockfiles:["go.sum"],packageManagers:["go modules"],support:"conditional",stages:{reconcile:"native",audit:"conditional",test:"native",build:"native"},requiredToolFamilies:["go","govulncheck"],limitation:"govulncheck must be installed; the engine never fetches an unreviewed tool."},{id:"rust",ecosystem:"Rust",manifests:["Cargo.toml"],lockfiles:["Cargo.lock"],packageManagers:["cargo"],support:"conditional",stages:{reconcile:"native",audit:"conditional",test:"native",build:"native"},requiredToolFamilies:["cargo","cargo-audit"],limitation:"The cargo-audit subcommand must already be installed."},{id:"php-composer",ecosystem:"PHP",manifests:["composer.json"],lockfiles:["composer.lock"],packageManagers:["composer"],support:"full",stages:{reconcile:"native",audit:"native",test:"declared",build:"declared"},requiredToolFamilies:["composer"]},{id:"ruby-bundler",ecosystem:"Ruby",manifests:["Gemfile"],lockfiles:["Gemfile.lock"],packageManagers:["bundler"],support:"conditional",stages:{reconcile:"native",audit:"conditional",test:"declared",build:"declared"},requiredToolFamilies:["bundle","bundle-audit"],limitation:"bundle-audit and the declared Rake tasks must already exist."},{id:"elixir-mix",ecosystem:"Elixir",manifests:["mix.exs"],lockfiles:["mix.lock"],packageManagers:["mix"],support:"conditional",stages:{reconcile:"native",audit:"conditional",test:"native",build:"native"},requiredToolFamilies:["mix","Hex audit task"],limitation:"The project must expose the Hex audit task used by its dependency policy."},{id:"deno",ecosystem:"Deno",manifests:["deno.json","deno.jsonc"],lockfiles:["deno.lock"],packageManagers:["deno"],support:"full",stages:{reconcile:"native",audit:"native",test:"declared",build:"declared"},requiredToolFamilies:["deno"]},{id:"dotnet",ecosystem:".NET",manifests:["*.sln","*.csproj","*.fsproj","*.vbproj"],lockfiles:["Directory.Packages.props","packages.lock.json"],packageManagers:["NuGet / dotnet"],support:"full",stages:{reconcile:"native",audit:"native",test:"native",build:"native"},requiredToolFamilies:["dotnet"]},{id:"jvm-maven",ecosystem:"JVM / Maven",manifests:["pom.xml"],lockfiles:[],packageManagers:["Maven Wrapper","Maven"],support:"conditional",stages:{reconcile:"native",audit:"conditional",test:"native",build:"native"},requiredToolFamilies:["mvnw or mvn","governed Doctor audit"],limitation:"A project-specific dependency audit command must be declared by Doctor evidence."},{id:"jvm-gradle",ecosystem:"JVM / Gradle",manifests:["build.gradle.kts","build.gradle"],lockfiles:["gradle.lockfile","gradle/libs.versions.toml"],packageManagers:["Gradle Wrapper","Gradle"],support:"conditional",stages:{reconcile:"native",audit:"conditional",test:"native",build:"native"},requiredToolFamilies:["gradlew or gradle","governed Doctor audit"],limitation:"A project-specific dependency audit command must be declared by Doctor evidence."},{id:"clojure",ecosystem:"Clojure",manifests:["deps.edn","project.clj"],lockfiles:[],packageManagers:["Clojure CLI","Leiningen"],support:"conditional",stages:{reconcile:"native",audit:"conditional",test:"conditional",build:"conditional"},requiredToolFamilies:["clojure or lein","governed project audit"],limitation:"Tests and builds run only when the selected Clojure project surface declares a deterministic entrypoint."},{id:"scala-sbt",ecosystem:"Scala / sbt",manifests:["build.sbt"],lockfiles:[],packageManagers:["sbt"],support:"conditional",stages:{reconcile:"native",audit:"conditional",test:"native",build:"native"},requiredToolFamilies:["sbt","governed project audit"],limitation:"A project-specific dependency audit command must be declared by Doctor evidence."}];function M(){let i=P();if(i.length>0)throw new Error(`Workspace Repair qualification matrix is incomplete: ${i.join("; ")}`);return {schemaVersion:A,owner:"Workspai CLI",workflow:["plan","preconditions","approval","target-precondition","checkpoint","execute","reconcile","audit","test","build","target-producer-verify","canonical-verify","close-or-rollback-or-decision"],invariants:{multiAdapterProjects:true,missingTools:"decision-required",unsupportedEcosystems:"decision-required",silentFallbackToModelExecution:false,mutationAuthority:"cli-only",targetClosure:"selected-causal-action-set",changeReceipt:"checkpoint-hash-delta",consumerTimeline:"durable-transaction-events",typedDecisionCauses:true,registeredLinkedProjectMutationBoundary:true,sourceProposalIntegrity:"project-bound-hash-pinned",completionAuthority:"cli-verification-receipt",goalSourceTransition:"closed-integrity-bound-v1",goalAttemptBudget:"durable-serialized-v1",consumerHandshakeRequired:true,ephemeralProposalsAreEvidence:false,approvalBoundToPlanHash:true,canonicalVerificationRequired:true,rollbackConflictDetection:true},consumerProtocol:{protocolVersion:b,versionProbe:{args:["--version","--json"],schemaVersion:"rapidkit-version-v1"},capabilityProbe:{args:["workspace","repair","capabilities","--json"],schemaVersion:A},invocation:{command:"workspace repair",workspaceResolution:["process-cwd","--workspace"],actions:["capabilities","plan","propose","approve","decide","execute","resume","status","list","rollback","cancel"]},contracts:{operationResult:a$1,proposal:y,transaction:R},transientPaths:[".workspai/repair/inbox/*.json",".workspai/repair/engine.lock"]},qualificationMatrix:{schemaVersion:"workspai.workspace-repair-qualification-matrix.v1",status:"contract-enforced",dimensions:{adapters:c.map(s=>s.id),scopes:v,failureFamilies:d,recoveryPaths:u,failureRecoveryPolicy:w},invariants:{everyAdapterDeclaresClosureStages:true,everyFailureTerminates:true,everyMutationIsCheckpointed:true,workspaceAndProjectScopesUseTheSameEngine:true,linkedProjectsRemainBoundaryChecked:true}},adapters:c}}var V="workspai.studio-card-repair-capabilities.v1",h="npx workspai workspace verify --json",r=e$1,a=i;function e(i,s,o,t={}){return {cardId:i,scope:t.scope??"workspace",producerCommand:s,producerArtifact:o,verifyCommand:s,verifyArtifact:o,aggregateVerifyCommand:h,targetClosure:"exact-producer-and-causal-action-set",aggregateRepair:"sequential-causal-queue",transactionScope:"one-causal-finding-family",workspacePosture:"reported-separately",repairPolicy:t.repairPolicy??"refresh-producer",remediationArtifacts:t.remediationArtifacts??[]}}var H=[e("doctor","npx workspai doctor workspace --json",r.doctor,{repairPolicy:"diagnose-and-repair",remediationArtifacts:[a.doctorRemediationPlan,a.artifactRemediationPlan]}),e("projectDoctor","npx workspai doctor project --json",a.doctorProject,{scope:"project",repairPolicy:"diagnose-and-repair",remediationArtifacts:[a.doctorRemediationPlan,a.artifactRemediationPlan]}),e("pipeline","npx workspai pipeline --json --strict",a.pipelineLastRun,{repairPolicy:"source-repair-then-produce",remediationArtifacts:[a.artifactRemediationPlan]}),e("analyze","npx workspai analyze --json",r.analyze,{repairPolicy:"source-repair-then-produce",remediationArtifacts:[a.artifactRemediationPlan]}),e("readiness","npx workspai readiness --json",r.readiness,{repairPolicy:"source-repair-then-produce",remediationArtifacts:[a.artifactRemediationPlan]}),e("bootstrap","npx workspai bootstrap --ci --json",a.bootstrapCompliance,{repairPolicy:"source-repair-then-produce",remediationArtifacts:[a.artifactRemediationPlan]}),e("workspaceSync","npx workspai workspace sync --json",a.workspaceRegistry),e("foundation","npx workspai workspace foundation ensure --json",".workspai/workspace.json"),e("contract","npx workspai workspace contract verify --strict --json",r.contractVerify,{repairPolicy:"source-repair-then-produce"}),e("autopilot","npx workspai autopilot release --json",a.autopilotReleaseLastRun,{repairPolicy:"source-repair-then-produce"}),e("workspaceRun","npx workspai workspace run test --json",a.workspaceRunLast,{repairPolicy:"source-repair-then-produce",remediationArtifacts:[a.artifactRemediationPlan]}),e("setup","npx workspai setup --json",".workspai/toolchain.lock",{repairPolicy:"source-repair-then-produce"}),e("importReadiness","npx workspai doctor project --json",a.doctorProject,{scope:"project",repairPolicy:"diagnose-and-repair",remediationArtifacts:[a.artifactRemediationPlan]}),e("snapshot","npx workspai snapshot create --json",".workspai/reports/snapshot-last-run.json"),e("workspaceModel","npx workspai workspace model --json --write",r.model),e("intelligenceSnapshot","npx workspai workspace snapshot --json",r.snapshot),e("workspaceDiff",`npx workspai workspace diff --from ${r.snapshot} --json`,r.diff),e("workspaceImpact",`npx workspai workspace impact --from ${r.diff} --json`,r.impact),e("workspaceIntelligenceRun","npx workspai workspace intelligence run --for-agent generic --strict --json",r.intelligenceRun,{repairPolicy:"source-repair-then-produce"}),e("workspaceVerify",h,r.verify,{repairPolicy:"source-repair-then-produce",remediationArtifacts:[a.artifactRemediationPlan]}),e("workspaceExplain","npx workspai workspace explain release-blocked --json --write",r.explain),e("workspaceWhy","npx workspai workspace why release-blocked --json --write",a.workspaceWhy),e("workspaceTrace",`npx workspai workspace trace --from ${r.diff} --json --write`,a.workspaceTrace),e("workspaceWatch","npx workspai workspace watch --once --json",r.model),e("workspaceContextAgent","npx workspai workspace context --for-agent --json --write",r.agentContext),e("agentGrounding","npx workspai workspace agent-sync --write --refresh-context --json --preset enterprise --target vscode",r.agentCustomizationPack),e("share",`npx workspai workspace share --output ${a.workspaceShareBundle} --json`,a.workspaceShareBundle),e("archive","npx workspai workspace export --output team-workspace.workspai-archive.zip --json",".workspai/archive-manifest.json"),e("mirror","npx workspai mirror status --json",a.mirrorOps),e("cache","npx workspai cache status --json",".workspai/cache-config.yml"),e("policy","npx workspai workspace policy show --json",".workspai/policies.yml",{repairPolicy:"source-repair-then-produce"}),e("infra","npx workspai infra plan --json",a.infraPlan,{repairPolicy:"source-repair-then-produce"})];export{R as a,C as b,E as c,y as d,j as e,A as f,c as g,M as h,V as i,H as j};
@@ -0,0 +1 @@
1
+ import E from'crypto';import a from'path';import o from'fs-extra';var T=10*6e4,b=15*6e4,P=75,w=new Map;function m(e,r){return typeof e=="number"&&Number.isFinite(e)&&e>0?e:r}async function l(e){try{let r=await o.readJson(a.join(e,"owner.json"));return typeof r.token=="string"&&typeof r.pid=="number"?r:null}catch{return null}}async function v(e,r){try{let n=await o.stat(e);if(Date.now()-n.mtimeMs<=r)return;await o.remove(e);}catch{}}async function O(e){let r=w.get(e)??Promise.resolve(),n,t=new Promise(c=>{n=c;}),i=r.then(()=>t,()=>t);return w.set(e,i),await r.catch(()=>{}),()=>{n(),w.get(e)===i&&w.delete(e);}}function I(e){return e==="EEXIST"?true:process.platform==="win32"&&(e==="EPERM"||e==="EBUSY")}async function D(e,r,n={}){let t=a.resolve(e),i=m(n.timeoutMs,T),c=m(n.staleMs,b),p=m(n.retryDelayMs,P),h=Date.now(),d=E.randomUUID(),y={token:d,pid:process.pid,createdAt:new Date().toISOString(),...n.purpose?{purpose:n.purpose}:{}};for(await o.ensureDir(a.dirname(t));;){try{await o.mkdir(t);}catch(s){let L=s.code;if(!I(L))throw s;if(await v(t,c),Date.now()-h>=i){let u=await l(t),g=u?` (owner pid ${u.pid})`:"";throw new Error(`Timed out waiting for Workspai lock${g}: ${t}`)}let k=Math.floor(Math.random()*Math.max(10,p));await new Promise(u=>setTimeout(u,p+k));continue}try{await o.writeJson(a.join(t,"owner.json"),y,{spaces:2});break}catch(s){throw await o.remove(t).catch(()=>{}),s}}let M=Math.max(1e3,Math.min(3e4,Math.floor(c/3))),f=setInterval(()=>{let s=new Date;o.utimes(t,s,s).catch(()=>{});},M);f.unref();try{return await r()}finally{clearInterval(f),(await l(t))?.token===d&&await o.remove(t).catch(()=>{});}}async function F(e,r,n={}){let t=a.resolve(e),i=await O(t);try{return await D(t,r,n)}finally{i();}}export{F as a};
@@ -1,3 +1,3 @@
1
- import {a as a$1,b as b$1}from'./chunk-VYDURWN7.js';import {b as b$2}from'./chunk-AO2ZI42U.js';import {a,e,b}from'./chunk-CCDGHPEJ.js';import {i,h as h$1}from'./chunk-NZ3WZYD5.js';import h from'path';import {existsSync}from'fs';import X from'fs-extra';var Y=[{artifactKind:"bootstrap-compliance",cardId:"bootstrap",fileNames:["bootstrap-compliance.latest.json"]},{artifactKind:"doctor-workspace",cardId:"doctor",fileNames:["doctor-remediation-plan-last-run.json","doctor-last-run.json"]},{artifactKind:"analyze",cardId:"analyze",fileNames:["analyze-last-run.json"]},{artifactKind:"readiness",cardId:"readiness",fileNames:["release-readiness-last-run.json"]},{artifactKind:"pipeline",cardId:"pipeline",fileNames:["pipeline-last-run.json"]},{artifactKind:"workspace-run",cardId:"workspaceRun",fileNames:["workspace-run-last.json"]},{artifactKind:"workspace-verify",cardId:"workspaceVerify",fileNames:["workspace-verify-last-run.json"]}];function g(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:void 0}function w(e){return Array.isArray(e)?e.filter(r=>typeof r=="string"&&r.trim().length>0):[]}function I(e){return [...new Set(e.map(r=>r.trim()).filter(Boolean))]}function V(e){return (e.notes.includes("Doctor finding status: blocking")?16:0)+(e.transaction?8:0)+(e.operation?4:0)+(e.invocation?2:0)+(e.strategy?.length?1:0)}function ee(e){let r=V(e.incoming)>V(e.existing),o=structuredClone(r?e.incoming:e.existing),i=r?e.existing:e.incoming,t=i.sourceStepId;return o.order=e.existing.order,o.files=I([...o.files,...i.files]),o.notes=I([...o.notes,...i.notes.filter(a=>!a.startsWith("Source Doctor capability:")&&!a.startsWith("Doctor finding status:")),...t?[`Also satisfies Doctor capability: ${t}`]:[]]),o}function te(e,r,o){return o?r:h.relative(e,r).split(h.sep).join("/")}function D(e){return e.includeAbsolutePaths?e.projectPath:b$1({workspacePath:e.workspacePath,projectPath:e.projectPath,projectName:e.projectName}).contractRelativePath}function z(e){let r=h.isAbsolute(e.filePath)?h.resolve(e.filePath):h.resolve(e.projectPath,e.filePath);if(e.includeAbsolutePaths)return r;let o=h.relative(e.projectPath,r);return !o||o===".."||o.startsWith(`..${h.sep}`)||h.isAbsolute(o)?void 0:`${D(e)}/${o.split(h.sep).join("/")}`}function re(e){let r=e?.trim()||"npx workspai bootstrap";if(!/(?:^|\s)--ci(?:\s|$)/.test(r)&&/(?:^|\s)--json(?:\s|$)/.test(r))return r.replace(/(?:^|\s)--json(?:\s|$)/,i=>{let t=i.startsWith(" ")?" ":"",a=i.endsWith(" ")?" ":"";return `${t}--ci --json${a}`}).trim();let o=/(?:^|\s)--ci(?:\s|$)/.test(r)?r:`${r} --ci`;return /(?:^|\s)--json(?:\s|$)/.test(o)?o:`${o} --json`}function q(e,r){return h.basename(e).toLowerCase().replace(/\.cmd$/,"")==="npx"&&r[0]==="workspai"&&!r.includes("--no-install")?["--no-install",...r]:r}function oe(e){return `${JSON.stringify({schemaVersion:h$1.compatibilityMatrix.schemaVersion,generatedAt:e,source:"workspai workspace remediation-plan",runtimes:{},notes:["Minimal enterprise baseline. Add runtime and toolchain entries as governance matures."]},null,2)}
1
+ import {a as a$1,b as b$1}from'./chunk-ECLMYTWT.js';import {b as b$2}from'./chunk-AO2ZI42U.js';import {a,e,b}from'./chunk-GAYK3WGV.js';import {i,h as h$1}from'./chunk-6UNATTB7.js';import h from'path';import {existsSync}from'fs';import X from'fs-extra';var Y=[{artifactKind:"bootstrap-compliance",cardId:"bootstrap",fileNames:["bootstrap-compliance.latest.json"]},{artifactKind:"doctor-workspace",cardId:"doctor",fileNames:["doctor-remediation-plan-last-run.json","doctor-last-run.json"]},{artifactKind:"analyze",cardId:"analyze",fileNames:["analyze-last-run.json"]},{artifactKind:"readiness",cardId:"readiness",fileNames:["release-readiness-last-run.json"]},{artifactKind:"pipeline",cardId:"pipeline",fileNames:["pipeline-last-run.json"]},{artifactKind:"workspace-run",cardId:"workspaceRun",fileNames:["workspace-run-last.json"]},{artifactKind:"workspace-verify",cardId:"workspaceVerify",fileNames:["workspace-verify-last-run.json"]}];function g(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:void 0}function w(e){return Array.isArray(e)?e.filter(r=>typeof r=="string"&&r.trim().length>0):[]}function I(e){return [...new Set(e.map(r=>r.trim()).filter(Boolean))]}function V(e){return (e.notes.includes("Doctor finding status: blocking")?16:0)+(e.transaction?8:0)+(e.operation?4:0)+(e.invocation?2:0)+(e.strategy?.length?1:0)}function ee(e){let r=V(e.incoming)>V(e.existing),o=structuredClone(r?e.incoming:e.existing),i=r?e.existing:e.incoming,t=i.sourceStepId;return o.order=e.existing.order,o.files=I([...o.files,...i.files]),o.notes=I([...o.notes,...i.notes.filter(a=>!a.startsWith("Source Doctor capability:")&&!a.startsWith("Doctor finding status:")),...t?[`Also satisfies Doctor capability: ${t}`]:[]]),o}function te(e,r,o){return o?r:h.relative(e,r).split(h.sep).join("/")}function D(e){return e.includeAbsolutePaths?e.projectPath:b$1({workspacePath:e.workspacePath,projectPath:e.projectPath,projectName:e.projectName}).contractRelativePath}function z(e){let r=h.isAbsolute(e.filePath)?h.resolve(e.filePath):h.resolve(e.projectPath,e.filePath);if(e.includeAbsolutePaths)return r;let o=h.relative(e.projectPath,r);return !o||o===".."||o.startsWith(`..${h.sep}`)||h.isAbsolute(o)?void 0:`${D(e)}/${o.split(h.sep).join("/")}`}function re(e){let r=e?.trim()||"npx workspai bootstrap";if(!/(?:^|\s)--ci(?:\s|$)/.test(r)&&/(?:^|\s)--json(?:\s|$)/.test(r))return r.replace(/(?:^|\s)--json(?:\s|$)/,i=>{let t=i.startsWith(" ")?" ":"",a=i.endsWith(" ")?" ":"";return `${t}--ci --json${a}`}).trim();let o=/(?:^|\s)--ci(?:\s|$)/.test(r)?r:`${r} --ci`;return /(?:^|\s)--json(?:\s|$)/.test(o)?o:`${o} --json`}function q(e,r){return h.basename(e).toLowerCase().replace(/\.cmd$/,"")==="npx"&&r[0]==="workspai"&&!r.includes("--no-install")?["--no-install",...r]:r}function oe(e){return `${JSON.stringify({schemaVersion:h$1.compatibilityMatrix.schemaVersion,generatedAt:e,source:"workspai workspace remediation-plan",runtimes:{},notes:["Minimal enterprise baseline. Add runtime and toolchain entries as governance matures."]},null,2)}
2
2
  `}function ie(e){return `${JSON.stringify({schema_version:"1.0",enabled:false,strategy:"on-demand",artifacts:[],created_at:e,note:"Minimal enterprise baseline. Set enabled: true and add artifact entries to activate mirroring."},null,2)}
3
3
  `}function ae(e){let r=e.payload,o=w(r.blockers),i=w(r.blockingReasons),t=w(r.failures),a=w(r.reasons),d=w(r.policyViolations),s=g(r.summary),f=w(s?.blockers);if(e.artifactKind==="analyze"){let c=(Array.isArray(r.findings)?r.findings:[]).map(y=>g(y)).filter(y=>!!y).map(y=>String(y.message??y.title??y.id??"").trim()).filter(Boolean);return I([...o,...c,...i])}if(e.artifactKind==="workspace-run"){let b=g(r.stages),c=Object.entries(b??{}).flatMap(([y,m])=>{let n=g(m);return (Array.isArray(n?.projects)?n.projects:[]).map(p=>g(p)).filter(p=>!!p).filter(p=>p.status==="failed"||p.ok===false).map(p=>`${y}: ${String(p.project??p.name??"project")} failed`)});return I([...o,...c,...i])}return I([...o,...i,...t,...a,...d,...f])}function j(e){let r=e.findingId?.trim()||e.sourceStepId?.trim()||e.id,o=e.findingStatus??"blocking",i=e.causalKey?.trim()||[e.cardId,e.projectName??e.scope??"workspace",r].map(t=>String(t).trim().toLowerCase()).join(":");return {id:e.id,artifactKind:e.artifactKind,cardId:e.cardId,title:e.title,order:e.order,phase:e.phase,scope:e.scope??"workspace",...e.projectName?{projectName:e.projectName}:{},...e.projectPath?{projectPath:e.projectPath}:{},...e.sourceStepId?{sourceStepId:e.sourceStepId}:{},findingId:r,findingStatus:o,causalKey:i,...e.dependsOn?{dependsOn:e.dependsOn}:{},...e.strategy?{strategy:structuredClone(e.strategy)}:{},...e.transaction?{transaction:structuredClone(e.transaction)}:{},status:e.status??"ready",mode:e.mode,risk:e.risk,requiresApproval:true,blocker:e.blocker,summary:e.summary,...e.command?{command:e.command}:{},...e.invocation?{invocation:structuredClone(e.invocation)}:{},verifyCommand:e.verifyCommand,cwd:e.cwd??"workspace",files:e.files??[],...e.operation?{operation:e.operation}:{},rollback:e.rollback??(e.operation?{available:true,strategy:"idempotent"}:{available:false,strategy:"none"}),notes:e.notes??[]}}function ne(e){return (Array.isArray(e.report.payload.steps)?e.report.payload.steps:[]).flatMap((o,i)=>{let t=g(o),a=typeof t?.id=="string"?t.id.trim():"",d=typeof t?.projectName=="string"?t.projectName.trim():"",s=typeof t?.projectPath=="string"?t.projectPath.trim():"",f=typeof t?.originalCommand=="string"?t.originalCommand.trim():"";if(!t||!a||!d||!s)return [];let b=g(t.studioStatus),c=b?.state==="ready"||b?.state==="review-required"||b?.state==="blocked"||b?.state==="guidance-only"?b.state:"guidance-only",y=t.risk==="safe"||t.risk==="guarded"||t.risk==="invasive"?t.risk:"guarded",m=g(t.preview),n=D({workspacePath:e.workspacePath,projectPath:s,projectName:d,includeAbsolutePaths:e.includeAbsolutePaths}),u=J({capability:{...t,command:f},absoluteProjectPath:s,includeAbsolutePaths:e.includeAbsolutePaths}),p=U({capability:t,absoluteProjectPath:s,includeAbsolutePaths:e.includeAbsolutePaths}),P=M({operation:t.operation,absoluteProjectPath:s}),k=t.findingStatus==="blocking"||t.findingStatus==="advisory"||t.findingStatus==="informational"?t.findingStatus:"unknown",l=typeof t.diagnosisFindingId=="string"&&t.diagnosisFindingId.trim()?t.diagnosisFindingId.trim():typeof t.issueId=="string"&&t.issueId.trim()?t.issueId.trim():a,A=typeof t.causalKey=="string"&&t.causalKey.trim()?t.causalKey.trim():void 0,S=t.executableInCurrentEnvironment===true&&!!u,$=H({strategy:t.strategy,includeAbsolutePaths:e.includeAbsolutePaths}),R=g(t.transaction),x=R?.schemaVersion==="workspai.doctor-dependency-repair-transaction.v1"?structuredClone(R):void 0;return x&&(x.projectPath=n),[j({id:`doctor.${a}`,artifactKind:e.report.artifactKind,cardId:e.report.cardId,title:typeof m?.title=="string"&&m.title.trim()?m.title.trim():`Repair ${d}`,order:e.startOrder+i,phase:typeof t.phase=="string"?t.phase:"doctor-remediation",blocker:typeof m?.summary=="string"&&m.summary.trim()?m.summary.trim():`Doctor remediation is pending for ${d}.`,summary:typeof m?.summary=="string"&&m.summary.trim()?m.summary.trim():`Execute the CLI-authored Doctor step for ${d}.`,mode:S?"run-command":"manual-guidance",risk:y,status:c,...S&&u?{command:u}:{},...S&&p?{invocation:p}:{},...P?{operation:P}:{},verifyCommand:typeof t.verifyCommand=="string"&&t.verifyCommand.trim()?t.verifyCommand.trim():"npx workspai doctor project --json",files:w(t.files).map(v=>z({workspacePath:e.workspacePath,projectPath:s,projectName:d,filePath:v,includeAbsolutePaths:e.includeAbsolutePaths})).filter(v=>!!v),notes:[`Source Doctor step: ${a}`,`Doctor finding id: ${l}`,`Doctor finding status: ${k}`,...typeof b?.reason=="string"?[b.reason]:[]],scope:"project",projectName:d,projectPath:n,sourceStepId:a,findingId:l,findingStatus:k,causalKey:A,dependsOn:w(t.dependsOn).map(v=>`doctor.${v}`),strategy:$,transaction:x,cwd:"project",...g(t.rollback)?.available===true?{rollback:{available:true,strategy:"manual"}}:{}})]})}function J(e){let r=typeof e.capability.command=="string"?e.capability.command.trim():"";if(e.includeAbsolutePaths&&r)return r;let o=M({operation:e.capability.operation,absoluteProjectPath:e.absoluteProjectPath});if(o)return b$2(o);let i=g(e.capability.invocation),t=typeof i?.executable=="string"?i.executable.trim():"",a=q(t,w(i?.args));if(t)return [t,...a].map(s=>/^[a-zA-Z0-9_./:@=+-]+$/.test(s)?s:JSON.stringify(s)).join(" ");if(!r)return;let d=e.absoluteProjectPath.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return r.replace(new RegExp(`^cd\\s+["']?${d}["']?\\s*&&\\s*`,"i"),"").replaceAll(e.absoluteProjectPath,".")}function U(e){let r=g(e.capability.invocation),o=typeof r?.executable=="string"?r.executable.trim():"",i=w(r?.args);if(!(!o||i.length!==(Array.isArray(r?.args)?r.args.length:0)))return {cwd:e.includeAbsolutePaths?e.absoluteProjectPath:".",executable:o,args:q(o,i)}}function M(e){let r=g(e.operation);if(!r||typeof r.type!="string")return;let o=structuredClone(r);for(let i of ["path","sourcePath"]){let t=o[i];if(typeof t!="string")continue;let a=h.isAbsolute(t)?h.relative(e.absoluteProjectPath,t):t;if(!a||a===".."||a.startsWith(`..${h.sep}`)||h.isAbsolute(a))return;o[i]=a.split(h.sep).join("/");}return o}function H(e){if(!Array.isArray(e.strategy))return;let r=structuredClone(e.strategy);if(!e.includeAbsolutePaths)for(let o of r)o.invocation&&(o.invocation.cwd=".");return r}function se(e){let r=Array.isArray(e.report.payload.projects)?e.report.payload.projects:e.report.payload.project?[e.report.payload.project]:[],o=new Set,i=[];for(let t of r){let a=g(t);if(!a)continue;let d=typeof a.name=="string"?a.name.trim():"",s=typeof a.path=="string"?a.path.trim():"";if(!d||!s)continue;let f=Array.isArray(a.repairCapabilities)?a.repairCapabilities:Array.isArray(a.probes)?a.probes.map(m=>g(m)?.repairCapability).filter(m=>m!==void 0):[],b=new Map,c=new Map,y=g(a.diagnosis);for(let m of Array.isArray(y?.findings)?y.findings:[]){let n=g(m),u=g(n?.repair),p=typeof u?.capabilityId=="string"?u.capabilityId.trim():"",P=typeof n?.id=="string"?n.id.trim():"",k=typeof n?.causalKey=="string"?n.causalKey.trim():"",l=n?.status==="blocking"||n?.status==="advisory"||n?.status==="informational"||n?.status==="unknown"?n.status:"unknown";p&&P&&k&&c.set(p,{findingId:P,causalKey:k,findingStatus:l});}for(let m of Array.isArray(a.probes)?a.probes:[]){let n=g(m),u=g(n?.repairCapability),p=typeof u?.id=="string"?u.id.trim():"";p&&b.set(p,n?.status==="fail"?"blocking":"advisory");}for(let m of f){let n=g(m),u=typeof n?.id=="string"?n.id.trim():"";if(!n||!u)continue;let p=`${d}:${u}`;if(o.has(p))continue;o.add(p);let P=n.risk==="safe"||n.risk==="guarded"||n.risk==="invasive"?n.risk:"guarded",k=J({capability:n,absoluteProjectPath:s,includeAbsolutePaths:e.includeAbsolutePaths}),l=U({capability:n,absoluteProjectPath:s,includeAbsolutePaths:e.includeAbsolutePaths}),A=M({operation:n.operation,absoluteProjectPath:s}),S=n.status==="available"&&!!k,$=g(n.transaction),R=$?.schemaVersion==="workspai.doctor-dependency-repair-transaction.v1"?structuredClone($):void 0,x=c.get(u),v=x?.findingStatus??b.get(u)??(R?"blocking":"advisory");R&&(R.projectPath=D({workspacePath:e.workspacePath,projectPath:s,projectName:d,includeAbsolutePaths:e.includeAbsolutePaths}));let Z=H({strategy:n.strategy,includeAbsolutePaths:e.includeAbsolutePaths}),G=w(n.files).map(C=>z({workspacePath:e.workspacePath,projectPath:s,projectName:d,filePath:C,includeAbsolutePaths:e.includeAbsolutePaths})).filter(C=>!!C),E=j({id:`doctor.${d}.${u}`,artifactKind:e.report.artifactKind,cardId:e.report.cardId,title:typeof n.title=="string"&&n.title.trim()?n.title.trim():`Repair ${d}`,order:e.startOrder+i.length,phase:R?"dependency-remediation":"doctor-remediation",blocker:typeof n.reason=="string"&&n.reason.trim()?n.reason.trim():`Doctor remediation is pending for ${d}.`,summary:typeof n.reason=="string"&&n.reason.trim()?n.reason.trim():`Execute the Doctor-authored repair capability for ${d}.`,mode:S?n.canEditFiles===true?"edit-file":"run-command":"manual-guidance",risk:P,status:S?"ready":n.status==="manual"?"guidance-only":"blocked",...k?{command:k}:{},...l?{invocation:l}:{},verifyCommand:typeof n.verifyCommand=="string"&&n.verifyCommand.trim()?n.verifyCommand.trim():"npx workspai doctor project --json",files:G,notes:[`Source Doctor capability: ${u}`,`Doctor finding status: ${v}`,...w(n.limitations)],scope:"project",projectName:d,projectPath:D({workspacePath:e.workspacePath,projectPath:s,projectName:d,includeAbsolutePaths:e.includeAbsolutePaths}),sourceStepId:u,findingId:x?.findingId??(typeof n.issueId=="string"&&n.issueId.trim()?n.issueId.trim():u),findingStatus:v,causalKey:x?.causalKey,strategy:Z,transaction:R,cwd:"project",...A?{operation:A,rollback:{available:true,strategy:"manual"}}:{}}),O=k?i.findIndex(C=>C.projectName===d&&C.command===k&&C.cwd==="project"):-1;if(O>=0){i[O]=ee({existing:i[O],incoming:E});continue}i.push(E);}}return i}function ce(e){let r=[],o=re("npx workspai bootstrap --json");for(let i$1 of e.blockers)i$1.includes("profile.enterprise.ci")&&r.push(j({id:"bootstrap.enterprise-ci",artifactKind:"bootstrap-compliance",cardId:"bootstrap",title:"Run bootstrap in deterministic CI mode",order:10,phase:"bootstrap-preflight",blocker:i$1,summary:"Enterprise bootstrap compliance requires --ci for deterministic execution.",mode:"run-command",risk:"safe",command:o,verifyCommand:o})),i$1.includes("profile.enterprise.compatibility-matrix")&&r.push(j({id:"bootstrap.compatibility-matrix",artifactKind:"bootstrap-compliance",cardId:"bootstrap",title:"Create enterprise compatibility matrix baseline",order:20,phase:"bootstrap-config",blocker:i$1,summary:"Create the missing compatibility matrix baseline without overwriting user data.",mode:"edit-file",risk:"safe",verifyCommand:o,files:[i.compatibilityMatrix],operation:{type:"file-create",path:i.compatibilityMatrix,content:oe(e.generatedAt),overwrite:false}})),i$1.includes("profile.enterprise.mirror-config")&&r.push(j({id:"bootstrap.mirror-config",artifactKind:"bootstrap-compliance",cardId:"bootstrap",title:"Create enterprise mirror config baseline",order:30,phase:"bootstrap-config",blocker:i$1,summary:"Create the missing mirror configuration baseline without enabling mirroring.",mode:"edit-file",risk:"safe",verifyCommand:o,files:[".workspai/mirror-config.json"],operation:{type:"file-create",path:".workspai/mirror-config.json",content:ie(e.generatedAt),overwrite:false}}));return r}function de(e){let r=Array.isArray(e.report.payload.steps)?e.report.payload.steps:[],o=[],i=new Map;for(let t of r){let a=g(t),d=g(a?.command),s=typeof a?.id=="string"?a.id.trim():"",f=typeof a?.project=="string"?a.project.trim():"",b=typeof a?.status=="string"?a.status:"",c=typeof d?.display=="string"?d.display.trim():"",y=a?.required===true;if(!s.startsWith("project.")||!f||!y||b!=="fail"&&b!=="missing"||!/^npx\s+workspai\s+workspace\s+run\s+/i.test(c))continue;let m=s.split(".").at(-1)??"stage",n=`workspaceVerify.${s}`,u=i.get(f),p=/(?:^|\s)--no-gates(?:\s|$)/.test(c)?c:`${c} --no-gates`;o.push(j({id:n,artifactKind:e.report.artifactKind,cardId:e.report.cardId,title:typeof a.label=="string"&&a.label.trim()?a.label.trim():`Run ${m} for ${f}`,order:e.startOrder+o.length,phase:"fleet-run",blocker:typeof a.message=="string"&&a.message.trim()?a.message.trim():`${m} evidence is not current for ${f}.`,summary:`Produce fresh ${m} evidence for ${f} without re-entering the blocked aggregate gates.`,mode:"run-command",risk:m==="start"?"guarded":"safe",status:"ready",command:p,verifyCommand:e.ciMode?"npx workspai workspace verify --strict --json":"npx workspai workspace verify --json",scope:"project",projectName:f,projectPath:f,sourceStepId:s,...u?{dependsOn:[u]}:{},cwd:"workspace",notes:[`Source Workspace Verify step: ${s}`,"Aggregate verification must run only after this project evidence producer completes."]})),i.set(f,n);}return o}function le(e){let r=I(e.blockers.flatMap(i=>{let t=i.match(/(?:project runtimes?|workspace)\s*\(([^)]+)\)\s+(?:is|are) not pinned/i);return t?.[1]?t[1].split(",").map(a=>a.trim().toLowerCase()).filter(a=>/^(python|node|go|java|dotnet|rust|php)$/.test(a)):[]})),o=[];for(let i of r){let t=`readiness.toolchain.${i}.setup`,a=e.blockers.find(d=>d.toLowerCase().includes(`(${i})`))??`The ${i} runtime is not pinned in the canonical workspace toolchain.`;o.push(j({id:t,artifactKind:e.report.artifactKind,cardId:e.report.cardId,title:`Pin ${i} in the workspace toolchain`,order:e.startOrder+o.length,phase:"toolchain-reconciliation",blocker:a,summary:`Detect and persist the current ${i} runtime in the canonical workspace toolchain lock.`,mode:"run-command",risk:"safe",command:`npx workspai setup ${i} --json`,verifyCommand:e.ciMode?"npx workspai readiness --strict --json":"npx workspai readiness --json",notes:["Run from the workspace root so the canonical toolchain.lock is updated."]})),o.push(j({id:`readiness.toolchain.${i}.bootstrap`,artifactKind:e.report.artifactKind,cardId:e.report.cardId,title:`Reconcile the ${i} workspace foundation`,order:e.startOrder+o.length,phase:"toolchain-reconciliation",blocker:`The ${i} runtime pin must be reconciled with the workspace foundation.`,summary:"Refresh the workspace foundation after the runtime pin is written.",mode:"run-command",risk:"guarded",command:"npx workspai bootstrap --ci --json",verifyCommand:e.ciMode?"npx workspai readiness --strict --json":"npx workspai readiness --json",dependsOn:[t]}));}return o}function pe(e){if(e.report.artifactKind==="readiness"&&/dependenc(?:y|ies).*vulnerabil|vulnerabil.*dependenc(?:y|ies)|security audit/i.test(e.blocker))return j({id:`${e.report.cardId}.doctor-owner.${e.order}`,artifactKind:e.report.artifactKind,cardId:e.report.cardId,title:"Resolve dependency vulnerability through Doctor",order:e.order,phase:"dependency-remediation",blocker:e.blocker,summary:"Release Readiness is the aggregate gate; use the project-scoped Doctor remediation capability that owns this dependency failure.",mode:"verify-before-fix",risk:"guarded",status:"review-required",command:"npx workspai doctor workspace --plan --json",verifyCommand:e.ciMode?"npx workspai readiness --strict --json":"npx workspai readiness --json",notes:["Read doctor-remediation-plan-last-run.json and execute the matching surface-security-hygiene capability before rerunning Readiness.","Do not treat a Readiness refresh as remediation for a source dependency vulnerability."]});let o={analyze:{title:"Refresh analyze evidence",phase:"analysis",command:"npx workspai analyze --strict --json",verify:"npx workspai analyze --strict --json"},readiness:{title:"Refresh release readiness",phase:"release-readiness",command:e.ciMode?"npx workspai readiness --strict --json":"npx workspai readiness --json",verify:e.ciMode?"npx workspai readiness --strict --json":"npx workspai readiness --json"},pipeline:{title:"Rerun governance pipeline",phase:"governance-pipeline",command:"npx workspai pipeline --json --strict",verify:"npx workspai pipeline --json --strict"},"workspace-run":{title:"Rerun failed workspace stage",phase:"fleet-run",command:e.ciMode?"npx workspai workspace run test --strict --json":"npx workspai workspace run test --json",verify:e.ciMode?"npx workspai workspace run test --strict --json":"npx workspai workspace run test --json"},"workspace-verify":{title:"Refresh workspace verify gate",phase:"verification",command:e.ciMode?"npx workspai workspace verify --strict --json":"npx workspai workspace verify --json",verify:e.ciMode?"npx workspai workspace verify --strict --json":"npx workspai workspace verify --json"},"doctor-workspace":{title:"Use Doctor remediation plan",phase:"doctor-remediation",command:"npx workspai doctor workspace --plan --json",verify:"npx workspai doctor workspace --json"}}[e.report.artifactKind]??{title:"Refresh artifact evidence",phase:"evidence-refresh",command:"npx workspai pipeline --json --strict",verify:"npx workspai pipeline --json --strict"};return j({id:`${e.report.cardId}.refresh.${e.order}`,artifactKind:e.report.artifactKind,cardId:e.report.cardId,title:o.title,order:e.order,phase:o.phase,blocker:e.blocker,summary:"No deterministic file operation is available for this artifact yet; refresh the evidence and continue with the card-specific plan.",mode:e.report.artifactKind==="doctor-workspace"?"verify-before-fix":"run-command",risk:"guarded",status:e.report.artifactKind==="doctor-workspace"?"review-required":"ready",command:o.command,verifyCommand:o.verify,notes:e.report.artifactKind==="doctor-workspace"?["Read doctor-remediation-plan-last-run.json for ordered file-level steps."]:[]})}async function fe(e){let r=[a(e,".workspai/reports"),b(e,".workspai/reports")],o=[],i=new Set;for(let t of Y)for(let a of t.fileNames){let d=(await Promise.all(r.map(s=>h.join(s,a)))).find(s=>existsSync(s));if(!(!d||i.has(`${t.artifactKind}:${a}`))){i.add(`${t.artifactKind}:${a}`);try{let s=await X.readJSON(d),f=g(s);if(!f)continue;o.push({artifactKind:t.artifactKind,cardId:t.cardId,fileName:a,absolutePath:d,payload:f});break}catch{o.push({artifactKind:t.artifactKind,cardId:t.cardId,fileName:a,absolutePath:d,payload:{blockers:[`${t.artifactKind}: report exists but could not be parsed.`]}});break}}}return o}async function Pe(e){let r=h.resolve(e.workspacePath),o=e.includeAbsolutePaths===true,i=e.ciMode===true,t=new Date().toISOString(),a$2=a(r,".workspai/reports"),d=await fe(r),s=[],f=1;for(let c of d){if(c.artifactKind==="doctor-workspace"){let l=Array.isArray(c.payload.steps)?ne({report:c,workspacePath:r,includeAbsolutePaths:o,startOrder:f}):se({report:c,workspacePath:r,includeAbsolutePaths:o,startOrder:f});s.push(...l),f+=l.length;continue}let y=ae(c);if(y.length===0)continue;if(c.artifactKind==="bootstrap-compliance"){s.push(...ce({blockers:y,generatedAt:t})),f=s.length+1;continue}if(c.artifactKind==="workspace-verify"){let l=de({report:c,startOrder:f,ciMode:i});if(l.length>0){s.push(...l),f+=l.length;continue}}if(c.artifactKind==="readiness"){let l=le({report:c,blockers:y,startOrder:f,ciMode:i});if(l.length>0){s.push(...l),f+=l.length;continue}}let m=s.some(l=>l.transaction?.kind==="dependency-security"),n=c.artifactKind==="readiness"&&y.some(l=>/dependenc(?:y|ies).*vulnerabil|vulnerabil.*dependenc(?:y|ies)|security audit/i.test(l));if(m&&n)continue;let u=y[0],p=pe({report:c,blocker:u,order:f,ciMode:i}),k={readiness:new Set(["bootstrap","doctor"]),pipeline:new Set(["bootstrap","doctor","analyze","readiness"]),workspaceVerify:new Set(["bootstrap","doctor","readiness","workspaceRun"])}[c.cardId];if(c.cardId==="pipeline"){let l=["doctor","analyze","readiness"].find(A=>u.toLowerCase().includes(A));l&&(k=new Set([l]));}if(k){let l=s.filter(A=>k.has(A.cardId)&&A.risk!=="invasive"&&A.status!=="blocked"&&A.status!=="guidance-only").map(A=>A.id);l.length>0&&(p.dependsOn=I([...p.dependsOn??[],...l]),p.notes.push("This aggregate gate must run after its contract-owned upstream remediation actions."));}y.length>1&&p.notes.push(...y.slice(1,8).map(l=>`Related blocker: ${l}`)),s.push(p),f+=1;}let b={safe:s.filter(c=>c.risk==="safe").length,guarded:s.filter(c=>c.risk==="guarded").length,invasive:s.filter(c=>c.risk==="invasive").length};return {schemaVersion:a$1,generatedAt:t,workspace:{name:h.basename(r),...o?{path:r}:{}},source:{command:"workspace remediation-plan",reportsDir:te(r,a$2,o),includeAbsolutePaths:o,ciMode:i},summary:{artifactsScanned:d.length,cardsCovered:I(s.map(c=>c.cardId)).length,totalActions:s.length,executableActions:s.filter(c=>c.status==="ready").length,risk:b},actions:s}}async function Re(e$1,r){return e(r,i.artifactRemediationPlan,e$1)}export{Pe as a,Re as b};
@@ -0,0 +1 @@
1
+ import p from'path';import m from'fs-extra';var y=new Set([".git",".workspai",".rapidkit",".venv","node_modules","target","dist","build","coverage","vendor"]),x=new Set(["test","tests","__tests__","spec","specs"]);function f(n){let t=n.toLowerCase();return t.endsWith(".rs")?"rust":t.endsWith(".go")?"go":t.endsWith(".py")?"python":/\.(?:test|spec)\.[cm]?[jt]sx?$/.test(t)?"node":t.endsWith(".java")?"java":t.endsWith(".kt")||t.endsWith(".kts")?"kotlin":t.endsWith(".exs")?"elixir":t.endsWith(".php")?"php":t.endsWith(".rb")?"ruby":t.endsWith(".cs")?"dotnet":t.endsWith(".c")?"c":/\.(?:cc|cpp|cxx)$/.test(t)?"cpp":null}function g(n,t){return t&&f(n)?true:/(?:^test[_-].+|[_-]test|\.test|\.spec|tests?)\.(?:rs|go|py|[cm]?[jt]sx?|java|kts?|exs|php|rb|cs|c|cc|cpp|cxx)$/i.test(n)}async function w(n,t={}){let h=t.maxDepth??6,u=t.maxEntries??5e3,c=new Set,r=false,a=0;try{let s=(await m.readJson(p.join(n,"package.json")))?.scripts?.test;typeof s=="string"&&s.trim()&&(r=true,c.add("node"));}catch{}let d=[{dir:n,depth:0,insideTestDirectory:false}];for(;d.length>0&&a<u;){let i=d.shift();if(!i)break;let s;try{s=await m.readdir(i.dir,{withFileTypes:true});}catch{continue}for(let e of s){if(a+=1,a>u)break;if(y.has(e.name))continue;let l=p.join(i.dir,e.name);if(e.isDirectory()){let o=i.insideTestDirectory||x.has(e.name.toLowerCase());o&&(r=true),i.depth<h&&!e.name.startsWith(".")&&d.push({dir:l,depth:i.depth+1,insideTestDirectory:o});continue}if(e.isFile()){if(g(e.name,i.insideTestDirectory)){r=true;let o=f(e.name);o&&c.add(o);}/^(?:pytest\.ini|tox\.ini|noxfile\.py|phpunit\.xml(?:\.dist)?|\.rspec)$/i.test(e.name)&&(r=true),/^(?:vitest|jest|playwright|cypress)\.config\.[cm]?[jt]s$/i.test(e.name)&&(r=true,c.add("node"));}}}return {detected:r,runtimeFamilies:[...c].sort()}}export{w as a};
@@ -0,0 +1 @@
1
+ import {a as a$1}from'./chunk-A5FBGRJA.js';import {g,p}from'./chunk-7FF5EOIO.js';import {d,e}from'./chunk-GAYK3WGV.js';import {i,h}from'./chunk-6UNATTB7.js';import {s,q}from'./chunk-RGNCL5OB.js';import {t}from'./chunk-VQZ5PI5J.js';import a from'path';import {existsSync}from'fs';import m from'fs-extra';var f=i.workspaceRegistry,w=h.workspaceRegistry.schemaVersion;function E(r){return {slug:r.slug,relativePath:r.relativePath,framework:r.framework,kit:r.kit,source:r.source}}async function b(r){let e=t(r,"workspace.json").find(t=>existsSync(t));if(!e)return {exists:false,legacyProjectCount:0};try{let t=await m.readJson(e),c=Array.isArray(t.projects)?t.projects.length:0,o=typeof t.workspace_name=="string"&&t.workspace_name.trim()||typeof t.name=="string"&&t.name.trim()||a.basename(r);return {exists:true,manifestPath:e,workspaceName:o,profile:typeof t.profile=="string"?t.profile:void 0,legacyProjectCount:c}}catch{return {exists:true,manifestPath:e,legacyProjectCount:0,workspaceName:a.basename(r)}}}async function _(r){let e=a$1(r);for(let t of s())if(await m.pathExists(t))try{let o=((await m.readJson(t)).workspaces||[]).find(s=>a$1(s.path)===e);if(o)return {exists:true,projectCount:Array.isArray(o.projects)?o.projects.length:0,registryPath:t}}catch{continue}return {exists:false,projectCount:0,registryPath:a.join(q(),"workspaces.json")}}async function T(r,e){let t=a.resolve(r),c=await d(t,g),o=await b(t),s=await _(t),i=e?.contract!==void 0||!!c,n=[];if(e?.contract)n=e.contract.projects||[];else if(i)try{let{contract:A}=await p({workspacePath:t});n=A.projects||[];}catch{n=[];}let d$1={contract:{exists:i,projectCount:n.length,path:g},globalRegistry:{exists:s.exists,projectCount:s.projectCount,path:s.registryPath},legacyWorkspaceJson:{exists:o.exists,projectCount:o.legacyProjectCount,path:o.manifestPath?a.relative(t,o.manifestPath):void 0}},p$1="none",u=[],y=0;return i?(p$1="workspace.contract.json",u=n.map(E),y=u.length):s.projectCount>0?(p$1="global-registry",y=s.projectCount):o.legacyProjectCount>0&&(p$1="legacy-workspace.json",y=o.legacyProjectCount),{contractExists:i,summary:{schemaVersion:w,kind:"rapidkit.workspace.registry",workspacePath:t,workspaceName:o.workspaceName||a.basename(t),profile:o.profile,projectCount:y,authority:p$1,contractPath:g,projects:u,sources:d$1}}}async function U(r){let e=await d(r,f);if(!e)return null;try{let t=await m.readJson(e);return t?.schemaVersion!==w?null:t}catch{return null}}async function D(r,e$1){let t=await M(r,e$1);return await e(r,f,t),t}async function M(r,e){return {...(await T(r,{contract:e?.contract})).summary,generatedAt:(e?.now??new Date).toISOString(),registrySummaryPath:f}}function F(r,e=""){return r.projectCount>0?r.authority==="workspace.contract.json"?`${r.projectCount} project(s) registered in workspace contract${e}.`:r.authority==="global-registry"?`${r.projectCount} project(s) registered in global workspace registry${e}.`:`${r.projectCount} project(s) registered in legacy workspace manifest${e}.`:`Workspace state exists, but no projects are registered yet${e}.`}export{f as a,w as b,T as c,U as d,D as e,M as f,F as g};
@@ -1 +1 @@
1
- export{b as buildWorkspaceManifest,f as createProject,a as initializeStandaloneGitRepository,g as registerWorkspaceAtPath,d as resolvePythonFreeFallbackProfile,c as syncWorkspaceFoundationFiles,e as writeWorkspaceLauncher}from'./chunk-KANAJH65.js';
1
+ export{b as buildWorkspaceManifest,f as createProject,a as initializeStandaloneGitRepository,g as registerWorkspaceAtPath,d as resolvePythonFreeFallbackProfile,c as syncWorkspaceFoundationFiles,e as writeWorkspaceLauncher}from'./chunk-JRP6WP5C.js';