workspai 0.59.0 → 0.60.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 (99) hide show
  1. package/README.md +5 -0
  2. package/contracts/cli-runtime-command-inventory.v1.snapshot.json +4 -0
  3. package/contracts/workspace-intelligence/goal-agent-handoff.v1.json +89 -8
  4. package/contracts/workspace-intelligence/goal-index.v1.json +76 -7
  5. package/contracts/workspace-intelligence/goal-lifecycle-result.v1.json +49 -5
  6. package/contracts/workspace-intelligence/goal-pack.v1.json +182 -19
  7. package/contracts/workspace-intelligence/verified-goal.v1.json +44 -3
  8. package/dist/analyze-FYNMI5KT.js +1 -0
  9. package/dist/autopilot-release-O5PPB6HQ.js +1 -0
  10. package/dist/chunk-6YFCS2AI.js +1 -0
  11. package/dist/{chunk-M4UOXP5T.js → chunk-7COD67YY.js} +19 -19
  12. package/dist/{chunk-DGGTTRYE.js → chunk-7ITSLGPZ.js} +1 -1
  13. package/dist/{chunk-5NIZNXRS.js → chunk-A4BK7C7M.js} +1 -1
  14. package/dist/{chunk-M3IKRWXA.js → chunk-AHKXQRLX.js} +1 -1
  15. package/dist/{chunk-KVSYBHUR.js → chunk-B6FJ6RG6.js} +1 -1
  16. package/dist/{chunk-5PSKBJKJ.js → chunk-DIJGQUEV.js} +1 -1
  17. package/dist/{chunk-QMPFNXI7.js → chunk-E4LJ3PQD.js} +1 -1
  18. package/dist/{chunk-RBBBXFEU.js → chunk-FUCFNB3P.js} +1 -1
  19. package/dist/{chunk-6FBNSTUS.js → chunk-GPGEJVVO.js} +1 -1
  20. package/dist/chunk-ILIBOMYL.js +1 -0
  21. package/dist/chunk-J7G3YL4O.js +1 -0
  22. package/dist/{chunk-NOZ4JCH7.js → chunk-KCJ3VS6R.js} +1 -1
  23. package/dist/{chunk-SP5EHSWG.js → chunk-KG3TUTXU.js} +1 -1
  24. package/dist/{chunk-RHK53ZK7.js → chunk-KKAGBP4T.js} +1 -1
  25. package/dist/{chunk-OLC7EYUA.js → chunk-KPEVYWOC.js} +12 -12
  26. package/dist/{chunk-WSRUPDZN.js → chunk-NA2NXX5P.js} +1 -1
  27. package/dist/{chunk-OFWSZYUX.js → chunk-NBJ6AP7K.js} +1 -1
  28. package/dist/{chunk-7WUT5ZSO.js → chunk-NVQUBUTY.js} +1 -1
  29. package/dist/{chunk-YEEAWZWI.js → chunk-O6R7SE6Y.js} +1 -1
  30. package/dist/{chunk-7SFXADXO.js → chunk-OU7DF6MP.js} +1 -1
  31. package/dist/{chunk-WJVB6SSD.js → chunk-PTNLVI62.js} +5 -5
  32. package/dist/{chunk-UVBPEX3E.js → chunk-PZLHQEGC.js} +1 -1
  33. package/dist/{chunk-WP3CXMVA.js → chunk-SCP5LJNO.js} +1 -1
  34. package/dist/{chunk-QFBVQUKV.js → chunk-TFOOSYGO.js} +6 -6
  35. package/dist/chunk-UJXE4UAX.js +1 -0
  36. package/dist/{chunk-ENKGGWRX.js → chunk-VDFHUYAQ.js} +8 -8
  37. package/dist/chunk-VR6XMUF3.js +2 -0
  38. package/dist/{chunk-S45YGN2I.js → chunk-WJ7MZB3I.js} +1 -1
  39. package/dist/{chunk-ZJCM37KX.js → chunk-WLFJHRB3.js} +1 -1
  40. package/dist/chunk-X6TNBARH.js +6 -0
  41. package/dist/{chunk-V3ABABV5.js → chunk-XXQRHS5I.js} +1 -1
  42. package/dist/chunk-XZ55OA4C.js +2 -0
  43. package/dist/{create-6QWIJTGU.js → create-IRNHMUEN.js} +1 -1
  44. package/dist/demo-kit-QHIDCSBI.js +149 -0
  45. package/dist/{doctor-NAZEKMGU.js → doctor-MAPZ2ZCD.js} +1 -1
  46. package/dist/{dotnet-webapi-clean-VXEF4SHM.js → dotnet-webapi-clean-AVHPJG7Y.js} +5 -5
  47. package/dist/goal-command-contract-43E22XQD.js +1 -0
  48. package/dist/goal-interactive-selection-6YJOK4WC.js +1 -0
  49. package/dist/goal-lifecycle-VQDUWZVG.js +1 -0
  50. package/dist/goal-pack-U3ZP7A2A.js +1 -0
  51. package/dist/{gofiber-standard-AQGSC7ON.js → gofiber-standard-47S2GYAO.js} +2 -2
  52. package/dist/{gogin-standard-7DU3OCBX.js → gogin-standard-EWB4XNOI.js} +3 -3
  53. package/dist/index.js +122 -122
  54. package/dist/{pipeline-5LLFP5ZH.js → pipeline-5O36G4ZV.js} +1 -1
  55. package/dist/{project-agent-entry-AFKDDRDL.js → project-agent-entry-CN4K6JNZ.js} +1 -1
  56. package/dist/{project-intelligence-lens-U2V3VNZG.js → project-intelligence-lens-N7REBQ3A.js} +1 -1
  57. package/dist/{project-test-coverage-HP37HUV2.js → project-test-coverage-E2Q4QL44.js} +1 -1
  58. package/dist/{rust-axum-4HXDICIB.js → rust-axum-M5X4ZC4Z.js} +4 -4
  59. package/dist/{springboot-standard-EK6GYN5T.js → springboot-standard-Y5ADLZMQ.js} +7 -7
  60. package/dist/verified-goal-CIYKNDOU.js +1 -0
  61. package/dist/{workspace-CQ43AWUF.js → workspace-UUU4VMZB.js} +1 -1
  62. package/dist/{workspace-agent-sync-YMXYUGYY.js → workspace-agent-sync-LQNIMGLN.js} +1 -1
  63. package/dist/{workspace-context-RAO62QVU.js → workspace-context-YAK5XX27.js} +1 -1
  64. package/dist/{workspace-contract-ACSIHJIO.js → workspace-contract-3BWIRSVQ.js} +1 -1
  65. package/dist/{workspace-explain-RH27OQB4.js → workspace-explain-QH4FXQW5.js} +1 -1
  66. package/dist/{workspace-foundation-JH2GFSAZ.js → workspace-foundation-AISQHJA3.js} +1 -1
  67. package/dist/{workspace-graph-stream-ZZZEQQTE.js → workspace-graph-stream-XTSDKRLM.js} +1 -1
  68. package/dist/{workspace-intelligence-3YERTBA3.js → workspace-intelligence-625UN27X.js} +1 -1
  69. package/dist/{workspace-intelligence-runner-YXMOT6GK.js → workspace-intelligence-runner-7KCGHRID.js} +1 -1
  70. package/dist/{workspace-knowledge-graph-HZZP6ZRB.js → workspace-knowledge-graph-3ZBPSAS7.js} +1 -1
  71. package/dist/workspace-knowledge-graph-snapshot-ZI4W735H.js +1 -0
  72. package/dist/{workspace-mcp-serve-5TTAN243.js → workspace-mcp-serve-ALIZV72K.js} +1 -1
  73. package/dist/{workspace-model-EIQSKDX7.js → workspace-model-ETCLINRB.js} +1 -1
  74. package/dist/{workspace-onboarding-SHHW4R4G.js → workspace-onboarding-XNBC6H2G.js} +1 -1
  75. package/dist/{workspace-registry-summary-OV5KX3WC.js → workspace-registry-summary-VSOBKAJG.js} +1 -1
  76. package/dist/workspace-repair-engine-7WGJWUBN.js +3 -0
  77. package/dist/workspace-run-I6E6VI6N.js +1 -0
  78. package/dist/{workspace-verify-W4P6LBIH.js → workspace-verify-7ENGIY4S.js} +1 -1
  79. package/dist/{workspace-watch-EZ4D4VCF.js → workspace-watch-2YFSB2WL.js} +1 -1
  80. package/docs/ci-workflows.md +18 -1
  81. package/docs/commands-reference.md +12 -2
  82. package/docs/contracts/README.md +15 -2
  83. package/docs/goal-packs.md +41 -5
  84. package/package.json +2 -1
  85. package/dist/analyze-52TEGLDR.js +0 -1
  86. package/dist/autopilot-release-KQGDM2AA.js +0 -1
  87. package/dist/chunk-HOUQIT7U.js +0 -1
  88. package/dist/chunk-RO73VVHW.js +0 -2
  89. package/dist/chunk-T3GJ7YVG.js +0 -1
  90. package/dist/chunk-TCURN5VD.js +0 -2
  91. package/dist/chunk-VRW6KXNK.js +0 -6
  92. package/dist/demo-kit-KHH63TNA.js +0 -149
  93. package/dist/goal-command-contract-CHE7U6YY.js +0 -1
  94. package/dist/goal-lifecycle-ECIRCHN5.js +0 -1
  95. package/dist/goal-pack-HBOPVZFO.js +0 -1
  96. package/dist/verified-goal-HUYJ6LBI.js +0 -1
  97. package/dist/workspace-knowledge-graph-snapshot-7DWHMEM2.js +0 -1
  98. package/dist/workspace-repair-engine-BNXZHW35.js +0 -3
  99. package/dist/workspace-run-7EJEBHAH.js +0 -1
