workspai 0.74.0 → 0.75.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 (138) hide show
  1. package/contracts/agent-framework-capabilities.v1.json +454 -0
  2. package/contracts/cli-runtime-command-inventory.v1.snapshot.json +166 -0
  3. package/contracts/create-planner-capabilities.v1.json +24 -0
  4. package/contracts/extension-cli-compatibility.v1.json +6 -0
  5. package/contracts/published-contract-catalog.v1.json +30 -0
  6. package/contracts/runtime-command-surface.v1.json +71 -1
  7. package/contracts/workspace-intelligence/agent-framework-adapter-manifest.v1.json +2127 -0
  8. package/contracts/workspace-intelligence/agent-framework-admission-candidate.v1.json +193 -0
  9. package/contracts/workspace-intelligence/agent-framework-change-plan.v1.json +280 -0
  10. package/contracts/workspace-intelligence/agent-framework-conformance-report.v1.json +269 -0
  11. package/contracts/workspace-intelligence/agent-framework-ownership-receipt.v1.json +147 -0
  12. package/contracts/workspace-intelligence/workspace-model.v1.json +4 -0
  13. package/contracts/workspace-intelligence-architecture.v1.json +28 -2
  14. package/dist/analyze-FRQVJ3VJ.js +1 -0
  15. package/dist/{artifact-remediation-plan-OVTQM7HN.js → artifact-remediation-plan-HD5K52UJ.js} +1 -1
  16. package/dist/autopilot-release-D3UES53H.js +1 -0
  17. package/dist/capabilities-command-VK3LQLP2.js +1 -0
  18. package/dist/{chunk-TBOIXIQA.js → chunk-36VNERGC.js} +1 -1
  19. package/dist/{chunk-ZNKZ2KXR.js → chunk-4DX4HBG3.js} +1 -1
  20. package/dist/chunk-4KEZQLBU.js +2 -0
  21. package/dist/{chunk-PKKSRXUS.js → chunk-6B7L4NZE.js} +1 -1
  22. package/dist/chunk-7NKM6EHE.js +7 -0
  23. package/dist/{chunk-FE5R6EUV.js → chunk-BLEIUQL6.js} +1 -1
  24. package/dist/{chunk-37SWTS2B.js → chunk-BR6QIYQS.js} +1 -1
  25. package/dist/chunk-CGNMS32W.js +97 -0
  26. package/dist/{chunk-4JJDDL3X.js → chunk-CK73SQFF.js} +1 -1
  27. package/dist/chunk-CMLLERGG.js +418 -0
  28. package/dist/{chunk-MGL6DBOR.js → chunk-COOVCORC.js} +1 -1
  29. package/dist/chunk-D4AMCZJU.js +7 -0
  30. package/dist/chunk-DFREJHG7.js +1 -0
  31. package/dist/{chunk-C43NXRRE.js → chunk-DJH2CH42.js} +1 -1
  32. package/dist/chunk-DT3LRKZQ.js +1 -0
  33. package/dist/{chunk-UHT2SW7O.js → chunk-FS3WLRQ4.js} +1 -1
  34. package/dist/chunk-G3ZC5W4U.js +1 -0
  35. package/dist/{chunk-KCIET26G.js → chunk-GE46XKD2.js} +1 -1
  36. package/dist/{chunk-DPC5DKH6.js → chunk-GIFAGOMK.js} +1 -1
  37. package/dist/{chunk-BTJPTJLT.js → chunk-HLSOZOL3.js} +3 -3
  38. package/dist/chunk-J4J3RYCL.js +4 -0
  39. package/dist/{chunk-JK6XEF7K.js → chunk-JKAAKE4Z.js} +1 -1
  40. package/dist/{chunk-G6ADWA2B.js → chunk-LMOTDLJF.js} +1 -1
  41. package/dist/{chunk-IQFXLJIM.js → chunk-MXI2DWLL.js} +1 -1
  42. package/dist/{chunk-5Y4YRYZI.js → chunk-NFWUAEVQ.js} +1 -1
  43. package/dist/chunk-NGU7RYXA.js +9 -0
  44. package/dist/{chunk-3WHE7V4M.js → chunk-NLRZFIC6.js} +1 -1
  45. package/dist/chunk-O2CFT2A3.js +1 -0
  46. package/dist/{chunk-EBQS5T7Q.js → chunk-OA2YJN22.js} +1 -1
  47. package/dist/chunk-OH6LV5JP.js +6 -0
  48. package/dist/{chunk-773WUMFU.js → chunk-P5RZO5BY.js} +13 -13
  49. package/dist/{chunk-XVTN5DDV.js → chunk-RU3UT7GJ.js} +1 -1
  50. package/dist/{chunk-TVSMNF5G.js → chunk-RX3U7JKF.js} +4 -4
  51. package/dist/chunk-SRCZX2KC.js +13 -0
  52. package/dist/chunk-TXVMHEJS.js +1 -0
  53. package/dist/chunk-V5WVGPOP.js +1 -0
  54. package/dist/{chunk-FY4X2VOE.js → chunk-VHMDWRDG.js} +2 -2
  55. package/dist/{chunk-H333GKL4.js → chunk-W7I65IXY.js} +1 -1
  56. package/dist/chunk-WOPZX56J.js +2 -0
  57. package/dist/chunk-YP436V7Q.js +2 -0
  58. package/dist/{chunk-HAZGSAKP.js → chunk-ZI54C2AO.js} +1 -1
  59. package/dist/{chunk-SAZXL36B.js → chunk-ZW4QV6SB.js} +1 -1
  60. package/dist/{create-EKA2QG5R.js → create-7UENFCJK.js} +1 -1
  61. package/dist/{demo-kit-RKTHTXHJ.js → demo-kit-ALW6OSQV.js} +1 -1
  62. package/dist/{doctor-BXSNADVR.js → doctor-KGADT4PI.js} +1 -1
  63. package/dist/{dotnet-webapi-clean-VJX6SGGP.js → dotnet-webapi-clean-6Z4EXEJY.js} +1 -1
  64. package/dist/{goal-lifecycle-XXWNMIAD.js → goal-lifecycle-HIQGDEEP.js} +1 -1
  65. package/dist/goal-pack-63PEP2ND.js +1 -0
  66. package/dist/{gofiber-standard-I6ASLOEE.js → gofiber-standard-TDJQIVQZ.js} +1 -1
  67. package/dist/{gogin-standard-U2LSRLIP.js → gogin-standard-UEF3IHSJ.js} +1 -1
  68. package/dist/index.d.ts +18 -0
  69. package/dist/index.js +267 -249
  70. package/dist/{pipeline-JLOC2SUT.js → pipeline-VFI35PR4.js} +1 -1
  71. package/dist/{project-agent-entry-ZNUHGCVC.js → project-agent-entry-Z3OY3S7T.js} +1 -1
  72. package/dist/{project-intelligence-lens-W72OUEDW.js → project-intelligence-lens-YWICXW6P.js} +1 -1
  73. package/dist/{project-test-coverage-5PXAHBYQ.js → project-test-coverage-3P5FH6E5.js} +1 -1
  74. package/dist/proof-carrying-change-BAP2C3KV.js +1 -0
  75. package/dist/{pythonRapidkitExec-44ORGQ4R.js → pythonRapidkitExec-UMFLDIYR.js} +1 -1
  76. package/dist/{rust-axum-JMV7UPO7.js → rust-axum-4TRVPFMB.js} +1 -1
  77. package/dist/{springboot-standard-OC2RS3KC.js → springboot-standard-COWL75GT.js} +1 -1
  78. package/dist/verified-goal-A6WOMNTU.js +1 -0
  79. package/dist/{workspace-XTIGVLGH.js → workspace-PAXTJCMH.js} +1 -1
  80. package/dist/{workspace-agent-sync-TN6QDNBR.js → workspace-agent-sync-MGCEF4ON.js} +1 -1
  81. package/dist/{workspace-archive-OSMU3CK6.js → workspace-archive-3AURTMYA.js} +1 -1
  82. package/dist/{workspace-context-Y3TNY2XZ.js → workspace-context-2G6QZ6D3.js} +1 -1
  83. package/dist/{workspace-contract-GRZY7WRD.js → workspace-contract-VWPOIYHJ.js} +1 -1
  84. package/dist/{workspace-explain-KUYHJFLY.js → workspace-explain-HLEBUK4K.js} +1 -1
  85. package/dist/{workspace-feedback-D6HJLKBQ.js → workspace-feedback-FF34CSJE.js} +1 -1
  86. package/dist/{workspace-foundation-ZBUJTR56.js → workspace-foundation-X7LOGTS3.js} +1 -1
  87. package/dist/{workspace-graph-stream-KC2XUAE4.js → workspace-graph-stream-XGSRDRLI.js} +1 -1
  88. package/dist/{workspace-history-WWPS4U7H.js → workspace-history-EQG5UBKW.js} +1 -1
  89. package/dist/{workspace-intelligence-26YT6KMN.js → workspace-intelligence-GFJKIWBX.js} +1 -1
  90. package/dist/{workspace-intelligence-benchmark-QFVTUBDO.js → workspace-intelligence-benchmark-R5MEGJQS.js} +1 -1
  91. package/dist/{workspace-intelligence-runner-HVYKHCTX.js → workspace-intelligence-runner-BU6JKNUD.js} +1 -1
  92. package/dist/{workspace-knowledge-graph-RL3I2FHY.js → workspace-knowledge-graph-OUTCLYS2.js} +1 -1
  93. package/dist/workspace-knowledge-graph-snapshot-XWJRUMAC.js +1 -0
  94. package/dist/workspace-mcp-serve-JYUKX3YS.js +3 -0
  95. package/dist/workspace-model-DUGPW5IB.js +1 -0
  96. package/dist/{workspace-onboarding-BY6RUBBH.js → workspace-onboarding-C4CKWTJ3.js} +1 -1
  97. package/dist/{workspace-readme-HA6XLDME.js → workspace-readme-4FCKAQME.js} +1 -1
  98. package/dist/{workspace-registry-summary-VKTJ7PHV.js → workspace-registry-summary-4KX4QD55.js} +1 -1
  99. package/dist/{workspace-repair-engine-RBM7NCGI.js → workspace-repair-engine-OVW4J3DI.js} +1 -1
  100. package/dist/workspace-run-NVQGRZYO.js +1 -0
  101. package/dist/{workspace-verify-NFJ7RKKT.js → workspace-verify-B7HEFYO6.js} +1 -1
  102. package/dist/workspace-watch-TQYAMLIV.js +1 -0
  103. package/docs/README.md +4 -1
  104. package/docs/agent-framework-adapters.md +279 -0
  105. package/docs/ci-workflows.md +1 -1
  106. package/docs/commands-reference.md +16 -0
  107. package/docs/contracts/COMMAND_OWNERSHIP_MATRIX.md +5 -0
  108. package/docs/creating-workspaces-and-projects.md +18 -4
  109. package/package.json +7 -1
  110. package/scripts/enterprise-package-smoke.mjs +98 -0
  111. package/dist/analyze-IA33T6MY.js +0 -1
  112. package/dist/autopilot-release-T327V7QK.js +0 -1
  113. package/dist/capabilities-command-NFGX42CH.js +0 -1
  114. package/dist/chunk-46QH3ZVI.js +0 -105
  115. package/dist/chunk-5EVBOUYW.js +0 -3
  116. package/dist/chunk-D6BL7ARI.js +0 -2
  117. package/dist/chunk-DLLHUG2Q.js +0 -9
  118. package/dist/chunk-DTLLIA2C.js +0 -1
  119. package/dist/chunk-FYR4FD7K.js +0 -1
  120. package/dist/chunk-H5DRKXXC.js +0 -2
  121. package/dist/chunk-IUOMBLRR.js +0 -2
  122. package/dist/chunk-K3FXRBER.js +0 -4
  123. package/dist/chunk-LEEOZRWR.js +0 -7
  124. package/dist/chunk-NCZJUPG5.js +0 -97
  125. package/dist/chunk-ND5YAC4T.js +0 -1
  126. package/dist/chunk-SVGUAVMG.js +0 -1
  127. package/dist/chunk-TGDXD4CD.js +0 -1
  128. package/dist/chunk-VLKX5U4H.js +0 -13
  129. package/dist/chunk-YYELANJO.js +0 -7
  130. package/dist/goal-pack-NTHYLISY.js +0 -1
  131. package/dist/proof-carrying-change-WLUPMUO7.js +0 -1
  132. package/dist/verified-goal-6O2JZOOR.js +0 -1
  133. package/dist/workspace-knowledge-graph-snapshot-JEJMRQZL.js +0 -1
  134. package/dist/workspace-mcp-serve-2FGRXJG4.js +0 -3
  135. package/dist/workspace-model-2ODVOWDQ.js +0 -1
  136. package/dist/workspace-run-JCA5WPCR.js +0 -1
  137. package/dist/workspace-watch-3DBBB6IP.js +0 -1
  138. /package/dist/{chunk-K33JJVQZ.js → chunk-VN2MKTQO.js} +0 -0
