rapidkit 0.32.0 → 0.32.1

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.
@@ -1,4 +1,4 @@
1
- import {a}from'./chunk-S2FC4GUS.js';import n from'chalk';import W from'fs';import g from'path';import {execa}from'execa';function b(s){try{return JSON.parse(s)}catch{return null}}function ie(s){let t=g.resolve(s);for(;;){if(W.existsSync(g.join(t,".rapidkit-workspace"))||W.existsSync(g.join(t,".rapidkit","workspace.json")))return t;let a=g.dirname(t);if(a===t)return null;t=a;}}function le(s){let t=g.resolve(s),a=ie(t);if(!a)throw new Error("No RapidKit workspace found in current directory or parents");return a}async function S(s,t){let a=process.argv[1];if(!a)return {exitCode:1,stdout:"",stderr:"RapidKit entrypoint is unavailable for autopilot execution.",crashed:true};try{let o=await execa(process.execPath,[a,...s],{cwd:t,reject:false,env:{...process.env,RAPIDKIT_AUTOPILOT_CHILD:"1"}});return {exitCode:Number(o.exitCode??1),stdout:o.stdout,stderr:o.stderr,crashed:false}}catch(o){return {exitCode:1,stdout:"",stderr:o instanceof Error?o.message:String(o),crashed:true}}}function H(s){let t=s.toLowerCase();return t==="pass"?"pass":t==="warn"?"warn":t==="fail"?"fail":"warn"}function U(s){return s.summary.failed>0?"fail":s.gates.results.some(t=>t.status==="warn")?"warn":"pass"}function ce(s){let t=s.filter(o=>o.status!=="skipped");if(t.length===0)return 100;let a=t.reduce((o,r)=>r.status==="pass"?o+1:r.status==="warn"?o+.6:o,0);return Math.round(a/t.length*100)}function ue(s){return s.executionError?["Re-run: npx rapidkit autopilot release --mode audit --json","Inspect .rapidkit/reports/autopilot-release-last-run.json for execution failure details"]:s.blockers.length>0?["Run: npx rapidkit doctor workspace --plan","Run: npx rapidkit readiness --json --strict","Run: npx rapidkit workspace run test --affected --strict"]:s.hasWarnings&&s.mode!=="enforce"?["Review warning-level findings in autopilot report","Optionally run: npx rapidkit autopilot release --mode safe-fix"]:["Workspace is release-ready based on current autopilot policy"]}async function N(s,t){await W.promises.mkdir(g.dirname(s),{recursive:true}),await W.promises.writeFile(s,`${JSON.stringify(t,null,2)}
1
+ import {a}from'./chunk-LSFRHYMD.js';import n from'chalk';import W from'fs';import g from'path';import {execa}from'execa';function b(s){try{return JSON.parse(s)}catch{return null}}function ie(s){let t=g.resolve(s);for(;;){if(W.existsSync(g.join(t,".rapidkit-workspace"))||W.existsSync(g.join(t,".rapidkit","workspace.json")))return t;let a=g.dirname(t);if(a===t)return null;t=a;}}function le(s){let t=g.resolve(s),a=ie(t);if(!a)throw new Error("No RapidKit workspace found in current directory or parents");return a}async function S(s,t){let a=process.argv[1];if(!a)return {exitCode:1,stdout:"",stderr:"RapidKit entrypoint is unavailable for autopilot execution.",crashed:true};try{let o=await execa(process.execPath,[a,...s],{cwd:t,reject:false,env:{...process.env,RAPIDKIT_AUTOPILOT_CHILD:"1"}});return {exitCode:Number(o.exitCode??1),stdout:o.stdout,stderr:o.stderr,crashed:false}}catch(o){return {exitCode:1,stdout:"",stderr:o instanceof Error?o.message:String(o),crashed:true}}}function H(s){let t=s.toLowerCase();return t==="pass"?"pass":t==="warn"?"warn":t==="fail"?"fail":"warn"}function U(s){return s.summary.failed>0?"fail":s.gates.results.some(t=>t.status==="warn")?"warn":"pass"}function ce(s){let t=s.filter(o=>o.status!=="skipped");if(t.length===0)return 100;let a=t.reduce((o,r)=>r.status==="pass"?o+1:r.status==="warn"?o+.6:o,0);return Math.round(a/t.length*100)}function ue(s){return s.executionError?["Re-run: npx rapidkit autopilot release --mode audit --json","Inspect .rapidkit/reports/autopilot-release-last-run.json for execution failure details"]:s.blockers.length>0?["Run: npx rapidkit doctor workspace --plan","Run: npx rapidkit readiness --json --strict","Run: npx rapidkit workspace run test --affected --strict"]:s.hasWarnings&&s.mode!=="enforce"?["Review warning-level findings in autopilot report","Optionally run: npx rapidkit autopilot release --mode safe-fix"]:["Workspace is release-ready based on current autopilot policy"]}async function N(s,t){await W.promises.mkdir(g.dirname(s),{recursive:true}),await W.promises.writeFile(s,`${JSON.stringify(t,null,2)}
2
2
  `,"utf-8");}async function ke(s){let t=le(s.workspacePath),a$1=s.mode,o=[],r=[],M,F,E,J=0,f=false,I=0,T=0,_=Date.now(),x=await S(["doctor","workspace","--json"],t),q=Date.now()-_,u="pass";if(x.crashed)u="fail",f=true,r.push(`doctor workspace execution error: ${x.stderr||"unknown error"}`);else if(x.exitCode!==0)u="fail",r.push("doctor workspace command failed");else {let e=b(x.stdout),i=e&&e.healthScore&&typeof e.healthScore=="object"?e.healthScore:{},l=Number(i.errors??0),c=Number(i.warnings??0);Number.isFinite(l)&&l>0?(u="fail",r.push(`doctor workspace reports ${l} error(s)`)):Number.isFinite(c)&&c>0&&(u="warn");}let L=o.push({name:"doctor-workspace",status:u,durationMs:q,summary:u==="pass"?"doctor workspace passed":u==="warn"?"doctor workspace reported warnings":"doctor workspace reported errors"})-1;a$1==="enforce"&&u==="warn"&&r.push("doctor workspace reported warnings under enforce mode");let z=Date.now(),A=await S(["readiness","--json"],t),O=Date.now()-z,p="fail";if(A.crashed)p="fail",f=true,r.push(`readiness execution error: ${A.stderr||"unknown error"}`);else if(A.exitCode!==0)p="fail",r.push("readiness command failed");else {let e=b(A.stdout),i=String(e?.overallStatus??"fail");if(p=H(i),typeof e?.evidencePath=="string"&&e.evidencePath.trim().length>0&&(M=e.evidencePath),p==="fail"){let l=Array.isArray(e?.blockingReasons)?e?.blockingReasons.filter(c=>typeof c=="string"):[];l.length>0?r.push(...l.map(c=>`readiness: ${c}`)):r.push("readiness overall status is fail");}}let V=o.push({name:"readiness",status:p,durationMs:O,summary:`readiness overall status is ${p}`})-1;a$1==="enforce"&&p==="warn"&&r.push("readiness reported warnings under enforce mode");let Q=Date.now(),v=await S(["doctor","workspace","--plan","--json"],t),X=Date.now()-Q,w="warn";if(v.crashed)w="fail",f=true,r.push(`doctor remediation plan execution error: ${v.stderr||"unknown error"}`);else if(v.exitCode!==0)w="fail",r.push("doctor remediation plan command failed");else {let e=b(v.stdout),i=e&&e.remediationPlan&&typeof e.remediationPlan=="object"?e.remediationPlan:null,l=Number(i?.totalSteps??0),c=Number(i?.executableSteps??0);Number.isFinite(l)&&l>0&&(I=l),Number.isFinite(c)&&c>0&&(T=c),Number.isFinite(l)&&l===0?w="pass":w="warn";}if(o.push({name:"remediation-plan",status:w,durationMs:X,summary:w==="pass"?"no remediation steps required":"remediation steps available"}),a$1==="enforce"&&w==="warn"&&r.push("remediation plan has pending steps under enforce mode"),a$1==="safe-fix"){let e=Date.now(),i=await S(["doctor","workspace","--apply"],t),l=Date.now()-e,c=i.crashed||i.exitCode!==0?"fail":"pass";if(i.crashed)f=true,r.push(`doctor remediation apply execution error: ${i.stderr||"unknown error"}`);else if(c==="fail")r.push("doctor remediation apply failed");else {J=T>0?T:I>0?I:1;let $=await S(["doctor","workspace","--json"],t);if($.crashed)u="fail",f=true,r.push(`post-apply doctor execution error: ${$.stderr||"unknown error"}`);else if($.exitCode!==0)u="fail",r.push("post-apply doctor workspace command failed");else {let m=b($.stdout),C=m&&m.healthScore&&typeof m.healthScore=="object"?m.healthScore:{},R=Number(C.errors??0),y=Number(C.warnings??0);Number.isFinite(R)&&R>0?(u="fail",r.push(`post-apply doctor reports ${R} error(s)`)):Number.isFinite(y)&&y>0?u="warn":u="pass";}o[L].status=u,o[L].summary=`doctor workspace post-apply status is ${u}`;let D=await S(["readiness","--json"],t);if(D.crashed)p="fail",f=true,r.push(`post-apply readiness execution error: ${D.stderr||"unknown error"}`);else if(D.exitCode!==0)p="fail",r.push("post-apply readiness command failed");else {let m=b(D.stdout),C=String(m?.overallStatus??"fail");if(p=H(C),typeof m?.evidencePath=="string"&&m.evidencePath.trim().length>0&&(M=m.evidencePath),p==="fail"){let R=Array.isArray(m?.blockingReasons)?m?.blockingReasons.filter(y=>typeof y=="string"):[];R.length>0?r.push(...R.map(y=>`post-apply readiness: ${y}`)):r.push("post-apply readiness overall status is fail");}}o[V].status=p,o[V].summary=`readiness post-apply overall status is ${p}`;}o.push({name:"remediation-apply",status:c,durationMs:l,summary:c==="pass"?"safe remediation apply completed":"safe remediation apply failed"});}else o.push({name:"remediation-apply",status:"skipped",durationMs:0,summary:"remediation apply is skipped for this mode"});let Y=Date.now(),h="pass",k="workspace test/build completed for selected projects";try{let e=await a({workspacePath:t,stage:"test",affected:true,since:s.since,parallel:s.parallel,maxWorkers:s.maxWorkers,strict:true,json:true,enforceGates:false});F=g.join(t,".rapidkit","reports","autopilot-workspace-run-test.json"),await N(F,e);let i=U(e);if(i==="fail")h="fail",k="workspace test stage failed for selected projects",r.push("workspace run test failed for selected projects");else {i==="warn"&&(h="warn",k="workspace test stage completed with warnings",a$1==="enforce"&&r.push("workspace run test reported warnings under enforce mode"));let l=await a({workspacePath:t,stage:"build",affected:true,since:s.since,parallel:s.parallel,maxWorkers:s.maxWorkers,strict:true,json:true,enforceGates:false});E=g.join(t,".rapidkit","reports","autopilot-workspace-run-build.json"),await N(E,l);let c=U(l);c==="fail"?(h="fail",k="workspace build stage failed for selected projects",r.push("workspace run build failed for selected projects")):c==="warn"&&(h="warn",k="workspace test/build completed with warnings",a$1==="enforce"&&r.push("workspace run test/build reported warnings under enforce mode"));}}catch(e){h="fail",k="workspace test/build orchestration failed",f=true,r.push(`workspace run orchestration error: ${e instanceof Error?e.message:String(e)}`);}let Z=Date.now()-Y;o.push({name:"workspace-run-test-build",status:h,durationMs:Z,summary:k});let P=o.filter(e=>e.status==="warn").length,ee=o.filter(e=>e.status==="fail").length,B=a$1==="enforce"?o.some(e=>e.status==="warn"||e.status==="fail"):ee>0,j=[...new Set(r)],te=f||B?Math.max(1,j.length):0,se=ce(o),re=f||B?"blocked":P>0?"partial":"approved",oe=f?3:B?1:P>0?2:0,ae=ue({mode:a$1,executionError:f,blockers:j,hasWarnings:P>0}),G=g.join(t,".rapidkit","reports","autopilot-release-last-run.json"),d={schemaVersion:"autopilot-release-v1",generatedAt:new Date().toISOString(),workspacePath:t,mode:a$1,summary:{releaseScore:se,verdict:re,blockers:te,warnings:P,safeFixesApplied:J,manualActions:j.length,exitCode:oe},stages:o,blockingReasons:j,nextActions:ae,artifacts:{reportPath:G,readinessEvidencePath:M,workspaceRunTestPath:F,workspaceRunBuildPath:E}};if(await N(G,d),s.output&&await N(g.resolve(s.output),d),!s.json){console.log(n.bold.cyan(`
3
3
  \u{1F680} RapidKit Autopilot Release
4
4
  `)),console.log(n.bold(`Workspace: ${n.cyan(g.basename(t))}`)),console.log(n.gray(`Path: ${t}`)),console.log(n.white(`Mode: ${a$1}`)),console.log(n.white(`Verdict: ${d.summary.verdict==="approved"?n.green("approved"):d.summary.verdict==="partial"?n.yellow("partial"):n.red("blocked")}`)),console.log(n.white(`Release score: ${d.summary.releaseScore}`));for(let e of d.stages){let i=e.status==="pass"?n.green("PASS"):e.status==="warn"?n.yellow("WARN"):e.status==="skipped"?n.gray("SKIP"):n.red("FAIL");console.log(` - ${e.name}: ${i} ${e.summary} (${e.durationMs}ms)`);}if(d.blockingReasons.length>0){console.log(n.bold.red(`
@@ -1,4 +1,4 @@
1
- import {promises}from'fs';import r from'path';var g="1.24",i="github.com/air-verse/air@v1.52.3",n="github.com/swaggo/swag/cmd/swag@v1.16.3",a="main.go -d cmd/server,internal/handlers,internal/apierr -o docs --parseDependency";function u(e){return e.split(/[-_\s]+/).map(t=>t.charAt(0).toUpperCase()+t.slice(1)).join("")}async function $(e,t){await promises.mkdir(r.dirname(e),{recursive:true}),await promises.writeFile(e,t,"utf8");}function h(e){let t=e.includeLintAndFmt?`
1
+ import {promises}from'fs';import r from'path';var g="1.24",n="github.com/air-verse/air@v1.52.3",i="github.com/swaggo/swag/cmd/swag@v1.16.3",a="main.go -d cmd/server,internal/handlers,internal/apierr -o docs --parseDependency";function u(e){return e.split(/[-_\s]+/).map(t=>t.charAt(0).toUpperCase()+t.slice(1)).join("")}async function h(e,t){await promises.mkdir(r.dirname(e),{recursive:true}),await promises.writeFile(e,t,"utf8");}function f(e){let t=e.includeLintAndFmt?`
2
2
  lint:
3
3
  @command -v golangci-lint >/dev/null 2>&1 || (echo "golangci-lint not found. Install: https://golangci-lint.run/usage/install/" && exit 1)
4
4
  golangci-lint run ./...
@@ -18,7 +18,7 @@ GOBIN ?= $(shell go env GOPATH)/bin
18
18
 
19
19
  # Hot reload \u2014 installs pinned air version on first use
20
20
  dev:
21
- @test -x "$(GOBIN)/air" || go install ${i}
21
+ @test -x "$(GOBIN)/air" || go install ${n}
22
22
  ${e.devCommand}
23
23
 
24
24
  run:
@@ -37,7 +37,7 @@ cover:
37
37
 
38
38
  # Generate Swagger docs \u2014 installs pinned swag version on first use
39
39
  docs:
40
- @test -x "$(GOBIN)/swag" || go install ${n}
40
+ @test -x "$(GOBIN)/swag" || go install ${i}
41
41
  $(GOBIN)/swag init -g ${a}${t}
42
42
  tidy:
43
43
  go mod tidy
@@ -52,7 +52,7 @@ docker-up:
52
52
 
53
53
  docker-down:
54
54
  docker compose down
55
- `}function p(e){return `#!/usr/bin/env sh
55
+ `}function $(e){return `#!/usr/bin/env sh
56
56
  # RapidKit ${e.runtimeLabel} project launcher \u2014 generated by RapidKit CLI
57
57
  # https://getrapidkit.com
58
58
 
@@ -66,9 +66,9 @@ case "$CMD" in
66
66
  echo "\u{1F439} Initializing ${e.runtimeLabel} project\u2026"
67
67
  GOBIN="$(go env GOPATH)/bin"
68
68
  echo " \u2192 installing air (hot reload)\u2026"
69
- go install ${i} 2>/dev/null && echo " \u2713 air" || echo " \u26A0 air install failed (run: go install ${i})"
69
+ go install ${n} 2>/dev/null && echo " \u2713 air" || echo " \u26A0 air install failed (run: go install ${n})"
70
70
  echo " \u2192 installing swag (swagger)\u2026"
71
- go install ${n} 2>/dev/null && echo " \u2713 swag" || echo " \u26A0 swag install failed (run: go install ${n})"
71
+ go install ${i} 2>/dev/null && echo " \u2713 swag" || echo " \u26A0 swag install failed (run: go install ${i})"
72
72
  if [ ! -f ".env" ] && [ -f ".env.example" ]; then
73
73
  cp .env.example .env && echo " \u2713 .env created from .env.example"
74
74
  fi
@@ -133,7 +133,8 @@ case "$CMD" in
133
133
  exit 1
134
134
  ;;
135
135
  esac
136
- `}function f(e){return `@echo off
136
+ `}function v(e){return `@echo off
137
+ setlocal
137
138
  rem RapidKit ${e.runtimeLabel} project launcher \u2014 Windows
138
139
  set CMD=%1
139
140
  if "%CMD%"=="" goto usage
@@ -141,21 +142,63 @@ shift
141
142
 
142
143
  if "%CMD%"=="init" (
143
144
  echo Initializing ${e.runtimeLabel} project...
144
- go install ${i}
145
145
  go install ${n}
146
+ go install ${i}
146
147
  if not exist .env if exist .env.example copy .env.example .env
147
148
  go mod tidy
148
149
  exit /b %ERRORLEVEL%
149
150
  )
150
- if "%CMD%"=="dev" ( make dev %* & exit /b %ERRORLEVEL% )
151
- if "%CMD%"=="build" ( make build %* & exit /b %ERRORLEVEL% )
152
- if "%CMD%"=="test" ( make test %* & exit /b %ERRORLEVEL% )
153
- if "%CMD%"=="lint" ( make lint %* & exit /b %ERRORLEVEL% )
154
- if "%CMD%"=="format" ( make fmt %* & exit /b %ERRORLEVEL% )
155
- if "%CMD%"=="docs" ( make docs %* & exit /b %ERRORLEVEL% )
156
- if "%CMD%"=="start" ( bin\\${e.projectName}.exe %* & exit /b %ERRORLEVEL% )
151
+ if "%CMD%"=="dev" (
152
+ where air >nul 2>nul
153
+ if errorlevel 1 (
154
+ go run ./cmd/server %*
155
+ ) else (
156
+ air %*
157
+ )
158
+ exit /b %ERRORLEVEL%
159
+ )
160
+ if "%CMD%"=="build" (
161
+ if not exist bin mkdir bin
162
+ go build -buildvcs=false -o bin\\${e.projectName}.exe ./cmd/server
163
+ exit /b %ERRORLEVEL%
164
+ )
165
+ if "%CMD%"=="test" (
166
+ go test ./... -v -race %*
167
+ exit /b %ERRORLEVEL%
168
+ )
169
+ if "%CMD%"=="lint" (
170
+ golangci-lint run %*
171
+ exit /b %ERRORLEVEL%
172
+ )
173
+ if "%CMD%"=="format" (
174
+ gofmt -w .
175
+ exit /b %ERRORLEVEL%
176
+ )
177
+ if "%CMD%"=="fmt" (
178
+ gofmt -w .
179
+ exit /b %ERRORLEVEL%
180
+ )
181
+ if "%CMD%"=="docs" (
182
+ where swag >nul 2>nul
183
+ if errorlevel 1 (
184
+ echo swag is required for docs. Run: go install ${i}
185
+ exit /b 1
186
+ )
187
+ swag init -g ${a}
188
+ exit /b %ERRORLEVEL%
189
+ )
190
+ if "%CMD%"=="start" (
191
+ if not exist bin\\${e.projectName}.exe call "%~f0" build
192
+ if errorlevel 1 exit /b %ERRORLEVEL%
193
+ bin\\${e.projectName}.exe %*
194
+ exit /b %ERRORLEVEL%
195
+ )
157
196
 
158
197
  :usage
198
+ echo RapidKit ${e.runtimeLabel} project launcher
199
+ echo.
159
200
  echo Available: init, dev, start, build, docs, test, lint, format
201
+ echo.
202
+ echo Windows launcher uses native Go commands and does not require GNU Make.
160
203
  exit /b 1
161
- `}export{g as a,u as b,$ as c,h as d,p as e,f};
204
+ `}export{g as a,u as b,h as c,f as d,$ as e,v as f};
@@ -1,4 +1,4 @@
1
- import {b,c}from'./chunk-X5KRT2DT.js';import {b as b$2}from'./chunk-AC6KIKII.js';import {promises}from'fs';import n from'path';import o from'chalk';import b$1 from'ora';import {execa}from'execa';var R="net8.0",C="8080";function S(e){return e.trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").replace(/-{2,}/g,"-")}function A(e,r){return e.trim().replace(/[^A-Za-z0-9_.]+/g,".").replace(/^\.+|\.+$/g,"").replace(/\.{2,}/g,".").split(".").map(a=>a.replace(/^[^A-Za-z_]+/,"").replace(/[^A-Za-z0-9_]/g,"")).filter(Boolean).join(".")||r}function _(e,r){return e.replace(/[\r\n\t]+/g," ").trim()||r}function I(e){return /^net\d+\.\d+$/.test(e.trim())}function E(){return JSON.stringify({engine:"npm",runtime:"dotnet"},null,2)}function $(e,r){return JSON.stringify({kit_name:"dotnet.webapi.clean",runtime:"dotnet",framework:"dotnet",module_support:false,project_name:e.project_name,root_namespace:e.root_namespace,target_framework:e.target_framework,app_version:e.app_version,created_by:"rapidkit-npm",rapidkit_version:r,created_at:new Date().toISOString()},null,2)}function k(e){return `<Project Sdk="Microsoft.NET.Sdk.Web">
1
+ import {b,c}from'./chunk-3Q7264EJ.js';import {b as b$2}from'./chunk-AC6KIKII.js';import {promises}from'fs';import n from'path';import o from'chalk';import b$1 from'ora';import {execa}from'execa';var R="net8.0",C="8080";function S(e){return e.trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").replace(/-{2,}/g,"-")}function A(e,r){return e.trim().replace(/[^A-Za-z0-9_.]+/g,".").replace(/^\.+|\.+$/g,"").replace(/\.{2,}/g,".").split(".").map(a=>a.replace(/^[^A-Za-z_]+/,"").replace(/[^A-Za-z0-9_]/g,"")).filter(Boolean).join(".")||r}function _(e,r){return e.replace(/[\r\n\t]+/g," ").trim()||r}function I(e){return /^net\d+\.\d+$/.test(e.trim())}function E(){return JSON.stringify({engine:"npm",runtime:"dotnet"},null,2)}function $(e,r){return JSON.stringify({kit_name:"dotnet.webapi.clean",runtime:"dotnet",framework:"dotnet",module_support:false,project_name:e.project_name,root_namespace:e.root_namespace,target_framework:e.target_framework,app_version:e.app_version,created_by:"rapidkit-npm",rapidkit_version:r,created_at:new Date().toISOString()},null,2)}function k(e){return `<Project Sdk="Microsoft.NET.Sdk.Web">
2
2
  <PropertyGroup>
3
3
  <TargetFramework>${e.target_framework}</TargetFramework>
4
4
  <Nullable>enable</Nullable>
@@ -1,4 +1,4 @@
1
- import {c,b as b$1,d as d$1,e,f,a}from'./chunk-X5KRT2DT.js';import {b}from'./chunk-AC6KIKII.js';import {promises}from'fs';import d from'path';import o from'chalk';import S from'ora';import {execa}from'execa';function _(e){return `package main
1
+ import {c,b as b$1,d as d$1,e,f,a}from'./chunk-3Q7264EJ.js';import {b}from'./chunk-AC6KIKII.js';import {promises}from'fs';import d from'path';import o from'chalk';import S from'ora';import {execa}from'execa';function _(e){return `package main
2
2
 
3
3
  import (
4
4
  "fmt"
@@ -1,4 +1,4 @@
1
- import {c,b as b$2,d as d$1,e,f,a}from'./chunk-X5KRT2DT.js';import {b as b$1}from'./chunk-AC6KIKII.js';import {promises}from'fs';import d from'path';import o from'chalk';import _ from'ora';import {execa}from'execa';function T(e){return `package main
1
+ import {c,b as b$2,d as d$1,e,f,a}from'./chunk-3Q7264EJ.js';import {b as b$1}from'./chunk-AC6KIKII.js';import {promises}from'fs';import d from'path';import o from'chalk';import _ from'ora';import {execa}from'execa';function T(e){return `package main
2
2
 
3
3
  import (
4
4
  "context"
package/dist/index.js CHANGED
@@ -113,7 +113,7 @@ RapidKit Private Product Manifest
113
113
  Wrote manifest: ${y__default.resolve(process.cwd(),e)}
114
114
  `));}function Lo(t){let e=t.command("product",{hidden:true}).description("Product Factory commands for private workspace product manifests");e.command("plan <backlog>").description("Build a deterministic Product Factory plan from a workspace backlog JSON").option("--output <file>","Write plan JSON to file").option("--kit <kit>","Default API kit for generated product manifests","fastapi.standard").option("--tier <tier>","Filter products by tier").option("--category <category>","Filter products by category").option("--limit <count>","Limit planned products").option("--json","Print JSON to stdout").action(async(r,o)=>{try{let n=await Jo({backlogPath:r,kit:o.kit,tier:o.tier,category:o.category,limit:o.limit});o.output&&await Fo(o.output,n,true),o.json?console.log(at(n)):Ks(n,o.output);}catch(n){let i=n instanceof Error?n.message:String(n);o.json?console.log(at({ok:false,error:{message:i}})):console.error(s.red(`Product plan failed: ${i}`)),process.exit(1);}}),e.command("manifest").description("Create or inspect private product manifests").command("create <slug>").description("Create a private product manifest from a backlog product slug").requiredOption("--from-backlog <file>","Source workspace backlog JSON").option("--output <fileOrDir>","Manifest output file or directory").option("--kit <kit>","API kit for the generated workspace product","fastapi.standard").option("--workspace-output <dir>","Suggested root for generated product workspaces").option("--json","Print JSON to stdout").option("--force","Overwrite existing manifest file").action(async(r,o)=>{try{Ko(r);let n=await Ws({backlogPath:o.fromBacklog,slug:r,kit:o.kit,outputRoot:o.workspaceOutput}),i=Fs(o.output,r);await Fo(i,n,o.force===true),o.json?console.log(at(n)):Js(n,i);}catch(n){let i=n instanceof Error?n.message:String(n);o.json?console.log(at({ok:false,error:{message:i}})):console.error(s.red(`Product manifest create failed: ${i}`)),process.exit(1);}});}var Bt=class{constructor(e){this.runCommand=e;}runtime="dotnet";async run(e,r,o){return {exitCode:await this.runCommand(e,r,o)}}async ensureDotnetInstalled(e){return (await this.run("dotnet",["--version"],e)).exitCode===0?null:{exitCode:1,message:".NET SDK is not installed or not available on PATH. Install .NET 8+ from https://dotnet.microsoft.com/download and retry."}}findSolution(e){try{let o=P.readdirSync(e).find(n=>n.toLowerCase().endsWith(".sln"));return o?y__default.join(e,o):null}catch{return null}}findFilesBySuffix(e,r,o=3){let n=[],i=[{dir:e,depth:0}],c=new Set(["bin","obj",".git","node_modules",".rapidkit"]);for(;i.length>0;){let a=i.shift();if(!a||a.depth>o)continue;let l=[];try{l=P.readdirSync(a.dir,{withFileTypes:true});}catch{continue}for(let u of l){let p=y__default.join(a.dir,u.name);if(u.isDirectory()){c.has(u.name)||i.push({dir:p,depth:a.depth+1});continue}u.name.toLowerCase().endsWith(r.toLowerCase())&&n.push(p);}}return n.sort()}findProjectFile(e){let r=this.findFilesBySuffix(e,".csproj");return r.find(o=>!o.toLowerCase().includes(".tests.csproj"))||r[0]||null}solutionOrProject(e){return this.findSolution(e)||this.findProjectFile(e)}async checkPrereqs(){return this.run("dotnet",["--version"],process.cwd())}async warmSetupCache(e){let r=await this.ensureDotnetInstalled(e);return r||this.run("dotnet",["nuget","locals","all","--list"],e)}async initProject(e){let r=await this.ensureDotnetInstalled(e);if(r)return r;let o=await this.run("dotnet",["restore"],e);return o.exitCode===0?o:{exitCode:o.exitCode,message:"dotnet restore failed. Check NuGet connectivity, package references, and .NET SDK workload availability, then retry."}}async runDev(e){let r=await this.ensureDotnetInstalled(e);if(r)return r;let o=this.findProjectFile(e),n=o?["watch","--project",o,"run"]:["watch","run"];return this.run("dotnet",n,e)}async runTest(e){let r=await this.ensureDotnetInstalled(e);if(r)return r;let o=this.solutionOrProject(e);return this.run("dotnet",o?["test",o]:["test"],e)}async runBuild(e){let r=await this.ensureDotnetInstalled(e);if(r)return r;let o=this.solutionOrProject(e);return this.run("dotnet",o?["build",o,"-c","Release"]:["build","-c","Release"],e)}async runStart(e){let r=await this.ensureDotnetInstalled(e);if(r)return r;let o=this.findProjectFile(e);return this.run("dotnet",o?["run","--project",o]:["run"],e)}async doctorHints(e){return ["Install .NET 8+ SDK and ensure dotnet is on PATH.","Run dotnet restore after changing package references.","Use dotnet format --verify-no-changes in CI for deterministic code style."]}};var Ut=class{constructor(e){this.runCommand=e;}runtime="go";async run(e,r,o){return {exitCode:await this.runCommand(e,r,o)}}async ensureGoInstalled(e){return (await this.run("go",["version"],e)).exitCode===0?null:{exitCode:1,message:"Go toolchain is not installed or not available on PATH. Install Go from https://go.dev/dl/ and retry."}}findGoRunTarget(e){let r=y__default.join(e,"main.go");if(P.existsSync(r))return "./main.go";let o=y__default.join(e,"cmd");try{let n=P.readdirSync(o,{withFileTypes:true}).filter(i=>i.isDirectory()).map(i=>i.name).sort();for(let i of n)if(P.existsSync(y__default.join(o,i,"main.go")))return `./cmd/${i}`}catch{}return "./."}findWorkspaceRoot(e){let r=e;for(;;){if(P.existsSync(y__default.join(r,".rapidkit-workspace")))return r;let o=y__default.dirname(r);if(o===r)break;r=o;}return null}resolveDependencyMode(e){let r=process.env.RAPIDKIT_DEP_SHARING_MODE?.toLowerCase();if(r==="shared-runtime-caches"||r==="shared-node-deps"||r==="isolated")return r;let o=this.findWorkspaceRoot(e);if(!o)return "isolated";let n=y__default.join(o,".rapidkit","policies.yml");if(!P.existsSync(n))return "isolated";try{let a=P.readFileSync(n,"utf-8").match(/^\s*dependency_sharing_mode:\s*([a-zA-Z\-]+)\s*(?:#.*)?$/m)?.[1]?.toLowerCase();if(a==="shared-runtime-caches"||a==="shared-node-deps"||a==="isolated")return a}catch{}return "isolated"}withGoCacheEnv(e,r){let o=this.resolveDependencyMode(e),n=process.env.RAPIDKIT_WORKSPACE_PATH||this.findWorkspaceRoot(e),i=o==="shared-runtime-caches"?y__default.join(n||e,".rapidkit","cache","go"):y__default.join(e,".rapidkit","cache","go"),c=process.env.GOMODCACHE,a=process.env.GOCACHE;return process.env.GOMODCACHE=y__default.join(i,"mod"),process.env.GOCACHE=y__default.join(i,"build"),r().finally(()=>{typeof c>"u"?delete process.env.GOMODCACHE:process.env.GOMODCACHE=c,typeof a>"u"?delete process.env.GOCACHE:process.env.GOCACHE=a;})}async checkPrereqs(){return this.run("go",["version"],process.cwd())}async warmSetupCache(e){return this.withGoCacheEnv(e,async()=>{try{return process.env.GOMODCACHE&&P.mkdirSync(process.env.GOMODCACHE,{recursive:true}),process.env.GOCACHE&&P.mkdirSync(process.env.GOCACHE,{recursive:true}),{exitCode:0}}catch{return {exitCode:1,message:"Failed to prepare Go cache directories"}}})}async initProject(e){return this.withGoCacheEnv(e,async()=>{let r=await this.ensureGoInstalled(e);return r||this.run("go",["mod","tidy"],e)})}async runDev(e){return this.withGoCacheEnv(e,()=>(async()=>{let r=await this.ensureGoInstalled(e);if(r)return r;let o=y__default.join(e,"Makefile");return P.existsSync(o)?this.run("make",["run"],e):this.run("go",["run",this.findGoRunTarget(e)],e)})())}async runTest(e){return this.withGoCacheEnv(e,async()=>{let r=await this.ensureGoInstalled(e);return r||this.run("go",["test","./..."],e)})}async runBuild(e){return this.withGoCacheEnv(e,async()=>{let r=await this.ensureGoInstalled(e);return r||this.run("go",["build","-buildvcs=false","./..."],e)})}async runStart(e){return this.withGoCacheEnv(e,async()=>{let o=(a()?[y__default.join(e,"server.exe"),y__default.join(e,"server")]:[y__default.join(e,"server")]).find(i=>P.existsSync(i));if(o)return this.run(o,[],e);let n=await this.ensureGoInstalled(e);return n||this.run("go",["run",this.findGoRunTarget(e)],e)})}async doctorHints(e){return ["Install Go from https://go.dev/dl/ if missing.","Run go mod tidy when dependencies are out of sync.","Use make run for hot-reload if Makefile exists."]}};var Vt=class{constructor(e){this.runCommand=e;}runtime="java";isExecutable(e){if(process.platform==="win32")return true;try{return (P.statSync(e).mode&73)!==0}catch{return false}}ensureWrapperExecutable(e){if(process.platform==="win32"||this.isExecutable(e))return true;try{return P.chmodSync(e,493),this.isExecutable(e)}catch{return false}}resolveJavaCommand(e){let r=process.env.JAVA_HOME?.trim();if(!r)return "java";let o=y__default.join(r,"bin",process.platform==="win32"?"java.exe":"java");return P.existsSync(o)?o:"java"}parseMajorJavaVersion(e){if(!e)return null;let o=e.trim().replace(/\"/g,"").split(".")[0],n=Number.parseInt(o,10);return Number.isFinite(n)?n:null}readRequiredJavaMajor(e){let r=y__default.join(e,"pom.xml");if(!P.existsSync(r))return 21;try{let n=P.readFileSync(r,"utf-8").match(/<java\.version>\s*([^<\s]+)\s*<\/java\.version>/i);return this.parseMajorJavaVersion(n?.[1])??21}catch{return 21}}async detectInstalledJavaMajor(e,r){try{let o=await execa(e,["-version"],{cwd:r,timeout:5e3,reject:false});if(o.exitCode!==0)return null;let n=`${o.stdout||""}
115
115
  ${o.stderr||""}`,i=n.match(/version\s+"([^"]+)"/i);if(i?.[1])return this.parseMajorJavaVersion(i[1]);let c=n.match(/(?:openjdk|java)\s+(\d+(?:[._]\d+)?)/i);return c?.[1]?this.parseMajorJavaVersion(c[1]):null}catch{return null}}parseMavenVersion(e){if(!e)return null;let r=e.match(/Apache Maven\s+(\d+)\.(\d+)\.(\d+)/i);return r?[Number.parseInt(r[1],10),Number.parseInt(r[2],10),Number.parseInt(r[3],10)]:null}isMavenVersionAtLeast(e,r){for(let o=0;o<3;o+=1){if(e[o]>r[o])return true;if(e[o]<r[o])return false}return true}async checkSystemMavenVersion(e){try{let r=await execa("mvn",["-version"],{cwd:e,timeout:5e3,reject:false});if(r.exitCode!==0)return {exitCode:r.exitCode||1,message:"Maven is required and must be available on PATH (3.9+)."};let o=this.parseMavenVersion(`${r.stdout||""}
116
- ${r.stderr||""}`);return o?this.isMavenVersionAtLeast(o,[3,9,0])?{exitCode:0}:{exitCode:1,message:`Maven ${o.join(".")} detected; Maven 3.9+ is required.`}:{exitCode:1,message:"Unable to parse Maven version. Ensure Maven 3.9+ is installed and retry."}}catch{return {exitCode:1,message:"Maven version check failed. Install Maven 3.9+ and ensure mvn is on PATH."}}}shouldUseGradleNoDaemon(){return process.env.CI==="true"||process.env.RAPIDKIT_GRADLE_NO_DAEMON==="1"}inspectJavaProject(e){let r=P.existsSync(y__default.join(e,"pom.xml")),o=P.existsSync(y__default.join(e,"mvnw"))||P.existsSync(y__default.join(e,"mvnw.cmd")),n=P.existsSync(y__default.join(e,"build.gradle"))||P.existsSync(y__default.join(e,"build.gradle.kts"))||P.existsSync(y__default.join(e,"settings.gradle"))||P.existsSync(y__default.join(e,"settings.gradle.kts")),i=P.existsSync(y__default.join(e,"gradlew"))||P.existsSync(y__default.join(e,"gradlew.bat"));return {hasMavenProject:r||o,hasMavenWrapper:o,hasGradleProject:n||i,hasGradleWrapper:i}}findWorkspaceRoot(e){let r=e;for(;;){if(P.existsSync(y__default.join(r,".rapidkit-workspace")))return r;let o=y__default.dirname(r);if(o===r)break;r=o;}return null}resolveDependencyMode(e){let r=process.env.RAPIDKIT_DEP_SHARING_MODE?.toLowerCase();if(r==="shared-runtime-caches"||r==="shared-node-deps"||r==="isolated")return r;let o=this.findWorkspaceRoot(e);if(!o)return "isolated";let n=y__default.join(o,".rapidkit","policies.yml");if(!P.existsSync(n))return "isolated";try{let a=P.readFileSync(n,"utf-8").match(/^\s*dependency_sharing_mode:\s*([a-zA-Z\-]+)\s*(?:#.*)?$/m)?.[1]?.toLowerCase();if(a==="shared-runtime-caches"||a==="shared-node-deps"||a==="isolated")return a}catch{}return "isolated"}buildToolCommand(e){return this.isGradleProject(e)?this.gradleCommand(e):this.mavenCommand(e)}mavenCommand(e){let r=y__default.join(e,"mvnw.cmd");if(process.platform==="win32"&&P.existsSync(r))return {command:r,baseArgs:[]};let o=y__default.join(e,"mvnw");return P.existsSync(o)?this.ensureWrapperExecutable(o)?{command:o,baseArgs:[]}:{command:"sh",baseArgs:[o]}:{command:"mvn",baseArgs:[]}}gradleCommand(e){let r=y__default.join(e,"gradlew.bat");if(process.platform==="win32"&&P.existsSync(r))return {command:r,baseArgs:[]};let o=y__default.join(e,"gradlew");return P.existsSync(o)?this.ensureWrapperExecutable(o)?{command:o,baseArgs:[]}:{command:"sh",baseArgs:[o]}:{command:"gradle",baseArgs:[]}}isGradleProject(e){return this.inspectJavaProject(e).hasGradleProject}isMavenProject(e){return this.inspectJavaProject(e).hasMavenProject}discoverWorkspaceJavaProjects(e){let r=[],o=new Set,n=[e];for(;n.length>0;){let i=n.shift();if(!i||o.has(i))continue;o.add(i);let c=[];try{c=P.readdirSync(i,{withFileTypes:true});}catch{continue}for(let a of c){if(!a.isDirectory()||a.name.startsWith(".")||["node_modules","dist","build","target","coverage","htmlcov"].includes(a.name))continue;let l=y__default.join(i,a.name),u=this.inspectJavaProject(l);(u.hasMavenProject||u.hasGradleProject)&&r.push(l),n.push(l);}}return r}withJavaCacheEnv(e,r){let o=this.resolveDependencyMode(e),n=process.env.RAPIDKIT_WORKSPACE_PATH||this.findWorkspaceRoot(e),i=o==="shared-runtime-caches"?y__default.join(n||e,".rapidkit","cache","java","m2"):y__default.join(e,".rapidkit","cache","java","m2"),c=o==="shared-runtime-caches"?y__default.join(n||e,".rapidkit","cache","java","gradle"):y__default.join(e,".rapidkit","cache","java","gradle"),a=process.env.MAVEN_OPTS,l=process.env.GRADLE_USER_HOME,u=`-Dmaven.repo.local=${i}`;return process.env.MAVEN_OPTS=a?`${a} ${u}`:u,process.env.GRADLE_USER_HOME=c,r().finally(()=>{typeof a>"u"?delete process.env.MAVEN_OPTS:process.env.MAVEN_OPTS=a,typeof l>"u"?delete process.env.GRADLE_USER_HOME:process.env.GRADLE_USER_HOME=l;})}async runBuildTool(e,r,o=true){return this.withJavaCacheEnv(e,async()=>{try{let{command:n,baseArgs:i}=this.buildToolCommand(e),c=await this.runCommand(n,[...i,...r],e);if(c===0||!o)return {exitCode:c};let a=P.existsSync(y__default.join(e,"pom.xml")),l=P.existsSync(y__default.join(e,"build.gradle"))||P.existsSync(y__default.join(e,"build.gradle.kts"));return {exitCode:c,message:a||l?"Java build failed. Verify pom.xml/build.gradle syntax and dependencies, then retry.":"Java build tool is not installed or not available on PATH. Install Maven/Gradle and JDK 21+, or commit mvnw/gradlew wrapper scripts."}}catch(n){return {exitCode:1,message:`Java command execution failed: ${n instanceof Error?n.message:String(n)}. Verify pom.xml/build.gradle integrity and wrapper permissions.`}}})}resolveJarPath(e){let r=[y__default.join(e,"target"),y__default.join(e,"build","libs")];for(let o of r){if(!P.existsSync(o))continue;let i=P.readdirSync(o).filter(c=>c.toLowerCase().endsWith(".jar")).find(c=>!c.toLowerCase().endsWith("-sources.jar")&&!c.toLowerCase().endsWith("-javadoc.jar")&&!c.toLowerCase().endsWith("-plain.jar"));if(i)return y__default.join(o,i)}return null}commandArgsFor(e,r){if(e==="gradle"){let o=this.shouldUseGradleNoDaemon()?["--no-daemon"]:[];return r==="init"?[...o,"dependencies"]:r==="dev"?[...o,"bootRun"]:r==="test"?[...o,"test"]:[...o,"bootJar"]}return r==="init"?["-B","-q","-DskipTests","dependency:go-offline"]:r==="dev"?["spring-boot:run"]:r==="test"?["test"]:["-DskipTests","package"]}detectBuildTool(e){return this.isGradleProject(e)?"gradle":"maven"}async checkPrereqs(){let e=process.cwd(),r=this.resolveJavaCommand(e),o=await this.runCommand(r,["-version"],e);if(o!==0)return {exitCode:o,message:"JDK 21+ is required. Ensure java is on PATH or JAVA_HOME/bin/java is available."};if(this.isMavenProject(e)){let a=this.readRequiredJavaMajor(e),l=await this.detectInstalledJavaMajor(r,e);if(l!==null&&l<a)return {exitCode:1,message:`Detected Java ${l}, but project requires Java ${a}+.`};let u=y__default.join(process.env.JAVA_HOME||"","release");if(process.env.JAVA_HOME&&P.existsSync(u))try{let d=P.readFileSync(u,"utf-8").match(/^JAVA_VERSION="([^"]+)"/m),f=this.parseMajorJavaVersion(d?.[1]);if(f!==null&&f<a)return {exitCode:1,message:`Detected JAVA_HOME version ${f}, but project requires Java ${a}+.`}}catch{}}if(this.isMavenProject(e)||this.isGradleProject(e)){let a=this.detectBuildTool(e),l=a==="gradle"?["--version"]:["-version"],u=await this.runBuildTool(e,l);return u.exitCode!==0?u:a==="maven"&&!this.inspectJavaProject(e).hasMavenWrapper?this.checkSystemMavenVersion(e):u}let n=this.findWorkspaceRoot(e);if(n&&n===e){let a=this.discoverWorkspaceJavaProjects(n);if(a.length>0){let l=a.reduce((d,f)=>Math.max(d,this.readRequiredJavaMajor(f)),0);if(l>0){let d=await this.detectInstalledJavaMajor(r,e);if(d!==null&&d<l){let f=a.filter(h=>this.readRequiredJavaMajor(h)>d).map(h=>y__default.relative(e,h)).join(", ");return {exitCode:1,message:`Detected Java ${d}, but workspace project(s) [${f}] require Java ${l}+.`}}}let u=false,p=false;for(let d of a){let f=this.inspectJavaProject(d);f.hasMavenProject&&!f.hasMavenWrapper&&(u=true),f.hasGradleProject&&!f.hasGradleWrapper&&(p=true);}if(u){let d=await this.withJavaCacheEnv(e,async()=>this.runCommand("mvn",["-version"],e));if(d!==0)return {exitCode:d,message:"Maven is required for one or more workspace Java projects without Maven Wrapper. Install Maven 3.9+, or add mvnw/mvnw.cmd to those projects."};let f=await this.checkSystemMavenVersion(e);if(f.exitCode!==0)return f}if(p){let d=await this.withJavaCacheEnv(e,async()=>this.runCommand("gradle",["--version"],e));if(d!==0)return {exitCode:d,message:"Gradle is required for one or more workspace Java projects without Gradle Wrapper. Install Gradle 8+, or add gradlew/gradlew.bat to those projects."}}return {exitCode:0}}}let i=await this.withJavaCacheEnv(e,async()=>this.runCommand("mvn",["-version"],e));if(i===0){let a=await this.checkSystemMavenVersion(e);return a.exitCode!==0?a:{exitCode:0}}let c=await this.withJavaCacheEnv(e,async()=>this.runCommand("gradle",["--version"],e));return c===0?{exitCode:0}:{exitCode:i||c||1,message:"Neither Maven nor Gradle is available on PATH. Install one of them, or use mvnw/gradlew wrappers in project roots."}}async warmSetupCache(e){return this.withJavaCacheEnv(e,async()=>{try{let r=process.env.MAVEN_OPTS?.match(/-Dmaven\.repo\.local=([^\s]+)/)?.[1];return r&&P.mkdirSync(r,{recursive:true}),process.env.GRADLE_USER_HOME&&P.mkdirSync(process.env.GRADLE_USER_HOME,{recursive:true}),{exitCode:0}}catch{return {exitCode:1,message:"Failed to prepare Java cache directories"}}})}async initProject(e){return this.runBuildTool(e,this.commandArgsFor(this.detectBuildTool(e),"init"))}async runDev(e){return this.runBuildTool(e,this.commandArgsFor(this.detectBuildTool(e),"dev"))}async runTest(e){return this.runBuildTool(e,this.commandArgsFor(this.detectBuildTool(e),"test"))}async runBuild(e){return this.runBuildTool(e,this.commandArgsFor(this.detectBuildTool(e),"build"))}async runStart(e){let r=this.resolveJarPath(e);if(r)return {exitCode:await this.runCommand(this.resolveJavaCommand(e),["-jar",r],e)};let o=await this.runBuild(e);if(o.exitCode!==0)return o;let n=this.resolveJarPath(e);return n?{exitCode:await this.runCommand(this.resolveJavaCommand(e),["-jar",n],e)}:{exitCode:1,message:"Spring Boot build completed, but no runnable JAR was found under target/ or build/libs/. Verify build output naming and packaging plugins."}}async doctorHints(e){return ["Install JDK 21+ and Maven/Gradle (or commit mvnw/gradlew wrappers) for reliable local builds.","Run rapidkit init after dependency changes to warm Java caches for your build tool.","Use SPRING_PROFILES_ACTIVE to switch environments without changing source config."]}};var Ht=class{constructor(e){this.runCommand=e;}runtime="node";async run(e,r,o){return {exitCode:await this.runCommand(e,r,o)}}findWorkspaceRoot(e){let r=e;for(;;){if(P.existsSync(y__default.join(r,".rapidkit-workspace")))return r;let o=y__default.dirname(r);if(o===r)break;r=o;}return null}resolveDependencyMode(e){let r=process.env.RAPIDKIT_DEP_SHARING_MODE?.toLowerCase();if(r==="shared-runtime-caches"||r==="shared-node-deps"||r==="isolated")return r;let o=this.findWorkspaceRoot(e);if(!o)return "isolated";let n=y__default.join(o,".rapidkit","policies.yml");if(!P.existsSync(n))return "isolated";try{let a=P.readFileSync(n,"utf-8").match(/^\s*dependency_sharing_mode:\s*([a-zA-Z\-]+)\s*(?:#.*)?$/m)?.[1]?.toLowerCase();if(a==="shared-runtime-caches"||a==="shared-node-deps"||a==="isolated")return a}catch{}return "isolated"}withDependencyEnv(e,r,o){let n=this.resolveDependencyMode(e),i=process.env.RAPIDKIT_WORKSPACE_PATH||this.findWorkspaceRoot(e),c=n==="isolated"?y__default.join(e,".rapidkit","cache","node"):y__default.join(i||e,".rapidkit","cache","node"),a=process.env.npm_config_cache,l=process.env.npm_config_store_dir,u=process.env.RAPIDKIT_DEP_SHARING_MODE,p=process.env.RAPIDKIT_WORKSPACE_PATH;return process.env.RAPIDKIT_DEP_SHARING_MODE=n,i&&(process.env.RAPIDKIT_WORKSPACE_PATH=i),r==="pnpm"?(process.env.npm_config_store_dir=y__default.join(c,"pnpm-store"),process.env.npm_config_cache=y__default.join(c,"pnpm-cache")):r==="yarn"?process.env.npm_config_cache=y__default.join(c,"yarn-cache"):process.env.npm_config_cache=y__default.join(c,"npm-cache"),o().finally(()=>{typeof a>"u"?delete process.env.npm_config_cache:process.env.npm_config_cache=a,typeof l>"u"?delete process.env.npm_config_store_dir:process.env.npm_config_store_dir=l,typeof u>"u"?delete process.env.RAPIDKIT_DEP_SHARING_MODE:process.env.RAPIDKIT_DEP_SHARING_MODE=u,typeof p>"u"?delete process.env.RAPIDKIT_WORKSPACE_PATH:process.env.RAPIDKIT_WORKSPACE_PATH=p;})}detectPackageManager(e){if(P.existsSync(y__default.join(e,"package-lock.json")))return "npm";if(P.existsSync(y__default.join(e,"pnpm-lock.yaml")))return "pnpm";if(P.existsSync(y__default.join(e,"yarn.lock")))return "yarn";if(!this.commandAvailable("npm")){if(this.commandAvailable("pnpm"))return "pnpm";if(this.commandAvailable("yarn"))return "yarn"}return "npm"}hasPinnedPackageManager(e){return P.existsSync(y__default.join(e,"package-lock.json"))||P.existsSync(y__default.join(e,"pnpm-lock.yaml"))||P.existsSync(y__default.join(e,"yarn.lock"))}availablePackageManagers(e){let r=this.detectPackageManager(e);return this.hasPinnedPackageManager(e)?[r]:[r,...["npm","pnpm","yarn"].filter(n=>n!==r&&this.commandAvailable(n))]}commandAvailable(e){return spawnSync(e,["--version"],{stdio:"ignore",shell:process.platform==="win32"}).status===0}scriptArgs(e,r){return e==="npm"?["run",r]:["run",r]}async runScriptWithFallback(e,r){let o={exitCode:1};for(let n of this.availablePackageManagers(e))if(o=await this.withDependencyEnv(e,n,()=>this.run(n,this.scriptArgs(n,r),e)),o.exitCode===0)return o;return o}async checkPrereqs(){return this.run("node",["--version"],process.cwd())}async warmSetupCache(e){let r=this.detectPackageManager(e);return this.withDependencyEnv(e,r,async()=>{try{return process.env.npm_config_cache&&P.mkdirSync(process.env.npm_config_cache,{recursive:true}),r==="pnpm"&&process.env.npm_config_store_dir&&P.mkdirSync(process.env.npm_config_store_dir,{recursive:true}),{exitCode:0}}catch{return {exitCode:1,message:"Failed to prepare Node cache directories"}}})}async initProject(e){let r=this.detectPackageManager(e),o=this.resolveDependencyMode(e),n=o==="shared-runtime-caches"||o==="shared-node-deps"?["install","--prefer-offline"]:["install"];return this.withDependencyEnv(e,r,()=>this.run(r,n,e))}async runDev(e){return this.runScriptWithFallback(e,"dev")}async runTest(e){return this.runScriptWithFallback(e,"test")}async runBuild(e){return this.runScriptWithFallback(e,"build")}async runStart(e){return this.runScriptWithFallback(e,"start")}async doctorHints(e){return ["Install Node.js LTS and ensure node/npm are on PATH.","Use lockfiles (package-lock.json, pnpm-lock.yaml, yarn.lock) for deterministic installs.","Run install before dev/test/build if dependencies changed."]}};var zt=class{constructor(e){this.runCore=e;}runtime="python";async run(e,r){return {exitCode:await this.withPythonCacheEnv(r,()=>this.runCore(e,r))}}findWorkspaceRoot(e){let r=e;for(;;){if(P.existsSync(y__default.join(r,".rapidkit-workspace")))return r;let o=y__default.dirname(r);if(o===r)break;r=o;}return null}resolveDependencyMode(e){let r=process.env.RAPIDKIT_DEP_SHARING_MODE?.toLowerCase();if(r==="shared-runtime-caches"||r==="shared-node-deps"||r==="isolated")return r;let o=this.findWorkspaceRoot(e);if(!o)return "isolated";let n=y__default.join(o,".rapidkit","policies.yml");if(!P.existsSync(n))return "isolated";try{let a=P.readFileSync(n,"utf-8").match(/^\s*dependency_sharing_mode:\s*([a-zA-Z\-]+)\s*(?:#.*)?$/m)?.[1]?.toLowerCase();if(a==="shared-runtime-caches"||a==="shared-node-deps"||a==="isolated")return a}catch{}return "isolated"}withPythonCacheEnv(e,r){let o=this.resolveDependencyMode(e),n=process.env.RAPIDKIT_WORKSPACE_PATH||this.findWorkspaceRoot(e),i=o==="shared-runtime-caches"?y__default.join(n||e,".rapidkit","cache","python"):y__default.join(e,".rapidkit","cache","python"),c=process.env.PIP_CACHE_DIR,a=process.env.POETRY_CACHE_DIR;return process.env.PIP_CACHE_DIR=y__default.join(i,"pip"),process.env.POETRY_CACHE_DIR=y__default.join(i,"poetry"),r().finally(()=>{typeof c>"u"?delete process.env.PIP_CACHE_DIR:process.env.PIP_CACHE_DIR=c,typeof a>"u"?delete process.env.POETRY_CACHE_DIR:process.env.POETRY_CACHE_DIR=a;})}async checkPrereqs(){let e=process.cwd(),r=await this.run(["doctor","check"],e);return r.exitCode===0?r:this.run(["doctor"],e)}async initProject(e){return this.run(["init"],e)}async runDev(e){return this.run(["dev"],e)}async runTest(e){return this.run(["test"],e)}async runBuild(e){return this.run(["build"],e)}async runStart(e){return this.run(["start"],e)}async doctorHints(e){return ['Run "npx rapidkit doctor workspace" for a full workspace scan.','Use "npx rapidkit init" after adding or changing modules.','Use workspace launcher "./rapidkit" to avoid environment drift.']}};function Gs(){let t={...process.env},e=t.PATH||"";if(e){let r=e.split(y__default.delimiter).filter(o=>!o.replace(/\\/g,"/").includes("/.pyenv/shims")).join(y__default.delimiter);t.PATH=r;}return t.PYENV_VERSION="system",t.POETRY_PYTHON=t.POETRY_PYTHON||c$2(),typeof t.RAPIDKIT_SKIP_LOCK_SYNC>"u"&&(t.RAPIDKIT_SKIP_LOCK_SYNC="1"),t}function Fe(t,e){return t==="go"?new Ut((r,o,n)=>e.runCommandInCwd(r,o,n)):t==="node"?new Ht((r,o,n)=>e.runCommandInCwd(r,o,n)):t==="java"?new Vt((r,o,n)=>e.runCommandInCwd(r,o,n)):t==="dotnet"?new Bt((r,o,n)=>e.runCommandInCwd(r,o,n)):new zt((r,o)=>e.runCoreRapidkit(r,{cwd:o,env:Gs()}))}var Vo=y__default.join(fo.homedir(),".rapidkit","cache"),Ho=1440*60*1e3;function vr(){let t=process.env.RAPIDKIT_CACHE_DIR?.trim();if(t)return t;let e=process.env.VITEST_WORKER_ID?.trim();return e?y__default.join(Vo,`vitest-${e}`):Vo}var Qt=class t{static instance;memoryCache=new Map;constructor(){}static getInstance(){return t.instance||(t.instance=new t),t.instance}getCacheKey(e){return createHash("md5").update(e).digest("hex")}getCachePath(e){return y__default.join(vr(),`${this.getCacheKey(e)}.json`)}getTempCachePath(e){let r=`${process.pid}-${Date.now()}-${Math.random().toString(16).slice(2)}`;return `${e}.${r}.tmp`}async get(e,r="1.0"){let o=this.memoryCache.get(e);if(o&&o.version===r&&Date.now()-o.timestamp<Ho)return a$1.debug(`Cache hit (memory): ${e}`),o.data;try{let n=this.getCachePath(e),i=await promises.readFile(n,"utf-8"),c=JSON.parse(i);if(c.version===r&&Date.now()-c.timestamp<Ho)return a$1.debug(`Cache hit (disk): ${e}`),this.memoryCache.set(e,c),c.data;await promises.unlink(n).catch(()=>{});}catch{a$1.debug(`Cache miss: ${e}`);}return null}async set(e,r,o="1.0"){let n={data:r,timestamp:Date.now(),version:o};this.memoryCache.set(e,n);try{await promises.mkdir(vr(),{recursive:true});let i=this.getCachePath(e),c=this.getTempCachePath(i);await promises.writeFile(c,JSON.stringify(n),"utf-8"),await promises.rename(c,i),a$1.debug(`Cache set: ${e}`);}catch(i){a$1.debug(`Cache write failed: ${e}`,i);}}async invalidate(e){this.memoryCache.delete(e);try{let r=this.getCachePath(e);await promises.unlink(r),a$1.debug(`Cache invalidated: ${e}`);}catch{}}async clear(){this.memoryCache.clear();try{let e=vr(),r=await promises.readdir(e);await Promise.all(r.map(o=>promises.unlink(y__default.join(e,o)))),a$1.debug("Cache cleared");}catch{}}};var zo=[{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",moduleSupport:true,stability:"stable"},{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",moduleSupport:true,stability:"stable"},{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",moduleSupport:true,stability:"stable"},{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",moduleSupport:false,stability:"stable",generator:"springboot",createUsage:"rapidkit 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",moduleSupport:false,stability:"stable",generator:"gofiber",createUsage:"rapidkit 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",moduleSupport:false,stability:"stable",generator:"gogin",createUsage:"rapidkit 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",moduleSupport:false,stability:"preview",generator:"dotnet-webapi-clean",createUsage:"rapidkit create project dotnet.webapi.clean <name> [--target-framework net8.0] [--root-namespace <Company.Product>] [--port <number>]"}],Pr=new Map;for(let t of zo){Pr.set(t.id.toLowerCase(),t);for(let e of t.aliases)Pr.set(e.toLowerCase(),t);}function wt(t){return t?Pr.get(t.trim().toLowerCase())??null:null}function Yo(t){return wt(t)?.id??t}function Qo(){return zo.filter(t=>t.owner==="core"||t.generator)}function kt(t){return wt(t)?.owner==="npm"}async function Zo(t,e){if(!t.generator)throw new Error(`Kit is not backed by an npm generator: ${t.id}`);if(t.generator==="gofiber"){let{generateGoFiberKit:r}=await import('./gofiber-standard-QGVZHHCP.js');await r(e.projectPath,{project_name:e.projectName,module_path:e.projectName,skipGit:e.skipGit,skipInstall:e.skipInstall});return}if(t.generator==="gogin"){let{generateGoGinKit:r}=await import('./gogin-standard-U746R3B5.js');await r(e.projectPath,{project_name:e.projectName,module_path:e.projectName,skipGit:e.skipGit,skipInstall:e.skipInstall});return}if(t.generator==="springboot"){let{generateSpringBootKit:r}=await import('./springboot-standard-TZ3DKKWG.js');await r(e.projectPath,{project_name:e.projectName,artifact_id:e.projectName,java_version:Oe(e.args,"--java-version")?.trim(),spring_boot_version:Oe(e.args,"--spring-boot-version")?.trim(),springdoc_version:Oe(e.args,"--springdoc-version")?.trim(),group_id:Oe(e.args,"--group-id")?.trim(),package_name:Oe(e.args,"--package-name")?.trim(),description:Oe(e.args,"--description")?.trim(),port:Oe(e.args,"--port")?.trim(),skipGit:e.skipGit,skipInstall:e.skipInstall});return}if(t.generator==="dotnet-webapi-clean"){let{generateDotnetWebApiCleanKit:r}=await import('./dotnet-webapi-clean-UZXCLWEV.js');await r(e.projectPath,{project_name:e.projectName,target_framework:Oe(e.args,"--target-framework")?.trim(),root_namespace:Oe(e.args,"--root-namespace")?.trim(),description:Oe(e.args,"--description")?.trim(),port:Oe(e.args,"--port")?.trim(),skipGit:e.skipGit,skipInstall:e.skipInstall});return}throw new Error(`Unhandled npm kit generator: ${t.generator}`)}function Oe(t,e){let r=t.indexOf(e);if(r>=0&&r+1<t.length)return t[r+1];let o=t.find(n=>n.startsWith(`${e}=`));return o?o.slice(e.length+1):void 0}function Us(t){let e=t;for(;;){if(P.existsSync(y__default.join(e,".rapidkit-workspace"))||P.existsSync(y__default.join(e,".rapidkit","workspace.json")))return e;let r=y__default.dirname(e);if(r===e)break;e=r;}return null}function Vs(t){let e=a$4(t);return b$2(e,t)?"go":d(e,t)?"java":c$1(e,t)?"node":f$1(e,t)?"python":"unknown"}function Hs(t,e){if(!P.existsSync(t))return null;let r=P.readdirSync(t).filter(o=>o.endsWith(".json")&&e.some(n=>n.test(o))).map(o=>y__default.join(t,o));return r.length===0?null:(r.sort((o,n)=>P.statSync(n).mtimeMs-P.statSync(o).mtimeMs),r[0])}function vt(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:{}}function zs(t,e){let r=y__default.join(t,".rapidkit","toolchain.lock");if(!P.existsSync(r))return {gate:"env",status:"fail",summary:"toolchain.lock is missing",details:["Run rapidkit bootstrap to pin runtime versions and generate a reproducible toolchain."],evidencePath:r};try{let o=JSON.parse(P.readFileSync(r,"utf-8")),n=vt(o.runtime),c=["python","node","go","java"].filter(a=>{let l=vt(n[a]);return typeof l.version=="string"&&l.version.trim().length>0});if(c.length===0)return {gate:"env",status:"fail",summary:"No runtime versions are pinned in toolchain.lock",details:["Pin at least one runtime version via rapidkit setup <runtime> and re-run bootstrap."],evidencePath:r};if(e!=="unknown"){let a=vt(n[e]);if(typeof a.version!="string"||a.version.trim().length===0)return {gate:"env",status:"fail",summary:`Project runtime (${e}) is not pinned in toolchain.lock`,details:[`Run rapidkit setup ${e} and rapidkit bootstrap to lock ${e} for this workspace.`],evidencePath:r}}return {gate:"env",status:"pass",summary:`Pinned runtimes: ${c.join(", ")}`,details:[],evidencePath:r}}catch{return {gate:"env",status:"fail",summary:"toolchain.lock is invalid JSON",details:["Regenerate lockfile with rapidkit bootstrap."],evidencePath:r}}}function Ys(t){let e=y__default.join(t,".rapidkit","reports","doctor-last-run.json");if(!P.existsSync(e))return {payload:null,path:e};try{let r=JSON.parse(P.readFileSync(e,"utf-8"));return c$3(r,"workspace")?{payload:r,path:e}:{payload:null,path:e}}catch{return {payload:null,path:e}}}function Qs(t){let e=Ys(t);if(!e.payload)return {gate:{gate:"doctor",status:"fail",summary:"Doctor evidence is missing",details:["Run rapidkit doctor workspace --json before release readiness checks."],evidencePath:e.path},payload:null};let r=vt(e.payload.summary),o=Number(r.totalIssues??0);return r.hasSystemErrors?{gate:{gate:"doctor",status:"fail",summary:"Doctor reported system errors",details:["Resolve system-level doctor errors before proceeding."],evidencePath:e.path},payload:e.payload}:o>0?{gate:{gate:"doctor",status:"warn",summary:`Doctor found ${o} issue(s)`,details:["Run rapidkit doctor workspace --fix and re-run readiness checks."],evidencePath:e.path},payload:e.payload}:{gate:{gate:"doctor",status:"pass",summary:"Doctor checks passed without issues",details:[],evidencePath:e.path},payload:e.payload}}function Zs(t){let e=y__default.join(t,".rapidkit","reports"),r=Hs(e,[/verify-pack-contract/i,/^verify.*\.json$/i]);if(!r)return {gate:"verify",status:"fail",summary:"Verify-pack contract evidence is missing",details:["Export verify-pack contract JSON from extension/CI before release readiness checks."],evidencePath:y__default.join(e,"*verify-pack-contract*.json")};try{let o=JSON.parse(P.readFileSync(r,"utf-8")),n=String(o.status??"").toLowerCase(),i=vt(o.summary),c=Number(i.failedChecks??0);return n==="fail"||c>0?{gate:"verify",status:"fail",summary:"Verify-pack contract reports failed checks",details:["Fix failed verify checks and regenerate verify-pack contract evidence."],evidencePath:r}:n==="pass"?{gate:"verify",status:"pass",summary:"Verify-pack contract passed",details:[],evidencePath:r}:{gate:"verify",status:"warn",summary:"Verify-pack contract status is not explicit",details:["Ensure contract status is pass/fail and keep schema aligned with v1 contract."],evidencePath:r}}catch{return {gate:"verify",status:"fail",summary:"Verify-pack contract is invalid JSON",details:["Regenerate verify-pack contract artifact."],evidencePath:r}}}function Xs(t,e){let r=y__default.join(e,".rapidkit","reports","doctor-last-run.json");if(!t)return {gate:"dependency",status:"warn",summary:"Dependency risk check skipped (doctor evidence missing)",details:["Run rapidkit doctor workspace --json to include dependency findings."],evidencePath:r};let o=Array.isArray(t.projects)?t.projects:[],n=o.reduce((c,a)=>{let l=Number(a.vulnerabilities??0);return Number.isFinite(l)?c+Math.max(0,l):c},0),i=o.filter(c=>c.depsInstalled===false).length;return n>0?{gate:"dependency",status:"fail",summary:`${n} dependency vulnerability(ies) reported`,details:["Resolve vulnerabilities (npm/pip/go audit pipelines) before release."],evidencePath:r}:i>0?{gate:"dependency",status:"warn",summary:`${i} project(s) report missing dependencies`,details:["Run project init/bootstrap and regenerate doctor evidence."],evidencePath:r}:{gate:"dependency",status:"pass",summary:"No dependency vulnerabilities reported",details:[],evidencePath:r}}function ei(t){return t.some(e=>e.status==="fail")?"fail":t.some(e=>e.status==="warn")?"warn":"pass"}async function ti(t,e){let r=y__default.join(t,".rapidkit","reports","release-readiness-last-run.json");return await E__default.ensureDir(y__default.dirname(r)),await E__default.writeJSON(r,e,{spaces:2}),r}async function br(t={}){let e=y__default.resolve(t.startPath??process.cwd()),r=Us(e)??e,o=Vs(e),n=zs(r,o),i=Qs(r),c=Zs(r),a=Xs(i.payload,r),l=[n,i.gate,c,a],u=ei(l),p={schemaVersion:"v1",generatedAt:new Date().toISOString(),workspacePath:r,projectPath:e,action:t.action,overallStatus:u,blocking:u==="fail",blockingReasons:l.filter(d=>d.status==="fail").map(d=>`${d.gate}: ${d.summary}`),gates:l};return t.writeReport!==false&&(p.evidencePath=await ti(r,p)),p}function ri(t){return t==="pass"?s.green("PASS"):t==="warn"?s.yellow("WARN"):s.red("FAIL")}function oi(t){return t==="pass"?s.green("PASS"):t==="warn"?s.yellow("WARN"):s.red("FAIL")}async function en(t){let e=await br({writeReport:true});if(t.json)console.log(JSON.stringify(e,null,2));else {console.log(s.bold.cyan(`
116
+ ${r.stderr||""}`);return o?this.isMavenVersionAtLeast(o,[3,9,0])?{exitCode:0}:{exitCode:1,message:`Maven ${o.join(".")} detected; Maven 3.9+ is required.`}:{exitCode:1,message:"Unable to parse Maven version. Ensure Maven 3.9+ is installed and retry."}}catch{return {exitCode:1,message:"Maven version check failed. Install Maven 3.9+ and ensure mvn is on PATH."}}}shouldUseGradleNoDaemon(){return process.env.CI==="true"||process.env.RAPIDKIT_GRADLE_NO_DAEMON==="1"}inspectJavaProject(e){let r=P.existsSync(y__default.join(e,"pom.xml")),o=P.existsSync(y__default.join(e,"mvnw"))||P.existsSync(y__default.join(e,"mvnw.cmd")),n=P.existsSync(y__default.join(e,"build.gradle"))||P.existsSync(y__default.join(e,"build.gradle.kts"))||P.existsSync(y__default.join(e,"settings.gradle"))||P.existsSync(y__default.join(e,"settings.gradle.kts")),i=P.existsSync(y__default.join(e,"gradlew"))||P.existsSync(y__default.join(e,"gradlew.bat"));return {hasMavenProject:r||o,hasMavenWrapper:o,hasGradleProject:n||i,hasGradleWrapper:i}}findWorkspaceRoot(e){let r=e;for(;;){if(P.existsSync(y__default.join(r,".rapidkit-workspace")))return r;let o=y__default.dirname(r);if(o===r)break;r=o;}return null}resolveDependencyMode(e){let r=process.env.RAPIDKIT_DEP_SHARING_MODE?.toLowerCase();if(r==="shared-runtime-caches"||r==="shared-node-deps"||r==="isolated")return r;let o=this.findWorkspaceRoot(e);if(!o)return "isolated";let n=y__default.join(o,".rapidkit","policies.yml");if(!P.existsSync(n))return "isolated";try{let a=P.readFileSync(n,"utf-8").match(/^\s*dependency_sharing_mode:\s*([a-zA-Z\-]+)\s*(?:#.*)?$/m)?.[1]?.toLowerCase();if(a==="shared-runtime-caches"||a==="shared-node-deps"||a==="isolated")return a}catch{}return "isolated"}buildToolCommand(e){return this.isGradleProject(e)?this.gradleCommand(e):this.mavenCommand(e)}mavenCommand(e){let r=y__default.join(e,"mvnw.cmd");if(process.platform==="win32"&&P.existsSync(r))return {command:r,baseArgs:[]};let o=y__default.join(e,"mvnw");return P.existsSync(o)?this.ensureWrapperExecutable(o)?{command:o,baseArgs:[]}:{command:"sh",baseArgs:[o]}:{command:"mvn",baseArgs:[]}}gradleCommand(e){let r=y__default.join(e,"gradlew.bat");if(process.platform==="win32"&&P.existsSync(r))return {command:r,baseArgs:[]};let o=y__default.join(e,"gradlew");return P.existsSync(o)?this.ensureWrapperExecutable(o)?{command:o,baseArgs:[]}:{command:"sh",baseArgs:[o]}:{command:"gradle",baseArgs:[]}}isGradleProject(e){return this.inspectJavaProject(e).hasGradleProject}isMavenProject(e){return this.inspectJavaProject(e).hasMavenProject}discoverWorkspaceJavaProjects(e){let r=[],o=new Set,n=[e];for(;n.length>0;){let i=n.shift();if(!i||o.has(i))continue;o.add(i);let c=[];try{c=P.readdirSync(i,{withFileTypes:true});}catch{continue}for(let a of c){if(!a.isDirectory()||a.name.startsWith(".")||["node_modules","dist","build","target","coverage","htmlcov"].includes(a.name))continue;let l=y__default.join(i,a.name),u=this.inspectJavaProject(l);(u.hasMavenProject||u.hasGradleProject)&&r.push(l),n.push(l);}}return r}withJavaCacheEnv(e,r){let o=this.resolveDependencyMode(e),n=process.env.RAPIDKIT_WORKSPACE_PATH||this.findWorkspaceRoot(e),i=o==="shared-runtime-caches"?y__default.join(n||e,".rapidkit","cache","java","m2"):y__default.join(e,".rapidkit","cache","java","m2"),c=o==="shared-runtime-caches"?y__default.join(n||e,".rapidkit","cache","java","gradle"):y__default.join(e,".rapidkit","cache","java","gradle"),a=process.env.MAVEN_OPTS,l=process.env.GRADLE_USER_HOME,u=`-Dmaven.repo.local=${i}`;return process.env.MAVEN_OPTS=a?`${a} ${u}`:u,process.env.GRADLE_USER_HOME=c,r().finally(()=>{typeof a>"u"?delete process.env.MAVEN_OPTS:process.env.MAVEN_OPTS=a,typeof l>"u"?delete process.env.GRADLE_USER_HOME:process.env.GRADLE_USER_HOME=l;})}async runBuildTool(e,r,o=true){return this.withJavaCacheEnv(e,async()=>{try{let{command:n,baseArgs:i}=this.buildToolCommand(e),c=await this.runCommand(n,[...i,...r],e);if(c===0||!o)return {exitCode:c};let a=P.existsSync(y__default.join(e,"pom.xml")),l=P.existsSync(y__default.join(e,"build.gradle"))||P.existsSync(y__default.join(e,"build.gradle.kts"));return {exitCode:c,message:a||l?"Java build failed. Verify pom.xml/build.gradle syntax and dependencies, then retry.":"Java build tool is not installed or not available on PATH. Install Maven/Gradle and JDK 21+, or commit mvnw/gradlew wrapper scripts."}}catch(n){return {exitCode:1,message:`Java command execution failed: ${n instanceof Error?n.message:String(n)}. Verify pom.xml/build.gradle integrity and wrapper permissions.`}}})}resolveJarPath(e){let r=[y__default.join(e,"target"),y__default.join(e,"build","libs")];for(let o of r){if(!P.existsSync(o))continue;let i=P.readdirSync(o).filter(c=>c.toLowerCase().endsWith(".jar")).find(c=>!c.toLowerCase().endsWith("-sources.jar")&&!c.toLowerCase().endsWith("-javadoc.jar")&&!c.toLowerCase().endsWith("-plain.jar"));if(i)return y__default.join(o,i)}return null}commandArgsFor(e,r){if(e==="gradle"){let o=this.shouldUseGradleNoDaemon()?["--no-daemon"]:[];return r==="init"?[...o,"dependencies"]:r==="dev"?[...o,"bootRun"]:r==="test"?[...o,"test"]:[...o,"bootJar"]}return r==="init"?["-B","-q","-DskipTests","dependency:go-offline"]:r==="dev"?["spring-boot:run"]:r==="test"?["test"]:["-DskipTests","package"]}detectBuildTool(e){return this.isGradleProject(e)?"gradle":"maven"}async checkPrereqs(){let e=process.cwd(),r=this.resolveJavaCommand(e),o=await this.runCommand(r,["-version"],e);if(o!==0)return {exitCode:o,message:"JDK 21+ is required. Ensure java is on PATH or JAVA_HOME/bin/java is available."};if(this.isMavenProject(e)){let a=this.readRequiredJavaMajor(e),l=await this.detectInstalledJavaMajor(r,e);if(l!==null&&l<a)return {exitCode:1,message:`Detected Java ${l}, but project requires Java ${a}+.`};let u=y__default.join(process.env.JAVA_HOME||"","release");if(process.env.JAVA_HOME&&P.existsSync(u))try{let d=P.readFileSync(u,"utf-8").match(/^JAVA_VERSION="([^"]+)"/m),f=this.parseMajorJavaVersion(d?.[1]);if(f!==null&&f<a)return {exitCode:1,message:`Detected JAVA_HOME version ${f}, but project requires Java ${a}+.`}}catch{}}if(this.isMavenProject(e)||this.isGradleProject(e)){let a=this.detectBuildTool(e),l=a==="gradle"?["--version"]:["-version"],u=await this.runBuildTool(e,l);return u.exitCode!==0?u:a==="maven"&&!this.inspectJavaProject(e).hasMavenWrapper?this.checkSystemMavenVersion(e):u}let n=this.findWorkspaceRoot(e);if(n&&n===e){let a=this.discoverWorkspaceJavaProjects(n);if(a.length>0){let l=a.reduce((d,f)=>Math.max(d,this.readRequiredJavaMajor(f)),0);if(l>0){let d=await this.detectInstalledJavaMajor(r,e);if(d!==null&&d<l){let f=a.filter(h=>this.readRequiredJavaMajor(h)>d).map(h=>y__default.relative(e,h)).join(", ");return {exitCode:1,message:`Detected Java ${d}, but workspace project(s) [${f}] require Java ${l}+.`}}}let u=false,p=false;for(let d of a){let f=this.inspectJavaProject(d);f.hasMavenProject&&!f.hasMavenWrapper&&(u=true),f.hasGradleProject&&!f.hasGradleWrapper&&(p=true);}if(u){let d=await this.withJavaCacheEnv(e,async()=>this.runCommand("mvn",["-version"],e));if(d!==0)return {exitCode:d,message:"Maven is required for one or more workspace Java projects without Maven Wrapper. Install Maven 3.9+, or add mvnw/mvnw.cmd to those projects."};let f=await this.checkSystemMavenVersion(e);if(f.exitCode!==0)return f}if(p){let d=await this.withJavaCacheEnv(e,async()=>this.runCommand("gradle",["--version"],e));if(d!==0)return {exitCode:d,message:"Gradle is required for one or more workspace Java projects without Gradle Wrapper. Install Gradle 8+, or add gradlew/gradlew.bat to those projects."}}return {exitCode:0}}}let i=await this.withJavaCacheEnv(e,async()=>this.runCommand("mvn",["-version"],e));if(i===0){let a=await this.checkSystemMavenVersion(e);return a.exitCode!==0?a:{exitCode:0}}let c=await this.withJavaCacheEnv(e,async()=>this.runCommand("gradle",["--version"],e));return c===0?{exitCode:0}:{exitCode:i||c||1,message:"Neither Maven nor Gradle is available on PATH. Install one of them, or use mvnw/gradlew wrappers in project roots."}}async warmSetupCache(e){return this.withJavaCacheEnv(e,async()=>{try{let r=process.env.MAVEN_OPTS?.match(/-Dmaven\.repo\.local=([^\s]+)/)?.[1];return r&&P.mkdirSync(r,{recursive:true}),process.env.GRADLE_USER_HOME&&P.mkdirSync(process.env.GRADLE_USER_HOME,{recursive:true}),{exitCode:0}}catch{return {exitCode:1,message:"Failed to prepare Java cache directories"}}})}async initProject(e){return this.runBuildTool(e,this.commandArgsFor(this.detectBuildTool(e),"init"))}async runDev(e){return this.runBuildTool(e,this.commandArgsFor(this.detectBuildTool(e),"dev"))}async runTest(e){return this.runBuildTool(e,this.commandArgsFor(this.detectBuildTool(e),"test"))}async runBuild(e){return this.runBuildTool(e,this.commandArgsFor(this.detectBuildTool(e),"build"))}async runStart(e){let r=this.resolveJarPath(e);if(r)return {exitCode:await this.runCommand(this.resolveJavaCommand(e),["-jar",r],e)};let o=await this.runBuild(e);if(o.exitCode!==0)return o;let n=this.resolveJarPath(e);return n?{exitCode:await this.runCommand(this.resolveJavaCommand(e),["-jar",n],e)}:{exitCode:1,message:"Spring Boot build completed, but no runnable JAR was found under target/ or build/libs/. Verify build output naming and packaging plugins."}}async doctorHints(e){return ["Install JDK 21+ and Maven/Gradle (or commit mvnw/gradlew wrappers) for reliable local builds.","Run rapidkit init after dependency changes to warm Java caches for your build tool.","Use SPRING_PROFILES_ACTIVE to switch environments without changing source config."]}};var Ht=class{constructor(e){this.runCommand=e;}runtime="node";async run(e,r,o){return {exitCode:await this.runCommand(e,r,o)}}findWorkspaceRoot(e){let r=e;for(;;){if(P.existsSync(y__default.join(r,".rapidkit-workspace")))return r;let o=y__default.dirname(r);if(o===r)break;r=o;}return null}resolveDependencyMode(e){let r=process.env.RAPIDKIT_DEP_SHARING_MODE?.toLowerCase();if(r==="shared-runtime-caches"||r==="shared-node-deps"||r==="isolated")return r;let o=this.findWorkspaceRoot(e);if(!o)return "isolated";let n=y__default.join(o,".rapidkit","policies.yml");if(!P.existsSync(n))return "isolated";try{let a=P.readFileSync(n,"utf-8").match(/^\s*dependency_sharing_mode:\s*([a-zA-Z\-]+)\s*(?:#.*)?$/m)?.[1]?.toLowerCase();if(a==="shared-runtime-caches"||a==="shared-node-deps"||a==="isolated")return a}catch{}return "isolated"}withDependencyEnv(e,r,o){let n=this.resolveDependencyMode(e),i=process.env.RAPIDKIT_WORKSPACE_PATH||this.findWorkspaceRoot(e),c=n==="isolated"?y__default.join(e,".rapidkit","cache","node"):y__default.join(i||e,".rapidkit","cache","node"),a=process.env.npm_config_cache,l=process.env.npm_config_store_dir,u=process.env.RAPIDKIT_DEP_SHARING_MODE,p=process.env.RAPIDKIT_WORKSPACE_PATH;return process.env.RAPIDKIT_DEP_SHARING_MODE=n,i&&(process.env.RAPIDKIT_WORKSPACE_PATH=i),r==="pnpm"?(process.env.npm_config_store_dir=y__default.join(c,"pnpm-store"),process.env.npm_config_cache=y__default.join(c,"pnpm-cache")):r==="yarn"?process.env.npm_config_cache=y__default.join(c,"yarn-cache"):process.env.npm_config_cache=y__default.join(c,"npm-cache"),o().finally(()=>{typeof a>"u"?delete process.env.npm_config_cache:process.env.npm_config_cache=a,typeof l>"u"?delete process.env.npm_config_store_dir:process.env.npm_config_store_dir=l,typeof u>"u"?delete process.env.RAPIDKIT_DEP_SHARING_MODE:process.env.RAPIDKIT_DEP_SHARING_MODE=u,typeof p>"u"?delete process.env.RAPIDKIT_WORKSPACE_PATH:process.env.RAPIDKIT_WORKSPACE_PATH=p;})}detectPackageManager(e){if(P.existsSync(y__default.join(e,"package-lock.json")))return "npm";if(P.existsSync(y__default.join(e,"pnpm-lock.yaml")))return "pnpm";if(P.existsSync(y__default.join(e,"yarn.lock")))return "yarn";if(!this.commandAvailable("npm")){if(this.commandAvailable("pnpm"))return "pnpm";if(this.commandAvailable("yarn"))return "yarn"}return "npm"}hasPinnedPackageManager(e){return P.existsSync(y__default.join(e,"package-lock.json"))||P.existsSync(y__default.join(e,"pnpm-lock.yaml"))||P.existsSync(y__default.join(e,"yarn.lock"))}availablePackageManagers(e){let r=this.detectPackageManager(e);return this.hasPinnedPackageManager(e)?[r]:[r,...["npm","pnpm","yarn"].filter(n=>n!==r&&this.commandAvailable(n))]}commandAvailable(e){return spawnSync(e,["--version"],{stdio:"ignore",shell:process.platform==="win32"}).status===0}scriptArgs(e,r){return e==="npm"?["run",r]:["run",r]}async runScriptWithFallback(e,r){let o={exitCode:1};for(let n of this.availablePackageManagers(e))if(o=await this.withDependencyEnv(e,n,()=>this.run(n,this.scriptArgs(n,r),e)),o.exitCode===0)return o;return o}async checkPrereqs(){return this.run("node",["--version"],process.cwd())}async warmSetupCache(e){let r=this.detectPackageManager(e);return this.withDependencyEnv(e,r,async()=>{try{return process.env.npm_config_cache&&P.mkdirSync(process.env.npm_config_cache,{recursive:true}),r==="pnpm"&&process.env.npm_config_store_dir&&P.mkdirSync(process.env.npm_config_store_dir,{recursive:true}),{exitCode:0}}catch{return {exitCode:1,message:"Failed to prepare Node cache directories"}}})}async initProject(e){let r=this.detectPackageManager(e),o=this.resolveDependencyMode(e),n=o==="shared-runtime-caches"||o==="shared-node-deps"?["install","--prefer-offline"]:["install"];return this.withDependencyEnv(e,r,()=>this.run(r,n,e))}async runDev(e){return this.runScriptWithFallback(e,"dev")}async runTest(e){return this.runScriptWithFallback(e,"test")}async runBuild(e){return this.runScriptWithFallback(e,"build")}async runStart(e){return this.runScriptWithFallback(e,"start")}async doctorHints(e){return ["Install Node.js LTS and ensure node/npm are on PATH.","Use lockfiles (package-lock.json, pnpm-lock.yaml, yarn.lock) for deterministic installs.","Run install before dev/test/build if dependencies changed."]}};var zt=class{constructor(e){this.runCore=e;}runtime="python";async run(e,r){return {exitCode:await this.withPythonCacheEnv(r,()=>this.runCore(e,r))}}findWorkspaceRoot(e){let r=e;for(;;){if(P.existsSync(y__default.join(r,".rapidkit-workspace")))return r;let o=y__default.dirname(r);if(o===r)break;r=o;}return null}resolveDependencyMode(e){let r=process.env.RAPIDKIT_DEP_SHARING_MODE?.toLowerCase();if(r==="shared-runtime-caches"||r==="shared-node-deps"||r==="isolated")return r;let o=this.findWorkspaceRoot(e);if(!o)return "isolated";let n=y__default.join(o,".rapidkit","policies.yml");if(!P.existsSync(n))return "isolated";try{let a=P.readFileSync(n,"utf-8").match(/^\s*dependency_sharing_mode:\s*([a-zA-Z\-]+)\s*(?:#.*)?$/m)?.[1]?.toLowerCase();if(a==="shared-runtime-caches"||a==="shared-node-deps"||a==="isolated")return a}catch{}return "isolated"}withPythonCacheEnv(e,r){let o=this.resolveDependencyMode(e),n=process.env.RAPIDKIT_WORKSPACE_PATH||this.findWorkspaceRoot(e),i=o==="shared-runtime-caches"?y__default.join(n||e,".rapidkit","cache","python"):y__default.join(e,".rapidkit","cache","python"),c=process.env.PIP_CACHE_DIR,a=process.env.POETRY_CACHE_DIR;return process.env.PIP_CACHE_DIR=y__default.join(i,"pip"),process.env.POETRY_CACHE_DIR=y__default.join(i,"poetry"),r().finally(()=>{typeof c>"u"?delete process.env.PIP_CACHE_DIR:process.env.PIP_CACHE_DIR=c,typeof a>"u"?delete process.env.POETRY_CACHE_DIR:process.env.POETRY_CACHE_DIR=a;})}async checkPrereqs(){let e=process.cwd(),r=await this.run(["doctor","check"],e);return r.exitCode===0?r:this.run(["doctor"],e)}async initProject(e){return this.run(["init"],e)}async runDev(e){return this.run(["dev"],e)}async runTest(e){return this.run(["test"],e)}async runBuild(e){return this.run(["build"],e)}async runStart(e){return this.run(["start"],e)}async doctorHints(e){return ['Run "npx rapidkit doctor workspace" for a full workspace scan.','Use "npx rapidkit init" after adding or changing modules.','Use workspace launcher "./rapidkit" to avoid environment drift.']}};function Gs(){let t={...process.env},e=t.PATH||"";if(e){let r=e.split(y__default.delimiter).filter(o=>!o.replace(/\\/g,"/").includes("/.pyenv/shims")).join(y__default.delimiter);t.PATH=r;}return t.PYENV_VERSION="system",t.POETRY_PYTHON=t.POETRY_PYTHON||c$2(),typeof t.RAPIDKIT_SKIP_LOCK_SYNC>"u"&&(t.RAPIDKIT_SKIP_LOCK_SYNC="1"),t}function Fe(t,e){return t==="go"?new Ut((r,o,n)=>e.runCommandInCwd(r,o,n)):t==="node"?new Ht((r,o,n)=>e.runCommandInCwd(r,o,n)):t==="java"?new Vt((r,o,n)=>e.runCommandInCwd(r,o,n)):t==="dotnet"?new Bt((r,o,n)=>e.runCommandInCwd(r,o,n)):new zt((r,o)=>e.runCoreRapidkit(r,{cwd:o,env:Gs()}))}var Vo=y__default.join(fo.homedir(),".rapidkit","cache"),Ho=1440*60*1e3;function vr(){let t=process.env.RAPIDKIT_CACHE_DIR?.trim();if(t)return t;let e=process.env.VITEST_WORKER_ID?.trim();return e?y__default.join(Vo,`vitest-${e}`):Vo}var Qt=class t{static instance;memoryCache=new Map;constructor(){}static getInstance(){return t.instance||(t.instance=new t),t.instance}getCacheKey(e){return createHash("md5").update(e).digest("hex")}getCachePath(e){return y__default.join(vr(),`${this.getCacheKey(e)}.json`)}getTempCachePath(e){let r=`${process.pid}-${Date.now()}-${Math.random().toString(16).slice(2)}`;return `${e}.${r}.tmp`}async get(e,r="1.0"){let o=this.memoryCache.get(e);if(o&&o.version===r&&Date.now()-o.timestamp<Ho)return a$1.debug(`Cache hit (memory): ${e}`),o.data;try{let n=this.getCachePath(e),i=await promises.readFile(n,"utf-8"),c=JSON.parse(i);if(c.version===r&&Date.now()-c.timestamp<Ho)return a$1.debug(`Cache hit (disk): ${e}`),this.memoryCache.set(e,c),c.data;await promises.unlink(n).catch(()=>{});}catch{a$1.debug(`Cache miss: ${e}`);}return null}async set(e,r,o="1.0"){let n={data:r,timestamp:Date.now(),version:o};this.memoryCache.set(e,n);try{await promises.mkdir(vr(),{recursive:true});let i=this.getCachePath(e),c=this.getTempCachePath(i);await promises.writeFile(c,JSON.stringify(n),"utf-8"),await promises.rename(c,i),a$1.debug(`Cache set: ${e}`);}catch(i){a$1.debug(`Cache write failed: ${e}`,i);}}async invalidate(e){this.memoryCache.delete(e);try{let r=this.getCachePath(e);await promises.unlink(r),a$1.debug(`Cache invalidated: ${e}`);}catch{}}async clear(){this.memoryCache.clear();try{let e=vr(),r=await promises.readdir(e);await Promise.all(r.map(o=>promises.unlink(y__default.join(e,o)))),a$1.debug("Cache cleared");}catch{}}};var zo=[{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",moduleSupport:true,stability:"stable"},{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",moduleSupport:true,stability:"stable"},{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",moduleSupport:true,stability:"stable"},{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",moduleSupport:false,stability:"stable",generator:"springboot",createUsage:"rapidkit 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",moduleSupport:false,stability:"stable",generator:"gofiber",createUsage:"rapidkit 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",moduleSupport:false,stability:"stable",generator:"gogin",createUsage:"rapidkit 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",moduleSupport:false,stability:"preview",generator:"dotnet-webapi-clean",createUsage:"rapidkit create project dotnet.webapi.clean <name> [--target-framework net8.0] [--root-namespace <Company.Product>] [--port <number>]"}],Pr=new Map;for(let t of zo){Pr.set(t.id.toLowerCase(),t);for(let e of t.aliases)Pr.set(e.toLowerCase(),t);}function wt(t){return t?Pr.get(t.trim().toLowerCase())??null:null}function Yo(t){return wt(t)?.id??t}function Qo(){return zo.filter(t=>t.owner==="core"||t.generator)}function kt(t){return wt(t)?.owner==="npm"}async function Zo(t,e){if(!t.generator)throw new Error(`Kit is not backed by an npm generator: ${t.id}`);if(t.generator==="gofiber"){let{generateGoFiberKit:r}=await import('./gofiber-standard-NDCBY6OM.js');await r(e.projectPath,{project_name:e.projectName,module_path:e.projectName,skipGit:e.skipGit,skipInstall:e.skipInstall});return}if(t.generator==="gogin"){let{generateGoGinKit:r}=await import('./gogin-standard-WUOMIHDR.js');await r(e.projectPath,{project_name:e.projectName,module_path:e.projectName,skipGit:e.skipGit,skipInstall:e.skipInstall});return}if(t.generator==="springboot"){let{generateSpringBootKit:r}=await import('./springboot-standard-WQWB5E24.js');await r(e.projectPath,{project_name:e.projectName,artifact_id:e.projectName,java_version:Oe(e.args,"--java-version")?.trim(),spring_boot_version:Oe(e.args,"--spring-boot-version")?.trim(),springdoc_version:Oe(e.args,"--springdoc-version")?.trim(),group_id:Oe(e.args,"--group-id")?.trim(),package_name:Oe(e.args,"--package-name")?.trim(),description:Oe(e.args,"--description")?.trim(),port:Oe(e.args,"--port")?.trim(),skipGit:e.skipGit,skipInstall:e.skipInstall});return}if(t.generator==="dotnet-webapi-clean"){let{generateDotnetWebApiCleanKit:r}=await import('./dotnet-webapi-clean-W7SD3U3W.js');await r(e.projectPath,{project_name:e.projectName,target_framework:Oe(e.args,"--target-framework")?.trim(),root_namespace:Oe(e.args,"--root-namespace")?.trim(),description:Oe(e.args,"--description")?.trim(),port:Oe(e.args,"--port")?.trim(),skipGit:e.skipGit,skipInstall:e.skipInstall});return}throw new Error(`Unhandled npm kit generator: ${t.generator}`)}function Oe(t,e){let r=t.indexOf(e);if(r>=0&&r+1<t.length)return t[r+1];let o=t.find(n=>n.startsWith(`${e}=`));return o?o.slice(e.length+1):void 0}function Us(t){let e=t;for(;;){if(P.existsSync(y__default.join(e,".rapidkit-workspace"))||P.existsSync(y__default.join(e,".rapidkit","workspace.json")))return e;let r=y__default.dirname(e);if(r===e)break;e=r;}return null}function Vs(t){let e=a$4(t);return b$2(e,t)?"go":d(e,t)?"java":c$1(e,t)?"node":f$1(e,t)?"python":"unknown"}function Hs(t,e){if(!P.existsSync(t))return null;let r=P.readdirSync(t).filter(o=>o.endsWith(".json")&&e.some(n=>n.test(o))).map(o=>y__default.join(t,o));return r.length===0?null:(r.sort((o,n)=>P.statSync(n).mtimeMs-P.statSync(o).mtimeMs),r[0])}function vt(t){return t&&typeof t=="object"&&!Array.isArray(t)?t:{}}function zs(t,e){let r=y__default.join(t,".rapidkit","toolchain.lock");if(!P.existsSync(r))return {gate:"env",status:"fail",summary:"toolchain.lock is missing",details:["Run rapidkit bootstrap to pin runtime versions and generate a reproducible toolchain."],evidencePath:r};try{let o=JSON.parse(P.readFileSync(r,"utf-8")),n=vt(o.runtime),c=["python","node","go","java"].filter(a=>{let l=vt(n[a]);return typeof l.version=="string"&&l.version.trim().length>0});if(c.length===0)return {gate:"env",status:"fail",summary:"No runtime versions are pinned in toolchain.lock",details:["Pin at least one runtime version via rapidkit setup <runtime> and re-run bootstrap."],evidencePath:r};if(e!=="unknown"){let a=vt(n[e]);if(typeof a.version!="string"||a.version.trim().length===0)return {gate:"env",status:"fail",summary:`Project runtime (${e}) is not pinned in toolchain.lock`,details:[`Run rapidkit setup ${e} and rapidkit bootstrap to lock ${e} for this workspace.`],evidencePath:r}}return {gate:"env",status:"pass",summary:`Pinned runtimes: ${c.join(", ")}`,details:[],evidencePath:r}}catch{return {gate:"env",status:"fail",summary:"toolchain.lock is invalid JSON",details:["Regenerate lockfile with rapidkit bootstrap."],evidencePath:r}}}function Ys(t){let e=y__default.join(t,".rapidkit","reports","doctor-last-run.json");if(!P.existsSync(e))return {payload:null,path:e};try{let r=JSON.parse(P.readFileSync(e,"utf-8"));return c$3(r,"workspace")?{payload:r,path:e}:{payload:null,path:e}}catch{return {payload:null,path:e}}}function Qs(t){let e=Ys(t);if(!e.payload)return {gate:{gate:"doctor",status:"fail",summary:"Doctor evidence is missing",details:["Run rapidkit doctor workspace --json before release readiness checks."],evidencePath:e.path},payload:null};let r=vt(e.payload.summary),o=Number(r.totalIssues??0);return r.hasSystemErrors?{gate:{gate:"doctor",status:"fail",summary:"Doctor reported system errors",details:["Resolve system-level doctor errors before proceeding."],evidencePath:e.path},payload:e.payload}:o>0?{gate:{gate:"doctor",status:"warn",summary:`Doctor found ${o} issue(s)`,details:["Run rapidkit doctor workspace --fix and re-run readiness checks."],evidencePath:e.path},payload:e.payload}:{gate:{gate:"doctor",status:"pass",summary:"Doctor checks passed without issues",details:[],evidencePath:e.path},payload:e.payload}}function Zs(t){let e=y__default.join(t,".rapidkit","reports"),r=Hs(e,[/verify-pack-contract/i,/^verify.*\.json$/i]);if(!r)return {gate:"verify",status:"fail",summary:"Verify-pack contract evidence is missing",details:["Export verify-pack contract JSON from extension/CI before release readiness checks."],evidencePath:y__default.join(e,"*verify-pack-contract*.json")};try{let o=JSON.parse(P.readFileSync(r,"utf-8")),n=String(o.status??"").toLowerCase(),i=vt(o.summary),c=Number(i.failedChecks??0);return n==="fail"||c>0?{gate:"verify",status:"fail",summary:"Verify-pack contract reports failed checks",details:["Fix failed verify checks and regenerate verify-pack contract evidence."],evidencePath:r}:n==="pass"?{gate:"verify",status:"pass",summary:"Verify-pack contract passed",details:[],evidencePath:r}:{gate:"verify",status:"warn",summary:"Verify-pack contract status is not explicit",details:["Ensure contract status is pass/fail and keep schema aligned with v1 contract."],evidencePath:r}}catch{return {gate:"verify",status:"fail",summary:"Verify-pack contract is invalid JSON",details:["Regenerate verify-pack contract artifact."],evidencePath:r}}}function Xs(t,e){let r=y__default.join(e,".rapidkit","reports","doctor-last-run.json");if(!t)return {gate:"dependency",status:"warn",summary:"Dependency risk check skipped (doctor evidence missing)",details:["Run rapidkit doctor workspace --json to include dependency findings."],evidencePath:r};let o=Array.isArray(t.projects)?t.projects:[],n=o.reduce((c,a)=>{let l=Number(a.vulnerabilities??0);return Number.isFinite(l)?c+Math.max(0,l):c},0),i=o.filter(c=>c.depsInstalled===false).length;return n>0?{gate:"dependency",status:"fail",summary:`${n} dependency vulnerability(ies) reported`,details:["Resolve vulnerabilities (npm/pip/go audit pipelines) before release."],evidencePath:r}:i>0?{gate:"dependency",status:"warn",summary:`${i} project(s) report missing dependencies`,details:["Run project init/bootstrap and regenerate doctor evidence."],evidencePath:r}:{gate:"dependency",status:"pass",summary:"No dependency vulnerabilities reported",details:[],evidencePath:r}}function ei(t){return t.some(e=>e.status==="fail")?"fail":t.some(e=>e.status==="warn")?"warn":"pass"}async function ti(t,e){let r=y__default.join(t,".rapidkit","reports","release-readiness-last-run.json");return await E__default.ensureDir(y__default.dirname(r)),await E__default.writeJSON(r,e,{spaces:2}),r}async function br(t={}){let e=y__default.resolve(t.startPath??process.cwd()),r=Us(e)??e,o=Vs(e),n=zs(r,o),i=Qs(r),c=Zs(r),a=Xs(i.payload,r),l=[n,i.gate,c,a],u=ei(l),p={schemaVersion:"v1",generatedAt:new Date().toISOString(),workspacePath:r,projectPath:e,action:t.action,overallStatus:u,blocking:u==="fail",blockingReasons:l.filter(d=>d.status==="fail").map(d=>`${d.gate}: ${d.summary}`),gates:l};return t.writeReport!==false&&(p.evidencePath=await ti(r,p)),p}function ri(t){return t==="pass"?s.green("PASS"):t==="warn"?s.yellow("WARN"):s.red("FAIL")}function oi(t){return t==="pass"?s.green("PASS"):t==="warn"?s.yellow("WARN"):s.red("FAIL")}async function en(t){let e=await br({writeReport:true});if(t.json)console.log(JSON.stringify(e,null,2));else {console.log(s.bold.cyan(`
117
117
  \u{1F6A6} RapidKit Release Readiness
118
118
  `)),console.log(s.bold(`Workspace: ${s.cyan(y__default.basename(e.workspacePath))}`)),console.log(s.gray(`Path: ${e.workspacePath}`)),console.log(`Overall: ${oi(e.overallStatus)}`);for(let r of e.gates){console.log(` - ${r.gate}: ${ri(r.status)} ${r.summary}`);for(let o of r.details)console.log(s.gray(` ${o}`));r.evidencePath&&console.log(s.gray(` evidence: ${r.evidencePath}`));}e.evidencePath&&console.log(s.gray(`
119
119
  Evidence saved: ${e.evidencePath}`));}t.strict&&e.overallStatus!=="pass"&&process.exit(1);}async function ai(t){let e=await promises.readFile(t);return createHash("sha256").update(e).digest("hex")}async function tn(t,e){await E.outputFile(t,`${JSON.stringify(e,null,2)}
@@ -176,7 +176,7 @@ Hints:`));for(let d of c)console.log(s.gray(`- ${d}`));}return i.exitCode}functi
176
176
  `),0):(console.log(s.cyan("RapidKit mirror status")),console.log(s.gray(`Workspace: ${o}`)),console.log(s.gray(`Config: ${d?"present":"missing"} (${i})`)),console.log(s.gray(`Lock: ${h?"present":"missing"} (${c})`)),console.log(s.gray(`Artifacts: ${m}`)),0)}if(e==="sync"||e==="verify"||e==="rotate"){let p=await jr(o,{ciMode:true,offlineMode:e==="verify",forceRun:true}),d=p.checks.filter(m=>m.status==="failed"),f=p.checks.some(m=>m.id.startsWith("mirror.verify.")&&m.status==="failed");if(e==="verify"&&f){let m={command:"mirror",action:e,result:"failed",timestamp:new Date().toISOString(),workspacePath:o,details:p.details,checks:p.checks};if(await u(m),r)return process.stdout.write(`${JSON.stringify(m,null,2)}
177
177
  `),1;console.log(s.red("\u274C Mirror verify failed."));for(let g of p.checks.filter(b=>b.id.startsWith("mirror.verify.")))console.log(s.gray(`- ${g.id}: ${g.message}`));return 1}if(d.length>0){let m={command:"mirror",action:e,result:"failed",timestamp:new Date().toISOString(),workspacePath:o,details:p.details,checks:p.checks};if(await u(m),r)return process.stdout.write(`${JSON.stringify(m,null,2)}
178
178
  `),1;console.log(s.yellow(`\u26A0\uFE0F Mirror ${e} completed with ${d.length} issue(s).`));for(let g of d)console.log(s.gray(`- ${g.id}: ${g.message}`));return 1}let h={command:"mirror",action:e,result:"ok",timestamp:new Date().toISOString(),workspacePath:o,details:p.details,checks:p.checks};return await u(h),r?(process.stdout.write(`${JSON.stringify(h,null,2)}
179
- `),0):e==="rotate"?(console.log(s.green(`\u2705 Mirror rotate completed. Rotated files: ${p.details.rotatedFiles}.`)),0):e==="verify"?(console.log(s.green(`\u2705 Mirror verify completed. Verified artifacts: ${p.details.verifiedArtifacts}.`)),0):(console.log(s.green(`\u2705 Mirror sync completed. Synced artifacts: ${p.details.syncedArtifacts}.`)),0)}return console.log(s.yellow("Usage: rapidkit mirror <status|sync|verify|rotate> [--json]")),1}async function Gr(t){let e=process.env.RAPIDKIT_SKIP_LOCK_SYNC;typeof e>"u"&&(process.env.RAPIDKIT_SKIP_LOCK_SYNC="1");try{let r=process.cwd(),o=await rs(r,async()=>{let n=H(r),i=Fe("python",{runCommandInCwd:L,runCoreRapidkit:e$1}),c=Fe("dotnet",{runCommandInCwd:L,runCoreRapidkit:e$1}),a=t.slice(1).filter(m=>!m.startsWith("-"));if(a.length>0){let m=y__default.resolve(r,a[0]),g=a$4(m),b=await Ct(m);return b$2(g,m)||b==="go"?await Wr(m):d(g,m)||b==="java"?await Xe("init",m):e$2(g,m)||b==="dotnet"?ue(await c.initProject(m)):c$1(g,m)||b==="node"?await Dr(m):f$1(g,m)||b==="python"?await Nr(m,i):await e$1(t,{cwd:r})}let l=a$4(r),u=!!H(r)&&r===H(r);if(!u&&b$2(l,r))return await Wr(r);let p=await Ct(r);if(!u&&(d(l,r)||p==="java"))return await Xe("init",r);if(!u&&(e$2(l,r)||p==="dotnet"))return ue(await c.initProject(r));if(!u&&(c$1(l,r)||p==="node"))return await Dr(r);if(!u&&(f$1(l,r)||p==="python"))return await Nr(r,i);let d$1=n||H(r),f=Zn(r),h=f?y__default.dirname(y__default.dirname(f)):null;if(h&&h!==d$1){let m=a$4(h),g=await Ct(h);return b$2(m,h)||g==="go"?await Wr(h):d(m,h)||g==="java"?await Xe("init",h):e$2(m,h)||g==="dotnet"?ue(await c.initProject(h)):c$1(m,h)||g==="node"?await Dr(h):f$1(m,h)||g==="python"?await Nr(h,i):await e$1(["init"],{cwd:h})}if(d$1&&r===d$1){console.log(s.yellow("\u26A0\uFE0F Running `npx rapidkit init` at workspace root.")),console.log(s.gray(" Root `init`, `workspace init`, and `workspace run init` now share the same full-init flow:\n workspace-profile dependencies first, then project dependency initialization.\n"));let m=await Lr(d$1);if(m!==0)return m;let{runWorkspaceStage:g}=await import('./workspace-run-OVDAQG4F.js');return (await g({workspacePath:d$1,stage:"init",affected:false,blastRadius:false,parallel:false,continueOnError:false,strict:false,json:false,enforceGates:false})).summary.exitCode}if(!d$1){let m=await a$2(),{name:g}=ha(r),{createProject:b}=await import('./create-6AMYKNEG.js');return await b(g,{yes:true,userConfig:m}),0}return await e$1(t,{cwd:r})});return o.ok?o.value:o.code}finally{typeof e>"u"?delete process.env.RAPIDKIT_SKIP_LOCK_SYNC:process.env.RAPIDKIT_SKIP_LOCK_SYNC=e;}}async function Kn(t){let e=H(t);if(!e)return [];let r="warn";try{let l=await P.promises.readFile(y__default.join(e,".rapidkit","policies.yml"),"utf-8");(l.match(/^\s*enforcement_mode:\s*(warn|strict)\s*(?:#.*)?$/m)??l.match(/^\s*mode:\s*(warn|strict)\s*(?:#.*)?$/m))?.[1]==="strict"&&(r="strict");}catch{return []}if(r!=="strict")return [];let o=[],n=y__default.join(e,".rapidkit","toolchain.lock");if(!P.existsSync(n))return o.push("toolchain.lock is missing \u2014 run `rapidkit bootstrap` first (strict mode requires a reproducible toolchain)."),o;let i={};try{i=JSON.parse(await P.promises.readFile(n,"utf-8"));}catch{return o.push("toolchain.lock is invalid JSON \u2014 regenerate it with `rapidkit bootstrap` before running commands in strict mode."),o}let c=i.runtime??{},a=a$4(t);b$2(a,t)&&!c.go?.version?o.push("go.version is not pinned in toolchain.lock \u2014 run `rapidkit setup go` first."):c$1(a,t)&&!c.node?.version?o.push("node.version is not pinned in toolchain.lock \u2014 run `rapidkit setup node` first."):d(a,t)&&!c.java?.version?o.push("java.version is not pinned in toolchain.lock \u2014 run `rapidkit setup java` first."):e$2(a,t)&&!c.dotnet?.version?o.push("dotnet.version is not pinned in toolchain.lock \u2014 run `rapidkit setup dotnet` first."):f$1(a,t)&&!c.python?.version&&o.push("python.version is not pinned in toolchain.lock \u2014 run `rapidkit setup python` first.");try{let u=JSON.parse(await P.promises.readFile(y__default.join(e,".rapidkit","workspace.json"),"utf-8")).profile??"";u==="python-only"&&(b$2(a,t)||c$1(a,t)||d(a,t)||e$2(a,t))?o.push('Workspace profile is "python-only" but this project is not Python.'):u==="node-only"&&(b$2(a,t)||f$1(a,t)||d(a,t)||e$2(a,t))?o.push('Workspace profile is "node-only" but this project is not Node.'):u==="go-only"&&(c$1(a,t)||f$1(a,t)||d(a,t)||e$2(a,t))?o.push('Workspace profile is "go-only" but this project is not Go.'):u==="java-only"&&(f$1(a,t)||c$1(a,t)||b$2(a,t)||e$2(a,t))?o.push('Workspace profile is "java-only" but this project is not Java.'):u==="dotnet-only"&&(f$1(a,t)||c$1(a,t)||b$2(a,t)||d(a,t))&&o.push('Workspace profile is "dotnet-only" but this project is not .NET.');}catch{}return o}async function ba(){let t=async w=>{if(!a()||!w.toLowerCase().endsWith(".cmd"))return false;try{let C=(await E__default.readFile(w,"utf8")).replace(/\r\n/g,`
179
+ `),0):e==="rotate"?(console.log(s.green(`\u2705 Mirror rotate completed. Rotated files: ${p.details.rotatedFiles}.`)),0):e==="verify"?(console.log(s.green(`\u2705 Mirror verify completed. Verified artifacts: ${p.details.verifiedArtifacts}.`)),0):(console.log(s.green(`\u2705 Mirror sync completed. Synced artifacts: ${p.details.syncedArtifacts}.`)),0)}return console.log(s.yellow("Usage: rapidkit mirror <status|sync|verify|rotate> [--json]")),1}async function Gr(t){let e=process.env.RAPIDKIT_SKIP_LOCK_SYNC;typeof e>"u"&&(process.env.RAPIDKIT_SKIP_LOCK_SYNC="1");try{let r=process.cwd(),o=await rs(r,async()=>{let n=H(r),i=Fe("python",{runCommandInCwd:L,runCoreRapidkit:e$1}),c=Fe("dotnet",{runCommandInCwd:L,runCoreRapidkit:e$1}),a=t.slice(1).filter(m=>!m.startsWith("-"));if(a.length>0){let m=y__default.resolve(r,a[0]),g=a$4(m),b=await Ct(m);return b$2(g,m)||b==="go"?await Wr(m):d(g,m)||b==="java"?await Xe("init",m):e$2(g,m)||b==="dotnet"?ue(await c.initProject(m)):c$1(g,m)||b==="node"?await Dr(m):f$1(g,m)||b==="python"?await Nr(m,i):await e$1(t,{cwd:r})}let l=a$4(r),u=!!H(r)&&r===H(r);if(!u&&b$2(l,r))return await Wr(r);let p=await Ct(r);if(!u&&(d(l,r)||p==="java"))return await Xe("init",r);if(!u&&(e$2(l,r)||p==="dotnet"))return ue(await c.initProject(r));if(!u&&(c$1(l,r)||p==="node"))return await Dr(r);if(!u&&(f$1(l,r)||p==="python"))return await Nr(r,i);let d$1=n||H(r),f=Zn(r),h=f?y__default.dirname(y__default.dirname(f)):null;if(h&&h!==d$1){let m=a$4(h),g=await Ct(h);return b$2(m,h)||g==="go"?await Wr(h):d(m,h)||g==="java"?await Xe("init",h):e$2(m,h)||g==="dotnet"?ue(await c.initProject(h)):c$1(m,h)||g==="node"?await Dr(h):f$1(m,h)||g==="python"?await Nr(h,i):await e$1(["init"],{cwd:h})}if(d$1&&r===d$1){console.log(s.yellow("\u26A0\uFE0F Running `npx rapidkit init` at workspace root.")),console.log(s.gray(" Root `init`, `workspace init`, and `workspace run init` now share the same full-init flow:\n workspace-profile dependencies first, then project dependency initialization.\n"));let m=await Lr(d$1);if(m!==0)return m;let{runWorkspaceStage:g}=await import('./workspace-run-OIPQYI6V.js');return (await g({workspacePath:d$1,stage:"init",affected:false,blastRadius:false,parallel:false,continueOnError:false,strict:false,json:false,enforceGates:false})).summary.exitCode}if(!d$1){let m=await a$2(),{name:g}=ha(r),{createProject:b}=await import('./create-6AMYKNEG.js');return await b(g,{yes:true,userConfig:m}),0}return await e$1(t,{cwd:r})});return o.ok?o.value:o.code}finally{typeof e>"u"?delete process.env.RAPIDKIT_SKIP_LOCK_SYNC:process.env.RAPIDKIT_SKIP_LOCK_SYNC=e;}}async function Kn(t){let e=H(t);if(!e)return [];let r="warn";try{let l=await P.promises.readFile(y__default.join(e,".rapidkit","policies.yml"),"utf-8");(l.match(/^\s*enforcement_mode:\s*(warn|strict)\s*(?:#.*)?$/m)??l.match(/^\s*mode:\s*(warn|strict)\s*(?:#.*)?$/m))?.[1]==="strict"&&(r="strict");}catch{return []}if(r!=="strict")return [];let o=[],n=y__default.join(e,".rapidkit","toolchain.lock");if(!P.existsSync(n))return o.push("toolchain.lock is missing \u2014 run `rapidkit bootstrap` first (strict mode requires a reproducible toolchain)."),o;let i={};try{i=JSON.parse(await P.promises.readFile(n,"utf-8"));}catch{return o.push("toolchain.lock is invalid JSON \u2014 regenerate it with `rapidkit bootstrap` before running commands in strict mode."),o}let c=i.runtime??{},a=a$4(t);b$2(a,t)&&!c.go?.version?o.push("go.version is not pinned in toolchain.lock \u2014 run `rapidkit setup go` first."):c$1(a,t)&&!c.node?.version?o.push("node.version is not pinned in toolchain.lock \u2014 run `rapidkit setup node` first."):d(a,t)&&!c.java?.version?o.push("java.version is not pinned in toolchain.lock \u2014 run `rapidkit setup java` first."):e$2(a,t)&&!c.dotnet?.version?o.push("dotnet.version is not pinned in toolchain.lock \u2014 run `rapidkit setup dotnet` first."):f$1(a,t)&&!c.python?.version&&o.push("python.version is not pinned in toolchain.lock \u2014 run `rapidkit setup python` first.");try{let u=JSON.parse(await P.promises.readFile(y__default.join(e,".rapidkit","workspace.json"),"utf-8")).profile??"";u==="python-only"&&(b$2(a,t)||c$1(a,t)||d(a,t)||e$2(a,t))?o.push('Workspace profile is "python-only" but this project is not Python.'):u==="node-only"&&(b$2(a,t)||f$1(a,t)||d(a,t)||e$2(a,t))?o.push('Workspace profile is "node-only" but this project is not Node.'):u==="go-only"&&(c$1(a,t)||f$1(a,t)||d(a,t)||e$2(a,t))?o.push('Workspace profile is "go-only" but this project is not Go.'):u==="java-only"&&(f$1(a,t)||c$1(a,t)||b$2(a,t)||e$2(a,t))?o.push('Workspace profile is "java-only" but this project is not Java.'):u==="dotnet-only"&&(f$1(a,t)||c$1(a,t)||b$2(a,t)||d(a,t))&&o.push('Workspace profile is "dotnet-only" but this project is not .NET.');}catch{}return o}async function ba(){let t=async w=>{if(!a()||!w.toLowerCase().endsWith(".cmd"))return false;try{let C=(await E__default.readFile(w,"utf8")).replace(/\r\n/g,`
180
180
  `).toLowerCase(),x=C.includes("\\.rapidkit\\rapidkit"),_=C.includes("\\.rapidkit\\rapidkit.cmd")||C.includes("\\.rapidkit\\rapidkit.exe")||C.includes("\\.venv\\scripts\\rapidkit.exe");return x&&!_}catch{return false}},e=process.cwd(),r=process.argv.slice(2),o=r[0],n=o==="init",i=new Set(["dev","start","build","test"]),c=!o||o==="--help"||o==="-h"||o==="help",a$2=et(e),l=P.existsSync(y__default.join(e,".rapidkit","project.json")),u=a$4(e),p=b$2(u,e)||c$1(u,e),d=!!o&&i.has(o)&&p;if(Rt(r)||r[0]==="create")return false;if(Kr(r))return true;if(r[0]==="init"&&a$2&&!l)return false;if(Qn(r))return true;try{let w=o==="shell"&&r[1]==="activate",k=o==="create",C=await po(e,{cwd:e,timeoutMs:1200});if(C.ok&&C.data?.isRapidkitProject&&C.data.engine==="python"){let x=k||Rt(r);if(!c&&!w&&!x&&!n&&!d){if(o&&An.includes(o)){let T=await Kn(e).catch(()=>[]);if(T.length>0){process.stderr.write(s.red("\u274C Strict policy violations prevent running this command:")+`
181
181
  `);for(let le of T)process.stderr.write(s.red(` \u2022 ${le}`)+`
182
182
  `);process.exit(1);}}let _=await e$1(process.argv.slice(2),{cwd:e});process.exit(_);}}}catch{}let f=Zn(e),h=a(),m=i$1(e),g=null;for(let w of m)if(await E__default.pathExists(w)){if(await t(w)){a$1.warn(`Skipping legacy/broken Windows launcher candidate: ${w}. Falling back to core bridge.`);continue}g=w;break}let b=o==="create";if(o==="init"&&a$2&&!l)return false;if(o&&An.includes(o)){let w=await Kn(e);if(w.length>0){process.stderr.write(s.red("\u274C Strict policy violations prevent running this command:")+`
@@ -253,11 +253,11 @@ Use "rapidkit help <command>" for more information.
253
253
  `),a$1.debug(`Synced Python version ${x.trim()} from workspace to project`);}}catch(x){a$1.debug("Could not sync Python version from workspace:",x);}}if(!e$2.skipInstall){let w=await e$1(["init",i],{cwd:process.cwd()});if(w!==0&&process.exit(w),b){let k=y__default.dirname(b),C=y__default.join(k,".python-version"),x=y__default.join(i,".python-version");try{if(await E__default.pathExists(C)){let _=P.readFileSync(C,"utf-8");P.writeFileSync(x,_.trim()+`
254
254
  `),a$1.debug(`Re-synced Python version ${_.trim()} after init`);}}catch(_){a$1.debug("Could not re-sync Python version after init:",_);}}}}else {let{createProject:a}=await import('./create-6AMYKNEG.js');await a(t,{skipGit:e$2.skipGit,dryRun:e$2.dryRun,yes:e$2.yes,userConfig:n,installMethod:e$2.installMethod,profile:e$2.profile});}}catch(r){r instanceof e?(a$1.error(`
255
255
  \u274C ${r.message}`),r.details&&a$1.warn(`\u{1F4A1} ${r.details}`),a$1.debug("Error code:",r.code)):(a$1.error(`
256
- \u274C An unexpected error occurred:`),console.error(r)),process.exit(1);}finally{ze=null;}});To(ce);Lo(ce);ce.command("commands").description("Show effective RapidKit command ownership and runtime support").option("--json","Emit machine-readable JSON output").action(async t=>{aa({json:t.json});});ce.command("analyze").description("Analyze workspace/project health and generate enterprise-ready evidence").option("--workspace <path>","Workspace/root path to analyze").option("--json","Output as JSON").option("--output <file>","Write JSON report to a file").option("--strict","Treat warnings as blocking in the verdict").action(async t=>{try{let{runAnalyze:e,printAnalyzeReport:r}=await import('./analyze-ZQHLV2YK.js'),o=await e({workspacePath:t.workspace,json:t.json===true,output:t.output,strict:t.strict===true});t.json?console.log(JSON.stringify(o,null,2)):r(o),o.summary.verdict==="blocked"&&process.exit(2);}catch(e){let r=e instanceof Error?e.message:String(e);t.json?console.log(JSON.stringify({schemaVersion:"rapidkit-analyze-error-v1",ok:false,error:{message:r}},null,2)):console.error(s.red(`Analyze failed: ${r}`)),process.exit(1);}});yo(ce);ce.command("shell <action>").description("Shell helpers (activate virtualenv in current shell)").action(async t=>{t!=="activate"&&(console.log(s.red(`Unknown shell command: ${t}`)),process.exit(1));let e=process.cwd();function r(l){let u=l;for(;;){let p=y__default.join(u,".rapidkit","context.json");if(P.existsSync(p))return p;let d=y__default.dirname(u);if(d===u)break;u=d;}return null}let o=r(e);function n(l){let u=l;for(;;){let p=y__default.join(u,".venv"),d=y__default.join(u,".rapidkit","activate");if(P.existsSync(d)||P.existsSync(p))return {venv:p,activateFile:d};let f=y__default.dirname(u);if(f===u)break;u=f;}return null}let i=n(e);!o&&!i&&(console.log(s.yellow("No RapidKit project found in this directory")),process.exit(1));let c;i&&P.existsSync(i.activateFile)?c=i.activateFile:i&&P.existsSync(i.venv)?c=h(i.venv):(console.log(s.yellow("No virtual environment found")),process.exit(1));let a$1=a();console.log(a$1?`call "${c}"`:`. "${c}"`);});ce.command("readiness").description("\u{1F6A6} Generate machine-readable release readiness summary (env + doctor + verify + dependency)").option("--json","Output readiness result in JSON format").option("--strict","Exit with code 1 unless overall readiness is pass").action(async t=>{await en(t);});ce.command("autopilot <action>").description("Run end-to-end release autopilot workflows").option("--mode <mode>","Autopilot mode: audit | safe-fix | enforce","audit").option("--json","Emit machine-readable JSON output").option("--output <file>","Write autopilot report to an additional output path").option("--since <ref>","Git ref for affected project selection (default: HEAD~1)").option("--parallel","Run workspace stage execution in parallel").option("--max-workers <count>","Maximum parallel workers").action(async(t,e)=>{t!=="release"&&(console.log(s.red(`Unknown autopilot action: ${t}`)),console.log(s.gray("Available: release")),process.exit(1));let r=String(e.mode||"audit").trim().toLowerCase();["audit","safe-fix","enforce"].includes(r)||(console.log(s.red(`Invalid autopilot mode: ${e.mode}`)),console.log(s.gray("Allowed modes: audit | safe-fix | enforce")),process.exit(1));let o=Number(e.maxWorkers??""),n=Number.isFinite(o)?Math.max(1,Math.trunc(o)):void 0,{runAutopilotRelease:i}=await import('./autopilot-release-XRN56SCO.js'),c;try{c=await i({workspacePath:process.cwd(),mode:r,since:e.since,parallel:e.parallel===true,maxWorkers:n,json:e.json===true,output:e.output});}catch(a){let l=a instanceof Error?a.message:String(a);console.log(s.red(`Autopilot release failed: ${l}`)),process.exit(3);}e.json&&console.log(JSON.stringify(c,null,2)),c.summary.exitCode!==0&&process.exit(c.summary.exitCode);});ce.command("import <source>").description("Import a local backend project folder or clone a git repository into the current workspace").option("--workspace <path>","Workspace root path (defaults to nearest RapidKit workspace)").option("--name <projectName>","Override imported project folder name").option("--git","Force source to be treated as a git repository URL").option("--json","Emit machine-readable JSON output").action(async(t,e)=>{let r=await ga(t,e);r!==0&&process.exit(r);});var rr=ce.command("snapshot").description("Create, list, and restore RapidKit workspace snapshots");rr.command("create [name]").description("Create a recoverable workspace snapshot").option("--workspace <path>","Workspace root path (defaults to nearest RapidKit workspace)").option("--reason <text>","Reason recorded in the snapshot manifest").option("--include-projects","Include project source files in the snapshot").option("--json","Emit machine-readable JSON output").action(async(t,e)=>{try{let r=await dt({workspacePath:e.workspace,name:t,reason:e.reason,includeProjects:e.includeProjects===true});if(e.json){console.log(JSON.stringify(r,null,2));return}console.log(s.green(`\u2714 Workspace snapshot created: ${r.manifest.name}`)),console.log(s.gray(` Mode: ${r.manifest.mode}`)),console.log(s.gray(` Path: ${r.snapshotPath}`));}catch(r){console.log(s.red(`\u274C Snapshot create failed: ${r.message}`)),process.exit(1);}});rr.command("list").description("List workspace snapshots").option("--workspace <path>","Workspace root path (defaults to nearest RapidKit workspace)").option("--json","Emit machine-readable JSON output").action(async t=>{try{let e=await vn({workspacePath:t.workspace});if(t.json){console.log(JSON.stringify({snapshots:e},null,2));return}if(e.length===0){console.log(s.yellow("No workspace snapshots found."));return}for(let r of e)console.log(s.cyan(r.name)),console.log(s.gray(` ${r.createdAt} | ${r.mode} | ${r.projects.length} project(s)`)),console.log(s.gray(` ${r.snapshotPath}`));}catch(e){console.log(s.red(`\u274C Snapshot list failed: ${e.message}`)),process.exit(1);}});rr.command("inspect <name>").description("Inspect snapshot manifest and estimated payload size").option("--workspace <path>","Workspace root path (defaults to nearest RapidKit workspace)").option("--json","Emit machine-readable JSON output").action(async(t,e)=>{try{let r=await kn({workspacePath:e.workspace,name:t});if(e.json){console.log(JSON.stringify(r,null,2));return}console.log(s.cyan(`Snapshot: ${r.manifest.name}`)),console.log(s.gray(` Mode: ${r.manifest.mode}`)),console.log(s.gray(` Created: ${r.manifest.createdAt}`)),console.log(s.gray(` Projects: ${r.manifest.projects.length}`)),console.log(s.gray(` Files: ${r.estimatedFileCount}`)),console.log(s.gray(` Bytes: ${r.estimatedBytes}`)),console.log(s.gray(` Path: ${r.snapshotPath}`));}catch(r){console.log(s.red(`\u274C Snapshot inspect failed: ${r.message}`)),process.exit(1);}});rr.command("restore <name>").description("Restore a workspace snapshot").option("--workspace <path>","Workspace root path (defaults to nearest RapidKit workspace)").option("--reason <text>","Reason recorded in the audit log").option("--dry-run","Show what would be restored without changing files").option("--force","Required to apply a restore").option("--no-safety-snapshot","Do not create a pre-restore metadata snapshot").option("--json","Emit machine-readable JSON output").action(async(t,e)=>{try{let r=await Pn({workspacePath:e.workspace,name:t,reason:e.reason,dryRun:e.dryRun===true||process.argv.includes("--dry-run"),force:e.force===true,safetySnapshot:e.safetySnapshot});if(e.json){console.log(JSON.stringify(r,null,2));return}r.dryRun?console.log(s.cyan(`Snapshot restore dry-run: ${t}`)):console.log(s.green(`\u2714 Workspace snapshot restored: ${t}`)),console.log(s.gray(` Snapshot: ${r.snapshotPath}`)),console.log(s.gray(` Restored paths: ${r.restoredPaths.join(", ")}`)),r.safetySnapshotPath&&console.log(s.gray(` Safety snapshot: ${r.safetySnapshotPath}`));}catch(r){console.log(s.red(`\u274C Snapshot restore failed: ${r.message}`)),process.exit(1);}});var _t=ce.command("project").description("Safe workspace project lifecycle operations");_t.command("commands").description("Show effective commands supported by the current RapidKit project").option("--json","Emit machine-readable JSON output").action(async t=>{Yn({json:t.json});});_t.command("archives").description("List archived workspace projects").option("--workspace <path>","Workspace root path (defaults to nearest RapidKit workspace)").option("--json","Emit machine-readable JSON output").action(async t=>{try{let e=await $r({workspacePath:t.workspace});if(t.json){console.log(JSON.stringify({archives:e},null,2));return}if(e.length===0){console.log(s.yellow("No archived projects found."));return}for(let r of e)console.log(s.cyan(r.projectName)),console.log(s.gray(` Archived: ${r.archivedAt}`)),console.log(s.gray(` Path: ${r.archivePath}`)),r.reason&&console.log(s.gray(` Reason: ${r.reason}`));}catch(e){console.log(s.red(`\u274C Project archive list failed: ${e.message}`)),process.exit(1);}});_t.command("archive <project>").description("Move a project into .rapidkit/archive with a safety snapshot").option("--workspace <path>","Workspace root path (defaults to nearest RapidKit workspace)").option("--reason <text>","Reason recorded in the archive manifest").option("--dry-run","Show what would be archived without changing files").option("--json","Emit machine-readable JSON output").action(async(t,e)=>{try{let r=await Or({workspacePath:e.workspace,project:t,reason:e.reason,dryRun:e.dryRun===true||process.argv.includes("--dry-run")});if(e.json){console.log(JSON.stringify(r,null,2));return}console.log(r.dryRun?s.cyan(`Project archive dry-run: ${r.projectName}`):s.green(`\u2714 Project archived: ${r.projectName}`)),console.log(s.gray(` From: ${r.projectPath}`)),r.archivePath&&console.log(s.gray(` To: ${r.archivePath}`)),r.safetySnapshotPath&&console.log(s.gray(` Safety snapshot: ${r.safetySnapshotPath}`));}catch(r){console.log(s.red(`\u274C Project archive failed: ${r.message}`)),process.exit(1);}});_t.command("restore <archive>").description("Restore an archived project back into the workspace").option("--workspace <path>","Workspace root path (defaults to nearest RapidKit workspace)").option("--name <projectName>","Restore using a new project folder name").option("--reason <text>","Reason recorded in the audit log").option("--force","Overwrite an existing restore target").option("--dry-run","Show what would be restored without changing files").option("--json","Emit machine-readable JSON output").action(async(t,e)=>{try{let r=await Cn({workspacePath:e.workspace,archive:t,targetName:e.name,reason:e.reason,force:e.force===true,dryRun:e.dryRun===true});if(e.json){console.log(JSON.stringify(r,null,2));return}console.log(r.dryRun?s.cyan(`Project restore dry-run: ${r.projectName}`):s.green(`\u2714 Project restored: ${r.projectName}`)),console.log(s.gray(` From: ${r.archivePath}`)),console.log(s.gray(` To: ${r.projectPath}`)),r.safetySnapshotPath&&console.log(s.gray(` Safety snapshot: ${r.safetySnapshotPath}`));}catch(r){console.log(s.red(`\u274C Project restore failed: ${r.message}`)),process.exit(1);}});_t.command("delete <project>").description("Archive by default; permanently delete only with --permanent and exact --confirm").option("--workspace <path>","Workspace root path (defaults to nearest RapidKit workspace)").option("--reason <text>","Reason recorded in the safety snapshot/archive manifest").option("--permanent","Permanently delete the project directory").option("--confirm <projectName>","Required exact project name for --permanent").option("--dry-run","Show what would be deleted without changing files").option("--json","Emit machine-readable JSON output").action(async(t,e)=>{try{let r=await xn({workspacePath:e.workspace,project:t,reason:e.reason,permanent:e.permanent===true,confirm:e.confirm,dryRun:e.dryRun===true||process.argv.includes("--dry-run")});if(e.json){console.log(JSON.stringify(r,null,2));return}let o=r.action==="archive"?"archived":"deleted";console.log(r.dryRun?s.cyan(`Project ${o} dry-run: ${r.projectName}`):s.green(`\u2714 Project ${o}: ${r.projectName}`)),console.log(s.gray(` Path: ${r.projectPath}`)),r.archivePath&&console.log(s.gray(` Archive: ${r.archivePath}`)),r.safetySnapshotPath&&console.log(s.gray(` Safety snapshot: ${r.safetySnapshotPath}`));}catch(r){console.log(s.red(`\u274C Project delete failed: ${r.message}`)),process.exit(1);}});ce.command("doctor [scope]").description("\u{1FA7A} Check RapidKit system health by default; use workspace or project for scoped checks").option("--workspace","Check entire workspace (including all projects)").option("--project","Check only the current project (or nearest parent project)").option("--json","Output results in JSON format (for CI/CD pipelines)").option("--fix","Automatically fix common issues (with confirmation)").option("--plan","Generate remediation plan without applying changes").option("--apply","Apply remediation plan non-interactively").action(async(t,e)=>{t&&t!=="workspace"&&t!=="project"&&(console.log(s.red(`Unknown doctor scope: ${t}`)),console.log(s.gray("Available: workspace, project")),console.log(s.gray("Usage: npx rapidkit doctor | npx rapidkit doctor workspace | npx rapidkit doctor project")),process.exit(1)),e.plan&&(e.fix||e.apply)&&(console.log(s.red("Invalid doctor flags: --plan cannot be combined with --fix or --apply")),process.exit(1));let r=await ca({scope:t,workspaceFlag:e.workspace});r.detected&&!e.json&&(console.log(s.yellow("\u26A0\uFE0F Local launcher shadow detected for doctor workspace checks.")),r.candidatePath&&console.log(s.gray(` Candidate: ${r.candidatePath}`)),console.log(s.gray(" Running npm-wrapper doctor workflow directly as safe fallback to avoid ambiguous rapidkit binary resolution.")),console.log(s.gray(" If this happens in a shell call, run: npx --yes --package rapidkit rapidkit doctor workspace")));let{runDoctor:o}=await import('./doctor-SGPUU7UT.js');await o({...e,workspace:e.workspace||t==="workspace",project:e.project||t==="project"});});ce.command("workspace <action> [subaction] [key] [value]").description(`Manage RapidKit workspaces (list, sync, policy, share, export, hydrate, run)
256
+ \u274C An unexpected error occurred:`),console.error(r)),process.exit(1);}finally{ze=null;}});To(ce);Lo(ce);ce.command("commands").description("Show effective RapidKit command ownership and runtime support").option("--json","Emit machine-readable JSON output").action(async t=>{aa({json:t.json});});ce.command("analyze").description("Analyze workspace/project health and generate enterprise-ready evidence").option("--workspace <path>","Workspace/root path to analyze").option("--json","Output as JSON").option("--output <file>","Write JSON report to a file").option("--strict","Treat warnings as blocking in the verdict").action(async t=>{try{let{runAnalyze:e,printAnalyzeReport:r}=await import('./analyze-ZQHLV2YK.js'),o=await e({workspacePath:t.workspace,json:t.json===true,output:t.output,strict:t.strict===true});t.json?console.log(JSON.stringify(o,null,2)):r(o),o.summary.verdict==="blocked"&&process.exit(2);}catch(e){let r=e instanceof Error?e.message:String(e);t.json?console.log(JSON.stringify({schemaVersion:"rapidkit-analyze-error-v1",ok:false,error:{message:r}},null,2)):console.error(s.red(`Analyze failed: ${r}`)),process.exit(1);}});yo(ce);ce.command("shell <action>").description("Shell helpers (activate virtualenv in current shell)").action(async t=>{t!=="activate"&&(console.log(s.red(`Unknown shell command: ${t}`)),process.exit(1));let e=process.cwd();function r(l){let u=l;for(;;){let p=y__default.join(u,".rapidkit","context.json");if(P.existsSync(p))return p;let d=y__default.dirname(u);if(d===u)break;u=d;}return null}let o=r(e);function n(l){let u=l;for(;;){let p=y__default.join(u,".venv"),d=y__default.join(u,".rapidkit","activate");if(P.existsSync(d)||P.existsSync(p))return {venv:p,activateFile:d};let f=y__default.dirname(u);if(f===u)break;u=f;}return null}let i=n(e);!o&&!i&&(console.log(s.yellow("No RapidKit project found in this directory")),process.exit(1));let c;i&&P.existsSync(i.activateFile)?c=i.activateFile:i&&P.existsSync(i.venv)?c=h(i.venv):(console.log(s.yellow("No virtual environment found")),process.exit(1));let a$1=a();console.log(a$1?`call "${c}"`:`. "${c}"`);});ce.command("readiness").description("\u{1F6A6} Generate machine-readable release readiness summary (env + doctor + verify + dependency)").option("--json","Output readiness result in JSON format").option("--strict","Exit with code 1 unless overall readiness is pass").action(async t=>{await en(t);});ce.command("autopilot <action>").description("Run end-to-end release autopilot workflows").option("--mode <mode>","Autopilot mode: audit | safe-fix | enforce","audit").option("--json","Emit machine-readable JSON output").option("--output <file>","Write autopilot report to an additional output path").option("--since <ref>","Git ref for affected project selection (default: HEAD~1)").option("--parallel","Run workspace stage execution in parallel").option("--max-workers <count>","Maximum parallel workers").action(async(t,e)=>{t!=="release"&&(console.log(s.red(`Unknown autopilot action: ${t}`)),console.log(s.gray("Available: release")),process.exit(1));let r=String(e.mode||"audit").trim().toLowerCase();["audit","safe-fix","enforce"].includes(r)||(console.log(s.red(`Invalid autopilot mode: ${e.mode}`)),console.log(s.gray("Allowed modes: audit | safe-fix | enforce")),process.exit(1));let o=Number(e.maxWorkers??""),n=Number.isFinite(o)?Math.max(1,Math.trunc(o)):void 0,{runAutopilotRelease:i}=await import('./autopilot-release-WYDX67HR.js'),c;try{c=await i({workspacePath:process.cwd(),mode:r,since:e.since,parallel:e.parallel===true,maxWorkers:n,json:e.json===true,output:e.output});}catch(a){let l=a instanceof Error?a.message:String(a);console.log(s.red(`Autopilot release failed: ${l}`)),process.exit(3);}e.json&&console.log(JSON.stringify(c,null,2)),c.summary.exitCode!==0&&process.exit(c.summary.exitCode);});ce.command("import <source>").description("Import a local backend project folder or clone a git repository into the current workspace").option("--workspace <path>","Workspace root path (defaults to nearest RapidKit workspace)").option("--name <projectName>","Override imported project folder name").option("--git","Force source to be treated as a git repository URL").option("--json","Emit machine-readable JSON output").action(async(t,e)=>{let r=await ga(t,e);r!==0&&process.exit(r);});var rr=ce.command("snapshot").description("Create, list, and restore RapidKit workspace snapshots");rr.command("create [name]").description("Create a recoverable workspace snapshot").option("--workspace <path>","Workspace root path (defaults to nearest RapidKit workspace)").option("--reason <text>","Reason recorded in the snapshot manifest").option("--include-projects","Include project source files in the snapshot").option("--json","Emit machine-readable JSON output").action(async(t,e)=>{try{let r=await dt({workspacePath:e.workspace,name:t,reason:e.reason,includeProjects:e.includeProjects===true});if(e.json){console.log(JSON.stringify(r,null,2));return}console.log(s.green(`\u2714 Workspace snapshot created: ${r.manifest.name}`)),console.log(s.gray(` Mode: ${r.manifest.mode}`)),console.log(s.gray(` Path: ${r.snapshotPath}`));}catch(r){console.log(s.red(`\u274C Snapshot create failed: ${r.message}`)),process.exit(1);}});rr.command("list").description("List workspace snapshots").option("--workspace <path>","Workspace root path (defaults to nearest RapidKit workspace)").option("--json","Emit machine-readable JSON output").action(async t=>{try{let e=await vn({workspacePath:t.workspace});if(t.json){console.log(JSON.stringify({snapshots:e},null,2));return}if(e.length===0){console.log(s.yellow("No workspace snapshots found."));return}for(let r of e)console.log(s.cyan(r.name)),console.log(s.gray(` ${r.createdAt} | ${r.mode} | ${r.projects.length} project(s)`)),console.log(s.gray(` ${r.snapshotPath}`));}catch(e){console.log(s.red(`\u274C Snapshot list failed: ${e.message}`)),process.exit(1);}});rr.command("inspect <name>").description("Inspect snapshot manifest and estimated payload size").option("--workspace <path>","Workspace root path (defaults to nearest RapidKit workspace)").option("--json","Emit machine-readable JSON output").action(async(t,e)=>{try{let r=await kn({workspacePath:e.workspace,name:t});if(e.json){console.log(JSON.stringify(r,null,2));return}console.log(s.cyan(`Snapshot: ${r.manifest.name}`)),console.log(s.gray(` Mode: ${r.manifest.mode}`)),console.log(s.gray(` Created: ${r.manifest.createdAt}`)),console.log(s.gray(` Projects: ${r.manifest.projects.length}`)),console.log(s.gray(` Files: ${r.estimatedFileCount}`)),console.log(s.gray(` Bytes: ${r.estimatedBytes}`)),console.log(s.gray(` Path: ${r.snapshotPath}`));}catch(r){console.log(s.red(`\u274C Snapshot inspect failed: ${r.message}`)),process.exit(1);}});rr.command("restore <name>").description("Restore a workspace snapshot").option("--workspace <path>","Workspace root path (defaults to nearest RapidKit workspace)").option("--reason <text>","Reason recorded in the audit log").option("--dry-run","Show what would be restored without changing files").option("--force","Required to apply a restore").option("--no-safety-snapshot","Do not create a pre-restore metadata snapshot").option("--json","Emit machine-readable JSON output").action(async(t,e)=>{try{let r=await Pn({workspacePath:e.workspace,name:t,reason:e.reason,dryRun:e.dryRun===true||process.argv.includes("--dry-run"),force:e.force===true,safetySnapshot:e.safetySnapshot});if(e.json){console.log(JSON.stringify(r,null,2));return}r.dryRun?console.log(s.cyan(`Snapshot restore dry-run: ${t}`)):console.log(s.green(`\u2714 Workspace snapshot restored: ${t}`)),console.log(s.gray(` Snapshot: ${r.snapshotPath}`)),console.log(s.gray(` Restored paths: ${r.restoredPaths.join(", ")}`)),r.safetySnapshotPath&&console.log(s.gray(` Safety snapshot: ${r.safetySnapshotPath}`));}catch(r){console.log(s.red(`\u274C Snapshot restore failed: ${r.message}`)),process.exit(1);}});var _t=ce.command("project").description("Safe workspace project lifecycle operations");_t.command("commands").description("Show effective commands supported by the current RapidKit project").option("--json","Emit machine-readable JSON output").action(async t=>{Yn({json:t.json});});_t.command("archives").description("List archived workspace projects").option("--workspace <path>","Workspace root path (defaults to nearest RapidKit workspace)").option("--json","Emit machine-readable JSON output").action(async t=>{try{let e=await $r({workspacePath:t.workspace});if(t.json){console.log(JSON.stringify({archives:e},null,2));return}if(e.length===0){console.log(s.yellow("No archived projects found."));return}for(let r of e)console.log(s.cyan(r.projectName)),console.log(s.gray(` Archived: ${r.archivedAt}`)),console.log(s.gray(` Path: ${r.archivePath}`)),r.reason&&console.log(s.gray(` Reason: ${r.reason}`));}catch(e){console.log(s.red(`\u274C Project archive list failed: ${e.message}`)),process.exit(1);}});_t.command("archive <project>").description("Move a project into .rapidkit/archive with a safety snapshot").option("--workspace <path>","Workspace root path (defaults to nearest RapidKit workspace)").option("--reason <text>","Reason recorded in the archive manifest").option("--dry-run","Show what would be archived without changing files").option("--json","Emit machine-readable JSON output").action(async(t,e)=>{try{let r=await Or({workspacePath:e.workspace,project:t,reason:e.reason,dryRun:e.dryRun===true||process.argv.includes("--dry-run")});if(e.json){console.log(JSON.stringify(r,null,2));return}console.log(r.dryRun?s.cyan(`Project archive dry-run: ${r.projectName}`):s.green(`\u2714 Project archived: ${r.projectName}`)),console.log(s.gray(` From: ${r.projectPath}`)),r.archivePath&&console.log(s.gray(` To: ${r.archivePath}`)),r.safetySnapshotPath&&console.log(s.gray(` Safety snapshot: ${r.safetySnapshotPath}`));}catch(r){console.log(s.red(`\u274C Project archive failed: ${r.message}`)),process.exit(1);}});_t.command("restore <archive>").description("Restore an archived project back into the workspace").option("--workspace <path>","Workspace root path (defaults to nearest RapidKit workspace)").option("--name <projectName>","Restore using a new project folder name").option("--reason <text>","Reason recorded in the audit log").option("--force","Overwrite an existing restore target").option("--dry-run","Show what would be restored without changing files").option("--json","Emit machine-readable JSON output").action(async(t,e)=>{try{let r=await Cn({workspacePath:e.workspace,archive:t,targetName:e.name,reason:e.reason,force:e.force===true,dryRun:e.dryRun===true});if(e.json){console.log(JSON.stringify(r,null,2));return}console.log(r.dryRun?s.cyan(`Project restore dry-run: ${r.projectName}`):s.green(`\u2714 Project restored: ${r.projectName}`)),console.log(s.gray(` From: ${r.archivePath}`)),console.log(s.gray(` To: ${r.projectPath}`)),r.safetySnapshotPath&&console.log(s.gray(` Safety snapshot: ${r.safetySnapshotPath}`));}catch(r){console.log(s.red(`\u274C Project restore failed: ${r.message}`)),process.exit(1);}});_t.command("delete <project>").description("Archive by default; permanently delete only with --permanent and exact --confirm").option("--workspace <path>","Workspace root path (defaults to nearest RapidKit workspace)").option("--reason <text>","Reason recorded in the safety snapshot/archive manifest").option("--permanent","Permanently delete the project directory").option("--confirm <projectName>","Required exact project name for --permanent").option("--dry-run","Show what would be deleted without changing files").option("--json","Emit machine-readable JSON output").action(async(t,e)=>{try{let r=await xn({workspacePath:e.workspace,project:t,reason:e.reason,permanent:e.permanent===true,confirm:e.confirm,dryRun:e.dryRun===true||process.argv.includes("--dry-run")});if(e.json){console.log(JSON.stringify(r,null,2));return}let o=r.action==="archive"?"archived":"deleted";console.log(r.dryRun?s.cyan(`Project ${o} dry-run: ${r.projectName}`):s.green(`\u2714 Project ${o}: ${r.projectName}`)),console.log(s.gray(` Path: ${r.projectPath}`)),r.archivePath&&console.log(s.gray(` Archive: ${r.archivePath}`)),r.safetySnapshotPath&&console.log(s.gray(` Safety snapshot: ${r.safetySnapshotPath}`));}catch(r){console.log(s.red(`\u274C Project delete failed: ${r.message}`)),process.exit(1);}});ce.command("doctor [scope]").description("\u{1FA7A} Check RapidKit system health by default; use workspace or project for scoped checks").option("--workspace","Check entire workspace (including all projects)").option("--project","Check only the current project (or nearest parent project)").option("--json","Output results in JSON format (for CI/CD pipelines)").option("--fix","Automatically fix common issues (with confirmation)").option("--plan","Generate remediation plan without applying changes").option("--apply","Apply remediation plan non-interactively").action(async(t,e)=>{t&&t!=="workspace"&&t!=="project"&&(console.log(s.red(`Unknown doctor scope: ${t}`)),console.log(s.gray("Available: workspace, project")),console.log(s.gray("Usage: npx rapidkit doctor | npx rapidkit doctor workspace | npx rapidkit doctor project")),process.exit(1)),e.plan&&(e.fix||e.apply)&&(console.log(s.red("Invalid doctor flags: --plan cannot be combined with --fix or --apply")),process.exit(1));let r=await ca({scope:t,workspaceFlag:e.workspace});r.detected&&!e.json&&(console.log(s.yellow("\u26A0\uFE0F Local launcher shadow detected for doctor workspace checks.")),r.candidatePath&&console.log(s.gray(` Candidate: ${r.candidatePath}`)),console.log(s.gray(" Running npm-wrapper doctor workflow directly as safe fallback to avoid ambiguous rapidkit binary resolution.")),console.log(s.gray(" If this happens in a shell call, run: npx --yes --package rapidkit rapidkit doctor workspace")));let{runDoctor:o}=await import('./doctor-SGPUU7UT.js');await o({...e,workspace:e.workspace||t==="workspace",project:e.project||t==="project"});});ce.command("workspace <action> [subaction] [key] [value]").description(`Manage RapidKit workspaces (list, sync, policy, share, export, hydrate, run)
257
257
  workspace run <stage> \u2014 fleet stage execution across discovered projects
258
- stages: init | test | build | start (dev excluded by design)`).option("--output <file>","Output file path for workspace share bundle").option("--include-paths","Include absolute paths in workspace share bundle").option("--no-doctor","Exclude doctor evidence in workspace share bundle").option("--no-blueprint","Exclude reproducibility blueprint from workspace share bundle").option("--include-env","Include .env/private key files in workspace export archive").option("--force","Overwrite an existing hydrate output directory").option("--dry-run","Preview hydrate without writing files").option("--affected","Run only affected projects (requires git diff context)").option("--blast-radius","Include downstream dependents from workspace dependency graph").option("--since <ref>","Git ref for affected calculation (default: HEAD~1)").option("--parallel","Run project stages in parallel").option("--max-workers <count>","Maximum parallel workers (default: min(4, selected))").option("--continue-on-error","Continue running remaining projects after a failure").option("--json","Emit machine-readable JSON output").option("--strict","Return non-zero exit on warn/fail gate outcomes").option("--no-gates","Skip doctor/readiness pre-run gates").action(async function(t,e,r,o){let n=this.opts(),i=a=>{let l=H(process.cwd());l||(console.log(s.red("\u274C Not inside a RapidKit workspace")),console.log(s.gray("\u{1F4A1} Run this command from within a workspace directory")),process.exit(1));let u=y__default.resolve(process.cwd()),p=y__default.resolve(l);return u!==p&&(console.log(s.red(`\u274C Workspace action "${a}" must be run from workspace root.`)),console.log(s.gray(`\u{1F4A1} Workspace root: ${l}`)),console.log(s.white(` cd ${l}`)),(a==="run init"||a==="init")&&console.log(s.gray(" For project-only init in the current directory, run: npx rapidkit init")),process.exit(1)),l},c=a=>process.argv.includes(a);if(t==="list"){let{listWorkspaces:a}=await import('./workspace-EHYCBFXL.js');await a();}else if(t==="sync"){let a=i("sync"),{syncWorkspaceProjects:l}=await import('./workspace-EHYCBFXL.js');console.log(s.cyan(`\u{1F4C2} Scanning workspace: ${y__default.basename(a)}`)),await l(a),await pt(a);}else if(t==="policy"){let a=i("policy"),l=await Pa(a,e,r,o);l!==0&&process.exit(l);}else if(t==="contract"){let a=i("contract"),{buildWorkspaceContractGraph:l,readWorkspaceContract:u,verifyWorkspaceContract:p,writeWorkspaceContract:d,WORKSPACE_CONTRACT_PATH:f}=await import('./workspace-contract-4UCEM44I.js'),h=e||"inspect",m=n.output;try{if(h==="init"){let g=await d({workspacePath:a,outputPath:m,force:n.force===true||c("--force")});if(n.json){console.log(JSON.stringify(g,null,2));return}console.log(s.green(`\u2714 Workspace contract initialized: ${g.contractPath}`)),console.log(s.gray(` Projects: ${g.contract.projects.length}`));return}if(h==="inspect"){let g=await u({workspacePath:a,contractPath:m});if(n.json){console.log(JSON.stringify(g,null,2));return}console.log(s.green(`\u2714 Workspace contract: ${g.contractPath}`)),console.log(s.gray(` Workspace: ${g.contract.workspace.name}`)),console.log(s.gray(` Projects: ${g.contract.projects.length}`)),console.log(s.gray(` Schema: v${g.contract.schemaVersion}`));return}if(h==="verify"){let g=await p({workspacePath:a,contractPath:m});if(n.json)console.log(JSON.stringify(g,null,2));else {let b=g.status==="passed"?s.green:s.red;console.log(b(`\u2714 Workspace contract verification ${g.status}: ${g.contractPath}`)),console.log(s.gray(` Projects: ${g.projectCount}`));for(let w of g.checks){let k=w.status==="passed"?"\u2714":"\u2718";console.log(s.gray(` ${k} ${w.id}: ${w.message}`));}for(let w of g.violations)console.log(s.gray(` Violation: ${w}`));}(g.status==="failed"||g.status!=="passed"&&n.strict)&&process.exit(1);return}if(h==="graph"){let g=await l({workspacePath:a,contractPath:m});if(n.json){console.log(JSON.stringify(g,null,2));return}console.log(s.green(`\u2714 Workspace contract graph: ${g.contractPath}`)),console.log(s.gray(` Workspace: ${g.graph.workspace.name}`)),console.log(s.gray(` Projects: ${g.graph.summary.projectCount}`)),console.log(s.gray(` Dependencies: ${g.graph.summary.dependencyEdges}`)),console.log(s.gray(` Event links: ${g.graph.summary.eventEdges}`)),console.log(s.gray(` Ports: ${g.graph.summary.portCount}`));for(let b of g.graph.nodes){let w=b.ports.map(k=>`${k.name}:${k.port}`).join(", ")||"none";console.log(s.gray(` \u2022 ${b.id} (${b.runtime||"unknown"}${b.framework?`/${b.framework}`:""}) ports=${w}`));}for(let b of g.graph.edges){let w=b.type==="event"?`event:${b.label}`:b.label;console.log(s.gray(` ${b.from} -> ${b.to} [${w}]`));}return}console.log(s.red(`\u274C Unknown workspace contract action: ${h}`)),console.log(s.white(` npx rapidkit workspace contract init|inspect|verify|graph [--output ${f}]`)),process.exit(1);}catch(g){console.log(s.red(`\u274C Workspace contract ${h} failed: ${g.message}`)),process.exit(1);}}else if(t==="share"){let a=i("share"),l=n.output||e,{createWorkspaceShareBundle:u}=await import('./workspace-EHYCBFXL.js'),p=await u(a,{outputPath:l,includePaths:n.includePaths===true,includeDoctorEvidence:n.doctor!==false,includeBlueprint:n.blueprint!==false});console.log(s.green(`\u2714 Workspace share bundle exported: ${p}`)),console.log(s.gray("Share this JSON with your team for reproducible workspace/project diagnostics."));}else if(t==="export"){let a=i("export"),{exportWorkspaceArchive:l}=await import('./workspace-archive-EJIGYKSR.js'),u=await l({workspacePath:a,outputPath:n.output||e,includeEnv:n.includeEnv===true||c("--include-env")});if(n.json){console.log(JSON.stringify(u,null,2));return}let p=(u.bytesWritten/(1024*1024)).toFixed(2);console.log(s.green(`\u2714 Workspace archive exported: ${u.archivePath}`)),console.log(s.gray(` Files: ${u.manifest.files.length}`)),console.log(s.gray(` Size: ${p} MB`)),u.manifest.security.envFilesIncluded||console.log(s.gray(" Secrets: excluded (.env, private keys, logs, dependency caches)"));}else if(t==="archive"&&(e==="inspect"||e==="verify"||e==="doctor")){let a=r;a||(console.log(s.red(`\u274C workspace archive ${e} requires an archive path or URL.`)),console.log(s.white(` npx rapidkit workspace archive ${e} team.rapidkit-archive.zip`)),process.exit(1));let{doctorWorkspaceArchive:l,inspectWorkspaceArchive:u,verifyWorkspaceArchive:p}=await import('./workspace-archive-EJIGYKSR.js');try{if(e==="inspect"){let f=await u({archivePathOrUrl:a});if(n.json){console.log(JSON.stringify(f,null,2));return}let h=(f.totalBytes/(1024*1024)).toFixed(2);console.log(s.green(`\u2714 Workspace archive: ${f.archivePath}`)),console.log(s.gray(` Workspace: ${f.manifest.workspaceName}`)),console.log(s.gray(` Exported: ${f.manifest.exportedAt}`)),console.log(s.gray(` Exporter: ${f.manifest.exportedBy||"unknown"}`)),console.log(s.gray(` Files: ${f.fileCount}`)),console.log(s.gray(` Payload: ${h} MB`));return}if(e==="doctor"){let f=await l({archivePathOrUrl:a,strict:n.strict===true||c("--strict")});if(n.json)console.log(JSON.stringify(f,null,2));else {let h=f.status==="passed"?s.green:f.status==="warning"?s.yellow:s.red;console.log(h(`\u2714 Workspace archive doctor ${f.status}: ${f.archivePath}`)),console.log(s.gray(` Workspace: ${f.workspaceName}`)),console.log(s.gray(` Files: ${f.fileCount}`));for(let m of f.checks){let g=m.status==="passed"?"\u2714":m.status==="warning"?"\u26A0":"\u2718";console.log(s.gray(` ${g} ${m.id}: ${m.message}`));}for(let m of f.recommendedActions)console.log(s.gray(` Next: ${m}`));}(f.status==="failed"||f.status==="warning"&&n.strict)&&process.exit(1);return}let d=await p({archivePathOrUrl:a,requireChecksums:n.strict===true||c("--strict")});if(n.json)console.log(JSON.stringify(d,null,2));else if(d.status==="passed")console.log(s.green(`\u2714 Workspace archive verified: ${d.archivePath}`)),console.log(s.gray(` Files: ${d.verifiedFiles}/${d.fileCount}`));else {let f=d.status==="failed"?s.red:s.yellow;console.log(f(`\u274C Workspace archive verification ${d.status}: ${d.archivePath}`)),d.missingArchiveEntries.length&&console.log(s.gray(` Missing entries: ${d.missingArchiveEntries.join(", ")}`)),d.extraArchiveEntries.length&&console.log(s.gray(` Unexpected entries: ${d.extraArchiveEntries.join(", ")}`)),d.mismatches.length&&console.log(s.gray(` Mismatches: ${d.mismatches.map(h=>h.path).join(", ")}`)),d.missingChecksumFiles.length&&console.log(s.gray(` Missing checksums: ${d.missingChecksumFiles.join(", ")}`));}(d.status==="failed"||d.status==="warning"&&n.strict)&&process.exit(1);}catch(d){console.log(s.red(`\u274C Workspace archive ${e} failed: ${d.message}`)),process.exit(1);}}else if(t==="hydrate"||t==="import"){let a=e;a||(console.log(s.red(`\u274C workspace ${t} requires an archive path or URL.`)),console.log(s.white(` npx rapidkit workspace ${t} team.rapidkit-archive.zip --output ./team`)),process.exit(1));let{hydrateWorkspaceArchive:l}=await import('./workspace-archive-EJIGYKSR.js');try{let u=await l({archivePathOrUrl:a,outputPath:n.output,force:n.force===true||c("--force"),dryRun:n.dryRun===true||c("--dry-run"),strict:n.strict===true||c("--strict")});if(n.json){console.log(JSON.stringify(u,null,2));return}console.log(s.green(u.dryRun?`\u2714 Workspace archive hydrate preview: ${u.outputPath}`:`\u2714 Workspace archive hydrated: ${u.outputPath}`)),console.log(s.gray(` Files: ${u.files.length}`)),u.manifest?.workspaceName&&console.log(s.gray(` Workspace: ${u.manifest.workspaceName}`));}catch(u){console.log(s.red(`\u274C Workspace ${t} failed: ${u.message}`)),process.exit(1);}}else if(t==="run"){let a=i(`run ${e||""}`.trim());(!e||!["init","test","build","start"].includes(e))&&(console.log(s.red(`Unknown workspace run stage: ${e||"(none provided)"}`)),console.log(s.gray("Available stages: init | test | build | start")),console.log(s.gray(" \u2022 init \u2014 run install/bootstrap across the project fleet")),console.log(s.gray(" \u2022 test \u2014 run test suite across selected projects")),console.log(s.gray(" \u2022 build \u2014 compile/package across selected projects")),console.log(s.gray(" \u2022 start \u2014 start services (smoke/e2e scenarios)")),console.log(s.gray(" Note: dev is excluded \u2014 it is a local-only primitive, not a CI stage")),process.exit(2));let l=Number(n.maxWorkers??""),u=Number.isFinite(l)?Math.max(1,Math.trunc(l)):void 0;if(e==="init"){let f=await Lr(a);f!==0&&process.exit(f);}let{runWorkspaceStage:p}=await import('./workspace-run-OVDAQG4F.js'),d=await p({workspacePath:a,stage:e,affected:n.affected===true,blastRadius:n.blastRadius===true,since:n.since,parallel:n.parallel===true,maxWorkers:u,continueOnError:n.continueOnError===true,strict:n.strict===true,json:n.json===true,enforceGates:n.gates});n.json&&console.log(JSON.stringify(d,null,2)),d.summary.exitCode!==0&&process.exit(d.summary.exitCode);}else if(t==="init"){console.log(s.yellow("\u2139 workspace init is an alias of: npx rapidkit workspace run init")),console.log(s.gray(` Equivalent full-init aliases at workspace root:
258
+ stages: init | test | build | start (dev excluded by design)`).option("--output <file>","Output file path for workspace share bundle").option("--include-paths","Include absolute paths in workspace share bundle").option("--no-doctor","Exclude doctor evidence in workspace share bundle").option("--no-blueprint","Exclude reproducibility blueprint from workspace share bundle").option("--include-env","Include .env/private key files in workspace export archive").option("--force","Overwrite an existing hydrate output directory").option("--dry-run","Preview hydrate without writing files").option("--affected","Run only affected projects (requires git diff context)").option("--blast-radius","Include downstream dependents from workspace dependency graph").option("--since <ref>","Git ref for affected calculation (default: HEAD~1)").option("--parallel","Run project stages in parallel").option("--max-workers <count>","Maximum parallel workers (default: min(4, selected))").option("--continue-on-error","Continue running remaining projects after a failure").option("--json","Emit machine-readable JSON output").option("--strict","Return non-zero exit on warn/fail gate outcomes").option("--no-gates","Skip doctor/readiness pre-run gates").action(async function(t,e,r,o){let n=this.opts(),i=a=>{let l=H(process.cwd());l||(console.log(s.red("\u274C Not inside a RapidKit workspace")),console.log(s.gray("\u{1F4A1} Run this command from within a workspace directory")),process.exit(1));let u=y__default.resolve(process.cwd()),p=y__default.resolve(l);return u!==p&&(console.log(s.red(`\u274C Workspace action "${a}" must be run from workspace root.`)),console.log(s.gray(`\u{1F4A1} Workspace root: ${l}`)),console.log(s.white(` cd ${l}`)),(a==="run init"||a==="init")&&console.log(s.gray(" For project-only init in the current directory, run: npx rapidkit init")),process.exit(1)),l},c=a=>process.argv.includes(a);if(t==="list"){let{listWorkspaces:a}=await import('./workspace-EHYCBFXL.js');await a();}else if(t==="sync"){let a=i("sync"),{syncWorkspaceProjects:l}=await import('./workspace-EHYCBFXL.js');console.log(s.cyan(`\u{1F4C2} Scanning workspace: ${y__default.basename(a)}`)),await l(a),await pt(a);}else if(t==="policy"){let a=i("policy"),l=await Pa(a,e,r,o);l!==0&&process.exit(l);}else if(t==="contract"){let a=i("contract"),{buildWorkspaceContractGraph:l,readWorkspaceContract:u,verifyWorkspaceContract:p,writeWorkspaceContract:d,WORKSPACE_CONTRACT_PATH:f}=await import('./workspace-contract-4UCEM44I.js'),h=e||"inspect",m=n.output;try{if(h==="init"){let g=await d({workspacePath:a,outputPath:m,force:n.force===true||c("--force")});if(n.json){console.log(JSON.stringify(g,null,2));return}console.log(s.green(`\u2714 Workspace contract initialized: ${g.contractPath}`)),console.log(s.gray(` Projects: ${g.contract.projects.length}`));return}if(h==="inspect"){let g=await u({workspacePath:a,contractPath:m});if(n.json){console.log(JSON.stringify(g,null,2));return}console.log(s.green(`\u2714 Workspace contract: ${g.contractPath}`)),console.log(s.gray(` Workspace: ${g.contract.workspace.name}`)),console.log(s.gray(` Projects: ${g.contract.projects.length}`)),console.log(s.gray(` Schema: v${g.contract.schemaVersion}`));return}if(h==="verify"){let g=await p({workspacePath:a,contractPath:m});if(n.json)console.log(JSON.stringify(g,null,2));else {let b=g.status==="passed"?s.green:s.red;console.log(b(`\u2714 Workspace contract verification ${g.status}: ${g.contractPath}`)),console.log(s.gray(` Projects: ${g.projectCount}`));for(let w of g.checks){let k=w.status==="passed"?"\u2714":"\u2718";console.log(s.gray(` ${k} ${w.id}: ${w.message}`));}for(let w of g.violations)console.log(s.gray(` Violation: ${w}`));}(g.status==="failed"||g.status!=="passed"&&n.strict)&&process.exit(1);return}if(h==="graph"){let g=await l({workspacePath:a,contractPath:m});if(n.json){console.log(JSON.stringify(g,null,2));return}console.log(s.green(`\u2714 Workspace contract graph: ${g.contractPath}`)),console.log(s.gray(` Workspace: ${g.graph.workspace.name}`)),console.log(s.gray(` Projects: ${g.graph.summary.projectCount}`)),console.log(s.gray(` Dependencies: ${g.graph.summary.dependencyEdges}`)),console.log(s.gray(` Event links: ${g.graph.summary.eventEdges}`)),console.log(s.gray(` Ports: ${g.graph.summary.portCount}`));for(let b of g.graph.nodes){let w=b.ports.map(k=>`${k.name}:${k.port}`).join(", ")||"none";console.log(s.gray(` \u2022 ${b.id} (${b.runtime||"unknown"}${b.framework?`/${b.framework}`:""}) ports=${w}`));}for(let b of g.graph.edges){let w=b.type==="event"?`event:${b.label}`:b.label;console.log(s.gray(` ${b.from} -> ${b.to} [${w}]`));}return}console.log(s.red(`\u274C Unknown workspace contract action: ${h}`)),console.log(s.white(` npx rapidkit workspace contract init|inspect|verify|graph [--output ${f}]`)),process.exit(1);}catch(g){console.log(s.red(`\u274C Workspace contract ${h} failed: ${g.message}`)),process.exit(1);}}else if(t==="share"){let a=i("share"),l=n.output||e,{createWorkspaceShareBundle:u}=await import('./workspace-EHYCBFXL.js'),p=await u(a,{outputPath:l,includePaths:n.includePaths===true,includeDoctorEvidence:n.doctor!==false,includeBlueprint:n.blueprint!==false});console.log(s.green(`\u2714 Workspace share bundle exported: ${p}`)),console.log(s.gray("Share this JSON with your team for reproducible workspace/project diagnostics."));}else if(t==="export"){let a=i("export"),{exportWorkspaceArchive:l}=await import('./workspace-archive-EJIGYKSR.js'),u=await l({workspacePath:a,outputPath:n.output||e,includeEnv:n.includeEnv===true||c("--include-env")});if(n.json){console.log(JSON.stringify(u,null,2));return}let p=(u.bytesWritten/(1024*1024)).toFixed(2);console.log(s.green(`\u2714 Workspace archive exported: ${u.archivePath}`)),console.log(s.gray(` Files: ${u.manifest.files.length}`)),console.log(s.gray(` Size: ${p} MB`)),u.manifest.security.envFilesIncluded||console.log(s.gray(" Secrets: excluded (.env, private keys, logs, dependency caches)"));}else if(t==="archive"&&(e==="inspect"||e==="verify"||e==="doctor")){let a=r;a||(console.log(s.red(`\u274C workspace archive ${e} requires an archive path or URL.`)),console.log(s.white(` npx rapidkit workspace archive ${e} team.rapidkit-archive.zip`)),process.exit(1));let{doctorWorkspaceArchive:l,inspectWorkspaceArchive:u,verifyWorkspaceArchive:p}=await import('./workspace-archive-EJIGYKSR.js');try{if(e==="inspect"){let f=await u({archivePathOrUrl:a});if(n.json){console.log(JSON.stringify(f,null,2));return}let h=(f.totalBytes/(1024*1024)).toFixed(2);console.log(s.green(`\u2714 Workspace archive: ${f.archivePath}`)),console.log(s.gray(` Workspace: ${f.manifest.workspaceName}`)),console.log(s.gray(` Exported: ${f.manifest.exportedAt}`)),console.log(s.gray(` Exporter: ${f.manifest.exportedBy||"unknown"}`)),console.log(s.gray(` Files: ${f.fileCount}`)),console.log(s.gray(` Payload: ${h} MB`));return}if(e==="doctor"){let f=await l({archivePathOrUrl:a,strict:n.strict===true||c("--strict")});if(n.json)console.log(JSON.stringify(f,null,2));else {let h=f.status==="passed"?s.green:f.status==="warning"?s.yellow:s.red;console.log(h(`\u2714 Workspace archive doctor ${f.status}: ${f.archivePath}`)),console.log(s.gray(` Workspace: ${f.workspaceName}`)),console.log(s.gray(` Files: ${f.fileCount}`));for(let m of f.checks){let g=m.status==="passed"?"\u2714":m.status==="warning"?"\u26A0":"\u2718";console.log(s.gray(` ${g} ${m.id}: ${m.message}`));}for(let m of f.recommendedActions)console.log(s.gray(` Next: ${m}`));}(f.status==="failed"||f.status==="warning"&&n.strict)&&process.exit(1);return}let d=await p({archivePathOrUrl:a,requireChecksums:n.strict===true||c("--strict")});if(n.json)console.log(JSON.stringify(d,null,2));else if(d.status==="passed")console.log(s.green(`\u2714 Workspace archive verified: ${d.archivePath}`)),console.log(s.gray(` Files: ${d.verifiedFiles}/${d.fileCount}`));else {let f=d.status==="failed"?s.red:s.yellow;console.log(f(`\u274C Workspace archive verification ${d.status}: ${d.archivePath}`)),d.missingArchiveEntries.length&&console.log(s.gray(` Missing entries: ${d.missingArchiveEntries.join(", ")}`)),d.extraArchiveEntries.length&&console.log(s.gray(` Unexpected entries: ${d.extraArchiveEntries.join(", ")}`)),d.mismatches.length&&console.log(s.gray(` Mismatches: ${d.mismatches.map(h=>h.path).join(", ")}`)),d.missingChecksumFiles.length&&console.log(s.gray(` Missing checksums: ${d.missingChecksumFiles.join(", ")}`));}(d.status==="failed"||d.status==="warning"&&n.strict)&&process.exit(1);}catch(d){console.log(s.red(`\u274C Workspace archive ${e} failed: ${d.message}`)),process.exit(1);}}else if(t==="hydrate"||t==="import"){let a=e;a||(console.log(s.red(`\u274C workspace ${t} requires an archive path or URL.`)),console.log(s.white(` npx rapidkit workspace ${t} team.rapidkit-archive.zip --output ./team`)),process.exit(1));let{hydrateWorkspaceArchive:l}=await import('./workspace-archive-EJIGYKSR.js');try{let u=await l({archivePathOrUrl:a,outputPath:n.output,force:n.force===true||c("--force"),dryRun:n.dryRun===true||c("--dry-run"),strict:n.strict===true||c("--strict")});if(n.json){console.log(JSON.stringify(u,null,2));return}console.log(s.green(u.dryRun?`\u2714 Workspace archive hydrate preview: ${u.outputPath}`:`\u2714 Workspace archive hydrated: ${u.outputPath}`)),console.log(s.gray(` Files: ${u.files.length}`)),u.manifest?.workspaceName&&console.log(s.gray(` Workspace: ${u.manifest.workspaceName}`));}catch(u){console.log(s.red(`\u274C Workspace ${t} failed: ${u.message}`)),process.exit(1);}}else if(t==="run"){let a=i(`run ${e||""}`.trim());(!e||!["init","test","build","start"].includes(e))&&(console.log(s.red(`Unknown workspace run stage: ${e||"(none provided)"}`)),console.log(s.gray("Available stages: init | test | build | start")),console.log(s.gray(" \u2022 init \u2014 run install/bootstrap across the project fleet")),console.log(s.gray(" \u2022 test \u2014 run test suite across selected projects")),console.log(s.gray(" \u2022 build \u2014 compile/package across selected projects")),console.log(s.gray(" \u2022 start \u2014 start services (smoke/e2e scenarios)")),console.log(s.gray(" Note: dev is excluded \u2014 it is a local-only primitive, not a CI stage")),process.exit(2));let l=Number(n.maxWorkers??""),u=Number.isFinite(l)?Math.max(1,Math.trunc(l)):void 0;if(e==="init"){let f=await Lr(a);f!==0&&process.exit(f);}let{runWorkspaceStage:p}=await import('./workspace-run-OIPQYI6V.js'),d=await p({workspacePath:a,stage:e,affected:n.affected===true,blastRadius:n.blastRadius===true,since:n.since,parallel:n.parallel===true,maxWorkers:u,continueOnError:n.continueOnError===true,strict:n.strict===true,json:n.json===true,enforceGates:n.gates});n.json&&console.log(JSON.stringify(d,null,2)),d.summary.exitCode!==0&&process.exit(d.summary.exitCode);}else if(t==="init"){console.log(s.yellow("\u2139 workspace init is an alias of: npx rapidkit workspace run init")),console.log(s.gray(` Equivalent full-init aliases at workspace root:
259
259
  npx rapidkit init | npx rapidkit workspace init | npx rapidkit workspace run init
260
- `));let a=i("init"),l=Number(n.maxWorkers??""),u=Number.isFinite(l)?Math.max(1,Math.trunc(l)):void 0,p=await Lr(a);p!==0&&process.exit(p);let{runWorkspaceStage:d}=await import('./workspace-run-OVDAQG4F.js'),f=await d({workspacePath:a,stage:"init",affected:n.affected===true,blastRadius:n.blastRadius===true,since:n.since,parallel:n.parallel===true,maxWorkers:u,continueOnError:n.continueOnError===true,strict:n.strict===true,json:n.json===true,enforceGates:n.gates});n.json&&console.log(JSON.stringify(f,null,2)),f.summary.exitCode!==0&&process.exit(f.summary.exitCode);}else console.log(s.red(`Unknown workspace action: ${t}`)),console.log(s.gray("Available: list, sync, policy, share, export, hydrate, import, run")),process.exit(1);});function os(){let t=a()?"npx rapidkit init; npx rapidkit dev":"npx rapidkit init && npx rapidkit dev";console.log(s.white(`Usage:
260
+ `));let a=i("init"),l=Number(n.maxWorkers??""),u=Number.isFinite(l)?Math.max(1,Math.trunc(l)):void 0,p=await Lr(a);p!==0&&process.exit(p);let{runWorkspaceStage:d}=await import('./workspace-run-OIPQYI6V.js'),f=await d({workspacePath:a,stage:"init",affected:n.affected===true,blastRadius:n.blastRadius===true,since:n.since,parallel:n.parallel===true,maxWorkers:u,continueOnError:n.continueOnError===true,strict:n.strict===true,json:n.json===true,enforceGates:n.gates});n.json&&console.log(JSON.stringify(f,null,2)),f.summary.exitCode!==0&&process.exit(f.summary.exitCode);}else console.log(s.red(`Unknown workspace action: ${t}`)),console.log(s.gray("Available: list, sync, policy, share, export, hydrate, import, run")),process.exit(1);});function os(){let t=a()?"npx rapidkit init; npx rapidkit dev":"npx rapidkit init && npx rapidkit dev";console.log(s.white(`Usage:
261
261
  `)),console.log(s.cyan(` npx rapidkit <workspace-name> [options]
262
262
  `)),console.log(s.bold("Quick start \u2014 workspace workflow:")),console.log(s.cyan(" npx rapidkit my-workspace ")+s.gray("# Create workspace (interactive profile picker)")),console.log(s.cyan(" cd my-workspace")),console.log(s.cyan(" npx rapidkit bootstrap ")+s.gray("# Bootstrap all runtime toolchains")),console.log(s.cyan(" npx rapidkit create project ")+s.gray("# Interactive kit picker")),console.log(s.cyan(" cd my-api")),console.log(s.cyan(` ${t}
263
263
  `)),console.log(s.bold("Workspace profiles (asked during creation):")),console.log(s.gray(" minimal Foundation files only \u2014 fastest bootstrap (default)")),console.log(s.gray(" java-only Java runtime (Spring Boot services)")),console.log(s.gray(" python-only Python + Poetry (FastAPI, Django, ML)")),console.log(s.gray(" node-only Node.js runtime (NestJS, Express, Next.js)")),console.log(s.gray(" go-only Go runtime (Fiber, Gin, gRPC)")),console.log(s.gray(" dotnet-only .NET runtime (ASP.NET Core services)")),console.log(s.gray(" polyglot Python + Node.js + Go + Java + .NET multi-runtime")),console.log(s.gray(` enterprise Polyglot + governance + Sigstore
@@ -1,4 +1,4 @@
1
- import {b as b$1,c}from'./chunk-X5KRT2DT.js';import {b}from'./chunk-AC6KIKII.js';import {promises}from'fs';import g from'path';import r from'chalk';import R from'ora';import {execa}from'execa';var y="21",$="3.5.0",j="2.8.9";function u(e){return e.trim().toLowerCase().replace(/[^a-z0-9]+/g,".").replace(/^\.+|\.+$/g,"").replace(/\.{2,}/g,".").split(".").map(p=>p.replace(/^[^a-z]+/,"").replace(/[^a-z0-9]/g,"")).filter(Boolean).join(".")}function _(e,t){return e.replace(/[\r\n\t]+/g," ").trim()||t}function x(e){return e.trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").replace(/-{2,}/g,"-")}function M(e,t){let s=u(e)||"com.rapidkit.apps",p=u(t)||"service";return `${s}.${p}`}function E(e){return e.replace(/\./g,"/")}function T(){return JSON.stringify({engine:"npm",runtime:"java"},null,2)}function A(e,t){return JSON.stringify({kit_name:"springboot.standard",runtime:"java",module_support:false,project_name:e.project_name,artifact_id:e.artifact_id,group_id:e.group_id,package_name:e.package_name,app_version:e.app_version,created_by:"rapidkit-npm",rapidkit_version:t,created_at:new Date().toISOString()},null,2)}function P(e){return `<?xml version="1.0" encoding="UTF-8"?>
1
+ import {b as b$1,c}from'./chunk-3Q7264EJ.js';import {b}from'./chunk-AC6KIKII.js';import {promises}from'fs';import g from'path';import r from'chalk';import R from'ora';import {execa}from'execa';var y="21",$="3.5.0",j="2.8.9";function u(e){return e.trim().toLowerCase().replace(/[^a-z0-9]+/g,".").replace(/^\.+|\.+$/g,"").replace(/\.{2,}/g,".").split(".").map(p=>p.replace(/^[^a-z]+/,"").replace(/[^a-z0-9]/g,"")).filter(Boolean).join(".")}function _(e,t){return e.replace(/[\r\n\t]+/g," ").trim()||t}function x(e){return e.trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").replace(/-{2,}/g,"-")}function M(e,t){let s=u(e)||"com.rapidkit.apps",p=u(t)||"service";return `${s}.${p}`}function E(e){return e.replace(/\./g,"/")}function T(){return JSON.stringify({engine:"npm",runtime:"java"},null,2)}function A(e,t){return JSON.stringify({kit_name:"springboot.standard",runtime:"java",module_support:false,project_name:e.project_name,artifact_id:e.artifact_id,group_id:e.group_id,package_name:e.package_name,app_version:e.app_version,created_by:"rapidkit-npm",rapidkit_version:t,created_at:new Date().toISOString()},null,2)}function P(e){return `<?xml version="1.0" encoding="UTF-8"?>
2
2
  <project xmlns="http://maven.apache.org/POM/4.0.0"
3
3
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
4
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
@@ -0,0 +1 @@
1
+ export{a as runWorkspaceStage}from'./chunk-LSFRHYMD.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rapidkit",
3
- "version": "0.32.0",
3
+ "version": "0.32.1",
4
4
  "type": "module",
5
5
  "description": "Official CLI for RapidKit, an open-source workspace platform that standardizes how teams build, scale, and deploy backend services.",
6
6
  "keywords": [
@@ -1 +0,0 @@
1
- export{a as runWorkspaceStage}from'./chunk-S2FC4GUS.js';
File without changes