@@ -1,2 +1,2 @@
1
- import {a as a$1,c,j,i,g,h}from'./chunk-ZCPT6KC3.js';import {t,u}from'./chunk-MOSXTVPU.js';import B from'fs';import a from'path';import k from'fs-extra';var Z=[{id:"fastapi.standard",aliases:["fastapi","fastapi.standard"],label:"fastapi \u2014 FastAPI Standard Kit",description:"Core-backed FastAPI service scaffold.",owner:"core",runtime:"python",framework:"fastapi",category:"backend",moduleSupport:true,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,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,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,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,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,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,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,stability:"preview",versionPolicy:"tested-baseline",generator:"rust-axum",createUsage:"workspai create project rust.axum <name> [--port <number>] [--output <dir>] [--skip-git]"}],K=new Map;for(let e of Z){K.set(e.id.toLowerCase(),e);for(let t of e.aliases)K.set(t.toLowerCase(),e);}function _(e){return e?K.get(e.trim().toLowerCase())??null:null}function Ze(e){return _(e)?.id??e}function et(){return Z.filter(e=>e.owner==="core"||e.generator)}function tt(e){return _(e)?.owner==="npm"}async function rt(e,t){if(!e.generator)throw new Error(`Kit is not backed by an npm generator: ${e.id}`);if(e.generator==="gofiber"){let{generateGoFiberKit:r}=await import('./gofiber-standard-AQGSC7ON.js');await r(t.projectPath,{project_name:t.projectName,module_path:t.projectName,skipGit:t.skipGit,skipInstall:t.skipInstall});return}if(e.generator==="gogin"){let{generateGoGinKit:r}=await import('./gogin-standard-7DU3OCBX.js');await r(t.projectPath,{project_name:t.projectName,module_path:t.projectName,skipGit:t.skipGit,skipInstall:t.skipInstall});return}if(e.generator==="springboot"){let{generateSpringBootKit:r}=await import('./springboot-standard-EK6GYN5T.js');await r(t.projectPath,{project_name:t.projectName,artifact_id:t.projectName,java_version:m(t.args,"--java-version")?.trim(),spring_boot_version:m(t.args,"--spring-boot-version")?.trim(),springdoc_version:m(t.args,"--springdoc-version")?.trim(),group_id:m(t.args,"--group-id")?.trim(),package_name:m(t.args,"--package-name")?.trim(),description:m(t.args,"--description")?.trim(),port:m(t.args,"--port")?.trim(),skipGit:t.skipGit,skipInstall:t.skipInstall});return}if(e.generator==="dotnet-webapi-clean"){let{generateDotnetWebApiCleanKit:r}=await import('./dotnet-webapi-clean-VXEF4SHM.js');await r(t.projectPath,{project_name:t.projectName,target_framework:m(t.args,"--target-framework")?.trim(),root_namespace:m(t.args,"--root-namespace")?.trim(),description:m(t.args,"--description")?.trim(),port:m(t.args,"--port")?.trim(),skipGit:t.skipGit,skipInstall:t.skipInstall});return}if(e.generator==="rust-axum"){let{generateRustAxumKit:r}=await import('./rust-axum-4HXDICIB.js');await r(t.projectPath,{project_name:t.projectName,description:m(t.args,"--description")?.trim(),port:m(t.args,"--port")?.trim(),skipGit:t.skipGit,skipInstall:t.skipInstall});return}throw new Error(`Unhandled npm kit generator: ${e.generator}`)}function m(e,t){let r=e.indexOf(t);if(r>=0&&r+1<e.length)return e[r+1];let n=e.find(i=>i.startsWith(`${t}=`));return n?n.slice(t.length+1):void 0}var y=["init","dev","start","build","test","lint","format","help"],ee={python:{runtime:"python",displayName:"Python",tier:"first-class",scaffoldSupport:true,importSupport:true,lifecycleCommands:y,moduleCommands:true,doctorSupport:"full",notes:["Core-backed Python projects support RapidKit Core modules and lifecycle commands."]},node:{runtime:"node",displayName:"Node.js",tier:"extended",scaffoldSupport:true,importSupport:true,lifecycleCommands:y,moduleCommands:true,doctorSupport:"full",notes:["Node projects support npm-owned lifecycle commands; NestJS is the first-class Node framework."]},go:{runtime:"go",displayName:"Go",tier:"extended",scaffoldSupport:true,importSupport:true,lifecycleCommands:y,moduleCommands:false,doctorSupport:"readiness",notes:["Go projects support workspace governance and lifecycle commands via Go tooling."]},java:{runtime:"java",displayName:"Java / Spring Boot",tier:"extended",scaffoldSupport:true,importSupport:true,lifecycleCommands:y,moduleCommands:false,doctorSupport:"readiness",notes:["Java projects support Maven/Gradle lifecycle commands and workspace governance."]},dotnet:{runtime:"dotnet",displayName:".NET / ASP.NET Core",tier:"extended",scaffoldSupport:true,importSupport:true,lifecycleCommands:y,moduleCommands:false,doctorSupport:"readiness",notes:[".NET projects support dotnet CLI lifecycle commands and workspace governance."]},php:{runtime:"php",displayName:"PHP",tier:"extended",scaffoldSupport:true,importSupport:true,lifecycleCommands:y,moduleCommands:false,doctorSupport:"readiness",notes:["Laravel projects use the official Composer generator and PHP/Composer lifecycle adapter."]},ruby:{runtime:"ruby",displayName:"Ruby",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["Ruby projects are importable and governed as observed projects until a kit exists."]},rust:{runtime:"rust",displayName:"Rust",tier:"extended",scaffoldSupport:true,importSupport:true,lifecycleCommands:y,moduleCommands:false,doctorSupport:"readiness",notes:["Rust projects support Axum and Tauri scaffolding plus Cargo lifecycle commands."]},elixir:{runtime:"elixir",displayName:"Elixir",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["Elixir projects are importable and governed as observed projects until a kit exists."]},clojure:{runtime:"clojure",displayName:"Clojure",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["Clojure projects are importable and governed as observed projects until a kit exists."]},scala:{runtime:"scala",displayName:"Scala",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["Scala projects are importable and governed as observed projects until a kit exists."]},kotlin:{runtime:"kotlin",displayName:"Kotlin",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["Kotlin projects are importable and governed as observed projects until a kit exists."]},deno:{runtime:"deno",displayName:"Deno",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["Deno projects are importable and governed as observed projects until a kit exists."]},bun:{runtime:"bun",displayName:"Bun",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["Bun projects are importable and governed as observed projects until a kit exists."]},c:{runtime:"c",displayName:"C",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["C projects are importable and receive manifest, test, quality, security, and coverage evidence without assuming a package manager."]},cpp:{runtime:"cpp",displayName:"C++",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["C++ projects are importable and receive manifest, test, quality, security, and coverage evidence without assuming a package manager."]},unknown:{runtime:"unknown",displayName:"Unknown",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["Unknown projects are tracked safely but require manual command configuration."]}},Ce=["fastapi","nestjs"],ke=["django","flask","nextjs","remix","nuxt","react","vite","vue","sveltekit","svelte","angular","astro","solid","express","fastify","koa","echo","gofiber","gogin","springboot","dotnet","laravel","symfony","rails","sinatra","actix","axum","rocket","phoenix","clojure","scala","kotlin","deno","bun","tauri","electron","vscode-extension","c","cpp"];function x(e){return ee[e||"unknown"]??ee.unknown}function te(e){return Ce.includes(e)?"first-class":ke.includes(e)?"extended":"observed"}function re(e){let t=x(e.runtime);return {lifecycleCommands:t.lifecycleCommands,moduleCommands:e.moduleSupport&&t.moduleCommands,unsupportedLifecycleCommands:y.filter(r=>!t.lifecycleCommands.includes(r))}}var Se=["python","node","go","java","dotnet","rust","php"];function w(e){return !!e&&Se.includes(e)}function A(e,t){return t!=="lint"&&t!=="format"&&t!=="docs"?false:e==="python"}function ne(e){let t=x(e),r=w(t.runtime),n=je[t.runtime]??[],i=we[t.runtime]??[];return {runtime:t.runtime,displayName:t.displayName,lifecycleCommands:t.lifecycleCommands,hasExecutor:r,packageManagers:n,primaryFiles:i,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"]},we={python:["pyproject.toml","requirements.txt","requirements.in"],node:["package.json"],go:["go.mod"],java:["pom.xml","build.gradle","build.gradle.kts"],dotnet:["*.csproj","*.sln"],php:["composer.json"],ruby:["Gemfile"],rust:["Cargo.toml"],elixir:["mix.exs"],kotlin:["settings.gradle.kts"],deno:["deno.json","deno.jsonc"],bun:["package.json","bunfig.toml"]};function v(e,t){let r=g({runtime:typeof e?.runtime=="string"?e.runtime:void 0,framework:typeof e?.framework=="string"?e.framework:void 0,kitName:typeof e?.kit_name=="string"?e.kit_name:typeof e?.kit=="string"?e.kit:void 0});return r.runtime!=="unknown"?r.runtime:j(t,e).runtime}function ie(e){let t$1=e;for(;;){for(let n of t(t$1,"project.json"))if(B.existsSync(n))try{return JSON.parse(B.readFileSync(n,"utf8"))}catch{return null}let r=a.dirname(t$1);if(r===t$1)break;t$1=r;}return null}function ft(e,t){return v(e,t)==="go"}function gt(e,t){return v(e,t)==="node"}function yt(e,t){return v(e,t)==="java"}function bt(e,t){return v(e,t)==="dotnet"}function Ct(e,t){return v(e,t)==="python"}var xe=["project.json","context.json","file-hashes.json"];async function Rt(e){let t=a.resolve(e),r=[];for(let n of xe){let i=u(t,n);if(await k.pathExists(i))continue;let c=a.join(t,".rapidkit",n);if(!await k.pathExists(c))continue;let C=await k.readJson(c);await k.ensureDir(a.dirname(i));let S=`${i}.${process.pid}.${Date.now()}.tmp`;try{await k.writeJson(S,C,{spaces:2}),await k.move(S,i,{overwrite:false}),r.push(i);}finally{await k.remove(S).catch(()=>{});}}return r}function ve(e){for(let t$1 of t(e,"context.json"))if(B.existsSync(t$1))try{return JSON.parse(B.readFileSync(t$1,"utf8"))}catch{return null}return null}function Ne(e){let t=e?.engine;return t==="npm"||t==="pip"||t==="python"?t:"unknown"}function Pe(e,t){if(e?.module_support===false||t?.module_support===false||!e&&t)return false;let r=typeof e?.kit_name=="string"?e.kit_name:typeof e?.kit=="string"?e.kit:typeof t?.kit=="string"?t.kit:void 0,n=r?_(r):void 0;return n?.owner==="core"&&n.moduleSupport===true}function Re(e,t,r){let n=g({runtime:typeof t?.runtime=="string"?t.runtime:typeof r?.runtime=="string"?r.runtime:void 0,framework:typeof t?.framework=="string"?t.framework:typeof r?.framework=="string"?r.framework:void 0,kitName:typeof t?.kit_name=="string"?t.kit_name:typeof t?.kit=="string"?t.kit:typeof r?.kit=="string"?r.kit:void 0});return n.key!=="unknown"?n:j(e,t)}function ae(e){let t$1=a.resolve(e);if(![...t(t$1,"project.json"),...t(t$1,"context.json")].some(C=>B.existsSync(C)))return null;let n=ie(t$1),i=ve(t$1),c=Re(t$1,n,i);return {projectRoot:t$1,projectJson:n,contextJson:i,detection:c,moduleSupport:Pe(n,i),engine:Ne(i)}}var Ee=["build","dev","start","test","lint","format"],G=["init","test","build","start"],_t=["lint","format","docs"];function At(e){return !!e&&Ee.includes(e)}var Me={dev:["dev","start:dev"],start:["start","start:prod","preview"],build:["build"],test:["test","test:unit","test:ci"],lint:["lint"],format:["format","prettier"]},ce={nestjs:{dev:["dev","start:dev"],start:["start","start:prod"],build:["build"],test:["test","test:e2e"],lint:["lint"],format:["format"]},express:{dev:["dev","start:dev"],start:["start"],build:["build"],test:["test"],lint:["lint"],format:["format"]},fastify:{dev:["dev","start:dev"],start:["start"],build:["build"],test:["test"],lint:["lint"],format:["format"]},koa:{dev:["dev","start:dev"],start:["start"],build:["build"],test:["test"],lint:["lint"],format:["format"]}};function _e(e){let t=a.join(e,"package.json");if(!B.existsSync(t))return {};try{let n=JSON.parse(B.readFileSync(t,"utf8")).scripts??{};return Object.fromEntries(Object.entries(n).filter(i=>typeof i[1]=="string"))}catch{return {}}}function Ae(e,t){let r=t?c(t):"unknown",n=r!=="unknown"?a$1(r,e):[],i=t?ce[t]?.[e]??[]:[],c$1=Me[e]??[],C=[...n,...i,...c$1];return [...new Set(C)]}function me(e,t,r){let n=_e(e),i=new Set(Object.keys(n));if(i.has(t))return {scriptName:t,source:"package.json"};for(let c$1 of Ae(t,r?.framework))if(i.has(c$1))return {scriptName:c$1,source:a$1(c(r?.framework??"unknown"),t).includes(c$1)||ce[r?.framework??""]?.[t]?.includes(c$1)?"framework-candidate":"generic-candidate"};return null}function W(e){return B.existsSync(a.join(e,"package.json"))}function de(e){let t=ne(e);return t.runtime==="unknown"&&e!=="unknown"?null:{runtime:t.runtime,displayName:t.displayName,supportedCommands:t.lifecycleCommands,packageManagers:t.packageManagers,primaryFiles:t.primaryFiles,notes:t.notes,hasExecutor:t.hasExecutor}}function s(e){try{return B.existsSync(e)}catch{return false}}function b(e){try{return s(e)?B.readFileSync(e,"utf8"):""}catch{return ""}}function f(e,t){let r=b(a.join(e,"Makefile"));return r?new RegExp(`^${t}\\s*:`).test(r):false}function Fe(e){let t=[e];for(;t.length>0;){let r=t.shift();if(!r)break;let n=[];try{n=B.readdirSync(r,{withFileTypes:true});}catch{continue}for(let i of n){if(i.name==="node_modules"||i.name===".git"||i.name==="dist")continue;let c=a.join(r,i.name);if(i.isFile()&&i.name.endsWith(".csproj"))return true;i.isDirectory()&&t.push(c);}}return false}function le(e,t){let r=s(a.join(e,"pyproject.toml")),n=s(a.join(e,"requirements.txt"))||s(a.join(e,"requirements.in")),i=s(a.join(e,"manage.py"));switch(t){case "init":return r||n;case "dev":case "start":return r||i||n;case "test":return r||n||s(a.join(e,"tests"));case "build":return r||n;case "lint":case "format":return r||n||i||s(a.join(e,"setup.py"))||s(a.join(e,"setup.cfg"));default:return false}}function Le(e,t){if(!s(a.join(e,"go.mod")))return false;switch(t){case "init":return true;case "dev":return f(e,"run")||s(a.join(e,"main.go"));case "test":return true;case "build":return true;case "start":return f(e,"run")||s(a.join(e,"main.go"))||s(a.join(e,"cmd"));case "lint":return s(a.join(e,".golangci.yml"))||s(a.join(e,".golangci.yaml"))||f(e,"lint");case "format":return f(e,"fmt")||f(e,"format");default:return false}}function De(e,t){let r=s(a.join(e,"pom.xml")),n=s(a.join(e,"build.gradle"))||s(a.join(e,"build.gradle.kts"));if(!r&&!n)return false;switch(t){case "init":case "test":case "build":case "dev":case "start":return true;case "lint":return f(e,"lint")||b(a.join(e,"pom.xml")).includes("checkstyle")||b(a.join(e,"build.gradle")).includes("checkstyle")||b(a.join(e,"build.gradle.kts")).includes("checkstyle");case "format":return f(e,"format")||b(a.join(e,"build.gradle")).includes("spotless")||b(a.join(e,"build.gradle.kts")).includes("spotless");default:return false}}function Oe(e,t){if(!Fe(e))return false;switch(t){case "init":case "dev":case "test":case "build":case "start":return true;case "lint":return f(e,"lint")||b(a.join(e,"Directory.Build.props")).includes("EnforceCodeStyleInBuild");case "format":return f(e,"format")||s(a.join(e,".editorconfig"));default:return false}}function Te(e,t,r){return t==="init"?W(e):me(e,t,{framework:r})!==null}function Ie(e,t,r){switch(t){case "php":return r==="init"&&s(a.join(e,"composer.json"));case "ruby":return r==="init"&&s(a.join(e,"Gemfile"));case "rust":return s(a.join(e,"Cargo.toml"))?r==="init"||r==="test"||r==="build"||r==="start":false;case "elixir":return r==="init"&&s(a.join(e,"mix.exs"));case "deno":return s(a.join(e,"deno.json"))||s(a.join(e,"deno.jsonc"))?r==="init"||r==="dev"||r==="test"||r==="start":r==="init"&&s(a.join(e,"package.json"));case "bun":return s(a.join(e,"bunfig.toml"))||s(a.join(e,"bun.lock"))?r==="init"||r==="dev"||r==="test"||r==="build"||r==="start":r==="init"&&s(a.join(e,"package.json"));default:return false}}function Ke(e){try{let t=JSON.parse(b(a.join(e,"composer.json")));return new Set(Object.keys(t.scripts??{}))}catch{return new Set}}function Be(e,t){if(!s(a.join(e,"composer.json")))return false;let r=Ke(e),n=s(a.join(e,"artisan"));switch(t){case "init":return true;case "dev":return n||r.has("dev");case "start":return n||r.has("start");case "test":return n||r.has("test");case "build":return r.has("build");case "lint":return r.has("lint")||r.has("analyse")||r.has("analyze");case "format":return r.has("format")||r.has("fmt")||s(a.join(e,"pint.json"))||s(a.join(e,"vendor","bin","pint"));default:return false}}function Ge(e,t){return s(a.join(e,"Cargo.toml"))?t==="init"||t==="dev"||t==="start"||t==="build"||t==="test"||t==="lint"||t==="format":false}function L(e,t,r,n){if(A(t,r))return le(e,r);if(!w(t))return Ie(e,t,r);switch(t){case "node":return Te(e,r,n);case "python":return le(e,r);case "go":return Le(e,r);case "java":return De(e,r);case "dotnet":return Oe(e,r);case "rust":return Ge(e,r);case "php":return Be(e,r);default:return false}}function Ue(e,t,r){return ["init","dev","start","build","test","lint","format"].filter(i=>L(e,t,i,r))}function pe(e){let t=re({runtime:e.runtime,moduleSupport:e.moduleSupport});if(!e.projectPath)return t;let r=Ue(e.projectPath,e.runtime,e.framework),n=new Set(["help"]);for(let c of r)t.lifecycleCommands.includes(c)&&n.add(c);e.runtime==="node"&&W(e.projectPath)&&n.add("init");let i=[...n].sort();return {lifecycleCommands:i,moduleCommands:t.moduleCommands,unsupportedLifecycleCommands:t.lifecycleCommands.filter(c=>!i.includes(c)).sort()}}var q=["version","commands","doctor","project","help"],P=["init","dev","start","build","test","lint","format"],Y=["add","modules","upgrade","diff","merge","reconcile","rollback","uninstall","checkpoint","snapshot","optimize"],H=["create","list","info","frameworks","license"];q.filter(e=>e!=="help");function $e(e){let t$1=a.resolve(e);for(;;){if([...t(t$1,"project.json"),...t(t$1,"context.json")].some(i=>B.existsSync(i)))return t$1;let n=a.dirname(t$1);if(n===t$1)break;t$1=n;}return null}function N(e,t){return {command:e,...t}}var Je=new Set(["dev","lint","format"]),qe=new Set(G);function Ye(e,t){return t?qe.has(e)?{executionScope:"fleet",fleetEligible:true}:Je.has(e)?{executionScope:"local-only",fleetEligible:false}:{executionScope:"local-only",fleetEligible:false}:{executionScope:"local-only",fleetEligible:false}}function He(e,t){return A(t.runtime,e)?"core":"runtime"}function ze(e,t,r,n){return !e||!n.lifecycleCommands.includes(t)?false:L(e,r.runtime,t,r.key)}function Ve(e,t){let r=!!e&&(t.runtime==="python"||w(t.runtime)&&L(e,t.runtime,"build",t.key));return N("docs",{owner:t.runtime==="python"?"core":"runtime",status:r?"supported":"unsupported",reason:r?t.runtime==="python"?"Documentation generation is delegated to Python Core for this project.":"Project documentation commands are available through the npm wrapper for this runtime.":"Documentation commands require a supported Python or npm-executor project manifest."})}function Xe(e){let t=a.resolve(e),r=$e(e);return r||(h(t).length>0?t:null)}function Qe(e=process.cwd()){let t=Xe(e),r=t?ae(t):null,n=r?.detection??j(e,r?.projectJson??null),i$1=r?.moduleSupport??false,c=r?.engine??"unknown",C=de(n.runtime),S=x(n.runtime),fe=t?i(t):[],h=[n.runtime,...fe.filter(o=>o!==n.runtime)].filter((o,d,E)=>o!=="unknown"&&E.indexOf(o)===d);h.length===0&&h.push("unknown");let D=h.filter(o=>o!=="unknown").length>1,ge=pe({runtime:n.runtime,moduleSupport:i$1,projectPath:t??void 0,framework:n.key}),g={};for(let o of q)g[o]=N(o,{owner:o==="project"?"core":"npm",status:"supported",reason:o==="project"?"Project detection is a Core contract; workspace project lifecycle remains npm-owned.":o==="help"?"Help is available for every Workspai project through the npm CLI.":"Universal command available across Workspai project types."});for(let o of P){let d=ze(t,o,n,ge),E=He(o,n),O=Ye(o,d);g[o]=N(o,{owner:E,status:d?"supported":"unsupported",executionScope:O.executionScope,fleetEligible:O.fleetEligible,reason:d?E==="core"?`Delegated to Python Core for ${n.displayName} projects.`:O.fleetEligible?`Handled by runtime adapter and eligible for workspace fleet stages (${o}).`:o==="dev"?"Local development command only; workspace fleet excludes dev by design.":n.runtime==="node"?`Handled by npm/pnpm/yarn via the resolved ${o} script in package.json.`:`Handled by the ${C?.displayName??n.displayName} runtime adapter for local project execution.`:t?n.runtime==="node"?`No ${o} script was found in package.json for this ${n.displayName} project.`:w(n.runtime)?`The ${n.displayName} runtime is tracked, but ${o} is not available from detected project manifests.`:`${n.displayName} is tracked as an observed runtime; ${o} requires project manifests or explicit scripts.`:"No Workspai project was detected."});}if(D)for(let o of P){let d=g[o];d&&(d.reason=`Composite runtime boundary detected (${h.join(", ")}). This capability describes only the primary ${n.runtime} adapter; nested runtime lifecycle coverage requires explicit project boundaries or command contracts. ${d.reason??""}`.trim());}g.docs=Ve(t,n);for(let o of Y)g[o]=N(o,{owner:i$1?"core":"none",status:i$1?"supported":"unsupported",reason:i$1?"Core module/template command supported for this project.":`Core module/template commands are not available for ${n.displayName} projects.`});for(let o of H)g[o]=N(o,{owner:o==="create"?"npm":"core",status:"global",reason:o==="create"?"Create is orchestrated by npm for multi-language workspace support.":"Engine catalog command; not specific to the selected project runtime."});let R=Object.values(g),z=R.filter(o=>P.includes(o.command)).filter(o=>o.status==="supported"),ye=G.filter(o=>z.some(d=>d.fleetEligible===true&&d.command===o)),be=z.filter(o=>o.executionScope==="local-only").map(o=>o.command).sort();return {schemaVersion:1,scope:"project",projectRoot:t,engine:c,runtime:n.runtime,runtimeCandidates:h,compositeRuntime:D,lifecycleCoverage:D?"primary-runtime-only":"complete",framework:n.key,frameworkDisplayName:n.displayName,frameworkConfidence:n.confidence,frameworkSupportTier:te(n.key),runtimeSupportTier:S.tier,runtimeDoctorSupport:S.doctorSupport,moduleSupport:i$1,fleetStages:ye,localOnlyCommands:be,commandMap:g,supportedCommands:R.filter(o=>o.status==="supported").map(o=>o.command).sort(),unsupportedCommands:R.filter(o=>o.status==="unsupported").map(o=>o.command).sort(),globalCommands:R.filter(o=>o.status==="global").map(o=>o.command).sort()}}function pr(e,t=process.cwd()){let r=e[0];return r?Qe(t).commandMap[r]??null:null}function ur(e){if(e[0]==="project"&&e[1]==="commands")return true;if(e[0]==="commands"&&e.includes("--scope")){let t=e.indexOf("--scope");return e[t+1]==="project"}return e.some(t=>t==="--scope=project")&&e[0]==="commands"}function fr(e,t){return [`Workspai command not supported for this project: ${e.command}`,"",`Project: ${t.projectRoot??"not detected"}`,`Runtime: ${t.runtime}`,`Framework: ${t.frameworkDisplayName}`,`Reason: ${e.reason??"Unsupported for this project type."}`,"","Run `workspai project commands` to inspect supported commands for this project."].join(`
1
+ import {a as a$1,c,j,i,g,h}from'./chunk-ZCPT6KC3.js';import {t,u}from'./chunk-MOSXTVPU.js';import B from'fs';import a from'path';import k from'fs-extra';var Z=[{id:"fastapi.standard",aliases:["fastapi","fastapi.standard"],label:"fastapi \u2014 FastAPI Standard Kit",description:"Core-backed FastAPI service scaffold.",owner:"core",runtime:"python",framework:"fastapi",category:"backend",moduleSupport:true,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,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,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,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,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,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,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,stability:"preview",versionPolicy:"tested-baseline",generator:"rust-axum",createUsage:"workspai create project rust.axum <name> [--port <number>] [--output <dir>] [--skip-git]"}],K=new Map;for(let e of Z){K.set(e.id.toLowerCase(),e);for(let t of e.aliases)K.set(t.toLowerCase(),e);}function _(e){return e?K.get(e.trim().toLowerCase())??null:null}function Ze(e){return _(e)?.id??e}function et(){return Z.filter(e=>e.owner==="core"||e.generator)}function tt(e){return _(e)?.owner==="npm"}async function rt(e,t){if(!e.generator)throw new Error(`Kit is not backed by an npm generator: ${e.id}`);if(e.generator==="gofiber"){let{generateGoFiberKit:r}=await import('./gofiber-standard-47S2GYAO.js');await r(t.projectPath,{project_name:t.projectName,module_path:t.projectName,skipGit:t.skipGit,skipInstall:t.skipInstall});return}if(e.generator==="gogin"){let{generateGoGinKit:r}=await import('./gogin-standard-EWB4XNOI.js');await r(t.projectPath,{project_name:t.projectName,module_path:t.projectName,skipGit:t.skipGit,skipInstall:t.skipInstall});return}if(e.generator==="springboot"){let{generateSpringBootKit:r}=await import('./springboot-standard-Y5ADLZMQ.js');await r(t.projectPath,{project_name:t.projectName,artifact_id:t.projectName,java_version:m(t.args,"--java-version")?.trim(),spring_boot_version:m(t.args,"--spring-boot-version")?.trim(),springdoc_version:m(t.args,"--springdoc-version")?.trim(),group_id:m(t.args,"--group-id")?.trim(),package_name:m(t.args,"--package-name")?.trim(),description:m(t.args,"--description")?.trim(),port:m(t.args,"--port")?.trim(),skipGit:t.skipGit,skipInstall:t.skipInstall});return}if(e.generator==="dotnet-webapi-clean"){let{generateDotnetWebApiCleanKit:r}=await import('./dotnet-webapi-clean-AVHPJG7Y.js');await r(t.projectPath,{project_name:t.projectName,target_framework:m(t.args,"--target-framework")?.trim(),root_namespace:m(t.args,"--root-namespace")?.trim(),description:m(t.args,"--description")?.trim(),port:m(t.args,"--port")?.trim(),skipGit:t.skipGit,skipInstall:t.skipInstall});return}if(e.generator==="rust-axum"){let{generateRustAxumKit:r}=await import('./rust-axum-M5X4ZC4Z.js');await r(t.projectPath,{project_name:t.projectName,description:m(t.args,"--description")?.trim(),port:m(t.args,"--port")?.trim(),skipGit:t.skipGit,skipInstall:t.skipInstall});return}throw new Error(`Unhandled npm kit generator: ${e.generator}`)}function m(e,t){let r=e.indexOf(t);if(r>=0&&r+1<e.length)return e[r+1];let n=e.find(i=>i.startsWith(`${t}=`));return n?n.slice(t.length+1):void 0}var y=["init","dev","start","build","test","lint","format","help"],ee={python:{runtime:"python",displayName:"Python",tier:"first-class",scaffoldSupport:true,importSupport:true,lifecycleCommands:y,moduleCommands:true,doctorSupport:"full",notes:["Core-backed Python projects support RapidKit Core modules and lifecycle commands."]},node:{runtime:"node",displayName:"Node.js",tier:"extended",scaffoldSupport:true,importSupport:true,lifecycleCommands:y,moduleCommands:true,doctorSupport:"full",notes:["Node projects support npm-owned lifecycle commands; NestJS is the first-class Node framework."]},go:{runtime:"go",displayName:"Go",tier:"extended",scaffoldSupport:true,importSupport:true,lifecycleCommands:y,moduleCommands:false,doctorSupport:"readiness",notes:["Go projects support workspace governance and lifecycle commands via Go tooling."]},java:{runtime:"java",displayName:"Java / Spring Boot",tier:"extended",scaffoldSupport:true,importSupport:true,lifecycleCommands:y,moduleCommands:false,doctorSupport:"readiness",notes:["Java projects support Maven/Gradle lifecycle commands and workspace governance."]},dotnet:{runtime:"dotnet",displayName:".NET / ASP.NET Core",tier:"extended",scaffoldSupport:true,importSupport:true,lifecycleCommands:y,moduleCommands:false,doctorSupport:"readiness",notes:[".NET projects support dotnet CLI lifecycle commands and workspace governance."]},php:{runtime:"php",displayName:"PHP",tier:"extended",scaffoldSupport:true,importSupport:true,lifecycleCommands:y,moduleCommands:false,doctorSupport:"readiness",notes:["Laravel projects use the official Composer generator and PHP/Composer lifecycle adapter."]},ruby:{runtime:"ruby",displayName:"Ruby",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["Ruby projects are importable and governed as observed projects until a kit exists."]},rust:{runtime:"rust",displayName:"Rust",tier:"extended",scaffoldSupport:true,importSupport:true,lifecycleCommands:y,moduleCommands:false,doctorSupport:"readiness",notes:["Rust projects support Axum and Tauri scaffolding plus Cargo lifecycle commands."]},elixir:{runtime:"elixir",displayName:"Elixir",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["Elixir projects are importable and governed as observed projects until a kit exists."]},clojure:{runtime:"clojure",displayName:"Clojure",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["Clojure projects are importable and governed as observed projects until a kit exists."]},scala:{runtime:"scala",displayName:"Scala",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["Scala projects are importable and governed as observed projects until a kit exists."]},kotlin:{runtime:"kotlin",displayName:"Kotlin",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["Kotlin projects are importable and governed as observed projects until a kit exists."]},deno:{runtime:"deno",displayName:"Deno",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["Deno projects are importable and governed as observed projects until a kit exists."]},bun:{runtime:"bun",displayName:"Bun",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["Bun projects are importable and governed as observed projects until a kit exists."]},c:{runtime:"c",displayName:"C",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["C projects are importable and receive manifest, test, quality, security, and coverage evidence without assuming a package manager."]},cpp:{runtime:"cpp",displayName:"C++",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["C++ projects are importable and receive manifest, test, quality, security, and coverage evidence without assuming a package manager."]},unknown:{runtime:"unknown",displayName:"Unknown",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["Unknown projects are tracked safely but require manual command configuration."]}},Ce=["fastapi","nestjs"],ke=["django","flask","nextjs","remix","nuxt","react","vite","vue","sveltekit","svelte","angular","astro","solid","express","fastify","koa","echo","gofiber","gogin","springboot","dotnet","laravel","symfony","rails","sinatra","actix","axum","rocket","phoenix","clojure","scala","kotlin","deno","bun","tauri","electron","vscode-extension","c","cpp"];function x(e){return ee[e||"unknown"]??ee.unknown}function te(e){return Ce.includes(e)?"first-class":ke.includes(e)?"extended":"observed"}function re(e){let t=x(e.runtime);return {lifecycleCommands:t.lifecycleCommands,moduleCommands:e.moduleSupport&&t.moduleCommands,unsupportedLifecycleCommands:y.filter(r=>!t.lifecycleCommands.includes(r))}}var Se=["python","node","go","java","dotnet","rust","php"];function w(e){return !!e&&Se.includes(e)}function A(e,t){return t!=="lint"&&t!=="format"&&t!=="docs"?false:e==="python"}function ne(e){let t=x(e),r=w(t.runtime),n=je[t.runtime]??[],i=we[t.runtime]??[];return {runtime:t.runtime,displayName:t.displayName,lifecycleCommands:t.lifecycleCommands,hasExecutor:r,packageManagers:n,primaryFiles:i,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"]},we={python:["pyproject.toml","requirements.txt","requirements.in"],node:["package.json"],go:["go.mod"],java:["pom.xml","build.gradle","build.gradle.kts"],dotnet:["*.csproj","*.sln"],php:["composer.json"],ruby:["Gemfile"],rust:["Cargo.toml"],elixir:["mix.exs"],kotlin:["settings.gradle.kts"],deno:["deno.json","deno.jsonc"],bun:["package.json","bunfig.toml"]};function v(e,t){let r=g({runtime:typeof e?.runtime=="string"?e.runtime:void 0,framework:typeof e?.framework=="string"?e.framework:void 0,kitName:typeof e?.kit_name=="string"?e.kit_name:typeof e?.kit=="string"?e.kit:void 0});return r.runtime!=="unknown"?r.runtime:j(t,e).runtime}function ie(e){let t$1=e;for(;;){for(let n of t(t$1,"project.json"))if(B.existsSync(n))try{return JSON.parse(B.readFileSync(n,"utf8"))}catch{return null}let r=a.dirname(t$1);if(r===t$1)break;t$1=r;}return null}function ft(e,t){return v(e,t)==="go"}function gt(e,t){return v(e,t)==="node"}function yt(e,t){return v(e,t)==="java"}function bt(e,t){return v(e,t)==="dotnet"}function Ct(e,t){return v(e,t)==="python"}var xe=["project.json","context.json","file-hashes.json"];async function Rt(e){let t=a.resolve(e),r=[];for(let n of xe){let i=u(t,n);if(await k.pathExists(i))continue;let c=a.join(t,".rapidkit",n);if(!await k.pathExists(c))continue;let C=await k.readJson(c);await k.ensureDir(a.dirname(i));let S=`${i}.${process.pid}.${Date.now()}.tmp`;try{await k.writeJson(S,C,{spaces:2}),await k.move(S,i,{overwrite:false}),r.push(i);}finally{await k.remove(S).catch(()=>{});}}return r}function ve(e){for(let t$1 of t(e,"context.json"))if(B.existsSync(t$1))try{return JSON.parse(B.readFileSync(t$1,"utf8"))}catch{return null}return null}function Ne(e){let t=e?.engine;return t==="npm"||t==="pip"||t==="python"?t:"unknown"}function Pe(e,t){if(e?.module_support===false||t?.module_support===false||!e&&t)return false;let r=typeof e?.kit_name=="string"?e.kit_name:typeof e?.kit=="string"?e.kit:typeof t?.kit=="string"?t.kit:void 0,n=r?_(r):void 0;return n?.owner==="core"&&n.moduleSupport===true}function Re(e,t,r){let n=g({runtime:typeof t?.runtime=="string"?t.runtime:typeof r?.runtime=="string"?r.runtime:void 0,framework:typeof t?.framework=="string"?t.framework:typeof r?.framework=="string"?r.framework:void 0,kitName:typeof t?.kit_name=="string"?t.kit_name:typeof t?.kit=="string"?t.kit:typeof r?.kit=="string"?r.kit:void 0});return n.key!=="unknown"?n:j(e,t)}function ae(e){let t$1=a.resolve(e);if(![...t(t$1,"project.json"),...t(t$1,"context.json")].some(C=>B.existsSync(C)))return null;let n=ie(t$1),i=ve(t$1),c=Re(t$1,n,i);return {projectRoot:t$1,projectJson:n,contextJson:i,detection:c,moduleSupport:Pe(n,i),engine:Ne(i)}}var Ee=["build","dev","start","test","lint","format"],G=["init","test","build","start"],_t=["lint","format","docs"];function At(e){return !!e&&Ee.includes(e)}var Me={dev:["dev","start:dev"],start:["start","start:prod","preview"],build:["build"],test:["test","test:unit","test:ci"],lint:["lint"],format:["format","prettier"]},ce={nestjs:{dev:["dev","start:dev"],start:["start","start:prod"],build:["build"],test:["test","test:e2e"],lint:["lint"],format:["format"]},express:{dev:["dev","start:dev"],start:["start"],build:["build"],test:["test"],lint:["lint"],format:["format"]},fastify:{dev:["dev","start:dev"],start:["start"],build:["build"],test:["test"],lint:["lint"],format:["format"]},koa:{dev:["dev","start:dev"],start:["start"],build:["build"],test:["test"],lint:["lint"],format:["format"]}};function _e(e){let t=a.join(e,"package.json");if(!B.existsSync(t))return {};try{let n=JSON.parse(B.readFileSync(t,"utf8")).scripts??{};return Object.fromEntries(Object.entries(n).filter(i=>typeof i[1]=="string"))}catch{return {}}}function Ae(e,t){let r=t?c(t):"unknown",n=r!=="unknown"?a$1(r,e):[],i=t?ce[t]?.[e]??[]:[],c$1=Me[e]??[],C=[...n,...i,...c$1];return [...new Set(C)]}function me(e,t,r){let n=_e(e),i=new Set(Object.keys(n));if(i.has(t))return {scriptName:t,source:"package.json"};for(let c$1 of Ae(t,r?.framework))if(i.has(c$1))return {scriptName:c$1,source:a$1(c(r?.framework??"unknown"),t).includes(c$1)||ce[r?.framework??""]?.[t]?.includes(c$1)?"framework-candidate":"generic-candidate"};return null}function W(e){return B.existsSync(a.join(e,"package.json"))}function de(e){let t=ne(e);return t.runtime==="unknown"&&e!=="unknown"?null:{runtime:t.runtime,displayName:t.displayName,supportedCommands:t.lifecycleCommands,packageManagers:t.packageManagers,primaryFiles:t.primaryFiles,notes:t.notes,hasExecutor:t.hasExecutor}}function s(e){try{return B.existsSync(e)}catch{return false}}function b(e){try{return s(e)?B.readFileSync(e,"utf8"):""}catch{return ""}}function f(e,t){let r=b(a.join(e,"Makefile"));return r?new RegExp(`^${t}\\s*:`).test(r):false}function Fe(e){let t=[e];for(;t.length>0;){let r=t.shift();if(!r)break;let n=[];try{n=B.readdirSync(r,{withFileTypes:true});}catch{continue}for(let i of n){if(i.name==="node_modules"||i.name===".git"||i.name==="dist")continue;let c=a.join(r,i.name);if(i.isFile()&&i.name.endsWith(".csproj"))return true;i.isDirectory()&&t.push(c);}}return false}function le(e,t){let r=s(a.join(e,"pyproject.toml")),n=s(a.join(e,"requirements.txt"))||s(a.join(e,"requirements.in")),i=s(a.join(e,"manage.py"));switch(t){case "init":return r||n;case "dev":case "start":return r||i||n;case "test":return r||n||s(a.join(e,"tests"));case "build":return r||n;case "lint":case "format":return r||n||i||s(a.join(e,"setup.py"))||s(a.join(e,"setup.cfg"));default:return false}}function Le(e,t){if(!s(a.join(e,"go.mod")))return false;switch(t){case "init":return true;case "dev":return f(e,"run")||s(a.join(e,"main.go"));case "test":return true;case "build":return true;case "start":return f(e,"run")||s(a.join(e,"main.go"))||s(a.join(e,"cmd"));case "lint":return s(a.join(e,".golangci.yml"))||s(a.join(e,".golangci.yaml"))||f(e,"lint");case "format":return f(e,"fmt")||f(e,"format");default:return false}}function De(e,t){let r=s(a.join(e,"pom.xml")),n=s(a.join(e,"build.gradle"))||s(a.join(e,"build.gradle.kts"));if(!r&&!n)return false;switch(t){case "init":case "test":case "build":case "dev":case "start":return true;case "lint":return f(e,"lint")||b(a.join(e,"pom.xml")).includes("checkstyle")||b(a.join(e,"build.gradle")).includes("checkstyle")||b(a.join(e,"build.gradle.kts")).includes("checkstyle");case "format":return f(e,"format")||b(a.join(e,"build.gradle")).includes("spotless")||b(a.join(e,"build.gradle.kts")).includes("spotless");default:return false}}function Oe(e,t){if(!Fe(e))return false;switch(t){case "init":case "dev":case "test":case "build":case "start":return true;case "lint":return f(e,"lint")||b(a.join(e,"Directory.Build.props")).includes("EnforceCodeStyleInBuild");case "format":return f(e,"format")||s(a.join(e,".editorconfig"));default:return false}}function Te(e,t,r){return t==="init"?W(e):me(e,t,{framework:r})!==null}function Ie(e,t,r){switch(t){case "php":return r==="init"&&s(a.join(e,"composer.json"));case "ruby":return r==="init"&&s(a.join(e,"Gemfile"));case "rust":return s(a.join(e,"Cargo.toml"))?r==="init"||r==="test"||r==="build"||r==="start":false;case "elixir":return r==="init"&&s(a.join(e,"mix.exs"));case "deno":return s(a.join(e,"deno.json"))||s(a.join(e,"deno.jsonc"))?r==="init"||r==="dev"||r==="test"||r==="start":r==="init"&&s(a.join(e,"package.json"));case "bun":return s(a.join(e,"bunfig.toml"))||s(a.join(e,"bun.lock"))?r==="init"||r==="dev"||r==="test"||r==="build"||r==="start":r==="init"&&s(a.join(e,"package.json"));default:return false}}function Ke(e){try{let t=JSON.parse(b(a.join(e,"composer.json")));return new Set(Object.keys(t.scripts??{}))}catch{return new Set}}function Be(e,t){if(!s(a.join(e,"composer.json")))return false;let r=Ke(e),n=s(a.join(e,"artisan"));switch(t){case "init":return true;case "dev":return n||r.has("dev");case "start":return n||r.has("start");case "test":return n||r.has("test");case "build":return r.has("build");case "lint":return r.has("lint")||r.has("analyse")||r.has("analyze");case "format":return r.has("format")||r.has("fmt")||s(a.join(e,"pint.json"))||s(a.join(e,"vendor","bin","pint"));default:return false}}function Ge(e,t){return s(a.join(e,"Cargo.toml"))?t==="init"||t==="dev"||t==="start"||t==="build"||t==="test"||t==="lint"||t==="format":false}function L(e,t,r,n){if(A(t,r))return le(e,r);if(!w(t))return Ie(e,t,r);switch(t){case "node":return Te(e,r,n);case "python":return le(e,r);case "go":return Le(e,r);case "java":return De(e,r);case "dotnet":return Oe(e,r);case "rust":return Ge(e,r);case "php":return Be(e,r);default:return false}}function Ue(e,t,r){return ["init","dev","start","build","test","lint","format"].filter(i=>L(e,t,i,r))}function pe(e){let t=re({runtime:e.runtime,moduleSupport:e.moduleSupport});if(!e.projectPath)return t;let r=Ue(e.projectPath,e.runtime,e.framework),n=new Set(["help"]);for(let c of r)t.lifecycleCommands.includes(c)&&n.add(c);e.runtime==="node"&&W(e.projectPath)&&n.add("init");let i=[...n].sort();return {lifecycleCommands:i,moduleCommands:t.moduleCommands,unsupportedLifecycleCommands:t.lifecycleCommands.filter(c=>!i.includes(c)).sort()}}var q=["version","commands","doctor","project","help"],P=["init","dev","start","build","test","lint","format"],Y=["add","modules","upgrade","diff","merge","reconcile","rollback","uninstall","checkpoint","snapshot","optimize"],H=["create","list","info","frameworks","license"];q.filter(e=>e!=="help");function $e(e){let t$1=a.resolve(e);for(;;){if([...t(t$1,"project.json"),...t(t$1,"context.json")].some(i=>B.existsSync(i)))return t$1;let n=a.dirname(t$1);if(n===t$1)break;t$1=n;}return null}function N(e,t){return {command:e,...t}}var Je=new Set(["dev","lint","format"]),qe=new Set(G);function Ye(e,t){return t?qe.has(e)?{executionScope:"fleet",fleetEligible:true}:Je.has(e)?{executionScope:"local-only",fleetEligible:false}:{executionScope:"local-only",fleetEligible:false}:{executionScope:"local-only",fleetEligible:false}}function He(e,t){return A(t.runtime,e)?"core":"runtime"}function ze(e,t,r,n){return !e||!n.lifecycleCommands.includes(t)?false:L(e,r.runtime,t,r.key)}function Ve(e,t){let r=!!e&&(t.runtime==="python"||w(t.runtime)&&L(e,t.runtime,"build",t.key));return N("docs",{owner:t.runtime==="python"?"core":"runtime",status:r?"supported":"unsupported",reason:r?t.runtime==="python"?"Documentation generation is delegated to Python Core for this project.":"Project documentation commands are available through the npm wrapper for this runtime.":"Documentation commands require a supported Python or npm-executor project manifest."})}function Xe(e){let t=a.resolve(e),r=$e(e);return r||(h(t).length>0?t:null)}function Qe(e=process.cwd()){let t=Xe(e),r=t?ae(t):null,n=r?.detection??j(e,r?.projectJson??null),i$1=r?.moduleSupport??false,c=r?.engine??"unknown",C=de(n.runtime),S=x(n.runtime),fe=t?i(t):[],h=[n.runtime,...fe.filter(o=>o!==n.runtime)].filter((o,d,E)=>o!=="unknown"&&E.indexOf(o)===d);h.length===0&&h.push("unknown");let D=h.filter(o=>o!=="unknown").length>1,ge=pe({runtime:n.runtime,moduleSupport:i$1,projectPath:t??void 0,framework:n.key}),g={};for(let o of q)g[o]=N(o,{owner:o==="project"?"core":"npm",status:"supported",reason:o==="project"?"Project detection is a Core contract; workspace project lifecycle remains npm-owned.":o==="help"?"Help is available for every Workspai project through the npm CLI.":"Universal command available across Workspai project types."});for(let o of P){let d=ze(t,o,n,ge),E=He(o,n),O=Ye(o,d);g[o]=N(o,{owner:E,status:d?"supported":"unsupported",executionScope:O.executionScope,fleetEligible:O.fleetEligible,reason:d?E==="core"?`Delegated to Python Core for ${n.displayName} projects.`:O.fleetEligible?`Handled by runtime adapter and eligible for workspace fleet stages (${o}).`:o==="dev"?"Local development command only; workspace fleet excludes dev by design.":n.runtime==="node"?`Handled by npm/pnpm/yarn via the resolved ${o} script in package.json.`:`Handled by the ${C?.displayName??n.displayName} runtime adapter for local project execution.`:t?n.runtime==="node"?`No ${o} script was found in package.json for this ${n.displayName} project.`:w(n.runtime)?`The ${n.displayName} runtime is tracked, but ${o} is not available from detected project manifests.`:`${n.displayName} is tracked as an observed runtime; ${o} requires project manifests or explicit scripts.`:"No Workspai project was detected."});}if(D)for(let o of P){let d=g[o];d&&(d.reason=`Composite runtime boundary detected (${h.join(", ")}). This capability describes only the primary ${n.runtime} adapter; nested runtime lifecycle coverage requires explicit project boundaries or command contracts. ${d.reason??""}`.trim());}g.docs=Ve(t,n);for(let o of Y)g[o]=N(o,{owner:i$1?"core":"none",status:i$1?"supported":"unsupported",reason:i$1?"Core module/template command supported for this project.":`Core module/template commands are not available for ${n.displayName} projects.`});for(let o of H)g[o]=N(o,{owner:o==="create"?"npm":"core",status:"global",reason:o==="create"?"Create is orchestrated by npm for multi-language workspace support.":"Engine catalog command; not specific to the selected project runtime."});let R=Object.values(g),z=R.filter(o=>P.includes(o.command)).filter(o=>o.status==="supported"),ye=G.filter(o=>z.some(d=>d.fleetEligible===true&&d.command===o)),be=z.filter(o=>o.executionScope==="local-only").map(o=>o.command).sort();return {schemaVersion:1,scope:"project",projectRoot:t,engine:c,runtime:n.runtime,runtimeCandidates:h,compositeRuntime:D,lifecycleCoverage:D?"primary-runtime-only":"complete",framework:n.key,frameworkDisplayName:n.displayName,frameworkConfidence:n.confidence,frameworkSupportTier:te(n.key),runtimeSupportTier:S.tier,runtimeDoctorSupport:S.doctorSupport,moduleSupport:i$1,fleetStages:ye,localOnlyCommands:be,commandMap:g,supportedCommands:R.filter(o=>o.status==="supported").map(o=>o.command).sort(),unsupportedCommands:R.filter(o=>o.status==="unsupported").map(o=>o.command).sort(),globalCommands:R.filter(o=>o.status==="global").map(o=>o.command).sort()}}function pr(e,t=process.cwd()){let r=e[0];return r?Qe(t).commandMap[r]??null:null}function ur(e){if(e[0]==="project"&&e[1]==="commands")return true;if(e[0]==="commands"&&e.includes("--scope")){let t=e.indexOf("--scope");return e[t+1]==="project"}return e.some(t=>t==="--scope=project")&&e[0]==="commands"}function fr(e,t){return [`Workspai command not supported for this project: ${e.command}`,"",`Project: ${t.projectRoot??"not detected"}`,`Runtime: ${t.runtime}`,`Framework: ${t.frameworkDisplayName}`,`Reason: ${e.reason??"Unsupported for this project type."}`,"","Run `workspai project commands` to inspect supported commands for this project."].join(`
2
2
  `)}export{_ as a,Ze as b,et as c,tt as d,rt as e,x as f,te as g,w as h,ie as i,ft as j,gt as k,yt as l,bt as m,Ct as n,Rt as o,ae as p,Ee as q,_t as r,At as s,me as t,pe as u,$e as v,Qe as w,pr as x,ur as y,fr as z};