rapidkit 0.37.0 → 0.38.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +166 -147
- package/contracts/create-planner-capabilities.v1.json +251 -0
- package/contracts/runtime-command-surface.v1.json +52 -0
- package/dist/autopilot-release-SBPGNGAB.js +1 -0
- package/dist/chunk-2ED6SPXP.js +1 -0
- package/dist/chunk-3R7UJAX5.js +1 -0
- package/dist/{chunk-RUUDLAKJ.js → chunk-5NBYSXOZ.js} +1 -1
- package/dist/chunk-7XW2I6MP.js +13 -0
- package/dist/{chunk-U6QUN6V2.js → chunk-ABPDGFVD.js} +1 -1
- package/dist/chunk-IW3KLQXE.js +2 -0
- package/dist/{chunk-7VSYTOOG.js → chunk-NKNMGWAZ.js} +1 -1
- package/dist/{chunk-IOIWVHRO.js → chunk-TVIOAZ6E.js} +13 -13
- package/dist/chunk-XESEBTPE.js +1 -0
- package/dist/{create-HN5HOGQ4.js → create-Y3XJOKL5.js} +1 -1
- package/dist/index.js +150 -144
- package/dist/{pipeline-BOU4KETN.js → pipeline-C4UCLETO.js} +1 -1
- package/dist/{workspace-2AL5C3QZ.js → workspace-WBKFXH4Z.js} +1 -1
- package/dist/{workspace-agent-sync-V2H6NTGD.js → workspace-agent-sync-3FFFJYKF.js} +1 -1
- package/dist/{workspace-context-KCKNV5VQ.js → workspace-context-V4UGIHSC.js} +1 -1
- package/dist/{workspace-foundation-L6ZBGMVE.js → workspace-foundation-T45HAWKL.js} +1 -1
- package/dist/{workspace-intelligence-3TWXJQ7Y.js → workspace-intelligence-MGL3Z25K.js} +1 -1
- package/dist/{workspace-model-NQVZN5W4.js → workspace-model-IKMGY2BX.js} +1 -1
- package/dist/workspace-run-HOR56FON.js +1 -0
- package/dist/workspace-verify-A3J6D7T2.js +1 -0
- package/docs/AI_DYNAMIC_INTEGRATION.md +440 -0
- package/docs/AI_EXAMPLES.md +419 -0
- package/docs/AI_FEATURES.md +460 -0
- package/docs/AI_QUICKSTART.md +245 -0
- package/docs/DEVELOPMENT.md +88 -0
- package/docs/From Code to Shared Understanding.png +0 -0
- package/docs/OPEN_SOURCE_USER_SCENARIOS.md +170 -0
- package/docs/OPTIMIZATION_GUIDE.md +504 -0
- package/docs/PACKAGE_MANAGER_POLICY.md +25 -0
- package/docs/README.md +121 -0
- package/docs/SECURITY.md +63 -0
- package/docs/SETUP.md +107 -0
- package/docs/UTILITIES.md +221 -0
- package/docs/WORKSPACE_MARKER_SPEC.md +276 -0
- package/docs/ci-workflows.md +56 -0
- package/docs/commands-reference.md +136 -0
- package/docs/config-file-guide.md +295 -0
- package/docs/contracts/ARTIFACT_CATALOG.md +111 -0
- package/docs/contracts/COMMAND_OWNERSHIP_MATRIX.md +138 -0
- package/docs/contracts/README.md +71 -0
- package/docs/contracts/RUNTIME_ACCEPTANCE_MATRIX.md +98 -0
- package/docs/contracts/RUNTIME_SUPPORT_MATRIX.md +74 -0
- package/docs/contracts/rapidkit-cli-contracts.json +239 -0
- package/docs/create-planner-capabilities.md +81 -0
- package/docs/doctor-command.md +263 -0
- package/docs/examples/ci-agent-grounding.yml +62 -0
- package/docs/from-code-to-shared-understanding.md +46 -0
- package/docs/governance-policy.enterprise.example.json +40 -0
- package/docs/mirror-config.enterprise.example.json +60 -0
- package/docs/policies.workspace.example.yml +23 -0
- package/docs/workspace-operations.md +160 -0
- package/docs/workspace-run.md +80 -0
- package/package.json +3 -2
- package/dist/autopilot-release-AUXP2ZIF.js +0 -1
- package/dist/chunk-C7OVQQXT.js +0 -1
- package/dist/chunk-EJGKBFV4.js +0 -2
- package/dist/chunk-UXKB4KGZ.js +0 -13
- package/dist/chunk-YJ24EV3P.js +0 -1
- package/dist/workspace-run-DEXI52KO.js +0 -1
- package/dist/workspace-verify-HBCQNNGU.js +0 -1
- /package/dist/{chunk-D23L2GFT.js → chunk-6E5TBB2C.js} +0 -0
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# Workspace Run — Polyglot Fleet Orchestration
|
|
2
|
+
|
|
3
|
+
`workspace run` executes CI-safe stages (`init`, `test`, `build`, `start`) across discovered projects in a workspace. Command syntax is in [commands-reference.md](./commands-reference.md).
|
|
4
|
+
|
|
5
|
+
## Quick start
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npx rapidkit workspace run test --parallel
|
|
9
|
+
npx rapidkit workspace run test --affected --since HEAD~1
|
|
10
|
+
npx rapidkit workspace run test --affected --blast-radius
|
|
11
|
+
npx rapidkit workspace run build --json --max-workers 8
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
`--blast-radius` uses `.rapidkit/workspace.contract.json` (and legacy `.rapidkit/workspace-dependency-graph.json` as fallback) to expand direct `dependsOn` and publish/consume event relationships.
|
|
15
|
+
|
|
16
|
+
## Supported runtimes
|
|
17
|
+
|
|
18
|
+
| Runtime | Frameworks | Status |
|
|
19
|
+
| --- | --- | --- |
|
|
20
|
+
| Node | NestJS, Express, Next.js, Nuxt | Built-in |
|
|
21
|
+
| Go | Fiber, Gin, Echo, Chi | Built-in |
|
|
22
|
+
| Java | Spring Boot, Quarkus, Gradle | Built-in |
|
|
23
|
+
| Python | FastAPI, Django, Flask, Poetry | Built-in |
|
|
24
|
+
| PHP | Laravel, Symfony, Slim | Observed |
|
|
25
|
+
| Rust | Actix, Axum, Rocket, Tokio | Observed |
|
|
26
|
+
| .NET | ASP.NET Core, Entity Framework | Built-in |
|
|
27
|
+
| Elixir | Phoenix, Umbrella | Observed |
|
|
28
|
+
| Ruby | Rails, Sinatra, RSpec | Observed |
|
|
29
|
+
|
|
30
|
+
Public scaffold/import/lifecycle contract: [contracts/RUNTIME_SUPPORT_MATRIX.md](./contracts/RUNTIME_SUPPORT_MATRIX.md).
|
|
31
|
+
|
|
32
|
+
## Enterprise configuration
|
|
33
|
+
|
|
34
|
+
Override stage commands per project via `.rapidkit/context.json`:
|
|
35
|
+
|
|
36
|
+
```json
|
|
37
|
+
{
|
|
38
|
+
"runtime": "php",
|
|
39
|
+
"framework": "Laravel",
|
|
40
|
+
"commands": {
|
|
41
|
+
"test": "php artisan test --parallel=4",
|
|
42
|
+
"build": "php artisan config:cache && php artisan route:cache",
|
|
43
|
+
"lint": "php bin/phpstan analyse --level=8"
|
|
44
|
+
},
|
|
45
|
+
"environment": "dev"
|
|
46
|
+
}
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Enterprise features include command overrides, multi-framework projects, error categorization (setup vs test vs runtime), preflight validation, health checks, custom stages, stage dependencies, environment variants, caching, and composite steps.
|
|
50
|
+
|
|
51
|
+
## JSON reporting
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
npx rapidkit workspace run test --json > test-results.json
|
|
55
|
+
cat test-results.json | jq '.projects[] | {path, status, errorCategory}'
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
`errorCategory` values: `setup`, `test-failure`, `runtime`, `dependency`, `timeout`.
|
|
59
|
+
|
|
60
|
+
## Command semantics
|
|
61
|
+
|
|
62
|
+
RapidKit has two workspace-level execution surfaces and three equivalent full-init aliases at workspace root:
|
|
63
|
+
|
|
64
|
+
| Command | Intent | Scope |
|
|
65
|
+
| --- | --- | --- |
|
|
66
|
+
| `init`, `workspace init`, `workspace run init` (at workspace root) | Mirrored full-init (workspace deps + project init) | Workspace + fleet |
|
|
67
|
+
| `workspace run <test\|build\|start>` | Fleet stage execution | Selected projects |
|
|
68
|
+
| `init`, `test`, `build`, `start`, `dev` (inside project dir) | Project primitive | Single project |
|
|
69
|
+
|
|
70
|
+
At workspace root, `npx rapidkit init`, `npx rapidkit workspace init`, and `npx rapidkit workspace run init` are equivalent aliases.
|
|
71
|
+
|
|
72
|
+
Inside a project directory, `npx rapidkit init` remains project-scoped.
|
|
73
|
+
|
|
74
|
+
`dev` is excluded from `workspace run` — it is a long-running local process, not a CI batch stage.
|
|
75
|
+
|
|
76
|
+
## See also
|
|
77
|
+
|
|
78
|
+
- [Documentation index](./README.md)
|
|
79
|
+
- [commands-reference.md](./commands-reference.md)
|
|
80
|
+
- [contracts/RUNTIME_SUPPORT_MATRIX.md](./contracts/RUNTIME_SUPPORT_MATRIX.md)
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "rapidkit",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.38.0",
|
|
4
4
|
"type": "module",
|
|
5
|
-
"description": "
|
|
5
|
+
"description": "Open-source workspace intelligence CLI for software systems: create, adopt, govern, verify, and align polyglot workspaces for humans, CI, IDEs, and AI agents.",
|
|
6
6
|
"keywords": [
|
|
7
7
|
"rapidkit",
|
|
8
8
|
"workspai",
|
|
@@ -40,6 +40,7 @@
|
|
|
40
40
|
"files": [
|
|
41
41
|
"dist",
|
|
42
42
|
"contracts",
|
|
43
|
+
"docs",
|
|
43
44
|
"data/modules-embeddings.json",
|
|
44
45
|
"scripts/enforce-package-manager.cjs",
|
|
45
46
|
"scripts/check-cli-resolution.cjs"
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export{b as AUTOPILOT_RELEASE_ALIAS_FILENAME,a as AUTOPILOT_RELEASE_LAST_RUN_FILENAME,c as runAutopilotRelease}from'./chunk-7VSYTOOG.js';
|
package/dist/chunk-C7OVQQXT.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import {a as a$4}from'./chunk-YJ24EV3P.js';import {a}from'./chunk-RV6HBTFC.js';import {a as a$3,q as q$1,k as k$1}from'./chunk-YBS2HGO3.js';import {i,h}from'./chunk-UZW5QFRW.js';import {a as a$2}from'./chunk-VKLL63TL.js';import {a as a$1}from'./chunk-HHJAANUC.js';import p from'path';import f from'fs-extra';var V="workspace-model.v1",K=".rapidkit/reports/workspace-model.json",L=["package.json","pyproject.toml","requirements.txt","go.mod","pom.xml","build.gradle","build.gradle.kts","Cargo.toml","composer.json","Gemfile","mix.exs","deno.json","deno.jsonc","bun.lock","bun.lockb","deps.edn","project.clj","build.sbt","docker-compose.yml","docker-compose.yaml","terraform.tf"],q=new Set([".git",".hg",".svn",".rapidkit",".venv","node_modules","dist","build","target","coverage","htmlcov",".next",".turbo"]);function _(t,e){return (p.relative(t,e)||".").split(p.sep).join("/")}async function N(t){try{if(!await f.pathExists(t))return null;let e=await f.readJSON(t);return e&&typeof e=="object"?e:null}catch{return null}}async function z(t,e){for(let r of e)if(await f.pathExists(p.join(t,r)))return true;return false}function H(t){let e=Number.parseInt(process.env.RAPIDKIT_WORKSPACE_MODEL_SCAN_DEPTH??"",10),r=typeof t=="number"&&Number.isFinite(t)?t:Number.isFinite(e)?e:4;return Math.min(12,Math.max(1,Math.trunc(r)))}async function J(t,e){let r=p.resolve(t),n=[{dirPath:r,depth:0}],s=new Set,o=new Set;for(;n.length>0;){let i=n.shift();if(!i)continue;let a=p.resolve(i.dirPath);if(o.has(a))continue;if(o.add(a),a!==r&&await z(a,L)){s.add(a);continue}if(i.depth>=e)continue;let g=[];try{g=await f.readdir(a,{withFileTypes:true});}catch{continue}for(let m of g)!m.isDirectory()||q.has(m.name)||m.name.startsWith(".")&&m.name!==".config"||n.push({dirPath:p.join(a,m.name),depth:i.depth+1});}return Array.from(s).sort((i,a)=>i.localeCompare(a))}function G(t){let e=new Set,r=[];for(let n of t){let s=p.resolve(n);e.has(s)||(e.add(s),r.push(s));}return r.sort((n,s)=>n.localeCompare(s))}function D(t,e){let r=t?.[e];return typeof r=="string"&&r.trim()?r.trim():void 0}function U(t,e){return t?.[e]===true}function Q(t,e,r){let n=t?.frontend&&typeof t.frontend=="object"&&!Array.isArray(t.frontend)?t.frontend:void 0,s=D(n,"generator"),o=D(n,"command_display"),i=typeof e=="string"&&e.startsWith("frontend.");if(!(!s&&!i))return {...s?{id:s}:{},...e?{kit:e}:{},displayName:r,source:U(n,"official_generator")?"official-generator":"metadata",...o?{commandDisplay:o}:{}}}async function X(t){let e=[".rapidkit/project.json",".rapidkit/context.json","package.json","pyproject.toml","requirements.txt","go.mod","pom.xml","build.gradle","build.gradle.kts","Cargo.toml","composer.json","Gemfile","mix.exs","deno.json","Dockerfile","docker-compose.yml","README.md"],r=[];for(let n of e)await f.pathExists(p.join(t,n))&&r.push(n);return r}async function k(t,e,r){let n=p.join(t,e),s=await f.pathExists(n),o={path:e.split(p.sep).join("/"),exists:s};if(s&&r){let i=await N(n);typeof i?.generatedAt=="string"&&(o.generatedAt=i.generatedAt);let a=i?.status??i?.result??i?.verdict;typeof a=="string"&&(o.status=a);}return o}async function Y(t,e,r){let s=`${_(t,e)}/.rapidkit/reports`,o=await k(t,`${s}/doctor-project-last-run.json`,r);return {doctor:o?.exists===true?o:await k(t,`${s}/doctor-last-run.json`,r),analyze:await k(t,`${s}/analyze-last-run.json`,r),readiness:await k(t,`${s}/release-readiness-last-run.json`,r)}}async function Z(t,e,r){let n=a$3(e),s=i(e,n),o=q$1(e),i$1=k$1(s.runtime),a=await a$4(e,n),g=typeof n?.name=="string"&&n.name.trim()?n.name.trim():p.basename(e),m=typeof n?.kit_name=="string"?n.kit_name:typeof n?.kit=="string"?n.kit:void 0,y=typeof n?.engine=="string"?n.engine:o.engine!=="unknown"?o.engine:void 0,c=Q(n,m,s.displayName);return {name:g,path:_(t,e),...r.includeAbsolutePaths?{absolutePath:e}:{},kind:a,runtime:s.runtime,runtimeCandidates:h(e),framework:s.key,frameworkDisplayName:s.displayName,confidence:s.confidence,detectionSource:s.source,supportTier:s.supportTier,runtimeSupportTier:i$1.tier,runtimeDoctorSupport:i$1.doctorSupport,moduleSupport:o.moduleSupport,...m?{kit:m}:{},...y?{engine:y}:{},...c?{generator:c}:{},commands:{supported:o.supportedCommands,unsupported:o.unsupportedCommands,global:o.globalCommands,fleetStages:o.fleetStages,localOnly:o.localOnlyCommands,map:o.commandMap},importantFiles:await X(e),evidence:await Y(t,e,r.includeEvidence),provenance:{path:"filesystem discovery",runtime:s.source,framework:s.source,commands:"project command capability matrix",evidence:"project .rapidkit/reports"}}}async function ee(t){return N(p.join(t,".rapidkit","workspace.json"))}function te(t){return t.some(e=>e.kind==="frontend")&&t.length>1?"full-stack-workspace":t.some(e=>e.kind==="frontend")?"frontend-workspace":t.length>1?"backend-platform":"backend-workspace"}function oe(t){let e=new Set;for(let r of t){let n=`${r.name} ${r.path}`.toLowerCase();for(let s of ["auth","billing","payment","notification","order","admin","report","search","analytics"])n.includes(s)&&e.add(s);}return Array.from(e).sort()}function u(t,e,r,n){return {severity:t,code:e,message:r,target:n}}function $(t){let e=[];t.workspace.name.trim()||e.push(u("error","workspace.name.missing","Workspace name could not be resolved.","workspace")),t.workspace.type==="observed-workspace"&&e.push(u("warning","workspace.marker.missing","Workspace marker is missing; model is based on filesystem observation.","workspace.marker")),t.summary.projectCount===0&&e.push(u("warning","workspace.projects.empty","No project roots were detected in this workspace.","projects")),t.contracts.exists||e.push(u("warning","workspace.contract.missing","Workspace contract is missing; dependency and API edges may be incomplete.",t.contracts.workspaceContractPath));let r=new Map;for(let o of t.projects){let i=o.name.toLowerCase(),a=r.get(i)??[];a.push(o),r.set(i,a),o.importantFiles.length||e.push(u("warning","project.markers.missing",`Project ${o.name} has no important manifest files recorded.`,o.path)),o.runtime==="unknown"&&e.push(u("warning","project.runtime.unknown",`Project ${o.name} runtime could not be confidently detected.`,o.path));let g=["test","build"];for(let c of g)o.commands.supported.includes(c)&&o.commands.unsupported.includes(c)&&e.push(u("error","project.commands.conflict",`Project ${o.name} marks ${c} as both supported and unsupported.`,o.path));let m=new Set(o.commands.fleetStages),y=new Set(o.commands.localOnly);for(let c of o.commands.fleetStages){y.has(c)&&e.push(u("error","project.commands.scope-conflict",`Project ${o.name} marks ${c} as both fleet and local-only.`,o.path));let d=o.commands.map[c];(!d||d.status!=="supported"||d.fleetEligible!==true||d.executionScope!=="fleet")&&e.push(u("error","project.commands.fleet-stage-invalid",`Project ${o.name} advertises ${c} as a fleet stage without a supported fleet capability.`,o.path));}for(let c of o.commands.localOnly){let d=o.commands.map[c];(!d||d.status!=="supported"||d.executionScope!=="local-only"||d.fleetEligible===true)&&e.push(u("error","project.commands.local-only-invalid",`Project ${o.name} advertises ${c} as local-only without a matching local-only capability.`,o.path));}for(let c of Object.values(o.commands.map))c.status==="supported"&&(c.fleetEligible===true&&!m.has(c.command)&&e.push(u("error","project.commands.fleet-stage-missing",`Project ${o.name} capability ${c.command} is fleet-eligible but missing from fleetStages.`,o.path)),c.executionScope==="local-only"&&c.fleetEligible!==true&&!y.has(c.command)&&e.push(u("error","project.commands.local-only-missing",`Project ${o.name} capability ${c.command} is local-only but missing from localOnly commands.`,o.path)));}for(let[o,i]of r.entries())i.length>1&&e.push(u("error","project.name.duplicate",`Project name "${o}" is ambiguous across ${i.length} project roots.`,i.map(a=>a.path).join(", ")));let n=e.filter(o=>o.severity==="error").length,s=e.filter(o=>o.severity==="warning").length;return {status:n>0?"failed":s>0?"warning":"passed",errors:n,warnings:s,issues:e}}function ge(t){return $(t)}async function ke(t){let e=p.resolve(t.workspacePath),r=t.includeAbsolutePaths===true,n=t.includeEvidence===true,s=H(t.observableScanDepth),o=t.now??new Date,[i,a$3,g,m,y]=await Promise.all([a(e),ee(e),a$1(e),a$2(e,{descendIntoMatchedProjects:false}),J(e,s)]),c=G([...m,...y,...g.map(l=>p.isAbsolute(l.path)?l.path:p.join(e,l.path))]),d=await Promise.all(c.map(l=>Z(e,l,{includeAbsolutePaths:r,includeEvidence:n}))),B=typeof a$3?.workspace_name=="string"?a$3.workspace_name:typeof a$3?.name=="string"?a$3.name:i?.name||p.basename(e),b=typeof a$3?.profile=="string"?a$3.profile:typeof a$3?.mode=="string"?a$3.mode:void 0,F=Array.from(new Set(d.map(l=>l.kind))).sort(),w=Array.from(new Set(d.map(l=>l.runtime))).sort(),I=Array.from(new Set(d.map(l=>l.framework))).sort(),h=[".rapidkit/policies.yml",".rapidkit/policies.yaml"].find(l=>f.existsSync(p.join(e,l))),j=".rapidkit/workspace.contract.json",v=await f.pathExists(p.join(e,j)),P={schemaVersion:V,generatedAt:o.toISOString(),workspace:{name:B,root:e,...b?{profile:b}:{},type:i?"rapidkit-workspace":"observed-workspace",...i?{marker:{createdBy:i.createdBy,version:i.version,createdAt:i.createdAt}}:{}},identity:{workspaceType:te(d),surfaces:F,runtimeFamilies:w,businessCapabilities:oe(d)},discovery:{observableScanDepth:s},projects:d,policies:{mode:typeof a$3?.policy_mode=="string"?a$3.policy_mode:typeof a$3?.policyMode=="string"?a$3.policyMode:"warn",source:h??null,exists:!!h},contracts:{workspaceContractPath:j,exists:v,status:v?"known":"missing"},evidence:{doctor:await k(e,".rapidkit/reports/doctor-last-run.json",n),analyze:await k(e,".rapidkit/reports/analyze-last-run.json",n),readiness:await k(e,".rapidkit/reports/release-readiness-last-run.json",n),pipeline:await k(e,".rapidkit/reports/pipeline-last-run.json",n)},summary:{projectCount:d.length,runtimes:w,frameworks:I,firstClassProjects:d.filter(l=>l.supportTier==="first-class").length,observedProjects:d.filter(l=>l.supportTier==="observed").length}},T=$(P);return {...P,validation:T}}async function ye(t,e){let r=p.join(e,K);return await f.ensureDir(p.dirname(r)),await f.writeJSON(r,t,{spaces:2}),r}export{V as a,K as b,ge as c,ke as d,ye as e};
|
package/dist/chunk-EJGKBFV4.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import {d}from'./chunk-C7OVQQXT.js';import d$1 from'path';import l from'fs-extra';var k="workspace-context.v1",f=".rapidkit/reports/workspace-context-agent.json";function w(e){if(typeof e!="string"||!e.trim()||e==="true")return "generic";let t=e.trim().toLowerCase();return t==="codex"||t==="claude"||t==="cursor"||t==="orca"?t:"generic"}function h(e){return `npx --yes --package rapidkit rapidkit ${e}`.trim()}function y(e){return `npx rapidkit ${e}`.trim()}function i(e){return {id:e.id,scope:e.scope,display:y(e.args),execute:h(e.args),description:e.description,...e.project?{project:e.project}:{}}}function g(e,t){return `workspace run ${t} --scope project:${e.name}`}function j(e){return (e.startsWith("project:")?e.slice(8):e).trim().toLowerCase()}function x(e){return [e.name,e.path,d$1.basename(e.path),e.absolutePath].filter(t=>typeof t=="string"&&t.trim().length>0).map(t=>t.trim().toLowerCase())}function C(e,t){let s=[i({id:"workspace.model",scope:"workspace",args:"workspace model --json",description:"Read the canonical workspace intelligence model."}),i({id:"workspace.doctor",scope:"workspace",args:"doctor workspace --json",description:"Check workspace health before claiming verification."}),i({id:"workspace.pipeline",scope:"workspace",args:"pipeline --json",description:"Run the governed sync, doctor, analyze, readiness, and autopilot loop."}),i({id:"workspace.contract.verify",scope:"workspace",args:"workspace contract verify --json",description:"Verify workspace contract and dependency edges."})],o=t?[t]:e.projects;for(let r of o)r.commands.fleetStages.includes("test")&&s.push(i({id:`project.${r.name}.test`,scope:"project",project:r.name,args:g(r,"test"),description:`Run tests for ${r.name} through workspace orchestration.`})),r.commands.fleetStages.includes("build")&&s.push(i({id:`project.${r.name}.build`,scope:"project",project:r.name,args:g(r,"build"),description:`Build ${r.name} through workspace orchestration.`}));return s}function W(e){return e.commands.fleetStages.filter(t=>t==="test"||t==="build").map(t=>`workspace run ${t}`)}function v(e,t){if(!t?.startsWith("project:"))return;let s=j(t);if(s)return e.projects.find(o=>x(o).includes(s))}function b(e,t,s){let o=[...e.validation?.issues??[]];t?.startsWith("project:")&&!s&&o.push({severity:"error",code:"context.scope.project.missing",message:`Requested project scope was not found: ${t}`,target:t});let r=o.filter(a=>a.severity==="error").length,c=o.filter(a=>a.severity==="warning").length;return {status:r>0?"failed":c>0?"warning":"passed",errors:r,warnings:c,issues:o}}function S(e){let t=[],s=[];for(let[o,r]of Object.entries(e.evidence))r?.exists?t.push(`${o}: ${r.path}`):s.push(o);return {available:t.sort(),missing:s.sort()}}function P(e){let t=e.summary.projectCount,s=e.summary.runtimes.length?e.summary.runtimes.join(", "):"no runtime",o=e.identity.surfaces.length?e.identity.surfaces.join(", "):"no detected surfaces";return `${e.workspace.name} is a ${e.identity.workspaceType} with ${t} project${t===1?"":"s"}, ${s} runtime coverage, and ${o}.`}function A(e){let t=["Do not claim a command passed unless a report or command output proves it.","Do not infer secrets or environment values from file names.","Do not change project scope without checking the selected project."];return e.contracts.exists||t.push("Workspace contract is missing; dependency and API edges may be incomplete."),e.summary.observedProjects>0&&t.push("Some projects are observed rather than first-class; command support may be partial."),t}async function O(e){let t=e.model??await d({workspacePath:e.workspacePath,includeEvidence:e.includeEvidence===true,observableScanDepth:e.observableScanDepth,now:e.now}),s=w(e.agent),o=v(t,e.scope),r=b(t,e.scope,o);if(e.strict===true&&r.status!=="passed"){let n=r.issues.map(p=>`${p.severity}:${p.code}:${p.target}`).join(", ");throw new Error(`Workspace context strict validation failed: ${n}`)}let c=(o?[o]:t.projects).map(n=>({name:n.name,path:n.path,kind:n.kind,runtime:n.runtime,framework:n.frameworkDisplayName,...n.generator?{generator:n.generator}:{},supportTier:n.supportTier,safeCommands:W(n),importantFiles:n.importantFiles})),a=S(t),m=P(t);return {schemaVersion:k,generatedAt:(e.now??new Date).toISOString(),agent:s,workspaceSummary:m,modelRef:".rapidkit/reports/workspace-model.json",workspace:{name:t.workspace.name,root:t.workspace.root,type:t.identity.workspaceType,...t.workspace.profile?{profile:t.workspace.profile}:{}},scope:{requested:e.scope??"workspace",...o?{activeProject:o.name}:{}},projects:c,safeCommands:C(t,o),evidence:a,policies:{mode:t.policies.mode,source:t.policies.source},contracts:{exists:t.contracts.exists,path:t.contracts.workspaceContractPath},validation:r,agentInstructions:["Read `.rapidkit/reports/INDEX.json` first, then this context pack and linked evidence reports.","Use this context as the workspace source of truth before inspecting random files.","Prefer workspace-level evidence over generic framework assumptions.","Use `display` commands when explaining steps to a human.","Use `execute` commands when launching commands from automation or tooling.","Keep project-scoped advice tied to the active project scope.","Regenerate stale grounding with `npx rapidkit workspace agent-sync --write --refresh-context`."],unsafeAssumptions:A(t),humanSummary:[m,`Evidence available: ${a.available.length}. Missing evidence groups: ${a.missing.join(", ")||"none"}.`,o?`Active project scope: ${o.name} (${o.frameworkDisplayName}).`:"Scope: whole workspace."].join(`
|
|
2
|
-
`)}}async function D(e,t){let s=d$1.join(t,f);return await l.ensureDir(d$1.dirname(s)),await l.writeJSON(s,e,{spaces:2}),s}export{k as a,f as b,O as c,D as d};
|
package/dist/chunk-UXKB4KGZ.js
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import {b as b$3}from'./chunk-C7WILE56.js';import {b}from'./chunk-PPQYTYQG.js';import {e}from'./chunk-RELR4O5E.js';import {a as a$1}from'./chunk-HEG6DIGW.js';import {b as b$1}from'./chunk-Z5LKRG57.js';import te from'validate-npm-package-name';import a from'path';import {spawn}from'child_process';import s from'chalk';import d from'fs-extra';import _,{promises}from'fs';import ue,{homedir}from'os';import {pathToFileURL}from'url';import b$2 from'process';var m=class extends Error{constructor(r,n,i){super(r);this.code=n;this.details=i;this.name="RapidKitError",Error.captureStackTrace(this,this.constructor);}code;details},O=class extends m{constructor(t,r){let n=r?`Python ${t}+ required, found ${r}`:`Python ${t}+ not found`;super(n,"PYTHON_NOT_FOUND","Please install Python from https://www.python.org/downloads/");}},T=class extends m{constructor(){super("Poetry is not installed","POETRY_NOT_FOUND","Install Poetry from https://python-poetry.org/docs/#installation");}},W=class extends m{constructor(){super("pipx is not installed","PIPX_NOT_FOUND","Install pipx from https://pypa.github.io/pipx/installation/");}},M=class extends m{constructor(t){super(`Directory "${t}" already exists`,"DIRECTORY_EXISTS","Please choose a different name or remove the existing directory");}},f=class extends m{constructor(t,r){super(`Invalid project name: "${t}"`,"INVALID_PROJECT_NAME",r);}},L=class extends m{constructor(t,r){let n=`Installation failed at: ${t}`,i=`${r.message}
|
|
2
|
-
|
|
3
|
-
Troubleshooting:
|
|
4
|
-
- Check your internet connection
|
|
5
|
-
- Verify Python/Poetry installation
|
|
6
|
-
- Try running with --debug flag for more details`;super(n,"INSTALLATION_ERROR",i);}},U=class extends m{constructor(){super("RapidKit Python package is not yet available on PyPI","RAPIDKIT_NOT_AVAILABLE",`Available options:
|
|
7
|
-
1. Install Python 3.10+ and retry the same command
|
|
8
|
-
2. Use the core workflow: npx rapidkit create workspace <name>
|
|
9
|
-
3. Offline fallback (limited): npx rapidkit create project fastapi.standard <name> --output .
|
|
10
|
-
|
|
11
|
-
Legacy: set RAPIDKIT_SHOW_LEGACY=1 to reveal template-mode flags in help.`);}};function V(e){let t=te(e);if(!t.validForNewPackages){let n=t.errors||[],i=t.warnings||[],o=[...n,...i];throw new f(e,`NPM validation failed: ${o.join(", ")}`)}if(!/^[a-z][a-z0-9_-]*$/.test(e))throw new f(e,"Must start with a lowercase letter and contain only lowercase letters, numbers, hyphens, and underscores");if(["test","tests","src","dist","build","lib","python","pip","poetry","node","npm","rapidkit","rapidkit"].includes(e.toLowerCase()))throw new f(e,`"${e}" is a reserved name. Please choose a different name.`);if(e.length<2)throw new f(e,"Name must be at least 2 characters long");if(e.length>214)throw new f(e,"Name must be less than 214 characters");return true}function Oe(e){let t=ne(e.workspacePath,e.result.projectPath)?"imported":"adopted";return {name:e.result.projectName,path:e.result.projectPath,relativePath:ie(e.workspacePath,e.result.projectPath),relationship:t,stack:e.result.definition.framework,runtime:"node",framework:e.result.definition.framework,frameworkDisplayName:e.result.definition.displayName,supportTier:"extended",moduleSupport:false,confidence:"high",source:t==="adopted"?"adopted-local":"local-folder",importedAt:e.importedAt??new Date().toISOString()}}function ne(e,t){let r=a.relative(a.resolve(e),a.resolve(t));return r===""||r.length>0&&!r.startsWith("..")&&!a.isAbsolute(r)}function ie(e,t){return (a.relative(e,t)||".").split(a.sep).join("/")}var B=[{id:"nextjs",kitId:"frontend.nextjs",aliases:["frontend.nextjs","next","nextjs","next.js"],displayName:"Next.js",framework:"nextjs",defaultPort:3e3,commandDisplay:e=>`npx create-next-app@latest ${e}`,commandExec:(e,t)=>({command:"npx",args:["--yes","create-next-app@latest",e,"--yes",...t.skipGit?["--disable-git"]:[],...t.skipInstall?["--skip-install"]:[]]})},{id:"remix",kitId:"frontend.remix",aliases:["frontend.remix","remix","remix-run","react-router"],displayName:"React Router",framework:"remix",defaultPort:5173,commandDisplay:e=>`npx create-react-router@latest ${e}`,commandExec:(e,t)=>({command:"npx",args:["--yes","create-react-router@latest",e,"--yes",...t.skipInstall?["--no-install"]:["--install"],"--no-git-init"]})},{id:"vite-react",kitId:"frontend.vite-react",aliases:["frontend.vite-react","vite-react","react","vite.react"],displayName:"React + Vite",framework:"react",defaultPort:5173,commandDisplay:e=>`npm create vite@latest ${e} -- --template react-ts`,commandExec:e=>({command:"npm",args:["create","vite@latest",e,"--","--template","react-ts","--no-interactive"]})},{id:"vite-vue",kitId:"frontend.vite-vue",aliases:["frontend.vite-vue","vite-vue","vue","vite.vue"],displayName:"Vue + Vite",framework:"vue",defaultPort:5173,commandDisplay:e=>`npm create vite@latest ${e} -- --template vue-ts`,commandExec:e=>({command:"npm",args:["create","vite@latest",e,"--","--template","vue-ts","--no-interactive"]})},{id:"vite-svelte",kitId:"frontend.vite-svelte",aliases:["frontend.vite-svelte","vite-svelte","svelte","vite.svelte"],displayName:"Svelte + Vite",framework:"svelte",defaultPort:5173,commandDisplay:e=>`npm create vite@latest ${e} -- --template svelte-ts`,commandExec:e=>({command:"npm",args:["create","vite@latest",e,"--","--template","svelte-ts","--no-interactive"]})},{id:"vite-solid",kitId:"frontend.vite-solid",aliases:["frontend.vite-solid","vite-solid","solid","solidjs","vite.solid"],displayName:"Solid + Vite",framework:"solid",defaultPort:5173,commandDisplay:e=>`npm create vite@latest ${e} -- --template solid-ts`,commandExec:e=>({command:"npm",args:["create","vite@latest",e,"--","--template","solid-ts","--no-interactive"]})},{id:"vite-vanilla",kitId:"frontend.vite-vanilla",aliases:["frontend.vite-vanilla","vite","vanilla","vite-vanilla"],displayName:"Vite",framework:"vite",defaultPort:5173,commandDisplay:e=>`npm create vite@latest ${e} -- --template vanilla-ts`,commandExec:e=>({command:"npm",args:["create","vite@latest",e,"--","--template","vanilla-ts","--no-interactive"]})},{id:"nuxt",kitId:"frontend.nuxt",aliases:["frontend.nuxt","nuxt","nuxtjs","nuxt.js"],displayName:"Nuxt",framework:"nuxt",defaultPort:3e3,commandDisplay:e=>`npx nuxi@latest init ${e}`,commandExec:(e,t)=>({command:"npx",args:["--yes","nuxi@latest","init",e,...t.skipInstall?["--no-install"]:[]]})},{id:"angular",kitId:"frontend.angular",aliases:["frontend.angular","angular","ng"],displayName:"Angular",framework:"angular",defaultPort:4200,minNodeMajor:18,minNodeMessage:"Angular scaffolding requires Node.js 18.19+ or 20.11+. Upgrade Node, or choose another frontend kit.",commandDisplay:e=>`npx @angular/cli@19 new ${e}`,commandExec:(e,t)=>({command:"npx",args:["--yes","@angular/cli@19","new",e,"--defaults","--skip-git",...t.skipInstall?["--skip-install"]:[]]})},{id:"astro",kitId:"frontend.astro",aliases:["frontend.astro","astro"],displayName:"Astro",framework:"astro",defaultPort:4321,commandDisplay:e=>`npm create astro@4 ${e}`,commandExec:(e,t)=>({command:"npm",args:["create","astro@4",e,"--","--yes",...t.skipInstall?["--no-install"]:[],...t.skipGit?["--no-git"]:[]]})},{id:"sveltekit",kitId:"frontend.sveltekit",aliases:["frontend.sveltekit","sveltekit","svelte-kit"],displayName:"SvelteKit",framework:"sveltekit",defaultPort:5173,commandDisplay:e=>`npx sv@latest create ${e}`,commandExec:(e,t)=>({command:"npx",args:["--yes","sv@latest","create",e,"--template","minimal","--types","ts","--no-add-ons",...t.skipInstall?["--no-install"]:["--install","npm"]]})}],N=new Map;for(let e of B){N.set(e.id,e),N.set(e.kitId,e);for(let t of e.aliases)N.set(t.toLowerCase(),e);}function J(){return [...B]}function I(e){return e?N.get(e.trim().toLowerCase())??null:null}function Te(e){return !!I(e)}function We(e){if(e[0]!=="create"||e[1]!=="frontend")return null;let t=e[2],r=e[3],n=e.slice(4),i=I(t);return i?["create","project",i.kitId,r??"",...n].filter(Boolean):["create","project",`frontend.${t??""}`,r??"",...n].filter(Boolean)}function oe(e){let t=I(e);return t?`rapidkit create frontend ${t.id} <name> [--output <dir>] [--skip-install] [--dry-run]`:"rapidkit create frontend <nextjs|remix|vite-react|vite-vue|vite-svelte|vite-solid|vite-vanilla|nuxt|angular|astro|sveltekit> <name> [--output <dir>] [--skip-install] [--dry-run]"}async function Me(e){let t=e.args;if(t[0]!=="create"||t[1]!=="project")throw new Error("Frontend create expects normalized args: create project <frontend.kit> <name>");let r=I(t[2]);if(!r)throw new Error(`Unknown frontend generator: ${t[2]??"(missing)"}`);let n=t[3];if(!n)throw new Error(`Usage: ${oe(r.id)}`);V(n),de(r);let i=me(t,"--output")||process.cwd(),o=a.resolve(i,n),h=e.dryRun===true||t.includes("--dry-run"),w=t.includes("--skip-install"),v=t.includes("--skip-git")||t.includes("--no-git"),p=r.commandExec(n,{skipGit:v,skipInstall:w}),P=r.commandDisplay(n);if(await d.pathExists(o))throw new Error(`Directory "${o}" already exists`);if(h)return se({definition:r,projectName:n,projectPath:o,commandPlan:p}),{definition:r,projectName:n,projectPath:o,dryRun:h,commandDisplay:P,commandExec:[p.command,...p.args]};await d.ensureDir(a.dirname(o));let j=await Y(p.command,p.args,a.dirname(o)),S=await le(o);if(j!==0&&!S)throw new Error(`Official ${r.displayName} generator failed with exit code ${j}`);return j!==0&&S&&console.log(s.yellow(`\u26A0\uFE0F Official ${r.displayName} generator exited with code ${j}, but the scaffold looks complete. Continuing RapidKit project setup...`)),v||await pe(o),await ae({definition:r,projectName:n,projectPath:o,commandDisplay:P,commandExec:[p.command,...p.args],skipGit:v,skipInstall:w}),console.log(s.green(`\u2705 ${r.displayName} project created at ${o}`)),console.log(s.gray(` Display command: npx rapidkit create frontend ${r.id} ${n}`)),console.log(s.gray(" Next: cd "+n+" && npx rapidkit dev")),{definition:r,projectName:n,projectPath:o,dryRun:h,commandDisplay:P,commandExec:[p.command,...p.args]}}async function ae(e){let t=new Date().toISOString(),r=await b(),n={schema_version:"1.0",name:e.projectName,slug:e.projectName,kind:"frontend",project_type:"frontend",runtime:"node",framework:e.definition.framework,framework_display_name:e.definition.displayName,kit_name:e.definition.kitId,kit:e.definition.kitId,engine:"npm",support_tier:"extended",module_support:false,modules:[],rapidkit_version:r,generated_by:"rapidkit-npm",generated_at:t,frontend:{generator:e.definition.id,official_generator:true,default_port:e.definition.defaultPort,command_display:e.commandDisplay,command_exec:e.commandExec,skip_install:e.skipInstall,skip_git:e.skipGit},contracts:{owns:[],apis:[],publishes:[],consumes:[],dependsOn:[],env:[]}},i={project:e.projectName,runtime:"node",framework:e.definition.framework,kind:"frontend",source:"official-generator"},o={kind:"rapidkit.frontend_create",schema_version:"1.0",generated_at:t,project:{name:e.projectName,path:e.projectPath,kind:"frontend",runtime:"node",framework:e.definition.framework,framework_display_name:e.definition.displayName,kit_name:e.definition.kitId},generator:{id:e.definition.id,command_display:e.commandDisplay,command_exec:e.commandExec}};await d.ensureDir(a.join(e.projectPath,".rapidkit")),await d.writeJson(a.join(e.projectPath,".rapidkit","project.json"),n,{spaces:2}),await d.writeJson(a.join(e.projectPath,".rapidkit","context.json"),i,{spaces:2}),await d.writeJson(a.join(e.projectPath,".rapidkit","frontend-create.json"),o,{spaces:2});}function se(e){console.log(s.bold(`
|
|
12
|
-
RapidKit frontend create plan: ${e.definition.displayName}`)),console.log(s.gray(`Project: ${e.projectName}`)),console.log(s.gray(`Target: ${e.projectPath}`)),console.log(s.gray(`Show: npx rapidkit create frontend ${e.definition.id} ${e.projectName}`)),console.log(s.gray(`Run: ${[e.commandPlan.command,...e.commandPlan.args].join(" ")}`)),console.log(s.gray(`Default: http://localhost:${e.definition.defaultPort}`));}function ce(){let e=Number.parseInt(process.versions.node.split(".")[0]??"",10);return Number.isFinite(e)?e:0}function de(e){if(!(!e.minNodeMajor||ce()>=e.minNodeMajor))throw new Error(e.minNodeMessage??`${e.displayName} requires Node.js ${e.minNodeMajor}+ (current: ${process.versions.node}).`)}async function le(e){if(!await d.pathExists(e))return false;let t=a.join(e,"package.json");return await d.pathExists(t)?true:(await d.readdir(e)).length>0}async function pe(e){let t=a.join(e,".git");if(await d.pathExists(t))return;if(await Y("git",["init"],e)===0){console.log(s.gray(" Git repository initialized."));return}console.log(s.yellow("\u26A0\uFE0F Git initialization was skipped or failed. You can run `git init` manually inside the project."));}async function Y(e,t,r){return await new Promise(n=>{let i=spawn(e,t,{cwd:r,stdio:"inherit",shell:b$1()});i.on("close",o=>n(o??1)),i.on("error",()=>n(1));})}function me(e,t){let r=e.indexOf(t);if(r>=0&&r+1<e.length)return e[r+1];let n=e.find(i=>i.startsWith(`${t}=`));return n?n.slice(t.length+1):void 0}var q=[{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>]"}],C=new Map;for(let e of q){C.set(e.id.toLowerCase(),e);for(let t of e.aliases)C.set(t.toLowerCase(),e);}function z(e){return e?C.get(e.trim().toLowerCase())??null:null}function Ve(e){return z(e)?.id??e}function H(){return q.filter(e=>e.owner==="core"||e.generator)}function Be(e){return z(e)?.owner==="npm"}async function Je(e,t){if(!e.generator)throw new Error(`Kit is not backed by an npm generator: ${e.id}`);if(e.generator==="gofiber"){let{generateGoFiberKit:r}=await import('./gofiber-standard-35CJZ7S3.js');await r(t.projectPath,{project_name:t.projectName,module_path:t.projectName,skipGit:t.skipGit,skipInstall:t.skipInstall});return}if(e.generator==="gogin"){let{generateGoGinKit:r}=await import('./gogin-standard-SAX6C4ZK.js');await r(t.projectPath,{project_name:t.projectName,module_path:t.projectName,skipGit:t.skipGit,skipInstall:t.skipInstall});return}if(e.generator==="springboot"){let{generateSpringBootKit:r}=await import('./springboot-standard-SFMSLTX4.js');await r(t.projectPath,{project_name:t.projectName,artifact_id:t.projectName,java_version:c(t.args,"--java-version")?.trim(),spring_boot_version:c(t.args,"--spring-boot-version")?.trim(),springdoc_version:c(t.args,"--springdoc-version")?.trim(),group_id:c(t.args,"--group-id")?.trim(),package_name:c(t.args,"--package-name")?.trim(),description:c(t.args,"--description")?.trim(),port:c(t.args,"--port")?.trim(),skipGit:t.skipGit,skipInstall:t.skipInstall});return}if(e.generator==="dotnet-webapi-clean"){let{generateDotnetWebApiCleanKit:r}=await import('./dotnet-webapi-clean-FX533F5U.js');await r(t.projectPath,{project_name:t.projectName,target_framework:c(t.args,"--target-framework")?.trim(),root_namespace:c(t.args,"--root-namespace")?.trim(),description:c(t.args,"--description")?.trim(),port:c(t.args,"--port")?.trim(),skipGit:t.skipGit,skipInstall:t.skipInstall});return}throw new Error(`Unhandled npm kit generator: ${e.generator}`)}function c(e,t){let r=e.indexOf(t);if(r>=0&&r+1<e.length)return e[r+1];let n=e.find(i=>i.startsWith(`${t}=`));return n?n.slice(t.length+1):void 0}function fe(e){let r=e.label.indexOf(" \u2014 ");return r>=0?e.label.slice(r+3).trim():e.label.trim()}function ge(){let e=H().map(r=>({value:r.id,label:fe(r),hint:r.description,name:r.label})),t=J().map(r=>({value:r.kitId,label:r.displayName,hint:r.commandDisplay("my-app"),name:`${r.displayName} \u2014 ${r.framework}`}));return [...e,...t]}var he=".rapidkitrc.json",ye=["rapidkit.config.js","rapidkit.config.mjs","rapidkit.config.cjs"];async function _t(){let e$1=a.join(ue.homedir(),he);try{let t=await promises.readFile(e$1,"utf-8"),r=JSON.parse(t);return e.debug(`Loaded config from ${e$1}`),r}catch{return e.debug("No user config found, using defaults"),{}}}async function Et(e$1=process.cwd()){let t=e$1,r=a.parse(t).root;for(;t!==r;){for(let n of ye){let i=a.join(t,n);try{await promises.access(i),e.debug(`Found config file: ${i}`);let h=await import(pathToFileURL(i).href),w=h.default||h;return e.debug(`Loaded RapidKit config from ${n}`),w}catch{continue}}t=a.dirname(t);}return e.debug("No RapidKit config file found, using defaults"),{}}function Kt(e,t,r){return {author:r.author||t.workspace?.defaultAuthor||e.author,pythonVersion:r.pythonVersion||t.workspace?.pythonVersion||e.pythonVersion,defaultInstallMethod:r.defaultInstallMethod||t.workspace?.installMethod||e.defaultInstallMethod,defaultKit:r.defaultKit||t.projects?.defaultKit||e.defaultKit,skipGit:r.skipGit??t.projects?.skipGit??e.skipGit,license:r.license||e.license,testRapidKitPath:r.testRapidKitPath||e.testRapidKitPath}}function Ct(e){return process.env.RAPIDKIT_DEV_PATH||e.testRapidKitPath||void 0}var F="workspai",Gt="Workspai";function we(e){return _.existsSync(a.join(e,".rapidkit-workspace"))||_.existsSync(a.join(e,".rapidkit","workspace.json"))}function E(e=homedir()){return a.join(e,"rapidkit","workspaces")}function Q(e=homedir()){return a.join(e,"Workspai","rapidkits")}function R(e,t=homedir()){return a.join(E(t),e)}function xe(e,t=homedir()){return [R(e,t),a.join(Q(t),e)]}function Z(e,t={}){let r=t.homeDir??homedir();return t.outputDir?a.resolve(t.outputDir,e):R(e,r)}function Ot(e,t=homedir()){for(let r of xe(e,t))if(_.existsSync(r))return r}function Tt(e,t="my-workspace"){let r=1;for(;;){let n=r===1?t:`${t}-${r}`,i=a.join(e,n);if(!_.existsSync(i))return {name:n,targetPath:i};r+=1;}}function ve(e=homedir()){return [a.join(E(e),F),a.join(Q(e),F)]}function Wt(e=homedir()){for(let t of ve(e))if(we(t))return t;return R(F,e)}function Pe(e,t){let r=e.indexOf(t);if(r>=0&&r+1<e.length)return e[r+1];let n=e.find(i=>i.startsWith(`${t}=`));if(n)return n.slice(t.length+1)}function je(e){return e.includes("--here")}function ee(e,t=b$2.cwd()){if(je(e))return a.resolve(t);let r=Pe(e,"--output");if(r)return a.resolve(r)}function zt(e,t=b$2.cwd()){let r=a.resolve(e),n=a.resolve(t),i=a.relative(n,r);return i.length>0&&!i.startsWith("..")&&!a.isAbsolute(i)?`cd ${i}`:`cd ${r}`}function Ht(e,t={}){let r=t.argv??[],n=t.outputParent??ee(r,b$2.cwd());return Z(e.trim(),{homeDir:t.homeDir,outputDir:n})}async function Xt(e,t={}){let r=t.cwd??b$2.cwd(),n=t.homeDir??homedir(),i=ee(e,r);if(i!==void 0)return i;let o=t.hasYes??(e.includes("--yes")||e.includes("-y"));if(!(t.interactive??(!o&&!!b$2.stdin.isTTY&&!a$1())))return;let w=E(n),{location:v}=await b$3([{type:"rawlist",name:"location",message:"Where should the workspace be created?",choices:[{value:"managed",label:"Managed home",hint:w},{value:"here",label:"Current directory",hint:r}],default:0}]);if(v==="here")return a.resolve(r)}
|
|
13
|
-
export{Tt as A,Wt as B,zt as C,Ht as D,Xt as E,m as a,O as b,T as c,W as d,M as e,L as f,U as g,V as h,Oe as i,I as j,Te as k,We as l,oe as m,Me as n,z as o,Ve as p,Be as q,Je as r,ge as s,_t as t,Et as u,Kt as v,Ct as w,Gt as x,E as y,Ot as z};
|
package/dist/chunk-YJ24EV3P.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import i from'path';import s from'fs-extra';var l=new Set(["service","frontend","worker","library","infra","docs","test-suite","unknown"]);async function d(n){try{if(!await s.pathExists(n))return null;let e=await s.readJSON(n);return e&&typeof e=="object"?e:null}catch{return null}}function u(n){if(typeof n!="string")return null;let e=n.trim().toLowerCase();return l.has(e)?e:null}async function m(n,e){let o=e??await d(i.join(n,".rapidkit","project.json")),a=u(o?.kind)??u(o?.type);if(a)return a;let t=await d(i.join(n,"package.json"));if(t){let r={...t.dependencies??{},...t.devDependencies??{}},f=t.scripts??{},c=Object.values(f).filter(p=>typeof p=="string").join(" ").toLowerCase();if(r.next||r.react||r.vue||r.svelte||r.vite||r["@angular/core"]||c.includes("next ")||c.includes("vite "))return "frontend";if(t.private===true&&!r.express&&!r["@nestjs/core"])return "library"}return await s.pathExists(i.join(n,"Dockerfile"))||await s.pathExists(i.join(n,"docker-compose.yml"))||await s.pathExists(i.join(n,"terraform.tf"))?"infra":"service"}export{m as a};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export{a as runWorkspaceStage}from'./chunk-D23L2GFT.js';export{a as WORKSPACE_RUN_LAST_REPORT_FILENAME}from'./chunk-FV5A3N3I.js';
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import {m,f as f$1,c as c$1,n,e}from'./chunk-U6QUN6V2.js';import {d}from'./chunk-C7OVQQXT.js';import {c as c$2}from'./chunk-FV5A3N3I.js';import c from'path';import f from'fs-extra';var R="workspace-verify.v1",S=".rapidkit/reports/workspace-verify-last-run.json";function C(e,s){return c.isAbsolute(s)?s:c.join(e,s)}async function j(e$1){let s=await f.readJson(e$1);if(!s||typeof s!="object"||Array.isArray(s))throw new Error(`Workspace impact input is not a JSON object: ${e$1}`);let t=s;if(t.schemaVersion!==e)throw new Error(`Unsupported workspace impact schema: ${String(t.schemaVersion)}`);return t}function I(e){let s=new Set,t=[];for(let a of e){let n=`${a.scope}:${a.project??""}:${a.display}`;s.has(n)||(s.add(n),t.push(a));}return t}function V(e,s){if(!e||e==="workspace")return true;let t=(e.startsWith("project:")?e.slice(8):e).trim().toLowerCase();return s.scope==="workspace"?true:(s.project??"").trim().toLowerCase()===t}function A(e,s){if(e.id==="workspace.doctor")return c.join(s,".rapidkit","reports","doctor-last-run.json");if(e.id==="workspace.contract.verify")return c.join(s,".rapidkit","reports","workspace-contract-verify-last-run.json");if(e.id==="workspace.readiness")return c.join(s,".rapidkit","reports","release-readiness-last-run.json");if(e.id==="workspace.analyze")return c.join(s,".rapidkit","reports","analyze-last-run.json");if(e.id==="workspace.pipeline")return c.join(s,".rapidkit","reports","pipeline-last-run.json");if(e.id.startsWith("project.")&&(e.id.endsWith(".test")||e.id.endsWith(".build")))return c.join(s,".rapidkit","reports","workspace-run-last.json")}function l(e){return !e||typeof e!="object"||Array.isArray(e)?null:e}function x(e){let s=l(e.healthScore),t=typeof s?.errors=="number"?s.errors:0,a=typeof s?.percent=="number"?s.percent:void 0;return t>0?{status:"fail",message:`Doctor evidence reports ${t} error(s).`}:typeof a=="number"&&a<70?{status:"warn",message:`Doctor health score is ${a}%.`}:{status:"pass",message:"Doctor evidence is present and healthy."}}function O(e){let s=typeof e.overallStatus=="string"?e.overallStatus:"unknown";return s==="fail"?{status:"fail",message:"Release readiness evidence reports blocking failures."}:s==="warn"?{status:"warn",message:"Release readiness evidence reports warnings."}:s==="pass"?{status:"pass",message:"Release readiness evidence passed."}:{status:"warn",message:`Release readiness evidence status is ${s}.`}}function $(e){let s=typeof e.status=="string"?e.status:"unknown";return s==="failed"||s==="fail"?{status:"fail",message:"Workspace contract verify evidence failed."}:s==="passed"||s==="pass"?{status:"pass",message:"Workspace contract verify evidence passed."}:{status:"warn",message:`Workspace contract verify evidence status is ${s}.`}}function _(e){let s=l(e.summary);if(s?.blocking===true||e.blocking===true)return {status:"fail",message:"Analyze evidence reports blocking findings."};let a=typeof s?.status=="string"?s.status:void 0;return a==="warn"||a==="warning"?{status:"warn",message:"Analyze evidence reports warnings."}:{status:"pass",message:"Analyze evidence is present."}}function M(e){let s=l(e.summary),t=typeof s?.verdict=="string"?s.verdict:void 0;return t==="blocked"?{status:"fail",message:"Pipeline evidence is blocked."}:t==="needs-attention"?{status:"warn",message:"Pipeline evidence needs attention."}:t==="ready"?{status:"pass",message:"Pipeline evidence is ready."}:{status:"warn",message:"Pipeline evidence status is unknown."}}function D(e,s){let t=s.id.endsWith(".build")?"build":s.id.endsWith(".test")?"test":null,a=c$2(e,t);if(!a)return {status:"missing",message:"Workspace run evidence is missing or unreadable."};let n=a.stage;if(t&&n!==t)return {status:"missing",message:`Workspace run evidence is for stage "${n}", expected "${t}".`};let i=l(a.summary),o=typeof i?.failed=="number"?i.failed:0,m=typeof i?.exitCode=="number"?i.exitCode:0,d=Array.isArray(a.projects)?a.projects:[],p=s.project?.toLowerCase(),r=d.find(g=>{let u=l(g);if(!u||!p)return false;let E=typeof u.projectName=="string"?u.projectName.toLowerCase():"",w=typeof u.projectPath=="string"?u.projectPath.toLowerCase():"";return E===p||w.endsWith(`/${p}`)||w===p});if(r){let g=l(r),u=typeof g?.status=="string"?g.status:"unknown";if(u==="failed")return {status:"fail",message:`Workspace run evidence failed for ${s.project}.`};if(u==="passed")return {status:"pass",message:`Workspace run evidence passed for ${s.project}.`};if(u==="skipped")return {status:"warn",message:`Workspace run evidence skipped for ${s.project}.`}}return o>0||m!==0?{status:"fail",message:"Workspace run evidence reports failures."}:{status:"pass",message:"Workspace run evidence is present."}}async function q(e,s,t){let a=A(e,s),n=a?c.relative(s,a).split(c.sep).join("/"):void 0;if(e.id==="workspace.contract.verify"&&!t)return {id:e.id,label:e.label,scope:e.scope,project:e.project,command:e,status:"skipped",required:e.required,message:"Workspace contract is not present; contract verify skipped."};if(!a||!await f.pathExists(a))return {id:e.id,label:e.label,scope:e.scope,project:e.project,command:e,status:"missing",required:e.required,evidencePath:n,message:n?`Missing evidence report: ${n}`:"No evidence mapping exists for this command."};let i=l(await f.readJson(a));if(!i)return {id:e.id,label:e.label,scope:e.scope,project:e.project,command:e,status:"fail",required:e.required,evidencePath:n,message:"Evidence report is not a JSON object."};let o;return e.id==="workspace.doctor"?o=x(i):e.id==="workspace.readiness"?o=O(i):e.id==="workspace.contract.verify"?o=$(i):e.id==="workspace.analyze"?o=_(i):e.id==="workspace.pipeline"?o=M(i):e.id.startsWith("project.")?o=D(i,e):o={status:"pass",message:"Evidence report is present."},{id:e.id,label:e.label,scope:e.scope,project:e.project,command:e,status:o.status,required:e.required,evidencePath:n,message:o.message}}function F(e){let s=e.filter(r=>r.status==="pass").length,t=e.filter(r=>r.status==="warn").length,a=e.filter(r=>r.status==="fail").length,n=e.filter(r=>r.status==="missing").length,i=e.filter(r=>r.status==="skipped").length,o=e.filter(r=>r.required&&(r.status==="fail"||r.status==="missing")).map(r=>`${r.id}: ${r.message}`),m=e.filter(r=>r.required&&r.status==="missing").length,d="ready",p=0;return o.length>0?(d="blocked",p=2):(t>0||m>0)&&(d="needs-attention",p=1),{verdict:d,exitCode:p,stepsPassed:s,stepsWarn:t,stepsFailed:a,stepsMissing:n,stepsSkipped:i}}async function N(e$1){let s=c.resolve(e$1.workspacePath);if(e$1.fromImpactPath){let i=C(s,e$1.fromImpactPath);return {impact:await j(i),fromImpactRef:c.relative(s,i).split(c.sep).join("/")}}let t=c.join(s,f$1);if(await f.pathExists(t))return {impact:await j(t),fromImpactRef:f$1};let a=c.join(s,c$1);if(await f.pathExists(a))return {impact:await n({workspacePath:s,fromPath:c$1,scope:e$1.scope,includeAbsolutePaths:e$1.includeAbsolutePaths,includeEvidence:e$1.includeEvidence,observableScanDepth:e$1.observableScanDepth,now:e$1.now}),fromImpactRef:c$1};let n$1=await d({workspacePath:s,includeAbsolutePaths:e$1.includeAbsolutePaths,includeEvidence:e$1.includeEvidence,observableScanDepth:e$1.observableScanDepth,now:e$1.now});return {impact:{schemaVersion:e,generatedAt:(e$1.now??new Date).toISOString(),fromRef:"baseline",diffRef:".rapidkit/reports/workspace-model-diff-last-run.json",workspace:{name:n$1.workspace.name,profile:n$1.workspace.profile,type:n$1.workspace.type},summary:{changed:false,risk:"none",affectedProjects:0,workspaceItems:0,recommendedCommands:0},affectedProjects:[],workspaceImpact:[],verificationPlan:[],agentBrief:{headline:"Baseline workspace verify run.",bullets:["No impact report or snapshot was available; baseline gates were evaluated."],unsafeAssumptions:["Do not claim runtime verification passed unless evidence exists."]},diff:{schemaVersion:"workspace-model-diff.v1",generatedAt:(e$1.now??new Date).toISOString(),fromRef:"baseline",toRef:".rapidkit/reports/workspace-model.json",fromHash:"baseline",toHash:"baseline",summary:{changed:false,addedProjects:0,removedProjects:0,changedProjects:0,workspaceChanges:0,validationChanges:0,gitChangedFiles:0},git:{available:false,dirty:false,changedFiles:0,untrackedFiles:0,deletedFiles:0},changes:[],currentModel:n$1}}}}async function Y(e){let s=c.resolve(e.workspacePath),{impact:t,fromImpactRef:a}=await N(e),n=t.diff.currentModel,i=I([...m(),...t.verificationPlan]).filter(r=>V(e.scope,r)),o=[];for(let r of i)o.push(await q(r,s,n.contracts.exists===true));let m$1=F(o),d=o.filter(r=>r.status==="missing"&&r.evidencePath).map(r=>r.evidencePath),p=o.filter(r=>r.required&&(r.status==="fail"||r.status==="missing")).map(r=>`${r.id}: ${r.message}`);return {schemaVersion:R,generatedAt:(e.now??new Date).toISOString(),workspacePath:s,mode:"evidence",fromImpactRef:a,scope:e.scope,impact:{changed:t.summary.changed,risk:t.summary.risk,affectedProjects:t.summary.affectedProjects,recommendedCommands:t.summary.recommendedCommands},summary:m$1,steps:o,missingEvidence:d,blockingReasons:p,verificationPlan:i}}async function U(e,s){let t=c.join(s,S);return await f.ensureDir(c.dirname(t)),await f.writeJson(t,e,{spaces:2}),t}function G(e,s){return e.summary.verdict==="blocked"?2:s?.strict&&e.summary.verdict!=="ready"?1:e.summary.exitCode}export{S as WORKSPACE_VERIFY_REPORT_PATH,R as WORKSPACE_VERIFY_SCHEMA_VERSION,Y as buildWorkspaceVerify,G as workspaceVerifyExitCode,U as writeWorkspaceVerify};
|
|
File without changes
|