workspai 0.73.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 (163) 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 +78 -4
  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-WDK5ISRU.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-252EKOR6.js +2 -0
  19. package/dist/chunk-36VNERGC.js +1 -0
  20. package/dist/{chunk-TZK2R6RD.js → chunk-4DX4HBG3.js} +1 -1
  21. package/dist/chunk-4KEZQLBU.js +2 -0
  22. package/dist/{chunk-PKKSRXUS.js → chunk-6B7L4NZE.js} +1 -1
  23. package/dist/chunk-7NKM6EHE.js +7 -0
  24. package/dist/{chunk-FE5R6EUV.js → chunk-BLEIUQL6.js} +1 -1
  25. package/dist/{chunk-37SWTS2B.js → chunk-BR6QIYQS.js} +1 -1
  26. package/dist/chunk-CGNMS32W.js +97 -0
  27. package/dist/{chunk-3GO7BJ5J.js → chunk-CK73SQFF.js} +1 -1
  28. package/dist/chunk-CMLLERGG.js +418 -0
  29. package/dist/{chunk-MGL6DBOR.js → chunk-COOVCORC.js} +1 -1
  30. package/dist/chunk-D4AMCZJU.js +7 -0
  31. package/dist/chunk-DFREJHG7.js +1 -0
  32. package/dist/{chunk-OIGI7MP6.js → chunk-DJH2CH42.js} +1 -1
  33. package/dist/chunk-DT3LRKZQ.js +1 -0
  34. package/dist/{chunk-D3N2WFDV.js → chunk-FS3WLRQ4.js} +1 -1
  35. package/dist/chunk-G3ZC5W4U.js +1 -0
  36. package/dist/{chunk-TIZCESKY.js → chunk-GE46XKD2.js} +1 -1
  37. package/dist/chunk-GIFAGOMK.js +2 -0
  38. package/dist/{chunk-FRH7AIGY.js → chunk-HLSOZOL3.js} +3 -3
  39. package/dist/chunk-J4J3RYCL.js +4 -0
  40. package/dist/{chunk-JK6XEF7K.js → chunk-JKAAKE4Z.js} +1 -1
  41. package/dist/chunk-LMOTDLJF.js +2 -0
  42. package/dist/{chunk-DNKELRK6.js → chunk-MXI2DWLL.js} +1 -1
  43. package/dist/chunk-NFWUAEVQ.js +12 -0
  44. package/dist/chunk-NGU7RYXA.js +9 -0
  45. package/dist/{chunk-3WHE7V4M.js → chunk-NLRZFIC6.js} +1 -1
  46. package/dist/chunk-O2CFT2A3.js +1 -0
  47. package/dist/{chunk-EBQS5T7Q.js → chunk-OA2YJN22.js} +1 -1
  48. package/dist/chunk-OH6LV5JP.js +6 -0
  49. package/dist/{chunk-J44PN2FX.js → chunk-P5RZO5BY.js} +18 -18
  50. package/dist/{chunk-TSYDTKXO.js → chunk-RPM67N7A.js} +1 -1
  51. package/dist/{chunk-XVTN5DDV.js → chunk-RU3UT7GJ.js} +1 -1
  52. package/dist/{chunk-IPZT6WKM.js → chunk-RX3U7JKF.js} +4 -4
  53. package/dist/chunk-SRCZX2KC.js +13 -0
  54. package/dist/chunk-TXVMHEJS.js +1 -0
  55. package/dist/chunk-V5WVGPOP.js +1 -0
  56. package/dist/{chunk-FY4X2VOE.js → chunk-VHMDWRDG.js} +2 -2
  57. package/dist/chunk-W7I65IXY.js +3 -0
  58. package/dist/chunk-WOPZX56J.js +2 -0
  59. package/dist/chunk-XF65LQ6M.js +1 -0
  60. package/dist/chunk-YP436V7Q.js +2 -0
  61. package/dist/{chunk-HAZGSAKP.js → chunk-ZI54C2AO.js} +1 -1
  62. package/dist/chunk-ZKYH44ER.js +1 -0
  63. package/dist/chunk-ZS7JHATN.js +1 -0
  64. package/dist/{chunk-NSMRQOWP.js → chunk-ZW4QV6SB.js} +1 -1
  65. package/dist/{create-XYKXS3JB.js → create-7UENFCJK.js} +1 -1
  66. package/dist/{demo-kit-RKTHTXHJ.js → demo-kit-ALW6OSQV.js} +1 -1
  67. package/dist/doctor-KGADT4PI.js +1 -0
  68. package/dist/{dotnet-webapi-clean-VJX6SGGP.js → dotnet-webapi-clean-6Z4EXEJY.js} +1 -1
  69. package/dist/{goal-lifecycle-BIX2JVNO.js → goal-lifecycle-HIQGDEEP.js} +1 -1
  70. package/dist/goal-pack-63PEP2ND.js +1 -0
  71. package/dist/{gofiber-standard-I6ASLOEE.js → gofiber-standard-TDJQIVQZ.js} +1 -1
  72. package/dist/{gogin-standard-U2LSRLIP.js → gogin-standard-UEF3IHSJ.js} +1 -1
  73. package/dist/index.d.ts +18 -0
  74. package/dist/index.js +266 -248
  75. package/dist/pipeline-VFI35PR4.js +5 -0
  76. package/dist/{project-agent-entry-Y3NEHZED.js → project-agent-entry-Z3OY3S7T.js} +1 -1
  77. package/dist/{project-intelligence-lens-6Q6XSUDJ.js → project-intelligence-lens-YWICXW6P.js} +1 -1
  78. package/dist/{project-test-coverage-5PXAHBYQ.js → project-test-coverage-3P5FH6E5.js} +1 -1
  79. package/dist/proof-carrying-change-BAP2C3KV.js +1 -0
  80. package/dist/{pythonRapidkitExec-44ORGQ4R.js → pythonRapidkitExec-UMFLDIYR.js} +1 -1
  81. package/dist/{rust-axum-JMV7UPO7.js → rust-axum-4TRVPFMB.js} +1 -1
  82. package/dist/{springboot-standard-OC2RS3KC.js → springboot-standard-COWL75GT.js} +1 -1
  83. package/dist/verified-goal-A6WOMNTU.js +1 -0
  84. package/dist/{workspace-ROUEA3RT.js → workspace-PAXTJCMH.js} +1 -1
  85. package/dist/{workspace-agent-sync-6UYG33EQ.js → workspace-agent-sync-MGCEF4ON.js} +1 -1
  86. package/dist/{workspace-archive-OSMU3CK6.js → workspace-archive-3AURTMYA.js} +1 -1
  87. package/dist/{workspace-context-H7ZXR6VI.js → workspace-context-2G6QZ6D3.js} +1 -1
  88. package/dist/{workspace-contract-2V2BI6A3.js → workspace-contract-VWPOIYHJ.js} +1 -1
  89. package/dist/{workspace-explain-IBMTRUSF.js → workspace-explain-HLEBUK4K.js} +1 -1
  90. package/dist/{workspace-feedback-D6HJLKBQ.js → workspace-feedback-FF34CSJE.js} +1 -1
  91. package/dist/{workspace-foundation-H5B3TTZD.js → workspace-foundation-X7LOGTS3.js} +1 -1
  92. package/dist/{workspace-graph-stream-YDEET5LK.js → workspace-graph-stream-XGSRDRLI.js} +1 -1
  93. package/dist/workspace-graph-token-efficiency-YHXFGH3Z.js +1 -0
  94. package/dist/{workspace-history-WWPS4U7H.js → workspace-history-EQG5UBKW.js} +1 -1
  95. package/dist/{workspace-intelligence-DXKQXTTM.js → workspace-intelligence-GFJKIWBX.js} +1 -1
  96. package/dist/{workspace-intelligence-benchmark-L46EGZZM.js → workspace-intelligence-benchmark-R5MEGJQS.js} +1 -1
  97. package/dist/{workspace-intelligence-evaluation-QDSOOUHH.js → workspace-intelligence-evaluation-4AB4BBRP.js} +1 -1
  98. package/dist/{workspace-intelligence-runner-SCB44IXU.js → workspace-intelligence-runner-BU6JKNUD.js} +1 -1
  99. package/dist/{workspace-knowledge-graph-BNEVFEOW.js → workspace-knowledge-graph-OUTCLYS2.js} +1 -1
  100. package/dist/{workspace-knowledge-graph-query-GOC365ZR.js → workspace-knowledge-graph-query-TT2KK3SF.js} +1 -1
  101. package/dist/workspace-knowledge-graph-snapshot-XWJRUMAC.js +1 -0
  102. package/dist/workspace-marker-7U3NYRPJ.js +1 -0
  103. package/dist/workspace-mcp-serve-JYUKX3YS.js +3 -0
  104. package/dist/workspace-model-DUGPW5IB.js +1 -0
  105. package/dist/{workspace-onboarding-IRBVZTT4.js → workspace-onboarding-C4CKWTJ3.js} +1 -1
  106. package/dist/{workspace-python-engine-state-BE4A3BL5.js → workspace-python-engine-state-VCOLSEWV.js} +2 -2
  107. package/dist/{workspace-readme-HA6XLDME.js → workspace-readme-4FCKAQME.js} +1 -1
  108. package/dist/{workspace-registry-summary-CBZDSG6I.js → workspace-registry-summary-4KX4QD55.js} +1 -1
  109. package/dist/workspace-repair-engine-OVW4J3DI.js +3 -0
  110. package/dist/workspace-run-NVQGRZYO.js +1 -0
  111. package/dist/{workspace-verify-QTRY7WW3.js → workspace-verify-B7HEFYO6.js} +1 -1
  112. package/dist/workspace-watch-TQYAMLIV.js +1 -0
  113. package/docs/README.md +4 -1
  114. package/docs/agent-framework-adapters.md +279 -0
  115. package/docs/ci-workflows.md +1 -1
  116. package/docs/commands-reference.md +16 -0
  117. package/docs/contracts/COMMAND_OWNERSHIP_MATRIX.md +5 -0
  118. package/docs/creating-workspaces-and-projects.md +18 -4
  119. package/package.json +7 -1
  120. package/scripts/enterprise-package-smoke.mjs +98 -0
  121. package/dist/analyze-WC2TY5AT.js +0 -1
  122. package/dist/autopilot-release-LJDRECFW.js +0 -1
  123. package/dist/capabilities-command-NFGX42CH.js +0 -1
  124. package/dist/chunk-2BCECNIW.js +0 -1
  125. package/dist/chunk-2LIVMG5C.js +0 -2
  126. package/dist/chunk-3SNP6M4M.js +0 -2
  127. package/dist/chunk-46QH3ZVI.js +0 -105
  128. package/dist/chunk-4HQU2GQM.js +0 -1
  129. package/dist/chunk-4JAURS76.js +0 -13
  130. package/dist/chunk-7O7P4MRD.js +0 -1
  131. package/dist/chunk-AQNU5RXV.js +0 -2
  132. package/dist/chunk-CQBM6BBP.js +0 -2
  133. package/dist/chunk-CY4QZ3PE.js +0 -3
  134. package/dist/chunk-EDDGQ6LM.js +0 -2
  135. package/dist/chunk-F6CTGVJA.js +0 -9
  136. package/dist/chunk-K3O3HENC.js +0 -5
  137. package/dist/chunk-LDJAUIAG.js +0 -1
  138. package/dist/chunk-LGC4CRUF.js +0 -3
  139. package/dist/chunk-ND5YAC4T.js +0 -1
  140. package/dist/chunk-NNQE4DS2.js +0 -2
  141. package/dist/chunk-NSH7TTSV.js +0 -1
  142. package/dist/chunk-R5OJD5K2.js +0 -1
  143. package/dist/chunk-SO4CGS35.js +0 -4
  144. package/dist/chunk-T5NBSCVX.js +0 -97
  145. package/dist/chunk-UCNIXOTL.js +0 -2
  146. package/dist/chunk-UNXG3ZFV.js +0 -1
  147. package/dist/chunk-VBMWFT7Q.js +0 -1
  148. package/dist/chunk-YYELANJO.js +0 -7
  149. package/dist/chunk-ZZWGD3X3.js +0 -12
  150. package/dist/doctor-LQ7FT6AZ.js +0 -1
  151. package/dist/goal-pack-SUWH6K7U.js +0 -1
  152. package/dist/pipeline-NSPPWD7U.js +0 -5
  153. package/dist/proof-carrying-change-456TYEDW.js +0 -1
  154. package/dist/verified-goal-GRH5UOJR.js +0 -1
  155. package/dist/workspace-graph-token-efficiency-XM3LYFUC.js +0 -1
  156. package/dist/workspace-knowledge-graph-snapshot-2NMV7LEJ.js +0 -1
  157. package/dist/workspace-marker-XGAWZZDX.js +0 -1
  158. package/dist/workspace-mcp-serve-JLZTTEVG.js +0 -3
  159. package/dist/workspace-model-XSNLDUI2.js +0 -1
  160. package/dist/workspace-repair-engine-TDUNQSFJ.js +0 -3
  161. package/dist/workspace-run-I2W5PIPK.js +0 -1
  162. package/dist/workspace-watch-PDQKYBYQ.js +0 -1
  163. /package/dist/{chunk-K33JJVQZ.js → chunk-VN2MKTQO.js} +0 -0
@@ -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};