@@ -1,4 +1,4 @@
1
- import {a}from'./chunk-HCFOVANQ.js';import {m,h,i}from'./chunk-TGDXD4CD.js';import {B}from'./chunk-5EVBOUYW.js';import {a as a$1}from'./chunk-GR6442P7.js';import {d,c}from'./chunk-EWZZUQBR.js';import {p,t}from'./chunk-ODK4LCEL.js';import u from'path';import {createHash}from'crypto';import {createReadStream}from'fs';import {execFile}from'child_process';import {promisify}from'util';import _ from'fs-extra';import {parseAllDocuments}from'yaml';var Ts=p.knowledgeGraph;function Ms(e,t){if(e.source.kind!=="workspace-model")throw new Error(`Workspace knowledge graph is not bound to the canonical workspace model (source: ${e.source.kind}).`);if(e.source.artifact!==p.model)throw new Error(`Workspace knowledge graph source artifact is ${e.source.artifact}; expected ${p.model}.`);if(e.source.hashAlgorithm!=="sha256")throw new Error(`Workspace knowledge graph source hash algorithm is ${e.source.hashAlgorithm}; expected sha256.`);let s=d(t);if(e.source.hash!==s)throw new Error("Workspace knowledge graph is stale: its source hash does not match the canonical workspace model.");if(e.workspace.name!==t.workspace.name||(e.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.projectTopology))!==c(i(o)))throw new Error("Workspace knowledge graph project topology does not match the canonical workspace model.")}function Pt(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 Nt=5e5,Kt=2e6;function be(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 $t=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"]),jt=new Set(["AGENTS.md","CLAUDE.md","GEMINI.md","QWEN.md"]),It=new Set([".workspai-workspace"]),Gt=[/(?:^|\/)\.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\/agents\/workspai-[^/]+\.agent\.md$/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 Ne(e,t){let s=D(u.relative(e,t));return jt.has(u.posix.basename(s))||It.has(u.posix.basename(s))||Gt.some(o=>o.test(s))}var Dt=new Set(["test","tests","spec","specs","e2e","integration","integration-tests","integration_tests","__tests__","fixture","fixtures","__fixtures__","testdata"]),qt=new Set(["examples","samples","worked"]);function Ke(e,t){let s=u.relative(e,t).split(u.sep).map(i=>i.toLowerCase()),o=u.basename(t).toLowerCase();return s.some(i=>Dt.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 Ge(e,t){return u.relative(e,t).split(u.sep).map(s=>s.toLowerCase()).some(s=>qt.has(s))}function ee(e,t){return Ke(e,t)||Ge(e,t)}function ue(e,t){return u.relative(e,t).split(u.sep).some(s=>s.toLowerCase()==="generated")}var Be=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"]),Zt=new Set([...Be,"go.work","go.work.sum"]),Ht=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"]),it=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 J(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 Ut=new Set(["external","third_party","third-party","vendor","vendors","vendored"]),Jt=new Set(["app","apps","cli","cmd","core","extensions","internal","lib","packages","services","src"]);function rt(e,t){let o=D(u.relative(t,e)).split("/").filter(Boolean),i=o[0]?.toLowerCase()??"";return (o.some(l=>Ut.has(l.toLowerCase()))?1e3:0)+(Jt.has(i)?-100:0)+Math.min(o.length,20)}function Vt(e,t,s){if(e.length<=t)return [...e];let o=[...e].sort((c,r)=>rt(c,s)-rt(r,s)||c.localeCompare(r)),i=new Map;for(let c of o){let r=J(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 Yt(e,t){let s=D(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 Pe(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=>Zt.has(u.basename(d))).sort((d,a)=>D(u.relative(s,d)).split("/").length-D(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=`${Yt(d,s)}\0${J(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 Qt(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 Me(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 Xt=[{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"}],Et=[{pattern:/^\s*import(?:.+?from\s*)?["']([^"']+)["']/,detail:"import"},{pattern:/require\(["']([^"']+)["']\)/,detail:"require"}],Ct=[{pattern:/^\s*from\s+([A-Za-z0-9_.]+)\s+import\s+/,detail:"import"},{pattern:/^\s*import\s+([A-Za-z0-9_.]+)(?:\s|$)/,detail:"import"}],eo=[{pattern:/^\s*#\s*include\s*["<]([^">]+)[">]/,detail:"include"}],to=[{pattern:/^\s*use\s+([A-Za-z0-9_:*.-]+)/,detail:"use"}],oo=[{pattern:/^\s*import\s+(?:static\s+)?([A-Za-z0-9_.*]+)\s*;?/,detail:"import"}],so=[{pattern:/^\s*(?:global\s+)?using\s+([A-Za-z0-9_.]+)/,detail:"using"}],io=[{pattern:/^\s*import\s+(?:[A-Za-z0-9_.]+\s+)?["']([^"']+)["']/,detail:"import"}],Rt=[{pattern:/^\s*require(?:_relative)?\s+["']([^"']+)["']/,detail:"require"}],ro=[{pattern:/^\s*use\s+([A-Za-z0-9_\\]+)/,detail:"use"}],no=[{pattern:/^\s*(?:alias|import|require|use)\s+([A-Za-z0-9_.]+)/,detail:"import"}],ao=[{pattern:/^\s*import\s+["']([^"']+)["']/,detail:"import"}],co=[{pattern:/\brequire\s*\(?\s*["']([^"']+)["']/,detail:"require"}],lo=[{pattern:/^\s*(?:library|require)\s*\(\s*["']?([^"')\s]+)["']?/,detail:"import"}],po=[...Et,...Ct,{pattern:/^\s*(?:import|using|use)\s+([A-Za-z0-9_:.*\\/.-]+)/,detail:"import"},...Rt];function uo(e){let t=u.extname(e).toLowerCase();return [".cjs",".cts",".js",".jsx",".mjs",".mts",".ts",".tsx",".vue",".svelte"].includes(t)?Et:t===".py"?Ct:[".c",".cc",".cpp",".h",".hpp"].includes(t)?eo:t===".rs"?to:[".java",".kt",".kts",".scala"].includes(t)?oo:[".cs",".fs",".fsx",".vb"].includes(t)?so:t===".go"?io:t===".rb"?Rt:t===".php"?ro:[".ex",".exs"].includes(t)?no:t===".dart"?ao:t===".lua"?co:t===".r"?lo:po}function fo(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 go(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 mo(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(`
1
+ import {a}from'./chunk-HCFOVANQ.js';import {n,h,i}from'./chunk-O2CFT2A3.js';import {B}from'./chunk-OH6LV5JP.js';import {a as a$1}from'./chunk-GR6442P7.js';import {d,c}from'./chunk-EWZZUQBR.js';import {p,t}from'./chunk-ODK4LCEL.js';import u from'path';import {createHash}from'crypto';import {createReadStream}from'fs';import {execFile}from'child_process';import {promisify}from'util';import _ from'fs-extra';import {parseAllDocuments}from'yaml';var Ts=p.knowledgeGraph;function Ms(e,t){if(e.source.kind!=="workspace-model")throw new Error(`Workspace knowledge graph is not bound to the canonical workspace model (source: ${e.source.kind}).`);if(e.source.artifact!==p.model)throw new Error(`Workspace knowledge graph source artifact is ${e.source.artifact}; expected ${p.model}.`);if(e.source.hashAlgorithm!=="sha256")throw new Error(`Workspace knowledge graph source hash algorithm is ${e.source.hashAlgorithm}; expected sha256.`);let s=d(t);if(e.source.hash!==s)throw new Error("Workspace knowledge graph is stale: its source hash does not match the canonical workspace model.");if(e.workspace.name!==t.workspace.name||(e.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=n(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.projectTopology))!==c(i(o)))throw new Error("Workspace knowledge graph project topology does not match the canonical workspace model.")}function Pt(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 Nt=5e5,Kt=2e6;function be(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 $t=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"]),jt=new Set(["AGENTS.md","CLAUDE.md","GEMINI.md","QWEN.md"]),It=new Set([".workspai-workspace"]),Gt=[/(?:^|\/)\.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\/agents\/workspai-[^/]+\.agent\.md$/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 Ne(e,t){let s=D(u.relative(e,t));return jt.has(u.posix.basename(s))||It.has(u.posix.basename(s))||Gt.some(o=>o.test(s))}var Dt=new Set(["test","tests","spec","specs","e2e","integration","integration-tests","integration_tests","__tests__","fixture","fixtures","__fixtures__","testdata"]),qt=new Set(["examples","samples","worked"]);function Ke(e,t){let s=u.relative(e,t).split(u.sep).map(i=>i.toLowerCase()),o=u.basename(t).toLowerCase();return s.some(i=>Dt.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 Ge(e,t){return u.relative(e,t).split(u.sep).map(s=>s.toLowerCase()).some(s=>qt.has(s))}function ee(e,t){return Ke(e,t)||Ge(e,t)}function ue(e,t){return u.relative(e,t).split(u.sep).some(s=>s.toLowerCase()==="generated")}var Be=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"]),Zt=new Set([...Be,"go.work","go.work.sum"]),Ht=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"]),it=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 J(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 Ut=new Set(["external","third_party","third-party","vendor","vendors","vendored"]),Jt=new Set(["app","apps","cli","cmd","core","extensions","internal","lib","packages","services","src"]);function rt(e,t){let o=D(u.relative(t,e)).split("/").filter(Boolean),i=o[0]?.toLowerCase()??"";return (o.some(l=>Ut.has(l.toLowerCase()))?1e3:0)+(Jt.has(i)?-100:0)+Math.min(o.length,20)}function Vt(e,t,s){if(e.length<=t)return [...e];let o=[...e].sort((c,r)=>rt(c,s)-rt(r,s)||c.localeCompare(r)),i=new Map;for(let c of o){let r=J(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 Yt(e,t){let s=D(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 Pe(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=>Zt.has(u.basename(d))).sort((d,a)=>D(u.relative(s,d)).split("/").length-D(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=`${Yt(d,s)}\0${J(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 Qt(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 Me(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 Xt=[{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"}],Et=[{pattern:/^\s*import(?:.+?from\s*)?["']([^"']+)["']/,detail:"import"},{pattern:/require\(["']([^"']+)["']\)/,detail:"require"}],Ct=[{pattern:/^\s*from\s+([A-Za-z0-9_.]+)\s+import\s+/,detail:"import"},{pattern:/^\s*import\s+([A-Za-z0-9_.]+)(?:\s|$)/,detail:"import"}],eo=[{pattern:/^\s*#\s*include\s*["<]([^">]+)[">]/,detail:"include"}],to=[{pattern:/^\s*use\s+([A-Za-z0-9_:*.-]+)/,detail:"use"}],oo=[{pattern:/^\s*import\s+(?:static\s+)?([A-Za-z0-9_.*]+)\s*;?/,detail:"import"}],so=[{pattern:/^\s*(?:global\s+)?using\s+([A-Za-z0-9_.]+)/,detail:"using"}],io=[{pattern:/^\s*import\s+(?:[A-Za-z0-9_.]+\s+)?["']([^"']+)["']/,detail:"import"}],Rt=[{pattern:/^\s*require(?:_relative)?\s+["']([^"']+)["']/,detail:"require"}],ro=[{pattern:/^\s*use\s+([A-Za-z0-9_\\]+)/,detail:"use"}],no=[{pattern:/^\s*(?:alias|import|require|use)\s+([A-Za-z0-9_.]+)/,detail:"import"}],ao=[{pattern:/^\s*import\s+["']([^"']+)["']/,detail:"import"}],co=[{pattern:/\brequire\s*\(?\s*["']([^"']+)["']/,detail:"require"}],lo=[{pattern:/^\s*(?:library|require)\s*\(\s*["']?([^"')\s]+)["']?/,detail:"import"}],po=[...Et,...Ct,{pattern:/^\s*(?:import|using|use)\s+([A-Za-z0-9_:.*\\/.-]+)/,detail:"import"},...Rt];function uo(e){let t=u.extname(e).toLowerCase();return [".cjs",".cts",".js",".jsx",".mjs",".mts",".ts",".tsx",".vue",".svelte"].includes(t)?Et:t===".py"?Ct:[".c",".cc",".cpp",".h",".hpp"].includes(t)?eo:t===".rs"?to:[".java",".kt",".kts",".scala"].includes(t)?oo:[".cs",".fs",".fsx",".vb"].includes(t)?so:t===".go"?io:t===".rb"?Rt:t===".php"?ro:[".ex",".exs"].includes(t)?no:t===".dart"?ao:t===".lua"?co:t===".r"?lo:po}function fo(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 go(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 mo(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
2
  `)}function ho(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
3
  `)}function St(e,t){return ho(e,mo(e,t))}var ke=[{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"}],vo=[{pattern:/@Router\s+([^\s]+)\s+\[(?:get|post|put|delete|patch|options|head)\]/i,detail:"swagger route"},{pattern:/\b[A-Za-z_]\w*\.(?:GET|POST|PUT|DELETE|PATCH|OPTIONS|HEAD)\s*\(\s*["']([^"']+)["']/,detail:"go router route"}],yo=[{pattern:/\.route\s*\(\s*["']([^"']+)["']\s*,\s*(?:routing::)?(?:get|post|put|delete|patch|options|head)\s*\(/i,detail:"rust router route"}],bo=[{pattern:/\b[A-Za-z_]\w*\.Map(?:Get|Post|Put|Delete|Patch|Methods)\s*\(\s*["']([^"']+)["']/i,detail:"dotnet route"},{pattern:/\b[A-Za-z_]\w*\.MapHealthChecks\s*\(\s*["']([^"']+)["']/i,detail:"dotnet health route"}];function ko(e){let t=u.extname(e).toLowerCase();return t===".go"?[...ke,...vo]:t===".rs"?[...ke,...yo]:t===".cs"?[...ke,...bo]:ke}function wo(e,t){return t==="swagger route"?e.match(/\[(get|post|put|delete|patch|options|head)\]/i)?.[1]?.toUpperCase()??"HTTP":t==="rust router route"?e.match(/,\s*(?:routing::)?(get|post|put|delete|patch|options|head)\s*\(/i)?.[1]?.toUpperCase()??"HTTP":t==="dotnet health route"?"GET":t==="dotnet route"?e.match(/\.Map(Get|Post|Put|Delete|Patch|Methods)\s*\(/i)?.[1]?.toUpperCase()??"HTTP":e.match(/(?:@|\.|\[|^\s*)(get|post|put|delete|patch|options|head)/i)?.[1]?.toUpperCase()??"HTTP"}function $e(e){return createHash("sha256").update(e).digest("hex")}function C(e,t){return `wkg:${e}:${$e(`${e}\0${t}`).slice(0,20)}`}function D(e){return e.replace(/\\/g,"/")}function he(e){let t=D(e).replace(/^\.\//,"");return !t||t.startsWith("/")||/^[A-Za-z]:\//.test(t)||t.split("/").includes("..")?"unknown":t}function E(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 H(e){if(Array.isArray(e))return e.filter(s=>typeof s=="string").map(s=>s.trim()).filter(Boolean).sort();let t=E(e);return t?Object.keys(t).map(s=>s.trim()).filter(Boolean).sort():[]}function Po(e){if(Array.isArray(e))return e.map(s=>typeof s=="string"?s.split("=",1)[0]?.trim():"").filter(s=>!!s).sort();let t=E(e);return t?Object.keys(t).sort():[]}function $o(e){return Object.fromEntries(Object.entries(e).filter(t=>t[1]!==void 0).sort(([t],[s])=>t.localeCompare(s)))}async function jo(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 _.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()?!$t.has(a.name)&&!a$1(a.name)&&i.push(p):a.isFile()&&(Ne(e,p)||o.push(p)));}}return o.sort((r,d)=>r.localeCompare(d))}async function De(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 Io=promisify(execFile);async function Z(e,t){let s=await Io("git",t,{cwd:e,encoding:"buffer",maxBuffer:268435456,windowsHide:true});return Buffer.isBuffer(s.stdout)?s.stdout:Buffer.from(s.stdout)}function qe(){return [".",...[...$t].sort((e,t)=>e.localeCompare(t)).map(e=>`:(exclude,glob)**/${e}/**`),...[...jt].sort((e,t)=>e.localeCompare(t)).map(e=>`:(exclude,glob)**/${e}`),...[...It].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/agents/workspai-*.agent.md",":(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 Le(e){return e.toString("utf8").split("\0").filter(Boolean).map(t=>t.replace(/\\/gu,"/"))}async function Eo(e,t,s=[]){try{await Z(e,["rev-parse","--show-toplevel"]);let o=qe(),[i,n,l]=await Promise.all([Z(e,["ls-files","--stage","-z","--",...o]),Z(e,["ls-files","--deleted","-z","--",...o]),Z(e,["ls-files","--others","--exclude-standard","-z","--",...o])]),c=new Set(Le(n)),r=i.toString("utf8").split("\0").filter(Boolean).flatMap(v=>{let m=v.match(/^(\d{6}) [0-9a-f]+ \d\t([\s\S]+)$/u);if(!m)return [];let[,h,y]=m,b=y.replace(/\\/gu,"/");return h==="120000"||h==="160000"||c.has(b)?[]:[b]}),p=(await Ee([...new Set([...r,...Le(l)])],64,async v=>{let m=u.normalize(v);if(u.isAbsolute(m)||m===".."||m.startsWith(`..${u.sep}`))return null;let h=u.resolve(e,m);try{let y=await _.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=>!Ne(e,v)).filter(v=>!s.some(m=>v===u.resolve(m)||v.startsWith(`${u.resolve(m)}${u.sep}`))).sort((v,m)=>v.localeCompare(m)),f=p.length>t;return {files:f?Pe(p,t,e):p,eligibleFileCount:p.length,eligibleFileCountExact:true,truncated:f,fileLimit:t,strategy:"git-index-worktree-v1"}}catch{return null}}async function ve(e,t,s=[]){let o=await Eo(e,t,s);if(o)return o;let i=await jo(e,t+1,s),n=i.length>t;return {files:n?Pe(i,t,e):i,eligibleFileCount:i.length,eligibleFileCountExact:!n,truncated:n,fileLimit:t,strategy:"filesystem-bfs-v1"}}async function Co(e){try{let t=(await Z(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=qe(),[i,n,l,c,r,d]=await Promise.all([Z(e.root,["ls-files","--full-name","-s","--",...o]),Z(e.root,["diff","--no-ext-diff","--no-textconv","--binary","HEAD","--",...o]),Z(e.root,["ls-files","--full-name","--others","--exclude-standard","-z","--",...o]),Z(e.root,["ls-files","--full-name","--others","--ignored","--exclude-standard","-z","--",...o]),Z(e.root,["ls-files","-v","--",...o]),Z(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=D(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)),m=await Ee([...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 De(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 m)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 Ro(e){try{let t=(await Z(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=qe(),[i,n,l,c]=await Promise.all([Z(e.root,["ls-files","--full-name","-s","--",...o]),Z(e.root,["diff","--no-ext-diff","--no-textconv","--binary","HEAD","--",...o]),Z(e.root,["ls-files","--full-name","--others","--exclude-standard","-z","--",...o]),Z(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 Ee([...new Set(Le(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 m=u.resolve(e.root,v);if(r.some(h=>m===h||m.startsWith(`${h}${u.sep}`))||Ne(e.root,m))return null;try{let h=await _.lstat(m);if(!h.isFile()||h.isSymbolicLink())return null}catch{return null}return {path:f,hash:await De(m)}})).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 Ee(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 We(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 Co({...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 Ee(i,16,async d=>({path:D(u.relative(e.root,d)),hash:await De(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 So(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 ve(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([We({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 ve(d,e.projectFileLimit)),f=e.inventories?.scanBudgetsByProject?.get(r.id);return We({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)),At(c)}function At(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 Os(e){if(At(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 Ro({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 ve(c$1,n.fileLimit,n.kind==="workspace"?o:[]),d=n.kind==="workspace"?r.files.filter(v=>!o.some(m=>v===m||v.startsWith(`${m}${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 We({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 _.readFile(e,"utf8");if(e.toLowerCase().endsWith(".json")){let s=JSON.parse(t),o=E(s);return o?[o]:[]}return parseAllDocuments(t,{logLevel:"silent"}).map(s=>E(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 je(e){return /^(?:openapi|swagger)(?:\.[^.]+)?\.(?:json|ya?ml)$/i.test(u.basename(e))}function nt(e){let t=u.basename(e).toLowerCase();return /\.(?:graphql|gql|proto)$/.test(t)||/^asyncapi(?:\.[^.]+)?\.(?:json|ya?ml)$/.test(t)}function at(e){let t=u.basename(e),s=D(e);return !/(?:^|\/)\.devcontainer(?:\/|$)/i.test(s)&&/^Dockerfile(?:\..+)?$/i.test(t)||/\.tf$/i.test(t)||t==="Chart.yaml"}function ct(e){return /(?:^|[\\/])(?:README|ARCHITECTURE|CONTRIBUTING|SECURITY)\.md$/i.test(e)}function Ao(e,t){let s=D(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 dt(e,t){let s=D(u.relative(e,t));return /(?:^|\/)(?:adr|adrs|decisions)(?:\/).+\.md$/i.test(s)||/(?:^|\/)ADR[-_0-9].+\.md$/i.test(s)}async function lt(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 _.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 pt(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 _.pathExists(i)?i:null));return [...new Set(o.filter(i=>!!i))].sort((i,n)=>i.localeCompare(n))}function ut(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=>Ao(s.root,o))))].sort((s,o)=>s.localeCompare(o))}async function ft(e){let t=[];for(let s of fe(e))if(/\.ya?ml$/i.test(s))try{(await ae(s)).some(i=>{let n=E(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 xe=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=D(u.relative(s.root,t));return he(u.posix.join(s.artifactPrefix,o))}return he(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,$e(await _.readFile(t.absolutePath)));}catch{this.contentHashes.set(t.absolutePath,null);}s=this.contentHashes.get(t.absolutePath)??void 0;}let o=he(t.artifact),i=C("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=C(t.kind,t.key),o=$o(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:$e(JSON.stringify({kind:t.kind,key:t.key,attributes:c}))},attributes:c,proofIds:d}),s}addRelation(t){let s=C("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
4
  `)}),s={name:i,lines:[]};continue}s?.lines.push(o);}return s&&t.push({name:s.name,body:s.lines.join(`
@@ -0,0 +1,9 @@
1
+ import {f,e,h as h$1,g}from'./chunk-XF65LQ6M.js';import {a,b}from'./chunk-COOVCORC.js';import {b as b$1,c as c$1}from'./chunk-DFREJHG7.js';import {a as a$1}from'./chunk-NMXGSVMD.js';import {p,a as a$2}from'./chunk-LMOTDLJF.js';import {k as k$2,m,l}from'./chunk-7NKM6EHE.js';import {h}from'./chunk-BLEIUQL6.js';import {k,t,u}from'./chunk-VQZ5PI5J.js';import {p as p$1,q}from'./chunk-ODK4LCEL.js';import k$1 from'fs';import c from'path';import s from'chalk';var ee=new Set([".git",".workspai",".rapidkit",".venv","node_modules","dist","build","target","coverage","htmlcov",".next"]);async function E(e){try{return await k$1.promises.access(e,k$1.constants.F_OK),true}catch{return false}}async function F(e){try{let n=JSON.parse(await k$1.promises.readFile(e,"utf-8"));return n&&typeof n=="object"&&!Array.isArray(n)?n:null}catch{return null}}async function C(e){try{return await k$1.promises.readFile(e,"utf-8")}catch{return ""}}function re(e){return a(e)}async function oe(e,n){return await ne([...u(e,"project.json"),...u(e,"context.json")])?true:b(e)?false:c.resolve(e)===c.resolve(n)?k$2(e).length>0:k$2(e).length>0}async function ie(e){let n=await a$1(e,{skipDirs:ee,includeHiddenDirs:false,descendIntoMatchedProjects:false,isProjectDir:oe}),o=(await a$2(e)).filter(i=>i.relationship==="adopted"||i.source==="adopted-local").map(i=>c.resolve(i.path)).filter(i=>k$1.existsSync(i)),r=[...new Set([...n.map(i=>c.resolve(i)),...o])];return r.length>0?r:b(e)?[]:k$2(e).length>0?[e]:[]}function ae(e,n){return c.relative(e,n).replace(/\\/g,"/")||"."}async function T(e,n){for(let t of n)if(await E(c.join(e,t)))return true;return false}async function se(e,n,t=4){let o=async(r,i)=>{if(i>t)return false;let l;try{l=await k$1.promises.readdir(r,{withFileTypes:true});}catch{return false}for(let a of l)if(a.isFile()&&n.has(a.name.toLowerCase())||a.isDirectory()&&!a.isSymbolicLink()&&!ee.has(a.name)&&await o(c.join(r,a.name),i+1))return true;return false};return o(e,0)}async function ne(e){for(let n of e)if(await E(n))return true;return false}async function te(e){for(let n of e){let t=await F(n);if(t)return t}return null}async function ce(e,n){if(await T(e,[".env",".env.local"]))return true;let t=n?.contracts&&typeof n.contracts=="object"?n.contracts:null;if(Array.isArray(t?.env)&&t.env.length>0)return true;let o=await F(c.join(e,"package.json")),r={...o?.dependencies??{},...o?.devDependencies??{}};if(Object.keys(r).some(a=>/^(?:dotenv|dotenv-flow|env-cmd)$/iu.test(a)))return true;let i=await C(c.join(e,"pyproject.toml"));if(/\b(?:python-dotenv|pydantic-settings)\b/iu.test(i))return true;let l=[await C(c.join(e,"compose.yaml")),await C(c.join(e,"compose.yml")),await C(c.join(e,"docker-compose.yml")),await C(c.join(e,"docker-compose.yaml"))].join(`
2
+ `);return /^\s*(?:env_file|environment)\s*:/imu.test(l)}async function de(e){return (await g(e)).detected}async function le(e){let n=await F(c.join(e,"package.json")),t=n?.scripts&&typeof n.scripts=="object"?n.scripts:{};return Object.keys(t).sort()}function w(e,n,t,o,r,i,l){return {id:e,severity:n,target:t,title:o,detail:r,remediation:i,...l&&l.length>0?{files:[...l]}:{}}}function pe(e){let n=e.reduce((t,o)=>o.severity==="fail"?t+28:o.severity==="warn"?t+12:t+3,0);return Math.max(0,100-n)}async function ue(e,n,t){let o=await te(u(n,"project.json")),r=m(n,o),i=l(n),l$1=r.runtime==="unknown"?i[0]||"unknown":r.runtime,a=[l$1,...i.filter(G=>G!==l$1)],u$1=r.key==="unknown"&&new Set(a.filter(G=>G!=="unknown")).size>1,b=await b$1(n,o,{runtime:l$1,framework:r.key}),m$1=["backend","service","worker","agent"].includes(b),h=["backend","service","worker"].includes(b),v=m$1&&/^(?:fastapi|django|flask|nestjs|express|fastify|springboot|gofiber|gogin|dotnet-webapi|laravel|rails|phoenix|axum|actix|rocket)$/u.test(r.key),j=ae(e,n),f=j,$=await le(n),P=await ne([...u(n,"project.json"),...u(n,"context.json")]),x=await de(n),R=await T(n,["Dockerfile","dockerfile"]),g=await T(n,[".env.example","env.example","config/env.example"])||await se(n,new Set([".env.example","env.example"])),p=await ce(n,o),d=await c$1({projectPath:n,declaration:t?.governance}),z=d.ci.status==="repository",D=await h$1(n),y=[];return r.key==="unknown"&&y.push(w(u$1?"project.stack.aggregate":"project.stack.unknown",u$1?"info":"fail",f,u$1?"Multi-runtime aggregate boundary detected":"Project stack is unknown",u$1?`Workspai detected multiple runtimes (${a.join(", ")}) and intentionally did not promote one nested framework as the aggregate project identity.`:"Workspai cannot confidently classify this backend project.",u$1?"Adopt independently operated nested projects when they need separate lifecycle, ownership, or release evidence.":"Add .workspai/project.json metadata or import the project with `workspai import`.")),P||y.push(w("project.marker.missing","warn",f,"Workspai marker is missing","The project can be detected by files, but it is not registered with Workspai metadata.","Run `workspai import <path>` from a workspace or create the project through Workspai.")),x||y.push(w("project.tests.missing","warn",f,"Test entrypoint is missing","No common test folder, config, or package test script was found.","Add a test command so `workspai workspace run test --affected` can gate changes.")),m$1&&p&&!g&&y.push(w("project.env.example.missing","info",f,"Environment example is missing","No .env.example or env.example file was found.","Add an env example for onboarding and CI secret documentation.",[".env.example"])),d.ci.status==="unknown"?y.push(w("project.ci.missing","warn",f,"CI governance is not proven","No repository CI surface or canonical external CI declaration was found for this project.","Add repository CI configuration or declare the external CI authority in the workspace contract.",[".github/workflows/ci.yml"])):d.ci.status==="external-observed"&&y.push(w("project.ci.external-observed","info",f,"Continuous integration appears externally managed",`Repository documentation references an external CI control plane (${d.ci.evidence.join(", ")}).`,"Declare the external CI provider in the canonical workspace contract when authoritative release gating depends on it.")),v&&!D&&y.push(w("project.health.missing","info",f,"Health or readiness probe is missing","The project has no obvious health or readiness endpoint to support automated deployment and runtime checks.","Add a simple health endpoint and document it for readiness gates and observability.")),h&&!R&&y.push(w("project.container.missing","info",f,"Container recipe is missing","No Dockerfile was found for this project.","Add a Dockerfile when the service is intended for containerized deployment.",["Dockerfile"])),{name:typeof o?.name=="string"&&o.name.trim()?o.name.trim():c.basename(n),path:n,relativePath:j,runtime:l$1,runtimeCandidates:a,framework:r.key,confidence:r.confidence,supportTier:r.supportTier,hasRapidKitMarker:P,hasTests:x,hasDockerfile:R,hasEnvExample:g,hasCiConfig:z,governance:d,hasHealthEndpoint:D,scripts:$,findings:y,score:pe(y)}}function me(e){return e.name.toLowerCase()}async function fe(e){let n=new Map(e.map(r=>[me(r),r])),t=[];for(let r of e){let i=await F(c.join(r.path,"package.json")),l={...i?.dependencies??{},...i?.devDependencies??{},...i?.peerDependencies??{}};for(let u of Object.keys(l)){let b=u.replace(/^@[^/]+\//,"").toLowerCase(),m=n.get(b);m&&m.relativePath!==r.relativePath&&t.push({from:r.relativePath,to:m.relativePath,kind:"package"});}let a=await C(c.join(r.path,"pyproject.toml"));for(let u of e)u.relativePath!==r.relativePath&&a.includes(u.name)&&t.push({from:r.relativePath,to:u.relativePath,kind:"workspace-reference"});}let o=new Set;return t.filter(r=>{let i=`${r.from}\0${r.to}\0${r.kind}`;return o.has(i)?false:(o.add(i),true)})}function ge(e,n){let t=new Map;for(let o of e)t.set(o.relativePath,{project:o.relativePath,directDependents:0,directDependencies:0});for(let o of n){let r=t.get(o.from),i=t.get(o.to);r&&(r.directDependencies+=1),i&&(i.directDependents+=1);}return Array.from(t.values()).sort((o,r)=>r.directDependents-o.directDependents||r.directDependencies-o.directDependencies)}async function ye(e){let n=await te(t(e,"workspace.json"));return typeof n?.profile=="string"?n.profile:null}function we(e){return {fail:e.filter(n=>n.severity==="fail").length,warn:e.filter(n=>n.severity==="warn").length,info:e.filter(n=>n.severity==="info").length}}function ke(e){if(e.projectCount===0)return e.workspaceDetected?["Add your first project: npx workspai create project <name> --kit <kit>","Import an existing service: npx workspai import <path>"]:["Create a Workspai workspace: npx workspai create workspace my-workspace --profile polyglot","Import an existing service: npx workspai import ../service"];let n=[];return e.findings.some(t=>t.id==="workspace.marker.missing")&&n.push("Initialize workspace metadata with `workspai bootstrap --profile polyglot`."),e.findings.some(t=>t.id==="project.marker.missing")&&n.push("Register detected projects with `workspai import <path>` or recreate them via `workspai create project`."),e.findings.some(t=>t.id==="project.tests.missing")&&n.push("Add test entrypoints, then gate changes with `workspai workspace run test --affected --strict`."),e.findings.some(t=>t.id==="project.ci.missing")&&n.push("Add CI/CD configuration to catch regressions early and make workspace health checks actionable."),e.findings.some(t=>t.id==="project.health.missing")&&n.push("Add a health/readiness endpoint so runtime probes and deployment checks can verify service health."),e.hasCanonicalGraph||n.push("Generate canonical topology with `workspai workspace model --write --include-evidence`."),n.push("Run `workspai autopilot release --mode audit --json` before release."),Array.from(new Set(n))}async function Te(e$1={}){let n=c.resolve(e$1.workspacePath||process.cwd());if(!await E(n))throw new Error(`Workspace path does not exist: ${n}`);let t=re(n)??n,o=k(t),r=await ye(t),i=await ie(t),l;try{l=(await p({workspacePath:t})).contract;}catch{}let a=await Promise.all(i.map(p=>{let d=l?.projects.find(z=>{let D=z.externalPath??z.relativePath;return c.resolve(t,D)===c.resolve(p)});return ue(t,p,d)})),u=await fe(a),b=ge(a,u),m=[];o||m.push(w("workspace.marker.missing","warn",".","Workspace metadata is missing","The directory can be analyzed, but it is not a registered Workspai workspace.","Run `workspai create workspace` or `workspai bootstrap --profile polyglot` in a workspace root.")),a.length===0&&m.push(w("workspace.projects.missing","warn",".","No backend projects detected","Workspai did not find runtime markers or project metadata under this root.","Create a project with `workspai create project` or import one with `workspai import <path>`."));let h$1=[...m,...a.flatMap(p=>p.findings)],v=we(h$1),j={};for(let p of a)for(let d of p.runtimeCandidates)j[d]=(j[d]||0)+1;let f$1=a.length>0?Math.round(a.reduce((p,d)=>p+d.score,0)/a.length):0,$=m.reduce((p,d)=>p+(d.severity==="fail"?20:d.severity==="warn"?8:2),0),P=Math.max(0,f$1-$),x=a.length===0&&v.fail===0&&h$1.length>0&&h$1.every(p=>p.id==="workspace.projects.missing"&&p.severity==="warn"),R=v.fail>0||e$1.strict&&v.warn>0&&!x?"blocked":v.warn>0?"needs-attention":"ready",g={schemaVersion:q.analyze,generatedAt:new Date().toISOString(),workspacePath:t,workspaceDetected:o,profile:r,summary:{statusScope:"source-structure",releaseReadiness:"not-evaluated",score:P,verdict:R,projectCount:a.length,runtimeCount:Object.keys(j).length,findings:v},runtimes:j,projects:a,dependencyGraph:{status:u.length>0?"generated":"empty",edges:u,topImpactedProjects:b.slice(0,5)},findings:h$1,nextActions:ke({findings:h$1,projectCount:a.length,hasCanonicalGraph:await E(c.join(t,p$1.knowledgeGraph)),workspaceDetected:o}),enterpriseControls:{jsonReady:true,ciGateCommand:"workspai analyze --json --strict",releaseGateCommand:"workspai autopilot release --mode enforce --json",evidencePath:p$1.analyze}};if(e$1.output&&(await k$1.promises.mkdir(c.dirname(c.resolve(e$1.output)),{recursive:true}),await k$1.promises.writeFile(c.resolve(e$1.output),`${JSON.stringify(g,null,2)}
3
+ `)),!e$1.output&&o){let p=f(g,{commandId:"workspaceAnalyze",exitCode:g.summary.verdict==="blocked"?2:g.summary.verdict==="needs-attention"?1:0,generatedAt:g.generatedAt,blockers:g.findings.filter(d=>d.severity==="fail").map(d=>d.title).slice(0,12),runId:e()});await h(t,p$1.analyze,p);}return g}function Ne(e){let n=e.summary.verdict==="ready"?s.green:e.summary.verdict==="needs-attention"?s.yellow:s.red;if(console.log(s.bold(`
4
+ Workspai Workspace Analysis
5
+ `)),console.log(s.cyan("Workspace:"),e.workspacePath),console.log(s.cyan("Profile:"),e.profile||"not configured"),console.log(s.cyan("Source score:"),`${e.summary.score}/100`),console.log(s.cyan("Source verdict:"),n(e.summary.verdict)),console.log(s.cyan("Release readiness:"),e.summary.releaseReadiness),console.log(s.gray(`Projects: ${e.summary.projectCount}, runtimes: ${e.summary.runtimeCount}, findings: ${e.summary.findings.fail} fail / ${e.summary.findings.warn} warn / ${e.summary.findings.info} info`)),e.projects.length>0){console.log(s.bold(`
6
+ Projects`));for(let t of e.projects){let o=t.score>=85?s.green("pass"):t.score>=65?s.yellow("watch"):s.red("risk");console.log(` ${t.relativePath} ${s.gray(`${t.runtime}/${t.framework}`)} ${o} ${t.score}/100`);}}if(e.dependencyGraph.status==="generated"&&(console.log(s.bold(`
7
+ Dependency Graph`)),console.log(s.gray(` edges: ${e.dependencyGraph.edges.length}`)),e.dependencyGraph.topImpactedProjects.length>0)){console.log(s.gray(" Top impacted projects:"));for(let t of e.dependencyGraph.topImpactedProjects.slice(0,3))console.log(` ${t.project} (${t.directDependents} dependents, ${t.directDependencies} dependencies)`);}if(e.findings.length>0){console.log(s.bold(`
8
+ Top Findings`));for(let t of e.findings.slice(0,8)){let o=t.severity==="fail"?s.red:t.severity==="warn"?s.yellow:s.gray;console.log(` ${o(t.severity.toUpperCase())} ${t.target}: ${t.title}`),console.log(s.gray(` ${t.remediation}`));}}console.log(s.bold(`
9
+ Next Actions`));for(let t of e.nextActions.slice(0,5))console.log(s.gray(` - ${t}`));console.log();}export{Te as a,Ne as b};
@@ -1,4 +1,4 @@
1
- import {a}from'./chunk-GR6442P7.js';import {a as a$1}from'./chunk-AFIFZTOY.js';import {t}from'./chunk-ODK4LCEL.js';import {k as k$1,t as t$1,q as q$1,w}from'./chunk-VQZ5PI5J.js';import z from'crypto';import Y from'os';import l from'path';import {once}from'events';import {createWriteStream,createReadStream}from'fs';import*as Q from'readline';import {Transform,Readable}from'stream';import {pipeline}from'stream/promises';import {lookup}from'dns/promises';import T from'net';import p from'fs-extra';import*as ee from'yauzl';import*as te from'yazl';var qe="workspai-workspace-archive-capabilities-v1",q="workspai-workspace-archive-manifest-v1",k="workspai-workspace-archive-operation-result-v1";var K="contracts/workspace-archive-manifest.v1.json",Z="contracts/workspace-archive-operation-result.v1.json",Ke={archiveCompression:{signature:"--archive-compression <mode>",description:"Archive compression: store (default) or deflate",appliesTo:["export"]},maxDownloadSize:{signature:"--max-download-size <size>",description:"Maximum remote archive download size (secure default: 5gb)",appliesTo:["inspect","verify","doctor","hydrate","import"]},maxExpandedSize:{signature:"--max-expanded-size <size>",description:"Maximum expanded archive payload size (secure default: 20gb)",appliesTo:["inspect","verify","doctor","hydrate","import"]},downloadTimeoutMs:{signature:"--download-timeout-ms <ms>",description:"Remote archive download timeout in milliseconds; 0 disables it",appliesTo:["inspect","verify","doctor","hydrate","import"]},allowPrivateNetwork:{signature:"--allow-private-network",description:"Allow archive downloads from loopback/private networks (unsafe for untrusted input)",appliesTo:["inspect","verify","doctor","hydrate","import"]}};var A=".workspai/archive-manifest.json",R=".rapidkit/archive-manifest.json",de="workspai.workspace.archive",ye=300*1e3,ve=5*1024*1024*1024,we=20*1024*1024*1024,J=2e5,ge=5*1024*1024*1024,ke=1e3,M=5,Ee=64*1024*1024;function Ae(r){let t=r.toLowerCase().split("%")[0];if(T.isIPv4(t)){let e=t.split(".").map(Number);return e[0]===0||e[0]===10||e[0]===127||e[0]===169&&e[1]===254||e[0]===172&&e[1]>=16&&e[1]<=31||e[0]===192&&e[1]===168||e[0]===100&&e[1]>=64&&e[1]<=127||e[0]>=224}return T.isIPv6(t)?t==="::"||t==="::1"||t.startsWith("fc")||t.startsWith("fd")||/^fe[89ab]/.test(t)||t.startsWith("ff")||t.startsWith("::ffff:127.")||t.startsWith("::ffff:10.")||t.startsWith("::ffff:192.168."):true}async function X(r,t){let e=new URL(r);if(e.protocol!=="https:"&&e.protocol!=="http:")throw new Error(`Workspace archive URL protocol is not supported: ${e.protocol}`);if(e.protocol!=="https:"&&!t)throw new Error("Remote workspace archives require HTTPS unless private-network access is explicitly enabled.");if(e.username||e.password)throw new Error("Workspace archive URL must not contain embedded credentials.");if(t)return e;let i=e.hostname.replace(/^\[|\]$/g,"").toLowerCase();if(i==="localhost"||i.endsWith(".localhost"))throw new Error("Workspace archive URL resolves to a private or local network address.");let a=T.isIP(i)?[{address:i}]:await lookup(i,{all:true,verbatim:true});if(a.length===0||a.some(({address:s})=>Ae(s)))throw new Error("Workspace archive URL resolves to a private or local network address.");return e}async function Pe(r,t,e){let i=await X(r,e);for(let a=0;a<=M;a+=1){let s=await fetch(i,{signal:t,redirect:"manual",credentials:"omit"});if(![301,302,303,307,308].includes(s.status))return s;let n=s.headers.get("location");if(await s.body?.cancel(),!n)throw new Error("Workspace archive redirect is missing a Location header.");if(a===M)throw new Error(`Workspace archive download exceeded ${M} redirects.`);i=await X(new URL(n,i).href,e);}throw new Error("Workspace archive redirect policy failed.")}var We=new Set(["__pycache__",".venv","venv","node_modules",".git","dist","build","target",".pytest_cache",".mypy_cache",".ruff_cache","htmlcov",".next",".turbo",".cache"]),be=new Set([".DS_Store","Thumbs.db",".coverage","npm-debug.log","yarn-error.log","pnpm-debug.log","workspace-link.local.json","imported-projects.json","workspace-registry.v1.json"]),Se=[/^\.env$/i,/^\.env\.(?!example$|sample$|template$).+/i,/^.*\.pem$/i,/^.*\.key$/i,/^id_rsa$/i,/^id_ed25519$/i];function _(r){return r.replace(/\\/g,"/")}function re(r){return r.trim().replace(/\.workspai-archive\.zip$/i,"").replace(/\.rapidkit-archive\.zip$/i,"").replace(/\.zip$/i,"").trim().toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/-+/g,"-").replace(/^[-_.]+|[-_.]+$/g,"").slice(0,64)||"imported-workspace"}function ie(r){let t=_(r).trim();if(!t||t.startsWith("/")||t.startsWith("~")||/^[a-zA-Z]:\//.test(t)||t.includes("\0"))return false;let e=t.split("/").filter(Boolean);return e.length>0&&!e.some(i=>i===".."||i===".")}function ae(r){if(!ie(r))throw new Error(`Archive contains an unsafe path: ${r}`)}function Re(r,t){let e=l.relative(t,r);return e===""||!!e&&!e.startsWith("..")&&!l.isAbsolute(e)}function _e(r,t$1){let e=_(r),i=e.split("/").filter(Boolean);if(i.some((n,o)=>(n===".workspai"||n===".rapidkit")&&["cache","reports"].includes(i[o+1]||""))||i.some(n=>We.has(n)||a(n)))return true;let s=i[i.length-1]||"";return e===t.workspaceContract||e===".rapidkit/workspace.contract.json"||be.has(s)||/\.(?:workspai|rapidkit)-archive\.zip$/i.test(s)||!t$1?.includeEnv&&Se.some(n=>n.test(s))?true:s.endsWith(".pyc")||s.endsWith(".log")}async function Ce(r){for(let t of [l.join(r,".workspai","workspace.contract.json"),l.join(r,".rapidkit","workspace.contract.json")])if(await p.pathExists(t))try{return await p.readJson(t)}catch(e){throw new Error(`Workspace contract could not be inspected safely for archive portability: ${t}: ${e instanceof Error?e.message:String(e)}`)}return null}function xe(r){return (r?.projects??[]).filter(t=>typeof t.externalPath=="string"||typeof t.relativePath=="string"&&t.relativePath.startsWith("external/")).map(t=>({name:t.slug||t.relativePath||"external-project",relationship:["adopted","linked","imported","managed","restored"].includes(String(t.relationship))?t.relationship:"adopted",included:false,requiredAction:"relink"})).sort((t,e)=>t.name.localeCompare(e.name))}function Oe(r){if(r)return {...r,workspace:{...r.workspace},projects:r.projects.filter(t=>typeof t.externalPath!="string"&&!t.relativePath.startsWith("external/")).map(({externalPath:t,...e})=>({...e,modules:[...e.modules],ports:e.ports.map(i=>({...i})),contracts:{owns:[...e.contracts.owns],apis:e.contracts.apis.map(i=>({...i})),publishes:[...e.contracts.publishes],consumes:[...e.contracts.consumes],dependsOn:[...e.contracts.dependsOn],env:[...e.contracts.env]}}))}}async function*se(r,t,e){let i=(await p.readdir(t,{withFileTypes:true})).sort((a,s)=>a.name.localeCompare(s.name));for(let a of i){let s=l.join(t,a.name),n=_(l.relative(r,s));if(!(!n||_e(n,e))){if(a.isDirectory()){yield*se(r,s,e);continue}a.isFile()&&(yield {relativePath:n,fullPath:s});}}}async function ze(r){for(let t of t$1(r,"workspace.json"))try{let e=await p.readJson(t);if(typeof e.workspace_name=="string"&&e.workspace_name.trim())return e.workspace_name.trim();if(typeof e.name=="string"&&e.name.trim())return e.name.trim()}catch{}return l.basename(l.resolve(r))}async function Ne(r){let t=await p.stat(r.fullPath),e=z.createHash("sha256"),i=0;for await(let s of createReadStream(r.fullPath)){let n=Buffer.isBuffer(s)?s:Buffer.from(s);i+=n.length,e.update(n);}let a=await p.stat(r.fullPath);if(t.size!==a.size||t.mtimeMs!==a.mtimeMs||i!==a.size)throw new Error(`Workspace file changed while preparing archive: ${r.relativePath}`);return {...r,size:i,mtimeMs:a.mtimeMs,sha256:e.digest("hex")}}async function E(r,t){r.write(t)||await once(r,"drain");}async function ne(r){await new Promise((t,e)=>{r.once("error",e),r.end(t);});}async function*O(r){let t=Q.createInterface({input:createReadStream(r),crlfDelay:1/0});for await(let e of t){let i=e.trim();i&&(yield JSON.parse(i));}}async function Me(r){let t=createWriteStream(r.manifestPath,{flags:"wx"});try{await E(t,`{
1
+ import {a}from'./chunk-GR6442P7.js';import {a as a$1}from'./chunk-AFIFZTOY.js';import {k as k$1,t as t$1,q as q$1,w}from'./chunk-VQZ5PI5J.js';import {t}from'./chunk-ODK4LCEL.js';import z from'crypto';import Y from'os';import l from'path';import {once}from'events';import {createWriteStream,createReadStream}from'fs';import*as Q from'readline';import {Transform,Readable}from'stream';import {pipeline}from'stream/promises';import {lookup}from'dns/promises';import T from'net';import p from'fs-extra';import*as ee from'yauzl';import*as te from'yazl';var qe="workspai-workspace-archive-capabilities-v1",q="workspai-workspace-archive-manifest-v1",k="workspai-workspace-archive-operation-result-v1";var K="contracts/workspace-archive-manifest.v1.json",Z="contracts/workspace-archive-operation-result.v1.json",Ke={archiveCompression:{signature:"--archive-compression <mode>",description:"Archive compression: store (default) or deflate",appliesTo:["export"]},maxDownloadSize:{signature:"--max-download-size <size>",description:"Maximum remote archive download size (secure default: 5gb)",appliesTo:["inspect","verify","doctor","hydrate","import"]},maxExpandedSize:{signature:"--max-expanded-size <size>",description:"Maximum expanded archive payload size (secure default: 20gb)",appliesTo:["inspect","verify","doctor","hydrate","import"]},downloadTimeoutMs:{signature:"--download-timeout-ms <ms>",description:"Remote archive download timeout in milliseconds; 0 disables it",appliesTo:["inspect","verify","doctor","hydrate","import"]},allowPrivateNetwork:{signature:"--allow-private-network",description:"Allow archive downloads from loopback/private networks (unsafe for untrusted input)",appliesTo:["inspect","verify","doctor","hydrate","import"]}};var A=".workspai/archive-manifest.json",R=".rapidkit/archive-manifest.json",de="workspai.workspace.archive",ye=300*1e3,ve=5*1024*1024*1024,we=20*1024*1024*1024,J=2e5,ge=5*1024*1024*1024,ke=1e3,M=5,Ee=64*1024*1024;function Ae(r){let t=r.toLowerCase().split("%")[0];if(T.isIPv4(t)){let e=t.split(".").map(Number);return e[0]===0||e[0]===10||e[0]===127||e[0]===169&&e[1]===254||e[0]===172&&e[1]>=16&&e[1]<=31||e[0]===192&&e[1]===168||e[0]===100&&e[1]>=64&&e[1]<=127||e[0]>=224}return T.isIPv6(t)?t==="::"||t==="::1"||t.startsWith("fc")||t.startsWith("fd")||/^fe[89ab]/.test(t)||t.startsWith("ff")||t.startsWith("::ffff:127.")||t.startsWith("::ffff:10.")||t.startsWith("::ffff:192.168."):true}async function X(r,t){let e=new URL(r);if(e.protocol!=="https:"&&e.protocol!=="http:")throw new Error(`Workspace archive URL protocol is not supported: ${e.protocol}`);if(e.protocol!=="https:"&&!t)throw new Error("Remote workspace archives require HTTPS unless private-network access is explicitly enabled.");if(e.username||e.password)throw new Error("Workspace archive URL must not contain embedded credentials.");if(t)return e;let i=e.hostname.replace(/^\[|\]$/g,"").toLowerCase();if(i==="localhost"||i.endsWith(".localhost"))throw new Error("Workspace archive URL resolves to a private or local network address.");let a=T.isIP(i)?[{address:i}]:await lookup(i,{all:true,verbatim:true});if(a.length===0||a.some(({address:s})=>Ae(s)))throw new Error("Workspace archive URL resolves to a private or local network address.");return e}async function Pe(r,t,e){let i=await X(r,e);for(let a=0;a<=M;a+=1){let s=await fetch(i,{signal:t,redirect:"manual",credentials:"omit"});if(![301,302,303,307,308].includes(s.status))return s;let n=s.headers.get("location");if(await s.body?.cancel(),!n)throw new Error("Workspace archive redirect is missing a Location header.");if(a===M)throw new Error(`Workspace archive download exceeded ${M} redirects.`);i=await X(new URL(n,i).href,e);}throw new Error("Workspace archive redirect policy failed.")}var We=new Set(["__pycache__",".venv","venv","node_modules",".git","dist","build","target",".pytest_cache",".mypy_cache",".ruff_cache","htmlcov",".next",".turbo",".cache"]),be=new Set([".DS_Store","Thumbs.db",".coverage","npm-debug.log","yarn-error.log","pnpm-debug.log","workspace-link.local.json","imported-projects.json","workspace-registry.v1.json"]),Se=[/^\.env$/i,/^\.env\.(?!example$|sample$|template$).+/i,/^.*\.pem$/i,/^.*\.key$/i,/^id_rsa$/i,/^id_ed25519$/i];function _(r){return r.replace(/\\/g,"/")}function re(r){return r.trim().replace(/\.workspai-archive\.zip$/i,"").replace(/\.rapidkit-archive\.zip$/i,"").replace(/\.zip$/i,"").trim().toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/-+/g,"-").replace(/^[-_.]+|[-_.]+$/g,"").slice(0,64)||"imported-workspace"}function ie(r){let t=_(r).trim();if(!t||t.startsWith("/")||t.startsWith("~")||/^[a-zA-Z]:\//.test(t)||t.includes("\0"))return false;let e=t.split("/").filter(Boolean);return e.length>0&&!e.some(i=>i===".."||i===".")}function ae(r){if(!ie(r))throw new Error(`Archive contains an unsafe path: ${r}`)}function Re(r,t){let e=l.relative(t,r);return e===""||!!e&&!e.startsWith("..")&&!l.isAbsolute(e)}function _e(r,t$1){let e=_(r),i=e.split("/").filter(Boolean);if(i.some((n,o)=>(n===".workspai"||n===".rapidkit")&&["cache","reports"].includes(i[o+1]||""))||i.some(n=>We.has(n)||a(n)))return true;let s=i[i.length-1]||"";return e===t.workspaceContract||e===".rapidkit/workspace.contract.json"||be.has(s)||/\.(?:workspai|rapidkit)-archive\.zip$/i.test(s)||!t$1?.includeEnv&&Se.some(n=>n.test(s))?true:s.endsWith(".pyc")||s.endsWith(".log")}async function Ce(r){for(let t of [l.join(r,".workspai","workspace.contract.json"),l.join(r,".rapidkit","workspace.contract.json")])if(await p.pathExists(t))try{return await p.readJson(t)}catch(e){throw new Error(`Workspace contract could not be inspected safely for archive portability: ${t}: ${e instanceof Error?e.message:String(e)}`)}return null}function xe(r){return (r?.projects??[]).filter(t=>typeof t.externalPath=="string"||typeof t.relativePath=="string"&&t.relativePath.startsWith("external/")).map(t=>({name:t.slug||t.relativePath||"external-project",relationship:["adopted","linked","imported","managed","restored"].includes(String(t.relationship))?t.relationship:"adopted",included:false,requiredAction:"relink"})).sort((t,e)=>t.name.localeCompare(e.name))}function Oe(r){if(r)return {...r,workspace:{...r.workspace},projects:r.projects.filter(t=>typeof t.externalPath!="string"&&!t.relativePath.startsWith("external/")).map(({externalPath:t,...e})=>({...e,modules:[...e.modules],ports:e.ports.map(i=>({...i})),contracts:{owns:[...e.contracts.owns],apis:e.contracts.apis.map(i=>({...i})),publishes:[...e.contracts.publishes],consumes:[...e.contracts.consumes],dependsOn:[...e.contracts.dependsOn],env:[...e.contracts.env]}}))}}async function*se(r,t,e){let i=(await p.readdir(t,{withFileTypes:true})).sort((a,s)=>a.name.localeCompare(s.name));for(let a of i){let s=l.join(t,a.name),n=_(l.relative(r,s));if(!(!n||_e(n,e))){if(a.isDirectory()){yield*se(r,s,e);continue}a.isFile()&&(yield {relativePath:n,fullPath:s});}}}async function ze(r){for(let t of t$1(r,"workspace.json"))try{let e=await p.readJson(t);if(typeof e.workspace_name=="string"&&e.workspace_name.trim())return e.workspace_name.trim();if(typeof e.name=="string"&&e.name.trim())return e.name.trim()}catch{}return l.basename(l.resolve(r))}async function Ne(r){let t=await p.stat(r.fullPath),e=z.createHash("sha256"),i=0;for await(let s of createReadStream(r.fullPath)){let n=Buffer.isBuffer(s)?s:Buffer.from(s);i+=n.length,e.update(n);}let a=await p.stat(r.fullPath);if(t.size!==a.size||t.mtimeMs!==a.mtimeMs||i!==a.size)throw new Error(`Workspace file changed while preparing archive: ${r.relativePath}`);return {...r,size:i,mtimeMs:a.mtimeMs,sha256:e.digest("hex")}}async function E(r,t){r.write(t)||await once(r,"drain");}async function ne(r){await new Promise((t,e)=>{r.once("error",e),r.end(t);});}async function*O(r){let t=Q.createInterface({input:createReadStream(r),crlfDelay:1/0});for await(let e of t){let i=e.trim();i&&(yield JSON.parse(i));}}async function Me(r){let t=createWriteStream(r.manifestPath,{flags:"wx"});try{await E(t,`{
2
2
  `);for(let[i,a]of Object.entries(r.manifestBase))await E(t,` ${JSON.stringify(i)}: ${JSON.stringify(a,null,2)},
3
3
  `);await E(t,` "files": [
4
4
  `);let e=true;for await(let i of O(r.spoolPath)){let{mtimeMs:a,...s}=i;await E(t,`${e?"":`,
@@ -0,0 +1 @@
1
+ import {G as G$1,k,q}from'./chunk-CMLLERGG.js';import {b as b$2,c as c$2,a as a$3}from'./chunk-DFREJHG7.js';import {a as a$2}from'./chunk-NMXGSVMD.js';import {a as a$6}from'./chunk-HTYMXMQM.js';import {d,a as a$1,p as p$1,g as g$1,f as f$1,e}from'./chunk-LMOTDLJF.js';import {c,b as b$1,j as j$2,q as q$2,D,f}from'./chunk-OH6LV5JP.js';import {j as j$3,m as m$1,l}from'./chunk-7NKM6EHE.js';import {a as a$5}from'./chunk-GR6442P7.js';import {j as j$1,g,a as a$4,h}from'./chunk-BLEIUQL6.js';import {a}from'./chunk-252EKOR6.js';import {d as d$1,c as c$1}from'./chunk-EWZZUQBR.js';import {t}from'./chunk-VQZ5PI5J.js';import {q as q$1,p,t as t$1,s}from'./chunk-ODK4LCEL.js';import m from'path';import P from'fs-extra';import _t from'crypto';import {execFile}from'child_process';import {promisify}from'util';import {createRequire}from'module';var Dt=new Set([...c().map(e=>e.id),...G$1().map(e=>e.id)]),Ot=[...k().map(e=>({id:e.kitId,aliases:[...e.aliases],ecosystem:e.framework,plannerFramework:e.id,runtime:"node",runtimeCandidates:["node"],workspacePythonEngine:"none",status:"available",canExecuteCreate:true,versionPolicy:e.versionPolicy,officialCommands:[e.commandDisplay("<name>",{skipGit:false,skipInstall:false})],adoptAfterCreate:true,...e.minNodeVersion?{runtimeRequirements:{node:`>=${e.minNodeVersion}`}}:e.minNodeMajor?{runtimeRequirements:{node:`>=${e.minNodeMajor}`}}:{}})),...q().map(e=>({id:e.kitId,aliases:[...e.aliases],ecosystem:e.framework,plannerFramework:e.framework,runtime:e.runtime,runtimeCandidates:[...e.runtimeCandidates],workspacePythonEngine:"none",status:"available",canExecuteCreate:true,versionPolicy:e.versionPolicy,officialCommands:[e.commandDisplay("<name>",{skipGit:false,skipInstall:false})],adoptAfterCreate:true,...e.nodeSupport?{runtimeRequirements:{node:e.nodeSupport.requirement}}:{}})),{id:"wordpress-site",aliases:["wordpress","wordpress-site","wp","wp-site"],ecosystem:"wordpress",plannerFramework:"wordpress",runtime:"php",runtimeCandidates:["php"],workspacePythonEngine:"none",status:"planned",canExecuteCreate:false,versionPolicy:"planned",officialCommands:["wp core download","wp config create","wp db create","wp core install"],adoptAfterCreate:true},{id:"wordpress-block",aliases:["wordpress-block","wp-block","gutenberg-block"],ecosystem:"wordpress",plannerFramework:"wordpress",runtime:"node",runtimeCandidates:["node","php"],workspacePythonEngine:"none",status:"planned",canExecuteCreate:false,versionPolicy:"planned",officialCommands:["npx @wordpress/create-block@latest <slug>"],adoptAfterCreate:true},{id:"symfony",aliases:["symfony","php-symfony"],ecosystem:"php",plannerFramework:"symfony",runtime:"php",runtimeCandidates:["php"],workspacePythonEngine:"none",status:"planned",canExecuteCreate:false,versionPolicy:"planned",officialCommands:["composer create-project symfony/skeleton <name>"],adoptAfterCreate:true},{id:"rails",aliases:["rails","ruby-on-rails","ruby-rails"],ecosystem:"ruby",plannerFramework:"rails",runtime:"ruby",runtimeCandidates:["ruby"],workspacePythonEngine:"none",status:"planned",canExecuteCreate:false,versionPolicy:"planned",officialCommands:["rails new <name>"],adoptAfterCreate:true}],H=new Map;for(let e of Ot){H.set(e.id,e);for(let t of e.aliases)H.set(t,e);}var Gt=new Set(["php","ruby","rust","elixir","clojure","scala","kotlin","unknown"]);function K(e){return e?.trim().toLowerCase()||void 0}function nt(e){let t=K(e.kitId)??K(e.framework)??K(e.runtime)??"unknown";if(e.projectExists)return {lane:"existing",status:"available",canExecuteCreate:false,requested:t,reason:"Existing projects enter Workspace Intelligence through adopt/import."};let r=e.kitId?b$1(e.kitId):void 0;if(r&&Dt.has(r))return {lane:"native",status:"available",canExecuteCreate:true,requested:t,resolved:r,reason:"Workspai owns the create contract, project marker, registry, doctor, and workspace model path."};let o=H.get(t)??H.get(K(e.framework)??"")??H.get(K(e.runtime)??"");if(o)return {lane:"official",status:o.status,canExecuteCreate:o.canExecuteCreate,requested:t,resolved:o.id,officialCommands:o.officialCommands,fallbackLane:o.canExecuteCreate?void 0:"existing",reason:o.status==="available"?"Workspai runs the official ecosystem generator, then registers the project in Workspace Intelligence.":"Official generator support is planned but not enabled; use adopt/import until Workspai owns the post-create contract."};let s=K(e.runtime);return s&&Gt.has(s)?{lane:"existing",status:"available",canExecuteCreate:false,requested:t,resolved:s,reason:"Runtime can be governed through Workspace Intelligence, but native create is not supported."}:{lane:"existing",status:"available",canExecuteCreate:false,requested:t,reason:"No native create contract is available; use adopt/import to enter Workspace Intelligence."}}function zr(e){return !e.canExecuteCreate&&(e.lane==="official"||e.lane==="existing"&&e.resolved!==void 0)}var Yr="rapidkit-freshness-metadata-v1";function ge(e){if(Array.isArray(e))return e.map(t=>ge(t));if(e&&typeof e=="object"){let t={};for(let r of Object.keys(e).sort())t[r]=ge(e[r]);return t}return e}function Tt(e){return JSON.stringify(ge(e))}function G(e){return _t.createHash("sha256").update(Tt(e)).digest("hex")}var ot=".workspai/workspace-graph.overrides.json",Nt=new Set([".ts",".tsx",".js",".jsx",".mjs",".cjs"]),Kt=new Set([".git",".hg",".svn",".workspai",".rapidkit",".venv","node_modules","dist","build","out","target","coverage","htmlcov",".next",".turbo",".cache"]),at=600,it=5,$t=256*1024,st={inferred:1,contract:2,manual:3};function Vt(e){return e.split(m.sep).join("/")}function Z(e,t){return Vt(m.relative(e,t)||".")}function ct(e){let t=new Map;for(let r of e.projects)t.has(r.name)||t.set(r.name,{id:r.name,path:r.path,...r.runtime?{runtime:r.runtime}:{},...r.framework?{framework:r.framework}:{},...r.kind?{kind:r.kind}:{}});return [...t.values()].sort((r,o)=>r.id.localeCompare(o.id))}function dt(e,t){let r=new Map,o=new Map;for(let n of t.projects){if(r.has(n.name))continue;let i=n.absolutePath?m.resolve(n.absolutePath):m.resolve(e,n.path);r.set(n.name,i),o.has(i)||o.set(i,n.name);}let s=[...o.entries()].map(([n,i])=>({dir:n,id:i})).sort((n,i)=>i.dir.length-n.dir.length||n.dir.localeCompare(i.dir));return {idToDir:r,dirToId:o,sortedDirs:s}}function ee(e,t){let r=m.resolve(t);for(let{dir:o,id:s}of e.sortedDirs)if(r===o||r.startsWith(`${o}${m.sep}`))return s;return null}function ke(e,t){let r=m.relative(e,t);return r.length>0&&!r.startsWith("..")&&!m.isAbsolute(r)}function ve(e,t,r){let o=e.idToDir.get(t),s=e.idToDir.get(r);return !o||!s?false:ke(o,s)||ke(s,o)}async function ye(e){try{if(!await P.pathExists(e))return null;let t=await P.readJSON(e);return t&&typeof t=="object"&&!Array.isArray(t)?t:null}catch{return null}}async function be(e){try{return await P.pathExists(e)?await P.readFile(e,"utf8"):null}catch{return null}}async function lt(e,t){let r=[],o=new Map;for(let[s,n]of t.idToDir.entries()){let i=await ye(m.join(n,"package.json")),a=typeof i?.name=="string"?i.name.trim():"";a&&!o.has(a)&&o.set(a,s);}for(let[s,n]of t.idToDir.entries()){let i=await ye(m.join(n,"package.json"));if(i){let a=["dependencies","devDependencies","peerDependencies","optionalDependencies"],c=new Set;for(let l of a){let u=i[l];if(!(!u||typeof u!="object"||Array.isArray(u)))for(let p of Object.keys(u)){let d=o.get(p);!d||d===s||c.has(d)||(c.add(d),r.push({from:s,to:d,kind:"package-dep",source:"inferred",confidence:"high",evidence:[{file:Z(e,m.join(n,"package.json")),detail:`declares dependency ${p}`}]}));}}}r.push(...await Ht(e,t,s,n)),r.push(...await Bt(e,t,s,n));}return r}async function Ht(e,t,r,o){let s=await be(m.join(o,"pyproject.toml"));if(!s)return [];let n=[],i=new Set,a=/path\s*=\s*["']([^"']+)["']/g,c;for(;(c=a.exec(s))!==null;){let l=ee(t,m.resolve(o,c[1]));!l||l===r||ve(t,r,l)||i.has(l)||(i.add(l),n.push({from:r,to:l,kind:"package-dep",source:"inferred",confidence:"high",evidence:[{file:Z(e,m.join(o,"pyproject.toml")),detail:`path dependency ${c[1]}`}]}));}return n}async function Bt(e,t,r,o){let s=await be(m.join(o,"go.mod"));if(!s)return [];let n=[],i=new Set,a=/replace\s+\S+\s+=>\s+(\.[^\s]+)/g,c;for(;(c=a.exec(s))!==null;){let l=ee(t,m.resolve(o,c[1]));!l||l===r||ve(t,r,l)||i.has(l)||(i.add(l),n.push({from:r,to:l,kind:"package-dep",source:"inferred",confidence:"high",evidence:[{file:Z(e,m.join(o,"go.mod")),detail:`go.mod replace ${c[1]}`}]}));}return n}async function Lt(e,t,r=new Set){let o=[],s=[e];for(;s.length>0&&o.length<t;){let n=s.shift();if(!n)continue;let i=[];try{i=await P.readdir(n,{withFileTypes:true});}catch{continue}let a=[],c=[];for(let l of i)if(l.isDirectory()){let u=m.resolve(n,l.name);if(r.has(u)||Kt.has(l.name)||a$5(l.name)||l.name.startsWith("."))continue;a.push(m.join(n,l.name));}else l.isFile()&&Nt.has(m.extname(l.name))&&c.push(m.join(n,l.name));c.sort((l,u)=>l.localeCompare(u)),a.sort((l,u)=>l.localeCompare(u));for(let l of c){if(o.length>=t)break;o.push(l);}s.push(...a);}return o}var Ut=[/\bfrom\s+["']([^"']+)["']/g,/\bimport\s+["']([^"']+)["']/g,/\bimport\s*\(\s*["']([^"']+)["']\s*\)/g,/\brequire\s*\(\s*["']([^"']+)["']\s*\)/g];function zt(e){let t=new Set;for(let r of Ut){r.lastIndex=0;let o;for(;(o=r.exec(e))!==null;){let s=o[1];s.startsWith(".")&&t.add(s);}}return [...t]}async function we(e,t,r,o){let s=new Map;for(let[n,i]of t.idToDir.entries()){if(o&&!o.has(n))continue;let a=new Set([...t.idToDir.entries()].filter(([l,u])=>l!==n&&ke(i,u)).map(([,l])=>m.resolve(l))),c=await Lt(i,r,a);for(let l of c){let u=await P.stat(l).catch(()=>null);if(!u||u.size>$t)continue;let p=await be(l);if(p)for(let d of zt(p)){let f=m.resolve(m.dirname(l),d),k=ee(t,f);if(!k||k===n||ve(t,n,k))continue;let g=`${n}\0${k}`,v=s.get(g);v||(v={from:n,to:k,evidence:[]},s.set(g,v)),v.evidence.length<it&&v.evidence.push({file:Z(e,l),detail:`imports ${d}`});}}}return [...s.values()].map(n=>({from:n.from,to:n.to,kind:"code-import",source:"inferred",confidence:"medium",evidence:n.evidence}))}function qt(e,t,r){let o=new Map;for(let s of r.projects){let n=Jt(e,t,s);n&&o.set(s.slug,n);}return o}function Jt(e,t,r){let o=[r.relativePath,r.externalPath].filter(s=>typeof s=="string"&&s.length>0);for(let s of o){let n=m.resolve(e,s),i=t.dirToId.get(n)??ee(t,n);if(i)return i}return t.idToDir.has(r.slug)?r.slug:null}function pt(e,t,r){let o=[],s=qt(e,t,r),n=g$1,i=new Map,a=new Map;for(let c of r.projects){let l=s.get(c.slug);if(!l)continue;let u=c.contracts??{publishes:[],consumes:[],dependsOn:[]};for(let p of u.dependsOn??[]){let d=s.get(p);!d||d===l||o.push({from:l,to:d,kind:"service-dependsOn",source:"contract",confidence:"high",evidence:[{file:n,detail:`dependsOn ${p}`}]});}for(let p of u.publishes??[])i.has(p)||i.set(p,new Set),i.get(p)?.add(l);for(let p of u.consumes??[])a.has(p)||a.set(p,new Set),a.get(p)?.add(l);}for(let[c,l]of i.entries()){let u=a.get(c);if(u)for(let p of u)for(let d of l)p!==d&&o.push({from:p,to:d,kind:"event-pub-sub",source:"contract",confidence:"high",evidence:[{file:n,detail:`consumes event ${c}`}]});}return o.push(...Xt(r,s)),o}function me(e){return e.toLowerCase().replace(/[^a-z0-9]/g,"")}function Xt(e,t){let r=[],o=e.projects.map(s=>({project:s,id:t.get(s.slug)})).filter(s=>!!s.id).filter(s=>me(s.project.slug).length>=3);for(let s of e.projects){let n=t.get(s.slug);if(!n)continue;let i=s.contracts?.env??[];if(i.length===0)continue;let a=new Set;for(let c of i){let l=me(c);for(let u of o)u.id===n||a.has(u.id)||!(l.includes(me(u.project.slug))&&(u.project.ports?.length??0)>0)||(a.add(u.id),r.push({from:n,to:u.id,kind:"shared-resource",source:"inferred",confidence:"low",evidence:[{file:g$1,detail:`env ${c} references ${u.project.slug}`}]}));}}return r}async function ut(e,t){let r=await ye(m.join(e,ot)),o=Array.isArray(r?.edges)?r?.edges:[],s=[],n=new Set(f$1);for(let i of o){if(!i||typeof i!="object"||Array.isArray(i))continue;let a=i,c=typeof a.from=="string"?a.from:"",l=typeof a.to=="string"?a.to:"",u=typeof a.kind=="string"?a.kind:"";if(!t.has(c)||!t.has(l)||c===l||!n.has(u))continue;let p=Array.isArray(a.evidence)?a.evidence.map(d=>d&&typeof d=="object"&&typeof d.file=="string"?{file:d.file,...typeof d.detail=="string"?{detail:d.detail}:{}}:null).filter(d=>!!d):[];s.push({from:c,to:l,kind:u,source:"manual",confidence:"high",evidence:p.length>0?p:[{file:ot,detail:"manual edge"}]});}return s}function Yt(e){return `${e.from}\0${e.to}\0${e.kind}`}function Qt(e){let t=new Set,r=[];for(let o of e){let s=`${o.file}\0${o.detail??""}`;t.has(s)||(t.add(s),r.push(o));}return r.sort((o,s)=>o.file.localeCompare(s.file)||(o.detail??"").localeCompare(s.detail??"")).slice(0,it)}function Zt(e){let t=new Map;for(let r of e){let o=Yt(r),s=t.get(o);if(!s){t.set(o,{...r,evidence:[...r.evidence]});continue}let n=st[s.source],i=st[r.source];i>n?t.set(o,{...r,evidence:[...r.evidence,...s.evidence]}):i===n&&s.evidence.push(...r.evidence);}return [...t.values()].map(r=>({from:r.from,to:r.to,kind:r.kind,source:r.source,confidence:r.confidence,evidence:Qt(r.evidence)})).sort((r,o)=>r.from.localeCompare(o.from)||r.to.localeCompare(o.to)||r.kind.localeCompare(o.kind)||r.source.localeCompare(o.source))}function he(e){return Math.round(e*1e3)/1e3}function er(e){return Math.max(0,Math.min(100,Math.round(e)))}function tr(e){return e>=75?"critical":e>=50?"high":e>=20?"medium":"low"}function rr(e){return e==="critical"||e==="high"?"strict":e==="medium"?"elevated":"normal"}function nr(e,t){let r=a$6({nodes:e,edges:t}),o=new Map;for(let s of e){let n=r.byId.get(s.id)??{fanIn:0,fanOut:0,reach:0,betweenness:0,isHotspot:false},i=t.filter(f=>f.from===s.id||f.to===s.id),a=i.filter(f=>f.source==="contract"||f.source==="manual").length,c=i.filter(f=>f.confidence==="low").length,l=[],u=n.reach*20+n.fanIn*14+n.fanOut*8+Math.min(20,n.betweenness*4)+a*8;n.isHotspot&&(u+=24,l.push("Critical-path hotspot in dependency graph")),n.reach>0&&l.push(`Change reaches ${n.reach} dependent project(s)`),n.fanIn>0&&l.push(`${n.fanIn} direct dependent project(s)`),n.fanOut>0&&l.push(`${n.fanOut} direct dependency project(s)`),a>0&&l.push(`${a} contract/manual edge(s)`),c>0&&l.push(`${c} low-confidence inferred edge(s) need review`),i.length===0&&l.push(e.length===1?"Single-project workspace; inter-project dependency edges are not applicable":"No dependency evidence connected to this project yet");let p=er(u),d=tr(p);o.set(s.id,{weight:d,score:p,verificationPriority:rr(d),reasons:l.slice(0,5),centrality:{fanIn:n.fanIn,fanOut:n.fanOut,reach:n.reach,betweenness:n.betweenness,isHotspot:n.isHotspot}});}return o}function or(e,t){let r=nr(e,t);return e.map(o=>({...o,operationalProfile:r.get(o.id)}))}function sr(e,t){let r=new Set;for(let c of t)r.add(c.from),r.add(c.to);let o=e.length,s=t.length,n=e.filter(c=>r.has(c.id)).length,i=Math.max(0,o-n),a=a$6({nodes:e,edges:t});return {nodeCount:o,edgeCount:s,inferredEdges:t.filter(c=>c.source==="inferred").length,contractEdges:t.filter(c=>c.source==="contract").length,manualEdges:t.filter(c=>c.source==="manual").length,authoritativeEdges:t.filter(c=>c.source==="contract"||c.source==="manual").length,lowConfidenceEdges:t.filter(c=>c.confidence==="low").length,orphanCount:i,connectedNodeCount:n,density:he(o>1?s/(o*(o-1)):0),edgeCoverageRatio:he(o>0?n/o:1),evidenceCoverageRatio:he(s>0?t.filter(c=>c.evidence.length>0).length/s:1),hotspotCount:a.hotspots.length,hasCycle:ir(e,t)}}function ar(e,t,r){let o=[],s=e.filter(n=>!t.some(i=>i.from===n.id||i.to===n.id)).map(n=>n.id).sort((n,i)=>n.localeCompare(i));return r.nodeCount===0&&o.push({code:"graph.empty",severity:"info",message:"Workspace model has no projects, so dependency reasoning is unavailable.",recommendation:"Import, scaffold, or register projects before relying on graph-aware impact."}),r.nodeCount>1&&r.edgeCount===0?o.push({code:"graph.edges.missing",severity:"warning",message:"Projects were detected, but no inter-project dependency edges were found.",recommendation:"Run graph explain, add workspace contract relationships, or define manual graph overrides for operational dependencies that code imports cannot reveal.",nodeIds:s}):r.nodeCount>1&&r.orphanCount>0&&o.push({code:"graph.orphans.detected",severity:"warning",message:`${r.orphanCount} project(s) have no dependency evidence connected to the graph.`,recommendation:"Review isolated projects and add package, contract, or manual edges when they participate in release-critical flows.",nodeIds:s.slice(0,12)}),r.lowConfidenceEdges>0&&o.push({code:"graph.low_confidence_edges",severity:"info",message:`${r.lowConfidenceEdges} inferred edge(s) are low confidence.`,recommendation:"Promote important low-confidence relationships to workspace contract or manual overrides."}),r.edgeCount>0&&r.evidenceCoverageRatio<1&&o.push({code:"graph.evidence.partial",severity:"warning",message:"Some dependency edges do not include file-level evidence.",recommendation:"Attach evidence to manual overrides so agents can audit why a relationship exists."}),r.hasCycle&&o.push({code:"graph.cycle.detected",severity:"error",message:"The dependency graph contains at least one directed cycle.",recommendation:"Break the cycle or document the relationship explicitly before using graph-aware release gates."}),o.sort((n,i)=>{let a={error:0,warning:1,info:2};return a[n.severity]-a[i.severity]||n.code.localeCompare(i.code)})}function ir(e,t){let r=new Map;for(let c of e)r.set(c.id,[]);for(let c of t)r.has(c.from)||r.set(c.from,[]),r.get(c.from)?.push(c.to);let o=0,s=1,n=2,i=new Map;for(let c of r.keys())i.set(c,o);let a=c=>{let l=[{id:c,index:0}];for(i.set(c,s);l.length>0;){let u=l[l.length-1],p=r.get(u.id)??[];if(u.index>=p.length){i.set(u.id,n),l.pop();continue}let d=p[u.index];u.index+=1;let f=i.get(d)??o;if(f===s)return true;f===o&&(i.set(d,s),l.push({id:d,index:0}));}return false};for(let c of [...r.keys()].sort())if(i.get(c)===o&&a(c))return true;return false}function ft(e$1,t,r,o){let s=Zt(r.filter(c=>t.has(c.from)&&t.has(c.to))),n=or(e$1,s),i=sr(e$1,s),a=ar(e$1,s,i);return {schemaVersion:e,generatedAt:(o??new Date).toISOString(),nodes:n,edges:s,stats:i,...a.length>0?{diagnostics:a}:{}}}async function gt(e){let t=m.resolve(e.workspacePath),r=e.maxImportFilesPerProject??at,o=ct(e.model),s=new Set(o.map(a=>a.id)),n=dt(t,e.model),i=[];return i.push(...await lt(t,n)),i.push(...await we(t,n,r)),e.contract&&i.push(...pt(t,n,e.contract)),i.push(...await ut(t,s)),ft(o,s,i,e.now)}async function mt(e){let t=m.resolve(e.workspacePath),r=e.maxImportFilesPerProject??at,o=ct(e.model),s=new Set(o.map(a=>a.id)),n=dt(t,e.model),i=[];if(i.push(...await lt(t,n)),e.structuralChange)i.push(...await we(t,n,r));else {i.push(...await we(t,n,r,e.changedProjectIds));for(let a of e.previousGraph.edges)a.kind==="code-import"&&a.source==="inferred"&&!e.changedProjectIds.has(a.from)&&s.has(a.from)&&s.has(a.to)&&i.push({from:a.from,to:a.to,kind:"code-import",source:"inferred",confidence:a.confidence,evidence:a.evidence});}return e.contract&&i.push(...pt(t,n,e.contract)),i.push(...await ut(t,s)),ft(o,s,i,e.now)}var te="workspace-model-producer.v3";var Ce=s.workspaceModelCache.schemaVersion,je=t$1.workspaceModelCache,ur=["package.json","pyproject.toml","setup.py","requirements.txt","requirements.in","go.mod","go.sum","pom.xml","build.gradle","build.gradle.kts","Cargo.toml","composer.json","Gemfile","Gemfile.lock","mix.exs","mix.lock","deno.json","deno.jsonc","deno.lock","bun.lock","bun.lockb","bunfig.toml",".bunfig.toml","deps.edn","project.clj","build.sbt","CMakeLists.txt","meson.build","workspai.project.json",".workspai/project.json",".workspai/context.json","rapidkit.project.json",".rapidkit/project.json",".rapidkit/context.json"],fr=[".csproj",".fsproj",".vbproj",".sln",".slnx",".gemspec"],ht=[t$1.workspaceContract,".workspai/workspace.json","workspai.workspace.json",".workspai/policies.yml",".workspai/policies.yaml",".rapidkit/workspace.contract.json",".rapidkit/workspace.json","rapidkit.workspace.json",".rapidkit/policies.yml",".rapidkit/policies.yaml"],kt=new Set([".ts",".tsx",".js",".jsx",".mjs",".cjs",".vue",".svelte",".rb",".go",".py",".java",".kt",".kts",".rs",".cs",".php",".ex",".exs",".clj",".cljs",".scala",".c",".cc",".cpp",".cxx",".h",".hh",".hpp",".hxx",".proto",".graphql",".gql",".sql",".sh"]),gr=new Set([".git",".workspai",".rapidkit","node_modules","dist","build","out","target","coverage",".next",".turbo",".cache",".venv"]),mr=1500,re=promisify(execFile);function hr(e){return kt.has(m.extname(e).toLowerCase())}async function kr(e){try{let{stdout:t}=await re("git",["-C",e,"rev-parse","--show-toplevel"],{encoding:"utf8",timeout:1e4,maxBuffer:1048576}),r=t.trim();if(!r)return null;let o=m.relative(r,e).split(m.sep).join("/");if(o===".."||o.startsWith("../"))return null;let s=o||".",n=o?`HEAD:${o}`:"HEAD^{tree}",{stdout:i}=await re("git",["-C",r,"rev-parse",n],{encoding:"utf8",timeout:1e4,maxBuffer:1024*1024}),[a,c]=await Promise.all([re("git",["-C",r,"diff","--name-only","-z","HEAD","--",s],{encoding:"buffer",timeout:2e4,maxBuffer:64*1024*1024}),re("git",["-C",r,"ls-files","--others","--exclude-standard","-z","--",s],{encoding:"buffer",timeout:2e4,maxBuffer:64*1024*1024})]),l=new Set([a.stdout,c.stdout].flatMap(p=>p.toString("utf8").split("\0")).filter(Boolean)),u=[`git-tree:${i.trim()}`];for(let p of [...l].sort((d,f)=>d.localeCompare(f))){let d=m.resolve(r,p),f=m.relative(e,d).split(m.sep).join("/");f===".."||f.startsWith("../")||!hr(f)||u.push(`${f}:${await L(d)??"<deleted>"}`);}return u}catch{return null}}var B=null;function Pe(){if(B)return B;try{B=createRequire(import.meta.url)("../package.json")?.version??"0.0.0";}catch{B="0.0.0";}return B}async function L(e){try{let t=await P.readFile(e);return _t.createHash("sha256").update(t).digest("hex")}catch{return null}}async function yt(e){let t={};for(let o of ur){let s=await L(m.join(e,o));s&&(t[o]=s);}let r=await P.readdir(e).catch(()=>[]);for(let o of r.sort((s,n)=>s.localeCompare(n))){if(!fr.some(n=>o.toLowerCase().endsWith(n)))continue;let s=await L(m.join(e,o));s&&(t[o]=s);}return t}async function yr(e){let t=await yt(e),r=await kr(e),o=r??[];if(r)return G({manifests:t,source:o});let s=[e];for(;s.length>0&&o.length<mr;){let n=s.shift();if(!n)continue;let i=[];try{i=await P.readdir(n,{withFileTypes:true});}catch{continue}let a=[];for(let c of i)if(c.isDirectory()){if(gr.has(c.name)||a$5(c.name)||c.name.startsWith("."))continue;a.push(m.join(n,c.name));}else if(c.isFile()&&kt.has(m.extname(c.name))){let l=m.join(n,c.name),u=await P.stat(l).catch(()=>null);if(u){let p=m.relative(e,l).split(m.sep).join("/");o.push(`${p}:${u.size}:${Math.round(u.mtimeMs)}`);}}a.sort((c,l)=>c.localeCompare(l)),s.push(...a);}return o.sort((n,i)=>n.localeCompare(i)),G({manifests:t,source:o})}async function ne(e,t){let r=m.resolve(e),o={},s=[...new Set(t.map(n=>m.relative(r,m.resolve(n)).split(m.sep).join("/")))].sort((n,i)=>n.localeCompare(i));for(let n of s)o[n]=await yr(m.join(r,n));return o}async function oe(e){let t=m.resolve(e),r={};for(let o of ht){let s=await L(m.join(t,o));s&&(r[o]=s);}return r}async function se(e){let t=m.resolve(e.workspacePath),r=[...new Set(e.projectPaths.map(n=>m.relative(t,m.resolve(n)).split(m.sep).join("/")))].sort((n,i)=>n.localeCompare(i)),o=[];for(let n of r){let i=await yt(m.join(t,n));o.push({project:n,manifests:i});}let s={};for(let n of ht){let i=await L(m.join(t,n));i&&(s[n]=i);}return G({cacheSchema:Ce,cliVersion:e.cliVersion,flags:e.flags,workspaceJson:e.workspaceJson??null,marker:e.marker??null,projects:o,workspaceFiles:s})}async function Se(e){let t=await g(e,je)??a$4(e,je);try{if(!await P.pathExists(t))return null;let r=await P.readJson(t);return !r||r.schemaVersion!==Ce||r.producerRevision!==te||typeof r.inputsHash!="string"||typeof r.cliVersion!="string"||!r.model?null:r}catch{return null}}async function ae(e,t){let r={schemaVersion:Ce,producerRevision:te,...t};return h(e,je,r)}var wt="rapidkit-fact-freshness-v1",U={durable:720*60*60,derived:10080*60,evidenceBacked:1440*60,live:300,verifyBeforeUse:1440*60};function wr(e){switch(e){case "durable":return U.durable;case "derived":return U.derived;case "evidence-backed":return U.evidenceBacked;case "live":return U.live;case "verify-before-use":return U.verifyBeforeUse}}function vr(e){if(e.status)return e.status;if(e.ttlSeconds===null)return "unknown";let t=Date.parse(e.generatedAt);if(!Number.isFinite(t))return "unknown";let r=t+e.ttlSeconds*1e3;return e.now.getTime()>r?"stale":"fresh"}function br(e){let t=e.now??new Date,r=e.generatedAt??t.toISOString(),o=Date.parse(r),s=Number.isFinite(o),n=s?r:t.toISOString(),i=e.ttlSeconds===void 0?wr(e.kind):e.ttlSeconds,a=vr({generatedAt:n,ttlSeconds:i,status:e.status??(s?void 0:"unknown"),now:t}),c=Date.parse(n),l=i===null||!Number.isFinite(c)?void 0:new Date(c+i*1e3),u=e.verifyBeforeUse??(e.kind==="live"||e.kind==="verify-before-use"||e.category!=="structure"||a!=="fresh");return {schemaVersion:wt,kind:e.kind,category:e.category,generatedAt:n,ttlSeconds:i,...l?{expiresAt:l.toISOString()}:{},status:a,verifyBeforeUse:u,...e.sourceArtifact?{sourceArtifact:e.sourceArtifact}:{},...e.sourcePath?{sourcePath:e.sourcePath}:{},inputsHash:e.inputsHash??G(e.value??null),reason:e.reason}}function b(e){return {id:e.id,label:e.label,scope:e.scope,value:e.value,...e.project?{project:e.project}:{},freshness:br({...e.freshness,value:e.value})}}function vt(e){let t=e.generatedAt??(e.now??new Date).toISOString(),r={durable:0,derived:0,"evidence-backed":0,live:0,"verify-before-use":0},o={structure:0,verification:0,state:0},s=0,n=0,i=0,a=0;for(let c of e.facts)r[c.freshness.kind]+=1,o[c.freshness.category]+=1,c.freshness.status==="stale"&&(s+=1),c.freshness.status==="unknown"&&(n+=1),c.freshness.kind==="live"&&(i+=1),c.freshness.verifyBeforeUse&&(a+=1);return {schemaVersion:wt,generatedAt:t,status:s>0?"stale":n>0?"unknown":"fresh",totalFacts:e.facts.length,staleFacts:s,unknownFacts:n,liveFacts:i,verifyBeforeUseFacts:a,byKind:r,byCategory:o}}function z(e,t){let r=[...new Set(e)],o=r.filter(s=>t.has(s)).length;return {eligibleCount:r.length,boundCount:o,unknownCount:r.length-o,coverageRatio:r.length===0?null:o/r.length}}function bt(e,t){let r=e.filter(d=>d.kind==="project").map(d=>d.id),o=e.filter(d=>d.kind==="endpoint").map(d=>d.id),s=new Set(o),n=e.filter(d=>d.kind==="api"&&!!d.projectId&&d.attributes.runtimeRegistrationRequired===true).map(d=>d.id),i=new Set(n),a=new Map(e.map(d=>[d.id,d.kind])),c=new Set(t.filter(d=>d.kind==="implements"||d.kind==="defines"&&a.get(d.from)==="file"&&a.get(d.to)==="endpoint").flatMap(d=>s.has(d.from)?[d.from]:s.has(d.to)?[d.to]:[])),l=new Set(t.filter(d=>d.kind==="implements"&&(a.get(d.from)==="runtime-unit"||a.get(d.to)==="runtime-unit")).flatMap(d=>i.has(d.from)?[d.from]:i.has(d.to)?[d.to]:[])),u=new Set(r),p=d=>new Set(t.filter(f=>f.kind===d).flatMap(f=>[f.from,f.to]).filter(f=>u.has(f)));return {apiImplementation:z(o,c),apiRuntimeRegistration:z(n,l),projectTests:z(r,p("tests")),projectDeployment:z(r,p("deploys")),projectOwnership:z(r,p("owns"))}}function jt(e,t){return e.filter(o=>o.code.includes("unknown")||o.code.includes("unresolved")||o.code.includes("limit_reached")||o.code.endsWith(".empty_result")).reduce((o,s)=>o+Math.max(s.entityIds?.length??0,s.relationIds?.length??0,1),0)+Object.values(t).reduce((o,s)=>o+s.unknownCount,0)}function Ee(e,t){return t===0?1:e/t}function jr(e,t,r,o){return e.entityIds?.some(s=>t.has(s))||e.relationIds?.some(s=>r.has(s))?true:e.entityIds?.length||e.relationIds?.length?false:!/\bproject\b/i.test(e.message)||e.message.includes(o)}function Cr(e,t,r,o,s){let n=new Set(s.filter(a=>a.provider===e.id).map(a=>a.id)),i=e.inputCoverage?.filter(a=>a.scope==="workspace"||a.scope==="project"&&a.scopeId===t);return {...e,discoveredEntities:r.filter(a=>a.proofIds.some(c=>n.has(c))).length,discoveredRelations:o.filter(a=>a.proofIds.some(c=>n.has(c))).length,proofCount:n.size,...i?{inputCoverage:i}:{}}}function Pr(e,t){let r=new Set(e.entities.filter(g=>g.projectId===t).map(g=>g.id)),o=e.relations.filter(g=>r.has(g.from)||r.has(g.to)),s=new Set(r);for(let g of o)s.add(g.from),s.add(g.to);let n=e.entities.filter(g=>s.has(g.id)),i=new Set([...n,...o].flatMap(g=>g.proofIds)),a=e.proofs.filter(g=>i.has(g.id)),c=new Set(o.map(g=>g.id)),l=e.diagnostics.filter(g=>jr(g,s,c,t)),u=e.providers.map(g=>Cr(g,t,n,o,a)),p=e.source.inputs?.scopes.filter(g=>g.kind==="workspace"||g.kind==="project"&&g.id===t)??[],d=p.filter(g=>!g.truncated).length,f=u.reduce((g,v)=>(v.status==="failed"?g.failed+=1:v.status==="skipped"||v.inputCoverage?.every(W=>W.status==="not-applicable")?g.notApplicable+=1:v.status==="partial"||v.inputCoverage?.some(W=>W.status==="bounded")?g.bounded+=1:g.complete+=1,g),{complete:0,bounded:0,notApplicable:0,failed:0}),k=bt(n,o);return {...e,entities:n,relations:o,proofs:a,providers:u,quality:{entityCount:n.length,relationCount:o.length,proofCount:a.length,entityProofCoverageRatio:Ee(n.filter(g=>g.proofIds.length>0).length,n.length),relationProofCoverageRatio:Ee(o.filter(g=>g.proofIds.length>0).length,o.length),providerSuccessRatio:Ee(u.filter(g=>g.status!=="failed").length,u.length),conflictCount:l.filter(g=>g.code.includes("conflict")).length,unknownCount:jt(l,k),bindingCoverage:k,...e.quality.completeness?{completeness:{status:p.some(g=>g.truncated)||f.bounded>0||f.failed>0?"bounded":"complete",inventory:{scopeCount:p.length,completeScopes:d,boundedScopes:p.length-d,eligibleFiles:p.reduce((g,v)=>g+(v.eligibleFileCount??v.fileCount),0),indexedFiles:p.reduce((g,v)=>g+v.fileCount,0),eligibleFileCountExact:p.every(g=>g.eligibleFileCountExact!==false)},providers:f}}:{},portable:true,secretValuesEmitted:false},diagnostics:l}}var Sr=s.projectKnowledgeGraphReference.schemaVersion;function Pt(e,t){let r=Pr(e,t),o={schemaVersion:Sr,generatedAt:e.generatedAt,project:{name:t},canonical:{graph:"workspace:.workspai/reports/workspace-knowledge-graph.json",boundedQuery:`workspai workspace graph search <task-query> --scope project:${t} --limit 12 --json`,sourceHash:e.source.hash,projectionHash:c$1(r)},summary:{entityCount:r.entities.length,relationCount:r.relations.length,proofCount:r.proofs.length}};return {...o,integrity:{algorithm:"sha256",payloadHash:c$1(o),portable:true,absolutePathsEmitted:false}}}function St(e,t){return m.resolve(t.absolutePath??m.join(e,t.path))}var Er=q$1.model,ie=p.model;function We(e){return e.projectTopology??e.graph}function Wt(e){return !!(e.projectTopology&&e.graph&&c$1(e.projectTopology)===c$1(e.graph))}function io(e){let t=e.engineStatus==="hit"||e.engineStatus==="unchanged"?"reused":e.engineStatus==="incremental"?"partially-reused":"rebuilt";return {schemaVersion:"workspace-model-build.v1",mode:e.mode,outcome:t,engineStatus:e.engineStatus}}var Wr=["package.json","pyproject.toml","requirements.txt","go.mod","pom.xml","build.gradle","build.gradle.kts","Cargo.toml","composer.json","Gemfile","mix.exs","deno.json","deno.jsonc","bun.lock","bun.lockb","bunfig.toml",".bunfig.toml","deps.edn","project.clj","build.sbt","docker-compose.yml","docker-compose.yaml","compose.yml","compose.yaml","terraform.tf"],Rr=new Set([".git",".hg",".svn",".workspai",".rapidkit",".venv","node_modules","dist","build","target","coverage","htmlcov",".next",".turbo"]);function Rt(e,t){return (m.relative(e,t)||".").split(m.sep).join("/")}async function xt(e){try{if(!await P.pathExists(e))return null;let t=await P.readJSON(e);return t&&typeof t=="object"?t:null}catch{return null}}async function xr(e,t){for(let r of t)if(await P.pathExists(m.join(e,r)))return true;return false}function Re(e){let t=Number.parseInt(process.env.RAPIDKIT_WORKSPACE_MODEL_SCAN_DEPTH??"",10),r=typeof e=="number"&&Number.isFinite(e)?e:Number.isFinite(t)?t:4;return Math.min(12,Math.max(1,Math.trunc(r)))}async function Ar(e,t){let r=m.resolve(e),o=[{dirPath:r,depth:0}],s=new Set,n=new Set;for(;o.length>0;){let i=o.shift();if(!i)continue;let a=m.resolve(i.dirPath);if(n.has(a))continue;if(n.add(a),a!==r&&await xr(a,Wr)){s.add(a);continue}if(i.depth>=t)continue;let c=[];try{c=await P.readdir(a,{withFileTypes:true});}catch{continue}for(let l of c)!l.isDirectory()||Rr.has(l.name)||a$5(l.name)||l.name.startsWith(".")&&l.name!==".config"||o.push({dirPath:m.join(a,l.name),depth:i.depth+1});}return Array.from(s).sort((i,a)=>i.localeCompare(a))}function Mr(e){let t=new Set,r=[];for(let o of e){let s=m.resolve(o);t.has(s)||(t.add(s),r.push(s));}return r.sort((o,s)=>o.localeCompare(s))}function Et(e,t){let r=e?.[t];return typeof r=="string"&&r.trim()?r.trim():void 0}function Ir(e,t){return e?.[t]===true}function Fr(e,t,r){let o=e?.frontend&&typeof e.frontend=="object"&&!Array.isArray(e.frontend)?e.frontend:void 0,s=Et(o,"generator"),n=Et(o,"command_display"),i=typeof t=="string"&&t.startsWith("frontend.");if(!(!s&&!i))return {...s?{id:s}:{},...t?{kit:t}:{},displayName:r,source:Ir(o,"official_generator")?"official-generator":"metadata",...n?{commandDisplay:n}:{}}}async function Dr(e){let t=[".workspai/project.json",".workspai/context.json",".rapidkit/project.json",".rapidkit/context.json","package.json","product.json","tsconfig.json","pnpm-workspace.yaml","bunfig.toml",".bunfig.toml","nx.json","turbo.json","pyproject.toml","requirements.txt","go.mod","go.work","go.work.sum","pom.xml","build.gradle","build.gradle.kts","Cargo.toml","rust-toolchain.toml","rust-toolchain","CMakeLists.txt","meson.build","Makefile","WORKSPACE","WORKSPACE.bazel","MODULE.bazel","BUILD","BUILD.bazel",".bazelrc","composer.json","Gemfile","mix.exs","deno.json","setup.py","setup.cfg","Dockerfile","docker-compose.yml","docker-compose.yaml","compose.yml","compose.yaml","README.md"],r=[];for(let s of t)await P.pathExists(m.join(e,s))&&r.push(s);let o=new Set(["package.json","pyproject.toml","go.mod","go.work","pom.xml","build.gradle","build.gradle.kts","Cargo.toml","CMakeLists.txt","meson.build","composer.json","Gemfile","mix.exs","deno.json"]);if(!r.some(s=>o.has(s))){let s=[],n=new Set([".git",".workspai",".rapidkit",".venv","build","dist","node_modules","target","third_party","vendor"]),i=(p,d)=>{let f=p.toLowerCase();return ["package.json","pyproject.toml","go.mod","pom.xml","build.gradle","build.gradle.kts","cargo.toml","cmakelists.txt","meson.build","composer.json","gemfile","mix.exs","deno.json"].includes(f)||f.endsWith(".gemspec")||f==="description"&&d.toLowerCase()==="r"},a=async(p,d)=>{if(d>3||s.length>=512)return;let f=await P.readdir(p,{withFileTypes:true}).catch(()=>[]);for(let k of f.sort((g,v)=>g.name.localeCompare(v.name))){if(s.length>=512)return;k.isFile()&&i(k.name,m.basename(p))?s.push(m.relative(e,m.join(p,k.name)).split(m.sep).join("/")):k.isDirectory()&&!n.has(k.name)&&await a(m.join(p,k.name),d+1);}};await a(e,0);let c=new Map;for(let p of s){let d=p.split("/")[0],f=c.get(d)??[];f.push(p),c.set(d,f);}for(let p of c.values())p.sort((d,f)=>d.split("/").length-f.split("/").length||d.localeCompare(f));let l=[],u=[...c.keys()].sort();for(let p=0;l.length<16&&u.some(d=>p<(c.get(d)?.length??0));p+=1)for(let d of u){let f=c.get(d)?.[p];f&&l.length<16&&l.push(f);}r.push(...l.filter(p=>!r.includes(p)));}return r}async function x(e,t,r,o=t){let s=await g(e,t),n=s!==null,i={path:o.split(m.sep).join("/"),exists:n};if(s&&r){let a=await xt(s);typeof a?.generatedAt=="string"&&(i.generatedAt=a.generatedAt);let c=a?.status??a?.result??a?.verdict;typeof c=="string"&&(i.status=c);}return i}async function Or(e,t,r){let o=Rt(e,t),s=".workspai/reports",n=c=>x(t,`${s}/${c}`,r,`${o}/${s}/${c}`),i=await n("doctor-project-last-run.json");return {doctor:i?.exists===true?i:await n("doctor-last-run.json"),remediationPlan:await n("doctor-remediation-plan-last-run.json"),fixResult:await n("doctor-fix-result-last-run.json"),analyze:await n("analyze-last-run.json"),readiness:await n("release-readiness-last-run.json")}}async function Gr(e,t,r){let o=j$2(t,{searchParents:false}),s=q$2(t),n=s&&!j$3(o)?s.detection:m$1(t,o),i=D(t),a=f(n.runtime),c=await b$2(t,o,{runtime:n.runtime,framework:n.key}),l$1=r.contractProject?.slug?r.contractProject.slug:typeof o?.name=="string"&&o.name.trim()?o.name.trim():m.basename(t),u=j$3(o)?`adopted.${n.key}`:typeof o?.kit_name=="string"?o.kit_name:typeof o?.kit=="string"?o.kit:r.contractProject?.kit,p=typeof o?.engine=="string"?o.engine:i.engine!=="unknown"?i.engine:void 0,d=Fr(o,u,n.displayName),f$1=nt({kitId:u,framework:n.key,runtime:n.runtime}),k=l(t),g=[n.runtime,...k.filter(W=>W!==n.runtime)],v=await c$2({projectPath:t,declaration:r.contractProject?.governance});return {name:l$1,path:Rt(e,t),...r.includeAbsolutePaths?{absolutePath:t}:{},kind:c,category:a$3(c),runtime:n.runtime,runtimeCandidates:g,framework:n.key,frameworkDisplayName:n.displayName,confidence:n.confidence,detectionSource:n.source,supportTier:n.supportTier,runtimeSupportTier:a.tier,runtimeDoctorSupport:a.doctorSupport,moduleSupport:i.moduleSupport,...u?{kit:u}:{},...p?{engine:p}:{},...d?{generator:d}:{},createCapability:f$1,commands:{supported:i.supportedCommands,unsupported:i.unsupportedCommands,global:i.globalCommands,fleetStages:i.fleetStages,localOnly:i.localOnlyCommands,map:i.commandMap},importantFiles:await Dr(t),governance:v,evidence:await Or(e,t,r.includeEvidence),provenance:{path:r.contractProject?"workspace contract declaration reconciled with filesystem discovery":"filesystem discovery",runtime:n.source,framework:n.source,commands:"project command capability matrix",createCapability:"create planner capability contract",governance:r.contractProject?.governance!==void 0?"workspace contract declaration reconciled with repository evidence":"repository and documented external governance discovery",evidence:"project .workspai/reports"}}}async function _r(e){for(let t$1 of t(e,"workspace.json")){let r=await xt(t$1);if(r)return r}return null}function Tr(e){if(e.length===0)return "empty-workspace";let t=new Set(e.map(r=>r.category));return t.size>1?"polyglot-product-workspace":t.has("frontend")&&e.length>1?"full-stack-workspace":t.has("frontend")?"frontend-workspace":t.has("desktop")?"desktop-application-workspace":t.has("extension")?"extension-workspace":t.has("agent")?e.length>1?"agent-platform-workspace":"agent-workspace":t.has("platform")?"platform-workspace":t.has("library")?"library-workspace":e.length>1?"backend-platform":"backend-workspace"}function Nr(e){let t=new Set;for(let r of e){let o=`${r.name} ${r.path}`.toLowerCase();for(let s of ["auth","billing","payment","notification","order","admin","report","search","analytics"])o.includes(s)&&t.add(s);}return Array.from(t).sort()}function C(e,t,r,o){return {severity:e,code:t,message:r,target:o}}function At(e){let t=[];e.workspace.name.trim()||t.push(C("error","workspace.name.missing","Workspace name could not be resolved.","workspace")),e.workspace.type==="observed-workspace"&&t.push(C("warning","workspace.marker.missing","Workspace marker is missing; model is based on filesystem observation.","workspace.marker")),e.summary.projectCount===0&&t.push(C("warning","workspace.projects.empty","No project roots were detected in this workspace.","projects")),e.contracts.exists||t.push(C("warning","workspace.contract.missing","Workspace contract is missing; dependency and API edges may be incomplete.",e.contracts.workspaceContractPath));let r=new Map;for(let n of e.projects){let i=n.name.toLowerCase(),a=r.get(i)??[];a.push(n),r.set(i,a),n.importantFiles.length||t.push(C("warning","project.markers.missing",`Project ${n.name} has no important manifest files recorded.`,n.path));let c=m.isAbsolute(n.path)?n.path:m.resolve(e.workspace.root,n.path);P.existsSync(c)||t.push(C("warning","project.path.missing",`Registered project ${n.name} is not available at its declared path.`,n.path)),n.runtime==="unknown"&&t.push(C("warning","project.runtime.unknown",`Project ${n.name} runtime could not be confidently detected.`,n.path));let l=["test","build"];for(let d of l)n.commands.supported.includes(d)&&n.commands.unsupported.includes(d)&&t.push(C("error","project.commands.conflict",`Project ${n.name} marks ${d} as both supported and unsupported.`,n.path));let u=new Set(n.commands.fleetStages),p=new Set(n.commands.localOnly);for(let d of n.commands.fleetStages){p.has(d)&&t.push(C("error","project.commands.scope-conflict",`Project ${n.name} marks ${d} as both fleet and local-only.`,n.path));let f=n.commands.map[d];(!f||f.status!=="supported"||f.fleetEligible!==true||f.executionScope!=="fleet")&&t.push(C("error","project.commands.fleet-stage-invalid",`Project ${n.name} advertises ${d} as a fleet stage without a supported fleet capability.`,n.path));}for(let d of n.commands.localOnly){let f=n.commands.map[d];(!f||f.status!=="supported"||f.executionScope!=="local-only"||f.fleetEligible===true)&&t.push(C("error","project.commands.local-only-invalid",`Project ${n.name} advertises ${d} as local-only without a matching local-only capability.`,n.path));}for(let d of Object.values(n.commands.map))d.status==="supported"&&(d.fleetEligible===true&&!u.has(d.command)&&t.push(C("error","project.commands.fleet-stage-missing",`Project ${n.name} capability ${d.command} is fleet-eligible but missing from fleetStages.`,n.path)),d.executionScope==="local-only"&&d.fleetEligible!==true&&!p.has(d.command)&&t.push(C("error","project.commands.local-only-missing",`Project ${n.name} capability ${d.command} is local-only but missing from localOnly commands.`,n.path)));}for(let[n,i]of r.entries())i.length>1&&t.push(C("error","project.name.duplicate",`Project name "${n}" is ambiguous across ${i.length} project roots.`,i.map(a=>a.path).join(", ")));e.projectTopology&&e.graph&&c$1({...e.projectTopology,generatedAt:"<ignored>"})!==c$1({...e.graph,generatedAt:"<ignored>"})&&t.push(C("error","workspace.project-topology.alias-mismatch","Deprecated model.graph must remain structurally identical to canonical model.projectTopology during the v1 migration window.","projectTopology"));let o=t.filter(n=>n.severity==="error").length,s=t.filter(n=>n.severity==="warning").length;return {status:o>0?"failed":s>0?"warning":"passed",errors:o,warnings:s,issues:t}}function co(e){return At(e)}function j(e){return e.join(".")}function Kr(e,t){let r=ie,o=e.generatedAt,s=[b({id:"workspace.name",label:"Workspace name",scope:"workspace",value:e.workspace.name,freshness:{kind:"durable",category:"structure",generatedAt:o,now:t,sourceArtifact:r,sourcePath:j(["workspace","name"]),reason:"Workspace identity is structural metadata and changes through workspace setup."}}),b({id:"workspace.type",label:"Workspace type",scope:"workspace",value:e.identity.workspaceType,freshness:{kind:"derived",category:"structure",generatedAt:o,now:t,sourceArtifact:r,sourcePath:j(["identity","workspaceType"]),reason:"Workspace type is derived from the current project inventory."}}),b({id:"workspace.projectCount",label:"Project count",scope:"workspace",value:e.summary.projectCount,freshness:{kind:"derived",category:"structure",generatedAt:o,now:t,sourceArtifact:r,sourcePath:j(["summary","projectCount"]),reason:"Project count is derived from workspace discovery and should be refreshed after structural changes."}}),b({id:"workspace.runtimeFamilies",label:"Runtime families",scope:"workspace",value:e.identity.runtimeFamilies,freshness:{kind:"derived",category:"structure",generatedAt:o,now:t,sourceArtifact:r,sourcePath:j(["identity","runtimeFamilies"]),reason:"Runtime coverage is inferred from project surfaces."}}),b({id:"workspace.policyMode",label:"Workspace policy mode",scope:"policy",value:e.policies.mode,freshness:{kind:"durable",category:"structure",generatedAt:o,now:t,sourceArtifact:r,sourcePath:j(["policies","mode"]),reason:"Policy mode is configuration, not runtime state."}}),b({id:"workspace.contract.exists",label:"Workspace contract presence",scope:"contract",value:e.contracts.exists,freshness:{kind:"derived",category:"structure",generatedAt:o,now:t,sourceArtifact:r,sourcePath:j(["contracts","exists"]),reason:"Contract presence is derived from workspace files and should be refreshed before release gating."}})],n=We(e);n&&s.push(b({id:"graph.edgeCount",label:"Dependency graph edge count",scope:"graph",value:n.stats.edgeCount,freshness:{kind:"derived",category:"structure",generatedAt:n.generatedAt??o,now:t,sourceArtifact:r,sourcePath:j(["projectTopology","stats","edgeCount"]),reason:"Graph topology is derived from manifests, imports, and workspace contracts."}}),b({id:"graph.evidenceCoverageRatio",label:"Dependency graph evidence coverage",scope:"graph",value:n.stats.evidenceCoverageRatio,freshness:{kind:"derived",category:"structure",generatedAt:n.generatedAt??o,now:t,sourceArtifact:r,sourcePath:j(["projectTopology","stats","evidenceCoverageRatio"]),reason:"Graph evidence coverage changes when dependency evidence or contract edges change."}}));for(let[i,a]of e.projects.entries()){let c=`projects[${i}]`,l={kind:"derived",category:"structure",generatedAt:o,now:t,sourceArtifact:r,reason:"Project facts are derived from workspace discovery, project metadata, and framework probes."};s.push(b({id:`project.${a.name}.kind`,label:`${a.name} kind`,scope:"project",project:a.name,value:a.kind,freshness:{...l,sourcePath:j([c,"kind"])}}),b({id:`project.${a.name}.category`,label:`${a.name} category`,scope:"project",project:a.name,value:a.category,freshness:{...l,sourcePath:j([c,"category"])}}),b({id:`project.${a.name}.runtime`,label:`${a.name} runtime`,scope:"project",project:a.name,value:a.runtime,freshness:{...l,sourcePath:j([c,"runtime"])}}),b({id:`project.${a.name}.framework`,label:`${a.name} framework`,scope:"project",project:a.name,value:a.frameworkDisplayName,freshness:{...l,sourcePath:j([c,"frameworkDisplayName"])}}),b({id:`project.${a.name}.supportTier`,label:`${a.name} support tier`,scope:"project",project:a.name,value:a.supportTier,freshness:{...l,sourcePath:j([c,"supportTier"])}}),b({id:`project.${a.name}.safeFleetStages`,label:`${a.name} safe fleet stages`,scope:"command",project:a.name,value:a.commands.fleetStages,freshness:{...l,sourcePath:j([c,"commands","fleetStages"]),reason:"Safe command availability is derived from package and project command surfaces."}}),...["ci","release","ownership"].map(u=>b({id:`project.${a.name}.governance.${u}`,label:`${a.name} ${u} governance`,scope:"policy",project:a.name,value:a.governance?.[u]??{status:"unknown",provider:null,evidence:[],reference:null},freshness:{...l,sourcePath:j([c,"governance",u]),reason:"Governance truth is reconciled from repository surfaces and explicit workspace contract declarations."}})));for(let[u,p]of Object.entries(a.evidence))s.push(b({id:`project.${a.name}.evidence.${u}`,label:`${a.name} ${u} evidence`,scope:"evidence",project:a.name,value:p?{path:p.path,exists:p.exists,status:p.status??null}:{exists:false},freshness:{kind:p?.exists?"evidence-backed":"verify-before-use",category:"verification",generatedAt:p?.generatedAt??o,now:t,status:p?.exists?void 0:"unknown",sourceArtifact:p?.path??r,sourcePath:j([c,"evidence",u]),verifyBeforeUse:true,reason:p?.exists?"Evidence reports can expire or become stale after source changes.":"Missing evidence must be generated before this fact is used for verification."}}));}for(let[i,a]of Object.entries(e.evidence))s.push(b({id:`workspace.evidence.${i}`,label:`Workspace ${i} evidence`,scope:"evidence",value:a?{path:a.path,exists:a.exists,status:a.status??null}:null,freshness:{kind:a?.exists?"evidence-backed":"verify-before-use",category:"verification",generatedAt:a?.generatedAt??o,now:t,status:a?.exists?void 0:"unknown",sourceArtifact:a?.path??r,sourcePath:j(["evidence",i]),verifyBeforeUse:true,reason:a?.exists?"Workspace evidence can expire or become stale after project, dependency, or policy changes.":"Missing workspace evidence must be generated before release or repair decisions."}}));return s}async function xe(e,t){let[r,o,s,n,i,a$3]=await Promise.all([a(e),_r(e),Ae(e),a$1(e),a$2(e,{descendIntoMatchedProjects:false}),Ar(e,t)]),c=new Map;for(let u of s?.projects??[]){let p=u.externalPath?m.resolve(e,u.externalPath):m.resolve(e,u.relativePath);c.set(p,u);}let l=Mr([...i,...a$3.filter(u=>!i.some(p=>{let d=m.relative(p,u);return d!==""&&d!==".."&&!d.startsWith(`..${m.sep}`)&&!m.isAbsolute(d)})),...c.keys(),...n.map(u=>m.isAbsolute(u.path)?u.path:m.join(e,u.path))]);return {marker:r,workspaceJson:o,workspaceContract:s,contractProjectPaths:c,projectPaths:l}}async function ce(e){let t$2=m.resolve(e.workspacePath),r=e.includeAbsolutePaths===true,o=e.includeEvidence===true,s=Re(e.observableScanDepth),n=e.now??new Date,{marker:i,workspaceJson:a,workspaceContract:c,contractProjectPaths:l,projectPaths:u}=await xe(t$2,s),p$1=e.reuseProjectModels,d=await Promise.all(u.map(w=>{if(p$1){let Ft=m.relative(t$2,m.resolve(w)).split(m.sep).join("/"),Me=p$1.get(Ft);if(Me)return Promise.resolve(Me)}return Gr(t$2,w,{includeAbsolutePaths:r,includeEvidence:o,contractProject:l.get(m.resolve(w))})})),f=typeof a?.workspace_name=="string"?a.workspace_name:typeof a?.name=="string"?a.name:i?.name||c?.workspace.name||m.basename(t$2),k=typeof a?.profile=="string"?a.profile:typeof a?.mode=="string"?a.mode:c?.workspace.profile,g=Array.from(new Set(d.map(w=>w.kind))).sort(),v=Array.from(new Set(d.map(w=>w.category))).sort(),W=Array.from(new Set(d.flatMap(w=>w.runtimeCandidates.length>0?w.runtimeCandidates:[w.runtime]))).sort(),q=Array.from(new Set(d.map(w=>w.framework))).sort(),_=[".workspai/policies.yml",".workspai/policies.yaml",".rapidkit/policies.yml",".rapidkit/policies.yaml"].find(w=>P.existsSync(m.join(t$2,w))),J=t(t$2,"workspace.contract.json").map(w=>m.relative(t$2,w).split(m.sep).join("/")).find(w=>P.existsSync(m.join(t$2,w)))??t$1.workspaceContract,D=await P.pathExists(m.join(t$2,J)),X={schemaVersion:Er,generatedAt:n.toISOString(),workspace:{name:f,root:t$2,...k?{profile:k}:{},type:i?"rapidkit-workspace":"observed-workspace",...i?{marker:{createdBy:i.createdBy,version:i.version,createdAt:i.createdAt}}:{}},identity:{workspaceType:Tr(d),surfaces:g,categories:v,runtimeFamilies:W,businessCapabilities:Nr(d)},discovery:{observableScanDepth:s},projects:d,policies:{mode:typeof a?.policy_mode=="string"?a.policy_mode:typeof a?.policyMode=="string"?a.policyMode:"warn",source:_??null,exists:!!_},contracts:{workspaceContractPath:J,exists:D,status:D?"known":"missing"},evidence:{doctor:await x(t$2,p.doctor,o),projectDoctor:await x(t$2,t$1.doctorProject,o),doctorRemediationPlan:await x(t$2,t$1.doctorRemediationPlan,o),artifactRemediationPlan:await x(t$2,t$1.artifactRemediationPlan,o),doctorFixResult:await x(t$2,t$1.doctorFixResult,o),analyze:await x(t$2,p.analyze,o),readiness:await x(t$2,p.readiness,o),pipeline:await x(t$2,t$1.pipelineLastRun,o)},summary:{projectCount:d.length,runtimes:W,frameworks:q,firstClassProjects:d.filter(w=>w.supportTier==="first-class").length,extendedProjects:d.filter(w=>w.supportTier==="extended").length,observedProjects:d.filter(w=>w.supportTier==="observed").length}},S=await Mt(t$2,X,{contractExists:D,now:n,incrementalGraph:e.incrementalGraph}),E={...X,projectTopology:S,graph:S},O=At(E),T=Kr({...E},n),It=vt({facts:T,generatedAt:n.toISOString(),now:n});return {...E,facts:T,factFreshness:It,validation:O}}async function lo(e){if(e.cache!==true)return {model:await ce(e),cache:"disabled"};let t=m.resolve(e.workspacePath),r=Re(e.observableScanDepth),o=Pe(),{marker:s,workspaceJson:n,projectPaths:i}=await xe(t,r),a=await se({workspacePath:t,cliVersion:o,flags:{includeAbsolutePaths:e.includeAbsolutePaths===true,includeEvidence:e.includeEvidence===true,observableScanDepth:r},projectPaths:i,workspaceJson:n,marker:s}),c=await Se(t);if(c&&c.cliVersion===o&&c.inputsHash===a&&Wt(c.model))return {model:c.model,cache:"hit"};let l=await ce({...e}),[u,p]=await Promise.all([ne(t,i),oe(t)]);return await ae(t,{cliVersion:o,inputsHash:a,generatedAt:(e.now??new Date).toISOString(),model:l,projectSignatures:u,workspaceFileSignatures:p}),{model:l,cache:"miss"}}function $r(e,t){let r=new Set,o=new Set,s=new Set;for(let[n,i]of Object.entries(t))n in e?e[n]!==i&&r.add(n):o.add(n);for(let n of Object.keys(e))n in t||s.add(n);return {changed:r,added:o,removed:s}}function Vr(e={},t={}){let r=new Set([...Object.keys(e),...Object.keys(t)]);for(let o of r)if(e[o]!==t[o])return false;return true}async function po(e){let t=m.resolve(e.workspacePath),r=Re(e.observableScanDepth),o=Pe(),s=e.now??new Date,{marker:n,workspaceJson:i,projectPaths:a}=await xe(t,r),c=await Se(t),l=async()=>{let S=await ce({...e}),E=await se({workspacePath:t,cliVersion:o,flags:{includeAbsolutePaths:e.includeAbsolutePaths===true,includeEvidence:e.includeEvidence===true,observableScanDepth:r},projectPaths:a,workspaceJson:i,marker:n}),[O,T]=await Promise.all([ne(t,a),oe(t)]);return await ae(t,{cliVersion:o,inputsHash:E,generatedAt:s.toISOString(),model:S,projectSignatures:O,workspaceFileSignatures:T}),{model:S,mode:"full"}},u=c?We(c.model):void 0;if(!c||c.cliVersion!==o||!c.projectSignatures||!u||!Wt(c.model))return l();let p=await oe(t);if(!Vr(c.workspaceFileSignatures,p))return l();let d=await ne(t,a),{changed:f,added:k,removed:g}=$r(c.projectSignatures,d);if(f.size===0&&k.size===0&&g.size===0)return {model:c.model,mode:"unchanged"};let v=new Set([...f,...k]),W=new Map;for(let S of c.model.projects){let E=S.path.split(m.sep).join("/");!v.has(E)&&!g.has(E)&&W.set(E,S);}let q=new Set,_=false;for(let S of c.model.projects){let E=S.path.split(m.sep).join("/");f.has(E)&&q.add(S.name);}let J=k.size>0||g.size>0,D=await ce({...e,reuseProjectModels:W,incrementalGraph:{previousGraph:u,changedProjectIds:q,structuralChange:J||_}});for(let S of c.model.projects){let E=S.path.split(m.sep).join("/");if(!f.has(E))continue;let O=D.projects.find(T=>T.path.split(m.sep).join("/")===E);if(O&&O.name!==S.name){_=true;break}}if(_)return l();let X=await se({workspacePath:t,cliVersion:o,flags:{includeAbsolutePaths:e.includeAbsolutePaths===true,includeEvidence:e.includeEvidence===true,observableScanDepth:r},projectPaths:a,workspaceJson:i,marker:n});return await ae(t,{cliVersion:o,inputsHash:X,generatedAt:s.toISOString(),model:D,projectSignatures:d,workspaceFileSignatures:p}),{model:D,mode:"incremental"}}async function Ae(e){try{let{contract:t}=await p$1({workspacePath:e});return t&&typeof t=="object"?t:null}catch{return null}}async function Mt(e,t,r){let o=r.contractExists?await Ae(e):null;try{return r.incrementalGraph?await mt({workspacePath:e,model:t,contract:o,now:r.now,previousGraph:r.incrementalGraph.previousGraph,changedProjectIds:r.incrementalGraph.changedProjectIds,structuralChange:r.incrementalGraph.structuralChange}):await gt({workspacePath:e,model:t,contract:o,now:r.now})}catch{let s=t.projects.map(n=>({id:n.name,path:n.path}));return {schemaVersion:"workspace-dependency-graph.v1",generatedAt:r.now.toISOString(),nodes:s,edges:[],stats:{nodeCount:s.length,edgeCount:0,inferredEdges:0,contractEdges:0,manualEdges:0,authoritativeEdges:0,lowConfidenceEdges:0,orphanCount:s.length,connectedNodeCount:0,density:0,edgeCoverageRatio:s.length>0?0:1,evidenceCoverageRatio:1,hotspotCount:0,hasCycle:false},diagnostics:s.length>1?[{code:"graph.inference.failed",severity:"warning",message:"Dependency graph inference failed; model contains projects but no dependency edges.",recommendation:"Run workspace model again after fixing graph inputs, or add workspace contract/manual graph overrides.",nodeIds:s.map(n=>n.id).sort((n,i)=>n.localeCompare(i))}]:void 0}}}async function uo(e,t,r={}){let o=e.contracts.exists?await Ae(t):null,{buildWorkspaceKnowledgeGraph:s}=await import('./workspace-knowledge-graph-OUTCLYS2.js'),n=d(e),i=r.refreshKnowledgeGraph?null:await P.readJson(m.join(t,p.knowledgeGraph)).then(p=>p).catch(()=>null),a=await s({workspacePath:t,workspace:{name:e.workspace.name,...e.workspace.profile?{profile:e.workspace.profile}:{}},projects:e.projects.map(p=>({id:p.name,path:p.path,...p.absolutePath?{absolutePath:p.absolutePath}:{},runtime:p.runtime,runtimeCandidates:p.runtimeCandidates,framework:p.framework,kind:p.kind,category:p.category,...p.governance?{governance:p.governance}:{},...p.kit?{kit:p.kit}:{}})),projectTopology:We(e)??await Mt(t,e,{contractExists:e.contracts.exists,now:new Date(e.generatedAt)}),contract:o,now:new Date(e.generatedAt),source:{kind:"workspace-model",artifact:ie,hashAlgorithm:"sha256",hash:d$1(n)},previousGraph:i}),c=[],l=new Map;for(let p of e.projects){let d=St(t,p);if(!(await P.stat(d).catch(()=>null))?.isDirectory())continue;let k=await P.realpath(d),g=l.get(k);if(g)throw new Error(`Projects ${g} and ${p.name} resolve to the same graph artifact root: ${d}`);l.set(k,p.name),c.push({rootPath:d,relativePath:t$1.projectKnowledgeGraphReference,payload:Pt(a,p.name)});}let u=await j$1(t,ie,[{rootPath:t,relativePath:p.knowledgeGraph,payload:a},{rootPath:t,relativePath:ie,payload:n},...c]);for(let p$1 of c){let d=m.join(p$1.rootPath,p.knowledgeGraph);(await P.readJson(d).catch(()=>null))?.schemaVersion===q$1.knowledgeGraph&&await P.remove(d).catch(()=>{});}return u[1]}export{nt as a,zr as b,Yr as c,G as d,wt as e,b as f,vt as g,bt as h,jt as i,Pr as j,St as k,Er as l,ie as m,We as n,io as o,co as p,Kr as q,ce as r,lo as s,po as t,uo as u};
@@ -1,4 +1,4 @@
1
- import {a}from'./chunk-A5FBGRJA.js';import {a as a$1}from'./chunk-AFIFZTOY.js';import {t,s}from'./chunk-ODK4LCEL.js';import {s as s$1}from'./chunk-RGNCL5OB.js';import {k,v,e,a as a$2,u,f as f$1}from'./chunk-VQZ5PI5J.js';import b from'crypto';import P from'fs';import d from'fs/promises';import i from'path';import T from'fs-extra';var x=s.projectWorkspaceLink.schemaVersion,L="workspai.project-workspace-link",l=class extends Error{constructor(r,a,o={}){super(a);this.code=r;this.context=o;this.name="ProjectWorkspaceResolutionError";}code;context};function $(e){return P.existsSync(i.join(e,".workspai-workspace"))?".workspai-workspace":".workspai/workspace.json"}function _(e){return b.createHash("sha256").update([e.workspaceName,a(e.workspacePath),e.projectName,a(e.projectPath),e.relativePath.replace(/\\/g,"/"),e.relationship].join("\0")).digest("hex")}function I(e){let t=i.resolve(e);for(;;){if(k(t))return t;let r=i.dirname(t);if(r===t)return null;t=r;}}function J(e){let t=i.resolve(e);for(;;){if([...u(t,"project.json"),...u(t,"context.json")].some(a=>P.existsSync(a)))return t;let r=i.dirname(t);if(r===t)return null;t=r;}}function y(e){return JSON.parse(P.readFileSync(e,"utf8"))}function K(e){let t$1=y(e);if(!t$1||typeof t$1!="object"||Array.isArray(t$1))throw new l("project.workspace.link-invalid",`Project workspace link is not a JSON object: ${e}`,{linkPath:e});let r=t$1;if(r.schemaVersion!==x||r.kind!==L||r.state!=="active"||!r.workspace||typeof r.workspace.name!="string"||r.workspace.name.trim().length===0||typeof r.workspace.root!="string"||!i.isAbsolute(r.workspace.root)||![".workspai-workspace",".workspai/workspace.json"].includes(r.workspace.marker??"")||r.workspace.contract!==t.workspaceContract||!r.project||typeof r.project.name!="string"||r.project.name.trim().length===0||typeof r.project.relativePath!="string"||i.isAbsolute(r.project.relativePath)||r.project.relativePath.split(/[\\/]/).includes("..")||!["managed","adopted","imported","linked","restored"].includes(r.project.relationship??"")||!r.integrity||r.integrity.algorithm!=="sha256"||typeof r.integrity.binding!="string"||!/^[a-f0-9]{64}$/.test(r.integrity.binding))throw new l("project.workspace.link-invalid",`Project workspace link does not satisfy ${x}: ${e}`,{linkPath:e});try{a$1(t$1,"contracts/project-workspace-link.v1.json","Project workspace link");}catch(a){throw new l("project.workspace.link-invalid",`Project workspace link does not satisfy ${x}: ${e}`,{linkPath:e,validationError:a instanceof Error?a.message:String(a)})}return r}function f(e,t){let r=i.join(e,".workspai","workspace.contract.json");if(!P.existsSync(r))return null;try{let a$1=y(r);if(!Array.isArray(a$1.projects))return false;let o=a(t);return a$1.projects.some(n=>typeof n.externalPath=="string"?a(n.externalPath)===o:typeof n.relativePath!="string"||n.relativePath.startsWith("external/")?false:a(i.resolve(e,n.relativePath))===o)}catch{return false}}function M(e,t,r){let a$1=a(e),o=new Map;for(let n of s$1(t,r)){if(!P.existsSync(n))continue;let c;try{c=y(n);}catch{continue}if(Array.isArray(c.workspaces))for(let p of c.workspaces){if(!p||typeof p.name!="string"||typeof p.path!="string"||!Array.isArray(p.projects)||!p.projects.some(w=>w&&typeof w.path=="string"&&a(w.path)===a$1))continue;let s=a(p.path);!k(s)||f(s,e)!==true||o.set(s,{name:p.name,path:s});}}return [...o.values()].sort((n,c)=>n.path.localeCompare(c.path))}function m(e,t){if(e)throw t;return null}function te(e$1){let t=e$1.strict===true,r=i.resolve(e$1.startPath),a=e$1.explicitWorkspacePath?i.resolve(e$1.explicitWorkspacePath):null,o=J(r);if(a)return k(a)?e$1.requireProjectMembership===true&&o&&f(a,o)!==true?m(t,new l("project.workspace.membership-missing",`Project is not registered in the explicit workspace contract: ${a}`,{workspacePath:a,projectPath:o})):{workspacePath:a,projectPath:o,source:"explicit",linkPath:o?v(o,e):null,recovered:false}:m(t,new l("project.workspace.explicit-invalid",`Explicit workspace path is not a Workspai workspace: ${a}`,{workspacePath:a,projectPath:o}));let n=I(r);if(n)return e$1.requireProjectMembership===true&&o&&f(n,o)!==true?m(t,new l("project.workspace.membership-missing",`Project is not registered in its parent workspace contract: ${n}`,{workspacePath:n,projectPath:o})):{workspacePath:n,projectPath:o,source:"parent",linkPath:o?v(o,e):null,recovered:false};if(!o)return m(t,new l("project.workspace.unlinked","No Workspai project or workspace could be resolved from the current directory.",{startPath:r}));let c=v(o,e),p=null;if(P.existsSync(c)){let s;try{s=K(c);}catch(O){if(t)throw O;return null}let u=_({workspaceName:s.workspace.name,workspacePath:s.workspace.root,projectName:s.project.name,projectPath:o,relativePath:s.project.relativePath,relationship:s.project.relationship}),w=f(s.workspace.root,o);if(s.integrity.binding===u&&k(s.workspace.root)&&P.existsSync(i.join(s.workspace.root,s.workspace.marker))&&w===true)return {workspacePath:i.resolve(s.workspace.root),projectPath:o,source:"local-link",linkPath:c,recovered:false};p=s;}let h=M(o,e$1.env??process.env,e$1.platform??process.platform);return h.length>1?m(t,new l("project.workspace.ambiguous",`Project is registered in more than one valid workspace: ${h.map(s=>s.name).join(", ")}. Pass --workspace <path> or run project workspace relink.`,{projectPath:o,candidates:h})):h.length===1?{workspacePath:h[0].path,projectPath:o,source:"registry",linkPath:c,recovered:p!==null}:p?m(t,new l("project.workspace.link-stale",`Project workspace link is stale and no valid registry relocation was found: ${p.workspace.root}`,{projectPath:o,linkPath:c,linkedWorkspacePath:p.workspace.root})):m(t,new l("project.workspace.unlinked","This Workspai project is not linked to a valid workspace. Run `npx workspai adopt .` or `npx workspai project workspace relink --workspace <path>`.",{projectPath:o,linkPath:c}))}async function F(e,t){await d.mkdir(i.dirname(e),{recursive:true});let r=`${e}.${process.pid}.${b.randomUUID()}.tmp`;try{await d.writeFile(r,`${JSON.stringify(t,null,2)}
1
+ import {a}from'./chunk-A5FBGRJA.js';import {a as a$1}from'./chunk-AFIFZTOY.js';import {s as s$1}from'./chunk-RGNCL5OB.js';import {k,v,e,a as a$2,u,f as f$1}from'./chunk-VQZ5PI5J.js';import {t,s}from'./chunk-ODK4LCEL.js';import b from'crypto';import P from'fs';import d from'fs/promises';import i from'path';import T from'fs-extra';var x=s.projectWorkspaceLink.schemaVersion,L="workspai.project-workspace-link",l=class extends Error{constructor(r,a,o={}){super(a);this.code=r;this.context=o;this.name="ProjectWorkspaceResolutionError";}code;context};function $(e){return P.existsSync(i.join(e,".workspai-workspace"))?".workspai-workspace":".workspai/workspace.json"}function _(e){return b.createHash("sha256").update([e.workspaceName,a(e.workspacePath),e.projectName,a(e.projectPath),e.relativePath.replace(/\\/g,"/"),e.relationship].join("\0")).digest("hex")}function I(e){let t=i.resolve(e);for(;;){if(k(t))return t;let r=i.dirname(t);if(r===t)return null;t=r;}}function J(e){let t=i.resolve(e);for(;;){if([...u(t,"project.json"),...u(t,"context.json")].some(a=>P.existsSync(a)))return t;let r=i.dirname(t);if(r===t)return null;t=r;}}function y(e){return JSON.parse(P.readFileSync(e,"utf8"))}function K(e){let t$1=y(e);if(!t$1||typeof t$1!="object"||Array.isArray(t$1))throw new l("project.workspace.link-invalid",`Project workspace link is not a JSON object: ${e}`,{linkPath:e});let r=t$1;if(r.schemaVersion!==x||r.kind!==L||r.state!=="active"||!r.workspace||typeof r.workspace.name!="string"||r.workspace.name.trim().length===0||typeof r.workspace.root!="string"||!i.isAbsolute(r.workspace.root)||![".workspai-workspace",".workspai/workspace.json"].includes(r.workspace.marker??"")||r.workspace.contract!==t.workspaceContract||!r.project||typeof r.project.name!="string"||r.project.name.trim().length===0||typeof r.project.relativePath!="string"||i.isAbsolute(r.project.relativePath)||r.project.relativePath.split(/[\\/]/).includes("..")||!["managed","adopted","imported","linked","restored"].includes(r.project.relationship??"")||!r.integrity||r.integrity.algorithm!=="sha256"||typeof r.integrity.binding!="string"||!/^[a-f0-9]{64}$/.test(r.integrity.binding))throw new l("project.workspace.link-invalid",`Project workspace link does not satisfy ${x}: ${e}`,{linkPath:e});try{a$1(t$1,"contracts/project-workspace-link.v1.json","Project workspace link");}catch(a){throw new l("project.workspace.link-invalid",`Project workspace link does not satisfy ${x}: ${e}`,{linkPath:e,validationError:a instanceof Error?a.message:String(a)})}return r}function f(e,t){let r=i.join(e,".workspai","workspace.contract.json");if(!P.existsSync(r))return null;try{let a$1=y(r);if(!Array.isArray(a$1.projects))return false;let o=a(t);return a$1.projects.some(n=>typeof n.externalPath=="string"?a(n.externalPath)===o:typeof n.relativePath!="string"||n.relativePath.startsWith("external/")?false:a(i.resolve(e,n.relativePath))===o)}catch{return false}}function M(e,t,r){let a$1=a(e),o=new Map;for(let n of s$1(t,r)){if(!P.existsSync(n))continue;let c;try{c=y(n);}catch{continue}if(Array.isArray(c.workspaces))for(let p of c.workspaces){if(!p||typeof p.name!="string"||typeof p.path!="string"||!Array.isArray(p.projects)||!p.projects.some(w=>w&&typeof w.path=="string"&&a(w.path)===a$1))continue;let s=a(p.path);!k(s)||f(s,e)!==true||o.set(s,{name:p.name,path:s});}}return [...o.values()].sort((n,c)=>n.path.localeCompare(c.path))}function m(e,t){if(e)throw t;return null}function te(e$1){let t=e$1.strict===true,r=i.resolve(e$1.startPath),a=e$1.explicitWorkspacePath?i.resolve(e$1.explicitWorkspacePath):null,o=J(r);if(a)return k(a)?e$1.requireProjectMembership===true&&o&&f(a,o)!==true?m(t,new l("project.workspace.membership-missing",`Project is not registered in the explicit workspace contract: ${a}`,{workspacePath:a,projectPath:o})):{workspacePath:a,projectPath:o,source:"explicit",linkPath:o?v(o,e):null,recovered:false}:m(t,new l("project.workspace.explicit-invalid",`Explicit workspace path is not a Workspai workspace: ${a}`,{workspacePath:a,projectPath:o}));let n=I(r);if(n)return e$1.requireProjectMembership===true&&o&&f(n,o)!==true?m(t,new l("project.workspace.membership-missing",`Project is not registered in its parent workspace contract: ${n}`,{workspacePath:n,projectPath:o})):{workspacePath:n,projectPath:o,source:"parent",linkPath:o?v(o,e):null,recovered:false};if(!o)return m(t,new l("project.workspace.unlinked","No Workspai project or workspace could be resolved from the current directory.",{startPath:r}));let c=v(o,e),p=null;if(P.existsSync(c)){let s;try{s=K(c);}catch(O){if(t)throw O;return null}let u=_({workspaceName:s.workspace.name,workspacePath:s.workspace.root,projectName:s.project.name,projectPath:o,relativePath:s.project.relativePath,relationship:s.project.relationship}),w=f(s.workspace.root,o);if(s.integrity.binding===u&&k(s.workspace.root)&&P.existsSync(i.join(s.workspace.root,s.workspace.marker))&&w===true)return {workspacePath:i.resolve(s.workspace.root),projectPath:o,source:"local-link",linkPath:c,recovered:false};p=s;}let h=M(o,e$1.env??process.env,e$1.platform??process.platform);return h.length>1?m(t,new l("project.workspace.ambiguous",`Project is registered in more than one valid workspace: ${h.map(s=>s.name).join(", ")}. Pass --workspace <path> or run project workspace relink.`,{projectPath:o,candidates:h})):h.length===1?{workspacePath:h[0].path,projectPath:o,source:"registry",linkPath:c,recovered:p!==null}:p?m(t,new l("project.workspace.link-stale",`Project workspace link is stale and no valid registry relocation was found: ${p.workspace.root}`,{projectPath:o,linkPath:c,linkedWorkspacePath:p.workspace.root})):m(t,new l("project.workspace.unlinked","This Workspai project is not linked to a valid workspace. Run `npx workspai adopt .` or `npx workspai project workspace relink --workspace <path>`.",{projectPath:o,linkPath:c}))}async function F(e,t){await d.mkdir(i.dirname(e),{recursive:true});let r=`${e}.${process.pid}.${b.randomUUID()}.tmp`;try{await d.writeFile(r,`${JSON.stringify(t,null,2)}
2
2
  `,{encoding:"utf8",mode:384});try{await d.rename(r,e);}catch(a){let o=a.code;if(o!=="EEXIST"&&o!=="EPERM")throw a;await T.move(r,e,{overwrite:true});}}finally{await d.rm(r,{force:true}).catch(()=>{});}}async function D(e){let t=i.join(e,".gitignore"),r=await d.readFile(t,"utf8").catch(c=>{if(c.code==="ENOENT")return "";throw c});if(r.split(/\r?\n/).map(c=>c.trim()).includes(f$1))return;let n=`${r.length>0&&!r.endsWith(`
3
3
  `)?`
4
4
  `:""}
@@ -0,0 +1,6 @@
1
+ import {h as h$1,j,i,m,a,c as c$1,l as l$1,k}from'./chunk-7NKM6EHE.js';import {i as i$1}from'./chunk-RGNCL5OB.js';import {u,v}from'./chunk-VQZ5PI5J.js';import d from'fs';import l from'path';import _ from'fs-extra';var be=[{id:"fastapi.standard",aliases:["fastapi","fastapi.standard"],label:"fastapi \u2014 FastAPI Standard Kit",description:"Core-backed FastAPI service scaffold.",owner:"core",runtime:"python",framework:"fastapi",category:"backend",moduleSupport:true,workspacePythonEngine:"required",stability:"stable",versionPolicy:"tested-baseline"},{id:"fastapi.ddd",aliases:["fastapi.ddd","fastapi-ddd"],label:"fastapi \u2014 FastAPI DDD Kit",description:"Core-backed FastAPI DDD service scaffold.",owner:"core",runtime:"python",framework:"fastapi",category:"backend",moduleSupport:true,workspacePythonEngine:"required",stability:"stable",versionPolicy:"tested-baseline"},{id:"nestjs.standard",aliases:["nestjs","nest","nestjs.standard"],label:"nestjs \u2014 NestJS Standard Kit",description:"Core-backed NestJS service scaffold.",owner:"core",runtime:"node",framework:"nestjs",category:"backend",moduleSupport:true,workspacePythonEngine:"optional",stability:"stable",versionPolicy:"tested-baseline"},{id:"springboot.standard",aliases:["spring","springboot","springboot.standard","java"],label:"spring \u2014 Spring Boot Standard Kit",description:"npm-backed Spring Boot service scaffold.",owner:"npm",runtime:"java",framework:"springboot",category:"backend",moduleSupport:false,workspacePythonEngine:"none",stability:"stable",versionPolicy:"tested-baseline",generator:"springboot",createUsage:"workspai create project springboot.standard <name> [--java-version <major>] [--spring-boot-version <semver>] [--group-id <com.example>] [--package-name <com.example.app>] [--port <number>]"},{id:"gofiber.standard",aliases:["go","go.standard","fiber","gofiber","gofiber.standard","go/fiber"],label:"go/fiber \u2014 Go Fiber Standard Kit",description:"npm-backed Go Fiber service scaffold.",owner:"npm",runtime:"go",framework:"gofiber",category:"backend",moduleSupport:false,workspacePythonEngine:"none",stability:"stable",versionPolicy:"tested-baseline",generator:"gofiber",createUsage:"workspai create project gofiber.standard <name> [--output <dir>]"},{id:"gogin.standard",aliases:["gin","gogin","gogin.standard","go/gin"],label:"go/gin \u2014 Go Gin Standard Kit",description:"npm-backed Go Gin service scaffold.",owner:"npm",runtime:"go",framework:"gogin",category:"backend",moduleSupport:false,workspacePythonEngine:"none",stability:"stable",versionPolicy:"tested-baseline",generator:"gogin",createUsage:"workspai create project gogin.standard <name> [--output <dir>]"},{id:"dotnet.webapi.clean",aliases:["dotnet","dotnet.webapi","dotnet.webapi.clean","aspnet","aspnetcore","asp.net","asp.net-core","csharp","c#"],label:"dotnet \u2014 ASP.NET Core Clean Web API",description:"npm-backed ASP.NET Core Web API with clean architecture boundaries.",owner:"npm",runtime:"dotnet",framework:"dotnet",category:"backend",moduleSupport:false,workspacePythonEngine:"none",stability:"preview",versionPolicy:"tested-baseline",generator:"dotnet-webapi-clean",createUsage:"workspai create project dotnet.webapi.clean <name> [--target-framework net8.0] [--root-namespace <Company.Product>] [--port <number>]"},{id:"rust.axum",aliases:["rust.axum","axum","rust-axum"],label:"rust/axum \u2014 Rust Axum API",description:"Workspai-owned Axum service with health, tests, CI, and container baseline.",owner:"npm",runtime:"rust",framework:"axum",category:"backend",moduleSupport:false,workspacePythonEngine:"none",stability:"preview",versionPolicy:"tested-baseline",generator:"rust-axum",createUsage:"workspai create project rust.axum <name> [--port <number>] [--output <dir>] [--skip-git]"}],ee=new Map;for(let e of be){ee.set(e.id.toLowerCase(),e);for(let t of e.aliases)ee.set(t.toLowerCase(),e);}function W(e){return e?ee.get(e.trim().toLowerCase())??null:null}function Bt(e){return W(e)?.id??e}function $t(){return be.filter(e=>e.owner==="core"||e.generator)}function Kt(e){return W(e)?.owner==="npm"}async function Gt(e,t){if(!e.generator)throw new Error(`Kit is not backed by an npm generator: ${e.id}`);if(e.generator==="gofiber"){let{generateGoFiberKit:n}=await import('./gofiber-standard-TDJQIVQZ.js');await n(t.projectPath,{project_name:t.projectName,module_path:t.projectName,skipGit:t.skipGit,skipInstall:t.skipInstall});return}if(e.generator==="gogin"){let{generateGoGinKit:n}=await import('./gogin-standard-UEF3IHSJ.js');await n(t.projectPath,{project_name:t.projectName,module_path:t.projectName,skipGit:t.skipGit,skipInstall:t.skipInstall});return}if(e.generator==="springboot"){let{generateSpringBootKit:n}=await import('./springboot-standard-COWL75GT.js');await n(t.projectPath,{project_name:t.projectName,artifact_id:t.projectName,java_version:h(t.args,"--java-version")?.trim(),spring_boot_version:h(t.args,"--spring-boot-version")?.trim(),springdoc_version:h(t.args,"--springdoc-version")?.trim(),group_id:h(t.args,"--group-id")?.trim(),package_name:h(t.args,"--package-name")?.trim(),description:h(t.args,"--description")?.trim(),port:h(t.args,"--port")?.trim(),skipGit:t.skipGit,skipInstall:t.skipInstall});return}if(e.generator==="dotnet-webapi-clean"){let{generateDotnetWebApiCleanKit:n}=await import('./dotnet-webapi-clean-6Z4EXEJY.js');await n(t.projectPath,{project_name:t.projectName,target_framework:h(t.args,"--target-framework")?.trim(),root_namespace:h(t.args,"--root-namespace")?.trim(),description:h(t.args,"--description")?.trim(),port:h(t.args,"--port")?.trim(),skipGit:t.skipGit,skipInstall:t.skipInstall});return}if(e.generator==="rust-axum"){let{generateRustAxumKit:n}=await import('./rust-axum-4TRVPFMB.js');await n(t.projectPath,{project_name:t.projectName,description:h(t.args,"--description")?.trim(),port:h(t.args,"--port")?.trim(),skipGit:t.skipGit,skipInstall:t.skipInstall});return}throw new Error(`Unhandled npm kit generator: ${e.generator}`)}function h(e,t){let n=e.indexOf(t);if(n>=0&&n+1<e.length)return e[n+1];let r=e.find(o=>o.startsWith(`${t}=`));return r?r.slice(t.length+1):void 0}var N=["init","dev","start","build","test","lint","format","help"],ke={python:{runtime:"python",displayName:"Python",tier:"first-class",scaffoldSupport:true,importSupport:true,lifecycleCommands:N,moduleCommands:true,doctorSupport:"full",notes:["Core-backed Python projects support RapidKit Core modules and lifecycle commands."]},node:{runtime:"node",displayName:"Node.js",tier:"extended",scaffoldSupport:true,importSupport:true,lifecycleCommands:N,moduleCommands:true,doctorSupport:"full",notes:["Node projects support npm-owned lifecycle commands; NestJS is the first-class Node framework."]},go:{runtime:"go",displayName:"Go",tier:"extended",scaffoldSupport:true,importSupport:true,lifecycleCommands:N,moduleCommands:false,doctorSupport:"readiness",notes:["Go projects support workspace governance and lifecycle commands via Go tooling."]},java:{runtime:"java",displayName:"Java / Spring Boot",tier:"extended",scaffoldSupport:true,importSupport:true,lifecycleCommands:N,moduleCommands:false,doctorSupport:"readiness",notes:["Java projects support Maven/Gradle lifecycle commands and workspace governance."]},dotnet:{runtime:"dotnet",displayName:".NET / ASP.NET Core",tier:"extended",scaffoldSupport:true,importSupport:true,lifecycleCommands:N,moduleCommands:false,doctorSupport:"readiness",notes:[".NET projects support dotnet CLI lifecycle commands and workspace governance."]},php:{runtime:"php",displayName:"PHP",tier:"extended",scaffoldSupport:true,importSupport:true,lifecycleCommands:N,moduleCommands:false,doctorSupport:"readiness",notes:["Laravel projects use the official Composer generator and PHP/Composer lifecycle adapter."]},ruby:{runtime:"ruby",displayName:"Ruby",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["Ruby projects are importable and governed as observed projects until a kit exists."]},rust:{runtime:"rust",displayName:"Rust",tier:"extended",scaffoldSupport:true,importSupport:true,lifecycleCommands:N,moduleCommands:false,doctorSupport:"readiness",notes:["Rust projects support Axum and Tauri scaffolding plus Cargo lifecycle commands."]},elixir:{runtime:"elixir",displayName:"Elixir",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["Elixir projects are importable and governed as observed projects until a kit exists."]},clojure:{runtime:"clojure",displayName:"Clojure",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["Clojure projects are importable and governed as observed projects until a kit exists."]},scala:{runtime:"scala",displayName:"Scala",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["Scala projects are importable and governed as observed projects until a kit exists."]},kotlin:{runtime:"kotlin",displayName:"Kotlin",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["Kotlin projects are importable and governed as observed projects until a kit exists."]},deno:{runtime:"deno",displayName:"Deno",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["Deno projects are importable and governed as observed projects until a kit exists."]},bun:{runtime:"bun",displayName:"Bun",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["init","dev","start","build","test","lint","format","help"],moduleCommands:false,doctorSupport:"observed",notes:["Bun projects are importable and governed as observed projects until a kit exists.","Declared package scripts execute through the Bun-aware npm wrapper; undeclared lifecycle commands remain unavailable."]},c:{runtime:"c",displayName:"C",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["C projects are importable and receive manifest, test, quality, security, and coverage evidence without assuming a package manager."]},cpp:{runtime:"cpp",displayName:"C++",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["C++ projects are importable and receive manifest, test, quality, security, and coverage evidence without assuming a package manager."]},unknown:{runtime:"unknown",displayName:"Unknown",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["Unknown projects are tracked safely but require manual command configuration."]}};function O(e){return ke[e||"unknown"]??ke.unknown}function Ce(e){return h$1(e).supportTier}function Se(e){let t=O(e.runtime);return {lifecycleCommands:t.lifecycleCommands,moduleCommands:e.moduleSupport&&t.moduleCommands,unsupportedLifecycleCommands:N.filter(n=>!t.lifecycleCommands.includes(n))}}var We=["python","node","bun","go","java","dotnet","rust","php"];function M(e){return !!e&&We.includes(e)}function J(e,t){return t!=="lint"&&t!=="format"&&t!=="docs"?false:e==="python"}function he(e){let t=O(e),n=M(t.runtime),r=Je[t.runtime]??[],o=qe[t.runtime]??[];return {runtime:t.runtime,displayName:t.displayName,lifecycleCommands:t.lifecycleCommands,hasExecutor:n,packageManagers:r,primaryFiles:o,notes:t.notes}}var Je={python:["poetry","pip","uv"],node:["npm","pnpm","yarn","bun"],go:["go"],java:["maven","gradle"],dotnet:["dotnet"],php:["composer"],ruby:["bundle"],rust:["cargo"],elixir:["mix"],kotlin:["gradle"],deno:["deno"],bun:["bun"]},qe={python:["pyproject.toml","requirements.txt","requirements.in"],node:["package.json"],go:["go.mod"],java:["pom.xml","build.gradle","build.gradle.kts"],dotnet:["*.csproj","*.sln"],php:["composer.json"],ruby:["Gemfile"],rust:["Cargo.toml"],elixir:["mix.exs"],kotlin:["settings.gradle.kts"],deno:["deno.json","deno.jsonc"],bun:["package.json","bunfig.toml",".bunfig.toml"]};function D(e,t){let n=j(e)?null:e,r=i({runtime:typeof n?.runtime=="string"?n.runtime:void 0,framework:typeof n?.framework=="string"?n.framework:void 0,kitName:typeof n?.kit_name=="string"?n.kit_name:typeof n?.kit=="string"?n.kit:void 0});return r.runtime!=="unknown"?r.runtime:m(t,n).runtime}function xe(e,t={}){let n=e;for(;;){for(let o of u(n,"project.json"))if(d.existsSync(o))try{return JSON.parse(d.readFileSync(o,"utf8"))}catch{return null}if(t.searchParents===false)break;let r=l.dirname(n);if(r===n)break;n=r;}return null}function tn(e,t){return D(e,t)==="go"}function nn(e,t){return D(e,t)==="node"}function rn(e,t){return D(e,t)==="java"}function on(e,t){return D(e,t)==="dotnet"}function sn(e,t){return D(e,t)==="python"}var He=["project.json","context.json","file-hashes.json"];async function yn(e){let t=l.resolve(e),n=[];for(let r of He){let o=v(t,r);if(await _.pathExists(o))continue;let i=l.join(t,".rapidkit",r);if(!await _.pathExists(i))continue;let u=await _.readJson(i);await _.ensureDir(l.dirname(o));let f=`${o}.${process.pid}.${Date.now()}.tmp`;try{await _.writeJson(f,u,{spaces:2}),await _.move(f,o,{overwrite:false}),n.push(o);}finally{await _.remove(f).catch(()=>{});}}return n}function Ve(e){for(let t of u(e,"context.json"))if(d.existsSync(t))try{return JSON.parse(d.readFileSync(t,"utf8"))}catch{return null}return null}function ze(e){let t=e?.engine;return t==="npm"||t==="pip"||t==="python"||t==="poetry"||t==="venv"||t==="pipx"||t==="uv"?t:"unknown"}function Xe(e,t){if(e?.module_support===false||t?.module_support===false||!e&&t)return false;let n=typeof e?.kit_name=="string"?e.kit_name:typeof e?.kit=="string"?e.kit:typeof t?.kit=="string"?t.kit:void 0,r=n?W(n):void 0;return r?.owner==="core"&&r.moduleSupport===true}function Qe(e,t,n){let r=j(t)?null:t,o=i({runtime:typeof r?.runtime=="string"?r.runtime:typeof n?.runtime=="string"?n.runtime:void 0,framework:typeof r?.framework=="string"?r.framework:typeof n?.framework=="string"?n.framework:void 0,kitName:typeof r?.kit_name=="string"?r.kit_name:typeof r?.kit=="string"?r.kit:typeof n?.kit=="string"?n.kit:void 0});return o.key!=="unknown"?o:m(e,r)}function we(e){let t=l.resolve(e);if(![...u(t,"project.json"),...u(t,"context.json")].some(u=>d.existsSync(u)))return null;let r=xe(t,{searchParents:false}),o=Ve(t),i=Qe(t,r,o);return {projectRoot:t,projectJson:r,contextJson:o,detection:i,moduleSupport:Xe(r,o),engine:ze(o)}}var Ze=["build","dev","start","test","lint","format"],ne=["init","test","build","start"],Cn=["lint","format","docs"];function Sn(e){return !!e&&Ze.includes(e)}var et={dev:["dev","start:dev","watch"],start:["start","start:prod","preview"],build:["build","compile"],test:["test","test:unit","test:ci"],lint:["lint","eslint"],format:["format","prettier"]},ve={nestjs:{dev:["dev","start:dev"],start:["start","start:prod"],build:["build"],test:["test","test:e2e"],lint:["lint"],format:["format"]},express:{dev:["dev","start:dev"],start:["start"],build:["build"],test:["test"],lint:["lint"],format:["format"]},fastify:{dev:["dev","start:dev"],start:["start"],build:["build"],test:["test"],lint:["lint"],format:["format"]},koa:{dev:["dev","start:dev"],start:["start"],build:["build"],test:["test"],lint:["lint"],format:["format"]}};function tt(e){let t=l.join(e,"package.json");if(!d.existsSync(t))return {};try{let r=JSON.parse(d.readFileSync(t,"utf8")).scripts??{};return Object.fromEntries(Object.entries(r).filter(o=>typeof o[1]=="string"))}catch{return {}}}function nt(e,t){let n=t?c$1(t):"unknown",r=n!=="unknown"?a(n,e):[],o=t?ve[t]?.[e]??[]:[],i=et[e]??[],u=[...r,...o,...i];return [...new Set(u)]}function Ne(e,t,n){let r=tt(e),o=new Set(Object.keys(r));if(o.has(t))return {scriptName:t,source:"package.json"};for(let i of nt(t,n?.framework))if(o.has(i))return {scriptName:i,source:a(c$1(n?.framework??"unknown"),t).includes(i)||ve[n?.framework??""]?.[t]?.includes(i)?"framework-candidate":"generic-candidate"};return null}function oe(e){return d.existsSync(l.join(e,"package.json"))}function rt(e){try{let t=JSON.parse(d.readFileSync(l.join(e,"package.json"),"utf8"));return typeof t.packageManager!="string"?null:t.packageManager.trim().match(/^(npm|pnpm|yarn|bun)(?:@|$)/)?.[1]??null}catch{return null}}function Y(e){let t=rt(e);return t||(d.existsSync(l.join(e,"bun.lock"))||d.existsSync(l.join(e,"bunfig.toml"))?"bun":d.existsSync(l.join(e,"pnpm-lock.yaml"))?"pnpm":d.existsSync(l.join(e,"yarn.lock"))?"yarn":d.existsSync(l.join(e,"package-lock.json"))?"npm":d.existsSync(l.join(e,"pnpm-workspace.yaml"))?"pnpm":"npm")}function Mn(e,t,n=Y(e)){return n==="npm"?`npm run ${t}`:`${n} run ${t}`}function _n(e,t=Y(e)){return `${t} install`}var ot="polyglot-lifecycle-plan.v1",Ae=new Set([".git",".workspai",".rapidkit",".venv","bin","build","dist","node_modules","obj","target","third_party","vendor","fixture","fixtures","__fixtures__","testdata"]);function I(e,t){return l.relative(e,t).split(l.sep).join("/")||"."}function it(e){let t=new Set,n=(r,o)=>{if(o>4)return;let i=[];try{i=d.readdirSync(r,{withFileTypes:true});}catch{return}for(let u of i){if(u.isDirectory()){Ae.has(u.name)||n(l.join(r,u.name),o+1);continue}if(!u.isFile()||!u.name.endsWith(".go")||u.name.endsWith("_test.go"))continue;let f=l.join(r,u.name);try{let s=d.readFileSync(f,"utf8");/^\s*package\s+main\b/m.test(s)&&/^\s*func\s+main\s*\(/m.test(s)&&t.add(I(e,r));}catch{}}};return n(e,0),t.size===1?[...t][0]:null}function Re(e,t,n){let r=false;for(let o of e.split(/\r?\n/)){let i=o.match(/^\s*\[([^\]]+)\]\s*(?:#.*)?$/)?.[1]?.trim();if(i!==void 0){r=i===t;continue}if(r&&new RegExp(`^\\s*${n}\\s*=`).test(o))return true}return false}function st(e,t){let n=[],r=(o,i)=>{if(i>t)return;let u=[];try{u=d.readdirSync(o,{withFileTypes:true});}catch{return}for(let f of u.sort((s,y)=>s.name.localeCompare(y.name))){let s=l.join(o,f.name);if(f.isDirectory()){Ae.has(f.name)||r(s,i+1);continue}f.isFile()&&(["package.json","deno.json","deno.jsonc","pyproject.toml","go.mod","Cargo.toml","pom.xml","build.gradle","build.gradle.kts","build.sbt","deps.edn","composer.json","Gemfile","mix.exs","CMakeLists.txt","meson.build"].includes(f.name)||/\.(?:cs|fs|vb)proj$/i.test(f.name))&&n.push(s);}};return r(e,0),n}function at(e,t){if(l.dirname(t)!==e)return false;let n,r;try{n=JSON.parse(d.readFileSync(l.join(e,".workspai","project.json"),"utf8")),r=d.readFileSync(t,"utf8").replace(/\r\n/g,`
2
+ `).trim();}catch{return false}if(n.generated_by!=="workspai")return false;let o=String(n.kit??n.kit_name??"");if(o==="agent.microsoft.python"&&l.basename(t)==="pyproject.toml"){let i=typeof n.name=="string"?n.name:"",u=["[project]",`name = ${JSON.stringify(i)}`,'version = "0.1.0"','requires-python = ">=3.10"',"dependencies = []","","[tool.uv]","package = false"].join(`
3
+ `);return i.length>0&&r===u&&d.existsSync(l.join(e,"agents","primary","pyproject.toml"))}if(o==="agent.microsoft.dotnet"&&/\.(?:cs|fs|vb)proj$/iu.test(t)){let i=['<Project Sdk="Microsoft.NET.Sdk">'," <PropertyGroup>"," <TargetFramework>net8.0</TargetFramework>"," <ImplicitUsings>enable</ImplicitUsings>"," <Nullable>enable</Nullable>"," </PropertyGroup>","</Project>"].join(`
4
+ `);return r===i&&d.existsSync(l.join(e,"agents","primary","Primary.csproj"))}return false}function ct(e,t){let n=I(e,t).toLowerCase().split("/"),r=n.findIndex(o=>["test","tests","spec","specs","e2e","integration","integration-tests","eval","evals","bench","benchmark","benchmarks","benchmark-app","benchmark-apps"].includes(o));return r<0?false:n.length-r>2}function lt(e){if(l.basename(e)!=="package.json")return true;try{let t=l.dirname(e),n=JSON.parse(d.readFileSync(e,"utf8")),r=i=>{let u=n[i];return !!(u&&typeof u=="object"&&Object.keys(u).length>0)},o=n.scripts&&typeof n.scripts=="object"?n.scripts:{};return ["dependencies","devDependencies","optionalDependencies","peerDependencies"].some(r)||["preinstall","install","postinstall","prepare","init","test","build","start"].some(i=>typeof o[i]=="string")||["package-lock.json","pnpm-lock.yaml","yarn.lock","bun.lock","bun.lockb"].some(i=>d.existsSync(l.join(t,i)))||Le(e).length>0||d.existsSync(l.join(t,"pnpm-workspace.yaml"))}catch{return true}}function ut(e,t){let n=l.basename(t);return n!=="build.gradle"&&n!=="build.gradle.kts"||l.dirname(t)===e?false:d.existsSync(l.join(e,"settings.gradle"))||d.existsSync(l.join(e,"settings.gradle.kts"))}function pt(e,t){if(l.basename(t)!=="CMakeLists.txt")return false;let n=l.dirname(t),r=l.dirname(n);for(;r.startsWith(`${e}${l.sep}`)||r===e;){let o=l.join(r,"CMakeLists.txt");if(d.existsSync(o))try{let i=d.readFileSync(o,"utf8");for(let u of i.matchAll(/add_subdirectory\s*\(\s*["']?([^\s)"']+)/giu)){let f=u[1];if(f&&l.resolve(r,f)===n)return true}}catch{}if(r===e)break;r=l.dirname(r);}return false}function Ee(e,t){let n=e.match(new RegExp(`^\\s*${t}\\s*=\\s*\\[([\\s\\S]*?)\\]`,"m"));return n?.[1]?[...n[1].matchAll(/["']([^"']+)["']/g)].map(r=>r[1]??""):[]}function Le(e){try{let t=JSON.parse(d.readFileSync(e,"utf8"));if(Array.isArray(t.workspaces))return t.workspaces.filter(n=>typeof n=="string");if(t.workspaces&&typeof t.workspaces=="object"&&!Array.isArray(t.workspaces)){let n=t.workspaces.packages;return Array.isArray(n)?n.filter(r=>typeof r=="string"):[]}}catch{}return []}function mt(e){if(!d.existsSync(e))return [];try{let t=d.readFileSync(e,"utf8"),n=t.match(/^packages\s*:\s*\[([^\]]*)\]/m)?.[1];return n!==void 0?[...n.matchAll(/["']([^"']+)["']/g)].map(o=>o[1]??""):[...(t.match(/^packages\s*:\s*\n((?:^[ \t]+-.*\n?)*)/m)?.[1]??"").matchAll(/^[ \t]+-[ \t]+["']?([^"'#\n]+?)["']?[ \t]*$/gm)].map(o=>(o[1]??"").trim())}catch{return []}}function Me(e,t){let n=t.replace(/^\.\//,"").replace(/\/$/,""),r="^";for(let o=0;o<n.length;o+=1){let i=n[o]??"";i==="*"&&n[o+1]==="*"?(r+=".*",o+=1):i==="*"?r+="[^/]*":i==="?"?r+="[^/]":r+=i.replace(/[|\\{}()[\]^$+?.]/g,"\\$&");}return new RegExp(`${r}$`).test(e)}function dt(e,t){let n=I(e.root,t);return n==="."||n.startsWith("../")||!e.patterns.some(o=>!o.startsWith("!")&&Me(n,o))?false:!e.exclusions.some(o=>Me(n,o))}function ft(e){return e.filter(t=>l.basename(t)==="package.json").map(t=>{let n=l.dirname(t),r=[...Le(t),...mt(l.join(n,"pnpm-workspace.yaml"))];return {root:n,patterns:r.filter(o=>!o.startsWith("!")),exclusions:r.filter(o=>o.startsWith("!")).map(o=>o.slice(1))}}).filter(t=>t.patterns.length>0)}function gt(e){return e.filter(t=>l.basename(t)==="Cargo.toml").map(t=>{try{let n=d.readFileSync(t,"utf8");return /^\s*\[workspace\]\s*$/m.test(n)?{root:l.dirname(t),patterns:Ee(n,"members"),exclusions:Ee(n,"exclude")}:null}catch{return null}}).filter(t=>!!t?.patterns.length)}function _e(e,t,n){if(l.basename(e)!==n)return false;let r=l.dirname(e);return t.some(o=>o.root!==r&&dt(o,r))}function c(e,t,n="high"){return {stage:e,command:t,confidence:n,preflight:"executable-and-inputs"}}function yt(e,t){let n={};try{let i=JSON.parse(t);i.scripts&&typeof i.scripts=="object"&&!Array.isArray(i.scripts)&&(n=i.scripts);}catch{}let r=Y(e),o=i=>`${r} run ${i}`;return [c("init",r==="yarn"?"yarn install":`${r} install`),...typeof n.test=="string"?[c("test",o("test"))]:[],...typeof n.build=="string"?[c("build",o("build"))]:[],...typeof n.start=="string"?[c("start",o("start"))]:[]]}function bt(e,t,n,r){let o=d.existsSync(l.join(e,"tests")),i=["requirements.txt","requirements-dev.txt","requirements-test.txt"].some(f=>{try{return /^\s*pytest(?:\[|\s|[<>=~!])/im.test(d.readFileSync(l.join(e,f),"utf8"))}catch{return false}});return /\[tool\.pytest(?:\.|\])/i.test(t)||/["']pytest(?:\[|[<>=~!]|["'])/i.test(t)||d.existsSync(l.join(e,"pytest.ini"))||d.existsSync(l.join(e,"conftest.py"))||i?n?"poetry run pytest":`${r} -m pytest`:o?n?"poetry run python -m unittest discover -s tests":`${r} -m unittest discover -s tests`:null}function kt(e,t){let n=l.basename(t),r=l.dirname(t),o=I(e,r),i=I(e,t),u=i.toLowerCase().split("/"),f=u.some(p=>["example","examples","sample","samples","worked","eval","evals","bench","benchmark","benchmarks","benchmark-app","benchmark-apps"].includes(p))?"example":u.some(p=>["test","tests","e2e","integration","integration-tests"].includes(p))?"test":u.some(p=>["script","scripts","tool","tools","tooling"].includes(p))?"tooling":"production",s="";try{s=d.readFileSync(t,"utf8");}catch{return null}let y,b,k;if(n==="package.json"){let p=d.existsSync(l.join(r,"bun.lock"))||d.existsSync(l.join(r,"bun.lockb"))||d.existsSync(l.join(r,"bunfig.toml"))||d.existsSync(l.join(r,".bunfig.toml"));y=p?"bun":"node",b=p?"bun":"npm",k=yt(r,s);}else if(n==="deno.json"||n==="deno.jsonc"){y="deno",b="deno";let p={};try{let C=JSON.parse(s);C.tasks&&typeof C.tasks=="object"&&!Array.isArray(C.tasks)&&(p=C.tasks);}catch{}k=[...typeof p.test=="string"?[c("test","deno task test")]:[c("test","deno test","medium")],...typeof p.build=="string"?[c("build","deno task build")]:[],...typeof p.start=="string"?[c("start","deno task start")]:typeof p.dev=="string"?[c("start","deno task dev","medium")]:[]];}else if(n==="pyproject.toml"){y="python",b="python";let p=/^\s*\[tool\.poetry\]\s*$/m.test(s),C=i$1(),w=Re(s,"tool.poetry.scripts","start")||Re(s,"project.scripts","start"),P=d.existsSync(l.join(r,"main.py")),T=bt(r,s,p,C);k=[c("init",p?"poetry install":`${C} -m pip install -e .`),...T?[c("test",T)]:[],.../\[build-system\]/.test(s)?[c("build",p?"poetry build":"python -m build","medium")]:P?[c("build",`${C} -m compileall .`)]:[],...P?[c("start",`${C} main.py`)]:w?[c("start",p?"poetry run start":"start","medium")]:[]];}else if(n==="go.mod"){y="go",b="go";let p=it(r);k=[c("init","go mod download"),c("test","go test ./..."),c("build","go build ./..."),...p?[c("start",p==="."?"go run .":`go run ./${p}`)]:[]];}else if(n==="Cargo.toml")y="rust",b="cargo",k=[c("init","cargo fetch"),c("test","cargo test"),c("build","cargo build"),...d.existsSync(l.join(r,"src","main.rs"))?[c("start","cargo run")]:[]];else if(n==="pom.xml"){y="java",b="maven";let p=d.existsSync(l.join(r,"mvnw"))?"./mvnw":"mvn";k=[c("init",`${p} dependency:go-offline`),c("test",`${p} test`),c("build",`${p} package`)];}else if(n==="build.gradle"||n==="build.gradle.kts"){y=/(?:kotlin|org\.jetbrains\.kotlin)/i.test(s)?"kotlin":"java",b="gradle";let p=d.existsSync(l.join(r,"gradlew"))?"./gradlew":"gradle";k=[c("init",`${p} dependencies`),c("test",`${p} test`),c("build",`${p} build`)];}else if(n==="build.sbt")y="scala",b="sbt",k=[c("init","sbt update"),c("test","sbt test"),c("build","sbt compile")];else if(n==="deps.edn")y="clojure",b="clojure-cli",k=[c("init","clojure -P"),.../:test\b/.test(s)?[c("test","clojure -X:test","medium")]:[]];else if(/\.(?:cs|fs|vb)proj$/i.test(n)){y="dotnet",b="nuget";let p=f==="test"||/<IsTestProject>\s*true\s*<\/IsTestProject>/i.test(s)||/PackageReference\s+Include=["']Microsoft\.NET\.Test\.Sdk["']/i.test(s);k=[c("init",`dotnet restore ${n}`),...p?[c("test",`dotnet test ${n}`)]:[],c("build",`dotnet build ${n}`),...!p&&(/<Project\s+Sdk=["']Microsoft\.NET\.Sdk\.Web["']/i.test(s)||/<OutputType>\s*(?:Exe|WinExe)\s*<\/OutputType>/i.test(s))?[c("start",`dotnet run --project ${n}`)]:[]];}else if(n==="composer.json"){y="php",b="composer";let p={};try{let C=JSON.parse(s);C.scripts&&typeof C.scripts=="object"&&!Array.isArray(C.scripts)&&(p=C.scripts);}catch{}k=[c("init","composer install"),...typeof p.test<"u"?[c("test","composer test")]:d.existsSync(l.join(r,"vendor","bin","phpunit"))||d.existsSync(l.join(r,"phpunit.xml"))||d.existsSync(l.join(r,"phpunit.xml.dist"))?[c("test","vendor/bin/phpunit","medium")]:[],...typeof p.build<"u"?[c("build","composer build")]:[],...typeof p.start<"u"?[c("start","composer start")]:[]];}else if(n==="Gemfile"){y="ruby",b="bundler";let p=d.existsSync(l.join(r,"bin","rails")),C=p||/\bgem\s+['\"]rails['\"]/.test(s),w=d.existsSync(l.join(r,"spec"))||/\bgem\s+['\"]rspec(?:-rails)?['\"]/.test(s),P=d.existsSync(l.join(r,"test"));k=[c("init","bundle install"),...P&&C?[c("test","bundle exec rails test")]:w?[c("test","bundle exec rspec")]:d.existsSync(l.join(r,"Rakefile"))?[c("test","bundle exec rake test","medium")]:[],...p?[c("start","bundle exec rails server")]:[]];}else if(n==="mix.exs")y="elixir",b="mix",k=[c("init","mix deps.get"),c("test","mix test"),c("build","mix compile"),.../(?:phoenix|phx\.server)/i.test(s)?[c("start","mix phx.server")]:[]];else if(n==="CMakeLists.txt")y=/(?:\bcxx\b|\bcplusplus\b|\bc\+\+\b)/iu.test(s)?"cpp":"c",b="cmake",k=[c("init","cmake -S . -B build"),c("test","ctest --test-dir build --output-on-failure","medium"),c("build","cmake --build build")];else if(n==="meson.build")y=/(?:cpp|c\+\+)/iu.test(s)?"cpp":"c",b="meson",k=[c("init","meson setup build"),c("test","meson test -C build","medium"),c("build","meson compile -C build")];else return null;return {id:`${y}:${o}:${l.basename(i)}`,runtime:y,ecosystem:b,role:f,root:o,manifest:i,stages:k}}function Fe(e,t={}){let n=l.resolve(e),r=st(n,Math.max(0,Math.min(t.maxDepth??4,12))),o=ft(r),i=gt(r),u=r.filter(s=>!at(n,s)).filter(s=>!ct(n,s)).filter(s=>!ut(n,s)).filter(s=>!pt(n,s)).filter(s=>lt(s)).filter(s=>!_e(s,o,"package.json")).filter(s=>!_e(s,i,"Cargo.toml")).map(s=>kt(n,s)).filter(s=>!!s).filter(s=>t.includeExamples===true||s.role!=="example").sort((s,y)=>s.runtime.localeCompare(y.runtime)||s.root.localeCompare(y.root)||s.manifest.localeCompare(y.manifest)),f=[...new Set(u.map(s=>s.runtime))].sort();return {schemaVersion:ot,projectRoot:".",polyglot:f.length>1,runtimes:f,units:u}}function Te(e){let t=he(e);return t.runtime==="unknown"&&e!=="unknown"?null:{runtime:t.runtime,displayName:t.displayName,supportedCommands:t.lifecycleCommands,packageManagers:t.packageManagers,primaryFiles:t.primaryFiles,notes:t.notes,hasExecutor:t.hasExecutor}}function ie(e){try{let t=d.readFileSync(e,"utf8");return /^\s*package\s+main\b/m.test(t)&&/\bfunc\s+main\s*\(/m.test(t)}catch{return false}}function ae(e){let t=l.join(e,"main.go");if(ie(t))return "./.";try{if(d.readdirSync(e,{withFileTypes:true}).filter(o=>o.isFile()&&o.name.endsWith(".go")).map(o=>l.join(e,o.name)).filter(ie).length>0)return "./."}catch{}let n=l.join(e,"cmd");try{let r=d.readdirSync(n,{withFileTypes:true}).filter(o=>o.isDirectory()).map(o=>({name:o.name,mainPath:l.join(n,o.name,"main.go")})).filter(o=>ie(o.mainPath)).map(o=>`./cmd/${o.name}`).sort();return r.length===1?r[0]:null}catch{return null}}function St(e){try{let t=l.join(e,"Makefile");return d.existsSync(t)?d.readFileSync(t,"utf8"):""}catch{return ""}}function R(e,t){let n=St(e);return n?new RegExp(`^${t}\\s*:`,"m").test(n):false}function g(e){try{return d.existsSync(e)}catch{return false}}function E(e){try{return g(e)?d.readFileSync(e,"utf8"):""}catch{return ""}}function ht(e){let t=[e];for(;t.length>0;){let n=t.shift();if(!n)break;let r=[];try{r=d.readdirSync(n,{withFileTypes:true});}catch{continue}for(let o of r){if(o.name==="node_modules"||o.name===".git"||o.name==="dist")continue;let i=l.join(n,o.name);if(o.isFile()&&o.name.endsWith(".csproj"))return true;o.isDirectory()&&t.push(i);}}return false}function De(e,t){let n=g(l.join(e,"pyproject.toml")),r=g(l.join(e,"requirements.txt"))||g(l.join(e,"requirements.in")),o=g(l.join(e,"manage.py")),i=g(l.join(e,".workspai","cli.py"))||g(l.join(e,".rapidkit","cli.py")),u=E(l.join(e,"pyproject.toml")),f=g(l.join(e,"tests"))||g(l.join(e,"test"))||/\[tool\.pytest/i.test(u),s=/^\s*\[build-system\]\s*$/m.test(u),y=/^\s*\[(?:project\.scripts|tool\.poetry\.scripts)\]\s*$/m.test(u)&&/^\s*(?:start|serve)\s*=/m.test(u);switch(t){case "init":return n||r;case "dev":case "start":return o||y||i;case "test":return f||i;case "build":return s||i;case "lint":case "format":return n||r||o||g(l.join(e,"setup.py"))||g(l.join(e,"setup.cfg"));default:return false}}function jt(e,t){if(!g(l.join(e,"go.mod")))return false;switch(t){case "init":return true;case "dev":return R(e,"run")||ae(e)!==null;case "test":return true;case "build":return true;case "start":return R(e,"run")||ae(e)!==null;case "lint":return g(l.join(e,".golangci.yml"))||g(l.join(e,".golangci.yaml"))||R(e,"lint");case "format":return true;default:return false}}function xt(e,t,n){let r=g(l.join(e,"pom.xml")),o=g(l.join(e,"build.gradle"))||g(l.join(e,"build.gradle.kts"));if(!r&&!o)return false;let i=E(l.join(e,"pom.xml")),u=[E(l.join(e,"build.gradle")),E(l.join(e,"build.gradle.kts"))].join(`
5
+ `),f=n==="springboot"||i.includes("spring-boot-maven-plugin")||/org\.springframework\.boot|id\s*\(?\s*['"]org\.springframework\.boot['"]/u.test(u),s=f||/<mainClass>\s*[^<]+\s*<\/mainClass>/iu.test(i)||/\bmainClass(?:Name)?\s*(?:=|\.)/u.test(u);switch(t){case "init":case "test":case "build":return true;case "dev":return f;case "start":return s;case "lint":return R(e,"lint")||i.includes("checkstyle")||i.includes("spotless-maven-plugin")||u.includes("checkstyle")||u.includes("spotless");case "format":return R(e,"format")||i.includes("spotless-maven-plugin")||u.includes("spotless");default:return false}}function wt(e,t){if(!ht(e))return false;let r=[],o=s=>{let y=[];try{y=d.readdirSync(s,{withFileTypes:true});}catch{return}for(let b of y){if([".git",".workspai","bin","obj","node_modules"].includes(b.name))continue;let k=l.join(s,b.name);b.isDirectory()?o(k):/\.(?:cs|fs|vb)proj$/i.test(b.name)&&r.push(k);}};o(e);let i=r.map(E),u=i.some(s=>/<IsTestProject>\s*true\s*<\/IsTestProject>/i.test(s)||/Microsoft\.NET\.Test\.Sdk/i.test(s)),f=i.some(s=>/Microsoft\.NET\.Sdk\.Web/i.test(s)||/<OutputType>\s*(?:Exe|WinExe)\s*<\/OutputType>/i.test(s));switch(t){case "init":case "build":return true;case "dev":case "start":return f;case "test":return u;case "lint":return R(e,"lint")||E(l.join(e,"Directory.Build.props")).includes("EnforceCodeStyleInBuild");case "format":return R(e,"format")||g(l.join(e,".editorconfig"));default:return false}}function Ie(e,t,n){return t==="init"?oe(e):Ne(e,t,{framework:n})!==null}function Pt(e,t,n){switch(t){case "php":return n==="init"&&g(l.join(e,"composer.json"));case "ruby":return n==="init"&&g(l.join(e,"Gemfile"));case "rust":return g(l.join(e,"Cargo.toml"))?n==="init"||n==="test"||n==="build"||n==="start":false;case "elixir":return n==="init"&&g(l.join(e,"mix.exs"));case "deno":return g(l.join(e,"deno.json"))||g(l.join(e,"deno.jsonc"))?n==="init"||n==="dev"||n==="test"||n==="start":n==="init"&&g(l.join(e,"package.json"));case "bun":return g(l.join(e,"bunfig.toml"))||g(l.join(e,".bunfig.toml"))||g(l.join(e,"bun.lock"))?n==="init"||n==="dev"||n==="test"||n==="build"||n==="start":n==="init"&&g(l.join(e,"package.json"));default:return false}}function vt(e){try{let t=JSON.parse(E(l.join(e,"composer.json")));return new Set(Object.keys(t.scripts??{}))}catch{return new Set}}function Nt(e,t){if(!g(l.join(e,"composer.json")))return false;let n=vt(e),r=g(l.join(e,"artisan"));switch(t){case "init":return true;case "dev":return r||n.has("dev");case "start":return r||n.has("start");case "test":return r||n.has("test");case "build":return n.has("build");case "lint":return n.has("lint")||n.has("analyse")||n.has("analyze");case "format":return n.has("format")||n.has("fmt")||g(l.join(e,"pint.json"))||g(l.join(e,"vendor","bin","pint"));default:return false}}function Rt(e,t){let n=l.join(e,"Cargo.toml");if(!g(n))return false;if(t==="dev"||t==="start"){let r=E(n);if(!/^\s*\[package\]\s*$/m.test(r))return false;let i=/^\s*\[\[bin\]\]\s*$/m.test(r),f=!/^\s*autobins\s*=\s*false\s*(?:#.*)?$/m.test(r)&&g(l.join(e,"src","main.rs"));return i||f}return t==="init"||t==="build"||t==="test"||t==="lint"||t==="format"}function z(e,t,n,r){if(J(t,n))return De(e,n);if(!M(t))return Pt(e,t,n);switch(t){case "node":return Ie(e,n,r);case "bun":return Ie(e,n,r);case "python":return De(e,n);case "go":return jt(e,n);case "java":return xt(e,n,r);case "dotnet":return wt(e,n);case "rust":return Rt(e,n);case "php":return Nt(e,n);default:return false}}function Et(e,t,n){return ["init","dev","start","build","test","lint","format"].filter(o=>z(e,t,o,n))}function Be(e){let t=Se({runtime:e.runtime,moduleSupport:e.moduleSupport});if(!e.projectPath)return t;let n=Et(e.projectPath,e.runtime,e.framework),r=new Set(["help"]);for(let i of n)t.lifecycleCommands.includes(i)&&r.add(i);e.runtime==="node"&&oe(e.projectPath)&&r.add("init");let o=[...r].sort();return {lifecycleCommands:o,moduleCommands:t.moduleCommands,unsupportedLifecycleCommands:t.lifecycleCommands.filter(i=>!o.includes(i)).sort()}}var le=["version","commands","doctor","project","help"],$=["init","dev","start","build","test","lint","format"],ue=["add","modules","upgrade","diff","merge","reconcile","rollback","uninstall","checkpoint","snapshot","optimize"],pe=["create","list","info","frameworks","license"];le.filter(e=>e!=="help");function _t(e){let t=l.resolve(e);for(;;){if([...u(t,"project.json"),...u(t,"context.json")].some(o=>d.existsSync(o)))return t;let r=l.dirname(t);if(r===t)break;t=r;}return null}function B(e,t){return {command:e,...t}}var At=new Set(["dev","lint","format"]),Ke=new Set(ne);function Lt(e,t){return t?Ke.has(e)?{executionScope:"fleet",fleetEligible:true}:At.has(e)?{executionScope:"local-only",fleetEligible:false}:{executionScope:"local-only",fleetEligible:false}:{executionScope:"local-only",fleetEligible:false}}function Ft(e,t){return J(t.runtime,e)?"core":"runtime"}function Tt(e,t,n,r){return !e||!r.lifecycleCommands.includes(t)?false:z(e,n.runtime,t,n.key)}function Ot(e,t){let n=!!e&&(t.runtime==="python"||M(t.runtime)&&z(e,t.runtime,"build",t.key));return B("docs",{owner:t.runtime==="python"?"core":"runtime",status:n?"supported":"unsupported",reason:n?t.runtime==="python"?"Documentation generation is delegated to Python Core for this project.":"Project documentation commands are available through the npm wrapper for this runtime.":"Documentation commands require a supported Python or npm-executor project manifest."})}function Dt(e){let t=l.resolve(e),n=_t(e);return n||(k(t).length>0?t:null)}function It(e=process.cwd()){let t=Dt(e),n=t?we(t):null,r=n?.detection??m(e,n?.projectJson??null),o=n?.moduleSupport??false,i=n?.engine??"unknown",u=Te(r.runtime),f=O(r.runtime),s=t?l$1(t):[],y=[r.runtime,...s.filter(a=>a!==r.runtime)].filter((a,S,K)=>a!=="unknown"&&K.indexOf(a)===S);y.length===0&&y.push("unknown");let b=y.filter(a=>a!=="unknown").length>1,k=Be({runtime:r.runtime,moduleSupport:o,projectPath:t??void 0,framework:r.key}),p=t?Fe(t):null,C=new Set(p?.units.flatMap(a=>a.stages.map(S=>S.stage))??[]),w={};for(let a of le)w[a]=B(a,{owner:"npm",status:"supported",reason:a==="project"?"The npm CLI owns the project command surface and delegates only Core-specific detection operations.":a==="help"?"Help is available for every Workspai project through the npm CLI.":"Universal command available across Workspai project types."});for(let a of $){let S=Tt(t,a,r,k)||M(r.runtime)&&Ke.has(a)&&C.has(a),K=Ft(a,r),X=Lt(a,S);w[a]=B(a,{owner:K,status:S?"supported":"unsupported",executionScope:X.executionScope,fleetEligible:X.fleetEligible,reason:S?K==="core"?`Delegated to Python Core for ${r.displayName} projects.`:X.fleetEligible?`Handled by runtime adapter and eligible for workspace fleet stages (${a}).`:a==="dev"?"Local development command only; workspace fleet excludes dev by design.":r.runtime==="node"?`Handled by npm/pnpm/yarn via the resolved ${a} script in package.json.`:`Handled by the ${u?.displayName??r.displayName} runtime adapter for local project execution.`:t?r.runtime==="node"?`No ${a} script was found in package.json for this ${r.displayName} project.`:M(r.runtime)?`The ${r.displayName} runtime is tracked, but ${a} is not available from detected project manifests.`:`${r.displayName} is tracked as an observed runtime; ${a} requires project manifests or explicit scripts.`:"No Workspai project was detected."});}if(b)for(let a of $){let S=w[a];S&&(S.reason=`Composite runtime boundary detected (${y.join(", ")}). The project-local shortcut describes only the primary ${r.runtime} adapter; workspace fleet planning covers detected nested runtime units separately through \`workspace run <stage> --plan\`. ${S.reason??""}`.trim());}w.docs=Ot(t,r);for(let a of ue)w[a]=B(a,{owner:o?"core":"none",status:o?"supported":"unsupported",reason:o?"Core module/template command supported for this project.":`Core module/template commands are not available for ${r.displayName} projects.`});for(let a of pe)w[a]=B(a,{owner:a==="create"?"npm":"core",status:"global",reason:a==="create"?"Create is orchestrated by npm for multi-language workspace support.":"Engine catalog command; not specific to the selected project runtime."});let P=Object.values(w),T=P.filter(a=>$.includes(a.command)).filter(a=>a.status==="supported"),Ge=ne.filter(a=>T.some(S=>S.fleetEligible===true&&S.command===a)||C.has(a)),Ue=T.filter(a=>a.executionScope==="local-only").map(a=>a.command).sort();return {schemaVersion:1,scope:"project",projectRoot:t,engine:i,runtime:r.runtime,runtimeCandidates:y,compositeRuntime:b,lifecycleCoverage:b?"primary-runtime-only":"complete",framework:r.key,frameworkDisplayName:r.displayName,frameworkConfidence:r.confidence,frameworkSupportTier:Ce(r.key),runtimeSupportTier:f.tier,runtimeDoctorSupport:f.doctorSupport,moduleSupport:o,fleetStages:Ge,localOnlyCommands:Ue,commandMap:w,supportedCommands:P.filter(a=>a.status==="supported").map(a=>a.command).sort(),unsupportedCommands:P.filter(a=>a.status==="unsupported").map(a=>a.command).sort(),globalCommands:P.filter(a=>a.status==="global").map(a=>a.command).sort()}}function xr(e,t=process.cwd()){let n=e[0];return n?It(t).commandMap[n]??null:null}function wr(e){if(e[0]==="project"&&e[1]==="commands")return true;if(e[0]==="commands"&&e.includes("--scope")){let t=e.indexOf("--scope");return e[t+1]==="project"}return e.some(t=>t==="--scope=project")&&e[0]==="commands"}function Pr(e,t){return [`Workspai command not supported for this project: ${e.command}`,"",`Project: ${t.projectRoot??"not detected"}`,`Runtime: ${t.runtime}`,`Framework: ${t.frameworkDisplayName}`,`Reason: ${e.reason??"Unsupported for this project type."}`,"","Run `workspai project commands` to inspect supported commands for this project."].join(`
6
+ `)}export{_n as A,Fe as B,_t as C,It as D,xr as E,wr as F,Pr as G,W as a,Bt as b,$t as c,Kt as d,Gt as e,O as f,Ce as g,M as h,D as i,xe as j,tn as k,nn as l,rn as m,on as n,sn as o,yn as p,we as q,Ze as r,Cn as s,Sn as t,Ne as u,ae as v,R as w,Be as x,Y as y,Mn as z};