rapidkit 0.42.1 → 0.42.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. package/README.md +127 -585
  2. package/dist/autopilot-release-PBDTSW4X.js +1 -0
  3. package/dist/{chunk-JN6R5UP4.js → chunk-4SYXFC4M.js} +1 -1
  4. package/dist/{chunk-NN3IV4U6.js → chunk-LK66ATAQ.js} +2 -2
  5. package/dist/{chunk-CXWWNQDF.js → chunk-MWVOWE5T.js} +1 -1
  6. package/dist/{create-TPFUONHK.js → create-XPYW3WJF.js} +1 -1
  7. package/dist/index.js +17 -17
  8. package/dist/{pipeline-PX6ZUINW.js → pipeline-YT57V6AL.js} +1 -1
  9. package/dist/{workspace-MPKEUHFP.js → workspace-NJFK6DAP.js} +1 -1
  10. package/dist/{workspace-foundation-2OVUZXPT.js → workspace-foundation-OTL2RSZP.js} +1 -1
  11. package/dist/workspace-run-BV2PIE3Y.js +1 -0
  12. package/docs/AI_DYNAMIC_INTEGRATION.md +5 -1
  13. package/docs/AI_EXAMPLES.md +5 -1
  14. package/docs/AI_FEATURES.md +6 -2
  15. package/docs/AI_QUICKSTART.md +4 -0
  16. package/docs/MIGRATING_TO_WORKSPAI.md +139 -0
  17. package/docs/OPEN_SOURCE_USER_SCENARIOS.md +4 -0
  18. package/docs/OPTIMIZATION_GUIDE.md +4 -0
  19. package/docs/README.md +12 -3
  20. package/docs/UTILITIES.md +4 -0
  21. package/docs/WORKSPACE_MARKER_SPEC.md +5 -0
  22. package/docs/commands-reference.md +5 -0
  23. package/docs/config-file-guide.md +4 -0
  24. package/docs/create-planner-capabilities.md +5 -0
  25. package/docs/doctor-command.md +5 -0
  26. package/docs/from-code-to-shared-understanding.md +5 -1
  27. package/docs/workspace-operations.md +5 -0
  28. package/docs/workspace-run.md +5 -0
  29. package/package.json +11 -6
  30. package/templates/kits/fastapi-ddd/README.md.j2 +6 -6
  31. package/templates/kits/fastapi-ddd/pyproject.toml.j2 +5 -5
  32. package/templates/kits/fastapi-ddd/src/cli.py.j2 +3 -3
  33. package/templates/kits/fastapi-standard/README.md.j2 +9 -9
  34. package/templates/kits/fastapi-standard/pyproject.toml.j2 +5 -5
  35. package/templates/kits/fastapi-standard/src/cli.py.j2 +3 -3
  36. package/templates/kits/nestjs-standard/README.md.j2 +8 -8
  37. package/templates/kits/nestjs-standard/package.json.j2 +1 -1
  38. package/dist/autopilot-release-5J55NPXF.js +0 -1
  39. package/dist/workspace-run-NULA72JV.js +0 -1
  40. /package/dist/{chunk-FLFZC7ZV.js → chunk-YVTVFYSI.js} +0 -0
@@ -1,4 +1,4 @@
1
- import {a as a$1}from'./chunk-MQGVCTUL.js';import {c as c$1}from'./chunk-CXWWNQDF.js';import {c}from'./chunk-WKCBS5DC.js';import {b}from'./chunk-JN6R5UP4.js';import {a as a$2}from'./chunk-7V7C6GXV.js';import {f,e}from'./chunk-PCXSTKZ5.js';import {a}from'./chunk-KMUWWZRT.js';import c$2 from'chalk';import D from'fs-extra';import u from'path';function C(t){return t===0?"pass":t===2?"warn":"fail"}function M(t){return t.some(s=>s.status==="fail")?"blocked":t.some(s=>s.status==="warn")?"needs-attention":"ready"}function F(t,s){if(s)return 3;let a=t.some(i=>i.status==="fail"),r=t.some(i=>i.status==="warn");return a?1:r?2:0}async function j(t){let s=await b(t,true),a=false;try{let{syncWorkspaceContract:r}=await import('./workspace-contract-OO4GMENV.js');await r({workspacePath:t}),a=true;}catch{a=false;}return {sync:s,contractSynced:a}}async function G(t={}){let s=u.resolve(t.workspacePath??process.cwd()),a$3=a(s);if(!a$3)throw new Error("No RapidKit workspace found in current directory or parents");let r=[],i=[],l=false,p,y,m,f$1=Date.now();try{let{sync:e,contractSynced:n}=await j(a$3),o=e.workspaceFound&&(e.added.length>0||e.skipped>=0)||e.workspaceFound?"pass":"warn";r.push({name:"sync",status:o,durationMs:Date.now()-f$1,summary:e.workspaceFound?`registry sync complete (${e.added.length} added, ${e.skipped} existing)${n?", contract synced":""}`:"workspace not registered in global registry; contract sync attempted"}),e.workspaceFound||i.push("workspace registry entry missing \u2014 run rapidkit create workspace or register manually");}catch(e){l=true,r.push({name:"sync",status:"fail",durationMs:Date.now()-f$1,summary:`sync failed: ${e instanceof Error?e.message:String(e)}`}),i.push("workspace sync stage failed");}let w=Date.now();try{let e=await c({workspace:true,json:true,quiet:true,strict:t.strict===true,ci:t.strict!==true}),n=C(e),o=u.join(a$3,".rapidkit","reports","doctor-last-run.json");r.push({name:"doctor",status:n,durationMs:Date.now()-w,summary:n==="pass"?"doctor workspace passed":n==="warn"?"doctor workspace reported warnings":"doctor workspace did not pass",exitCode:e,evidencePath:o}),n==="fail"?i.push("doctor workspace gate failed"):n==="warn"&&i.push("doctor workspace reported warnings");}catch(e){l=true,r.push({name:"doctor",status:"fail",durationMs:Date.now()-w,summary:`doctor failed: ${e instanceof Error?e.message:String(e)}`}),i.push("doctor workspace stage failed");}if(t.skipAnalyze)r.push({name:"analyze",status:"skipped",durationMs:0,summary:"analyze stage skipped"});else {let e=Date.now();try{let n=await a$1({workspacePath:a$3,json:true,strict:t.strict===true});p=u.join(a$3,".rapidkit","reports","analyze-last-run.json");let o=n.summary.verdict==="blocked"?"fail":n.summary.verdict==="needs-attention"?"warn":"pass";r.push({name:"analyze",status:o,durationMs:Date.now()-e,summary:`analyze verdict: ${n.summary.verdict} (score ${n.summary.score}/100)`,evidencePath:p}),o==="fail"?i.push("analyze reported blocked verdict"):o==="warn"&&i.push("analyze reported needs-attention verdict");}catch(n){l=true,r.push({name:"analyze",status:"fail",durationMs:Date.now()-e,summary:`analyze failed: ${n instanceof Error?n.message:String(n)}`}),i.push("analyze stage failed");}}let h=Date.now();try{let e=await a$2({startPath:a$3,writeReport:true,skipVerify:t.skipVerify===true});y=e.evidencePath;let n=e.overallStatus==="pass"?"pass":e.overallStatus==="warn"?"warn":"fail";r.push({name:"readiness",status:n,durationMs:Date.now()-h,summary:`readiness overall: ${e.overallStatus}`,evidencePath:e.evidencePath}),n==="fail"?i.push(...e.blockingReasons.map(o=>`readiness: ${o}`)):n==="warn"&&i.push(...e.gates.filter(o=>o.status==="warn").map(o=>`readiness warn: ${o.gate}: ${o.summary}`));}catch(e){l=true,r.push({name:"readiness",status:"fail",durationMs:Date.now()-h,summary:`readiness failed: ${e instanceof Error?e.message:String(e)}`}),i.push("readiness stage failed");}if(t.skipAutopilot)r.push({name:"autopilot",status:"skipped",durationMs:0,summary:"autopilot stage skipped"});else {let e=Date.now(),n=t.autopilotMode??"audit";try{let o=await c$1({workspacePath:a$3,mode:n,json:true,skipPipelineStages:true});m=o.artifacts.reportPath;let P=o.summary.verdict==="approved"?"pass":o.summary.verdict==="partial"?"warn":"fail";r.push({name:"autopilot",status:P,durationMs:Date.now()-e,summary:`autopilot ${n}: ${o.summary.verdict}`,exitCode:o.summary.exitCode,evidencePath:m}),P!=="pass"&&i.push(...o.blockingReasons.slice(0,5));}catch(o){l=true,r.push({name:"autopilot",status:"fail",durationMs:Date.now()-e,summary:`autopilot failed: ${o instanceof Error?o.message:String(o)}`}),i.push("autopilot release stage failed");}}let z=M(r),k=F(r,l),g=u.join(a$3,".rapidkit","reports","pipeline-last-run.json"),d={schemaVersion:"rapidkit-pipeline-v1",generatedAt:new Date().toISOString(),workspacePath:a$3,summary:{verdict:z,exitCode:k,stagesPassed:r.filter(e=>e.status==="pass").length,stagesWarn:r.filter(e=>e.status==="warn").length,stagesFailed:r.filter(e=>e.status==="fail").length},stages:r,blockingReasons:[...new Set(i)],artifacts:{reportPath:g,analyzeEvidencePath:p,readinessEvidencePath:y,autopilotEvidencePath:m}};if(t.writeReport!==false){await D.ensureDir(u.dirname(g));let e$1=f(d,{commandId:"workspacePipeline",exitCode:k,generatedAt:d.generatedAt,blockers:d.blockingReasons,runId:e()});await D.writeJSON(g,e$1,{spaces:2});}if(t.writeReport!==false&&t.noAgentSync!==true&&process.env.RAPIDKIT_NO_AGENT_SYNC!=="1"&&t.agentSync!==false)try{let{syncWorkspaceAgentGrounding:e}=await import('./workspace-agent-sync-XD32GG5V.js'),n=await e({workspacePath:a$3,write:true,refreshContext:true,strict:false});d.agentGrounding={indexPath:n.indexPath,writtenFiles:n.writtenFiles,blockers:n.blockers};}catch{}return d}async function X(t){let s;try{s=await G(t);}catch(a){let r=a instanceof Error?a.message:String(a);t.json?console.log(JSON.stringify({schemaVersion:"rapidkit-pipeline-error-v1",ok:false,error:{message:r}},null,2)):console.log(c$2.red(`Pipeline failed: ${r}`)),process.exit(1);}if(t.json)console.log(JSON.stringify(s,null,2));else {console.log(c$2.bold.cyan(`
1
+ import {a as a$1}from'./chunk-MQGVCTUL.js';import {c as c$1}from'./chunk-MWVOWE5T.js';import {c}from'./chunk-WKCBS5DC.js';import {b}from'./chunk-4SYXFC4M.js';import {a as a$2}from'./chunk-7V7C6GXV.js';import {f,e}from'./chunk-PCXSTKZ5.js';import {a}from'./chunk-KMUWWZRT.js';import c$2 from'chalk';import D from'fs-extra';import u from'path';function C(t){return t===0?"pass":t===2?"warn":"fail"}function M(t){return t.some(s=>s.status==="fail")?"blocked":t.some(s=>s.status==="warn")?"needs-attention":"ready"}function F(t,s){if(s)return 3;let a=t.some(i=>i.status==="fail"),r=t.some(i=>i.status==="warn");return a?1:r?2:0}async function j(t){let s=await b(t,true),a=false;try{let{syncWorkspaceContract:r}=await import('./workspace-contract-OO4GMENV.js');await r({workspacePath:t}),a=true;}catch{a=false;}return {sync:s,contractSynced:a}}async function G(t={}){let s=u.resolve(t.workspacePath??process.cwd()),a$3=a(s);if(!a$3)throw new Error("No RapidKit workspace found in current directory or parents");let r=[],i=[],l=false,p,y,m,f$1=Date.now();try{let{sync:e,contractSynced:n}=await j(a$3),o=e.workspaceFound&&(e.added.length>0||e.skipped>=0)||e.workspaceFound?"pass":"warn";r.push({name:"sync",status:o,durationMs:Date.now()-f$1,summary:e.workspaceFound?`registry sync complete (${e.added.length} added, ${e.skipped} existing)${n?", contract synced":""}`:"workspace not registered in global registry; contract sync attempted"}),e.workspaceFound||i.push("workspace registry entry missing \u2014 run rapidkit create workspace or register manually");}catch(e){l=true,r.push({name:"sync",status:"fail",durationMs:Date.now()-f$1,summary:`sync failed: ${e instanceof Error?e.message:String(e)}`}),i.push("workspace sync stage failed");}let w=Date.now();try{let e=await c({workspace:true,json:true,quiet:true,strict:t.strict===true,ci:t.strict!==true}),n=C(e),o=u.join(a$3,".rapidkit","reports","doctor-last-run.json");r.push({name:"doctor",status:n,durationMs:Date.now()-w,summary:n==="pass"?"doctor workspace passed":n==="warn"?"doctor workspace reported warnings":"doctor workspace did not pass",exitCode:e,evidencePath:o}),n==="fail"?i.push("doctor workspace gate failed"):n==="warn"&&i.push("doctor workspace reported warnings");}catch(e){l=true,r.push({name:"doctor",status:"fail",durationMs:Date.now()-w,summary:`doctor failed: ${e instanceof Error?e.message:String(e)}`}),i.push("doctor workspace stage failed");}if(t.skipAnalyze)r.push({name:"analyze",status:"skipped",durationMs:0,summary:"analyze stage skipped"});else {let e=Date.now();try{let n=await a$1({workspacePath:a$3,json:true,strict:t.strict===true});p=u.join(a$3,".rapidkit","reports","analyze-last-run.json");let o=n.summary.verdict==="blocked"?"fail":n.summary.verdict==="needs-attention"?"warn":"pass";r.push({name:"analyze",status:o,durationMs:Date.now()-e,summary:`analyze verdict: ${n.summary.verdict} (score ${n.summary.score}/100)`,evidencePath:p}),o==="fail"?i.push("analyze reported blocked verdict"):o==="warn"&&i.push("analyze reported needs-attention verdict");}catch(n){l=true,r.push({name:"analyze",status:"fail",durationMs:Date.now()-e,summary:`analyze failed: ${n instanceof Error?n.message:String(n)}`}),i.push("analyze stage failed");}}let h=Date.now();try{let e=await a$2({startPath:a$3,writeReport:true,skipVerify:t.skipVerify===true});y=e.evidencePath;let n=e.overallStatus==="pass"?"pass":e.overallStatus==="warn"?"warn":"fail";r.push({name:"readiness",status:n,durationMs:Date.now()-h,summary:`readiness overall: ${e.overallStatus}`,evidencePath:e.evidencePath}),n==="fail"?i.push(...e.blockingReasons.map(o=>`readiness: ${o}`)):n==="warn"&&i.push(...e.gates.filter(o=>o.status==="warn").map(o=>`readiness warn: ${o.gate}: ${o.summary}`));}catch(e){l=true,r.push({name:"readiness",status:"fail",durationMs:Date.now()-h,summary:`readiness failed: ${e instanceof Error?e.message:String(e)}`}),i.push("readiness stage failed");}if(t.skipAutopilot)r.push({name:"autopilot",status:"skipped",durationMs:0,summary:"autopilot stage skipped"});else {let e=Date.now(),n=t.autopilotMode??"audit";try{let o=await c$1({workspacePath:a$3,mode:n,json:true,skipPipelineStages:true});m=o.artifacts.reportPath;let P=o.summary.verdict==="approved"?"pass":o.summary.verdict==="partial"?"warn":"fail";r.push({name:"autopilot",status:P,durationMs:Date.now()-e,summary:`autopilot ${n}: ${o.summary.verdict}`,exitCode:o.summary.exitCode,evidencePath:m}),P!=="pass"&&i.push(...o.blockingReasons.slice(0,5));}catch(o){l=true,r.push({name:"autopilot",status:"fail",durationMs:Date.now()-e,summary:`autopilot failed: ${o instanceof Error?o.message:String(o)}`}),i.push("autopilot release stage failed");}}let z=M(r),k=F(r,l),g=u.join(a$3,".rapidkit","reports","pipeline-last-run.json"),d={schemaVersion:"rapidkit-pipeline-v1",generatedAt:new Date().toISOString(),workspacePath:a$3,summary:{verdict:z,exitCode:k,stagesPassed:r.filter(e=>e.status==="pass").length,stagesWarn:r.filter(e=>e.status==="warn").length,stagesFailed:r.filter(e=>e.status==="fail").length},stages:r,blockingReasons:[...new Set(i)],artifacts:{reportPath:g,analyzeEvidencePath:p,readinessEvidencePath:y,autopilotEvidencePath:m}};if(t.writeReport!==false){await D.ensureDir(u.dirname(g));let e$1=f(d,{commandId:"workspacePipeline",exitCode:k,generatedAt:d.generatedAt,blockers:d.blockingReasons,runId:e()});await D.writeJSON(g,e$1,{spaces:2});}if(t.writeReport!==false&&t.noAgentSync!==true&&process.env.RAPIDKIT_NO_AGENT_SYNC!=="1"&&t.agentSync!==false)try{let{syncWorkspaceAgentGrounding:e}=await import('./workspace-agent-sync-XD32GG5V.js'),n=await e({workspacePath:a$3,write:true,refreshContext:true,strict:false});d.agentGrounding={indexPath:n.indexPath,writtenFiles:n.writtenFiles,blockers:n.blockers};}catch{}return d}async function X(t){let s;try{s=await G(t);}catch(a){let r=a instanceof Error?a.message:String(a);t.json?console.log(JSON.stringify({schemaVersion:"rapidkit-pipeline-error-v1",ok:false,error:{message:r}},null,2)):console.log(c$2.red(`Pipeline failed: ${r}`)),process.exit(1);}if(t.json)console.log(JSON.stringify(s,null,2));else {console.log(c$2.bold.cyan(`
2
2
  \u{1F517} RapidKit Governance Pipeline
3
3
  `)),console.log(c$2.bold(`Workspace: ${c$2.cyan(u.basename(s.workspacePath))}`)),console.log(c$2.gray(`Path: ${s.workspacePath}`)),console.log(c$2.white(`Verdict: ${s.summary.verdict} Exit: ${s.summary.exitCode} (${s.summary.stagesPassed} pass / ${s.summary.stagesWarn} warn / ${s.summary.stagesFailed} fail)`));for(let a of s.stages){let r=a.status==="pass"?c$2.green("PASS"):a.status==="warn"?c$2.yellow("WARN"):a.status==="skipped"?c$2.gray("SKIP"):c$2.red("FAIL");console.log(` - ${a.name}: ${r} ${a.summary}`);}if(s.blockingReasons.length>0){console.log(c$2.bold(`
4
4
  Blocking reasons:`));for(let a of s.blockingReasons.slice(0,8))console.log(c$2.gray(` \u2022 ${a}`));}console.log(c$2.gray(`
@@ -1 +1 @@
1
- export{e as createProject,d as createWorkspace,g as createWorkspaceShareBundle,f as listWorkspaces,c as registerProjectInWorkspace,a as registerWorkspace,b as syncWorkspaceProjects}from'./chunk-JN6R5UP4.js';
1
+ export{e as createProject,d as createWorkspace,g as createWorkspaceShareBundle,f as listWorkspaces,c as registerProjectInWorkspace,a as registerWorkspace,b as syncWorkspaceProjects}from'./chunk-4SYXFC4M.js';
@@ -1 +1 @@
1
- import {b}from'./chunk-NN3IV4U6.js';import {a}from'./chunk-2LBPX5K3.js';import c from'path';import u from'fs-extra';async function W(t,r){let o=await a(t),d=o?.name||c.basename(t),n,i=c.join(t,".python-version");if(await u.pathExists(i)){let a=(await u.readFile(i,"utf-8")).trim();a&&(n=a);}let e=r?.profile||"polyglot",m=e==="python-only"||e==="polyglot"||e==="enterprise",f=r?.installMethod||o?.metadata?.npm?.installMethod||(m?"poetry":"venv"),s=await b(t,{workspaceName:d,installMethod:f,pythonVersion:n,profile:e,writeMarker:true,writeGitignore:true,onlyIfMissing:!r?.force}),{publishWorkspaceRegistrySummary:y}=await import('./workspace-registry-summary-X5WRUU3T.js');return await y(t),{workspacePath:t,created:s,status:s.length>0?"passed":"skipped"}}export{W as ensureWorkspaceFoundation};
1
+ import {b}from'./chunk-LK66ATAQ.js';import {a}from'./chunk-2LBPX5K3.js';import c from'path';import u from'fs-extra';async function W(t,r){let o=await a(t),d=o?.name||c.basename(t),n,i=c.join(t,".python-version");if(await u.pathExists(i)){let a=(await u.readFile(i,"utf-8")).trim();a&&(n=a);}let e=r?.profile||"polyglot",m=e==="python-only"||e==="polyglot"||e==="enterprise",f=r?.installMethod||o?.metadata?.npm?.installMethod||(m?"poetry":"venv"),s=await b(t,{workspaceName:d,installMethod:f,pythonVersion:n,profile:e,writeMarker:true,writeGitignore:true,onlyIfMissing:!r?.force}),{publishWorkspaceRegistrySummary:y}=await import('./workspace-registry-summary-X5WRUU3T.js');return await y(t),{workspacePath:t,created:s,status:s.length>0?"passed":"skipped"}}export{W as ensureWorkspaceFoundation};
@@ -0,0 +1 @@
1
+ export{a as runWorkspaceStage}from'./chunk-YVTVFYSI.js';export{a as WORKSPACE_RUN_LAST_REPORT_FILENAME}from'./chunk-64RTZBHU.js';
@@ -1,5 +1,9 @@
1
1
  # 🔄 Dynamic AI Integration with Python Core
2
2
 
3
+ > [!NOTE]
4
+ > Legacy `rapidkit` compatibility documentation. For new projects, use
5
+ > [Workspai](https://www.workspai.dev/). See the [migration guide](./MIGRATING_TO_WORKSPAI.md).
6
+
3
7
  > **Date:** January 1, 2026
4
8
  > **Implementation:** Dynamic module catalog fetching from Python Core
5
9
 
@@ -258,7 +262,7 @@ $ rapidkit ai recommend "blockchain integration"
258
262
  Try more general terms (e.g., "storage" instead of "blockchain")
259
263
 
260
264
  3. Request feature:
261
- https://github.com/rapidkitlabs/rapidkit/issues
265
+ https://github.com/chistiq/rapidkit/issues
262
266
  ```
263
267
 
264
268
  ---
@@ -1,5 +1,9 @@
1
1
  # 🎯 AI Examples - Real-World Use Cases
2
2
 
3
+ > [!NOTE]
4
+ > Legacy `rapidkit` compatibility documentation. For new projects, use
5
+ > [Workspai](https://www.workspai.dev/). See the [migration guide](./MIGRATING_TO_WORKSPAI.md).
6
+
3
7
  Complete examples showing how to use RapidKit AI for different scenarios.
4
8
 
5
9
  ## 📱 Example 1: Building a Social Media App
@@ -416,4 +420,4 @@ npx rapidkit dev
416
420
 
417
421
  ---
418
422
 
419
- **Need help?** Open an issue: https://github.com/rapidkitlabs/rapidkit-npm/issues
423
+ **Need help?** Open an issue: https://github.com/chistiq/rapidkit-npm/issues
@@ -1,5 +1,9 @@
1
1
  # 🤖 RapidKit AI Features
2
2
 
3
+ > [!NOTE]
4
+ > Legacy `rapidkit` compatibility documentation. For new projects, use
5
+ > [Workspai](https://www.workspai.dev/). See the [migration guide](./MIGRATING_TO_WORKSPAI.md).
6
+
3
7
  AI-powered module recommendations using OpenAI embeddings to help you build faster.
4
8
 
5
9
  ## 🚀 Quick Start
@@ -391,7 +395,7 @@ npx rapidkit config show
391
395
  ```
392
396
 
393
397
  3. **Report issue:**
394
- - GitHub: https://github.com/rapidkitlabs/rapidkit-npm/issues
398
+ - GitHub: https://github.com/chistiq/rapidkit-npm/issues
395
399
  - Include: error message, OS, Node version, command used
396
400
 
397
401
  ## 📚 Commands Reference
@@ -457,4 +461,4 @@ MIT - See [LICENSE](../LICENSE)
457
461
 
458
462
  ---
459
463
 
460
- **Questions?** Open an issue on [GitHub](https://github.com/rapidkitlabs/rapidkit-npm/issues)
464
+ **Questions?** Open an issue on [GitHub](https://github.com/chistiq/rapidkit-npm/issues)
@@ -1,5 +1,9 @@
1
1
  # 🚀 AI Features - Quick Start Guide
2
2
 
3
+ > [!NOTE]
4
+ > Legacy `rapidkit` compatibility documentation. For new projects, use
5
+ > [Workspai](https://www.workspai.dev/). See the [migration guide](./MIGRATING_TO_WORKSPAI.md).
6
+
3
7
  Get started with RapidKit AI recommendations in 60 seconds!
4
8
 
5
9
  ## Option 1: Zero-Config Start (Recommended) ⚡
@@ -0,0 +1,139 @@
1
+ # Migrating from RapidKit npm to Workspai
2
+
3
+ This guide is for users who already run the legacy `rapidkit` npm CLI. New
4
+ projects should begin directly with [Workspai](https://github.com/chistiq/workspai).
5
+
6
+ ## What changes
7
+
8
+ | RapidKit compatibility surface | Workspai canonical surface |
9
+ | --- | --- |
10
+ | Package and command: `rapidkit` | Package and command: `workspai` |
11
+ | Project/workspace metadata: `.rapidkit/**` | Canonical metadata: `.workspai/**` |
12
+ | Managed workspaces: `~/rapidkit/workspaces/**` | Managed workspaces: `~/.workspai/workspaces/**` |
13
+ | Legacy documentation in this repository | Current documentation at [workspai.dev](https://www.workspai.dev/) |
14
+
15
+ Your source repository does not need to move. Workspai can adopt it in place
16
+ and create the canonical metadata through supported commands.
17
+
18
+ ## Before migration
19
+
20
+ 1. Commit or back up the source project.
21
+ 2. Record the RapidKit workspace and project paths used by CI or scripts.
22
+ 3. Keep the existing `.rapidkit` metadata until the Workspai result has been
23
+ verified.
24
+ 4. Do not rename `.rapidkit` to `.workspai` manually.
25
+
26
+ ## One existing project
27
+
28
+ Run from the project directory:
29
+
30
+ ```bash
31
+ cd /path/to/your-project
32
+ npx workspai adopt . --json
33
+ ```
34
+
35
+ The JSON response reports the selected workspace and the next `cd` command. If
36
+ no workspace is selected, Workspai creates or reuses:
37
+
38
+ ```text
39
+ ~/.workspai/workspaces/workspai
40
+ ```
41
+
42
+ Move to that workspace and build current evidence:
43
+
44
+ ```bash
45
+ cd ~/.workspai/workspaces/workspai
46
+ npx workspai workspace intelligence run \
47
+ --for-agent generic \
48
+ --strict \
49
+ --json
50
+ ```
51
+
52
+ The first run may report missing, stale, or blocking evidence. Follow the cited
53
+ producer or source fix; do not edit generated reports to manufacture readiness.
54
+
55
+ ## Several projects in one system
56
+
57
+ Create a named workspace:
58
+
59
+ ```bash
60
+ npx workspai create workspace my-workspace --profile minimal --yes
61
+ ```
62
+
63
+ Adopt each existing project without copying it:
64
+
65
+ ```bash
66
+ cd /path/to/frontend
67
+ npx workspai adopt . \
68
+ --workspace "$HOME/.workspai/workspaces/my-workspace" \
69
+ --name frontend
70
+
71
+ cd /path/to/api
72
+ npx workspai adopt . \
73
+ --workspace "$HOME/.workspai/workspaces/my-workspace" \
74
+ --name api
75
+ ```
76
+
77
+ Then run the intelligence chain from
78
+ `~/.workspai/workspaces/my-workspace`.
79
+
80
+ ## CI migration
81
+
82
+ Replace the package and command first; keep the decision boundary explicit:
83
+
84
+ ```yaml
85
+ - uses: actions/setup-node@v4
86
+ with:
87
+ node-version: '20.20.0'
88
+ cache: npm
89
+
90
+ - run: npm ci
91
+ - run: npx workspai workspace intelligence run --for-agent generic --strict --json
92
+ ```
93
+
94
+ Archive the governed outputs your workflow consumes, especially:
95
+
96
+ ```text
97
+ .workspai/workspace.contract.json
98
+ .workspai/reports/INDEX.json
99
+ .workspai/reports/workspace-intelligence-run-last-run.json
100
+ .workspai/reports/workspace-context-agent.json
101
+ ```
102
+
103
+ Do not silently rewrite a CI consumer from `.rapidkit` to `.workspai`; update it
104
+ to the corresponding Workspai artifact contract and validate its schema.
105
+
106
+ ## Agent and IDE migration
107
+
108
+ Run the canonical chain before asking an agent to reason across projects. The
109
+ generated `AGENTS.md`, grounding, report index, bounded graph queries, and MCP
110
+ surface give compatible agents a current evidence path without loading the
111
+ complete workspace into every prompt.
112
+
113
+ Use `--for-agent generic` for portable output. Select a specific target only
114
+ when the consumer needs its native integration surface.
115
+
116
+ ## Verification checklist
117
+
118
+ - The source projects remain at their original paths.
119
+ - The Workspai workspace contract lists every intended project.
120
+ - `.workspai/reports/INDEX.json` points to current artifacts.
121
+ - The Workspace Model and Knowledge Graph come from the same current revision.
122
+ - CI reads `.workspai` artifacts rather than renamed `.rapidkit` files.
123
+ - Agent surfaces were regenerated from Workspai evidence.
124
+ - Existing RapidKit automation remains available until the replacement path is
125
+ verified.
126
+
127
+ ## Rollback
128
+
129
+ Adoption does not relocate source code. If migration validation fails, keep the
130
+ existing RapidKit automation active, preserve the Workspai reports for
131
+ diagnosis, and correct the Workspai workspace or CI configuration. Avoid
132
+ deleting either metadata tree until the migration is accepted.
133
+
134
+ ## Current references
135
+
136
+ - [Workspai CLI repository](https://github.com/chistiq/workspai)
137
+ - [Workspai documentation](https://www.workspai.dev/)
138
+ - [Workspai product](https://www.workspai.com/)
139
+ - [RapidKit compatibility documentation](./README.md)
@@ -1,5 +1,9 @@
1
1
  # RapidKit Practical User Scenarios (Open Source Edition)
2
2
 
3
+ > [!NOTE]
4
+ > Legacy `rapidkit` compatibility documentation. For new projects, use
5
+ > [Workspai](https://www.workspai.dev/). See the [migration guide](./MIGRATING_TO_WORKSPAI.md).
6
+
3
7
  Practical workflows for OSS teams using the npm CLI. Command syntax: [commands-reference.md](./commands-reference.md). Import/adopt details: [workspace-operations.md](./workspace-operations.md).
4
8
 
5
9
  ## Scenario 0 — Existing project (adopt or import)
@@ -1,5 +1,9 @@
1
1
  # Optimization Guide
2
2
 
3
+ > [!NOTE]
4
+ > Legacy `rapidkit` compatibility documentation. For new projects, use
5
+ > [Workspai](https://www.workspai.dev/). See the [migration guide](./MIGRATING_TO_WORKSPAI.md).
6
+
3
7
  Optimization ideas for the RapidKit npm CLI codebase.
4
8
 
5
9
  **Users:** [../README.md](../README.md) · [OPEN_SOURCE_USER_SCENARIOS.md](./OPEN_SOURCE_USER_SCENARIOS.md) · [Documentation index](./README.md)
package/docs/README.md CHANGED
@@ -1,6 +1,14 @@
1
- # RapidKit NPM Documentation Index
1
+ # RapidKit npm compatibility documentation
2
2
 
3
- Hub for user and contributor documentation. Start with the [main README](../README.md) for install and quickstarts.
3
+ > [!IMPORTANT]
4
+ > These documents describe the legacy `rapidkit` compatibility CLI and its
5
+ > `.rapidkit` artifacts. New users and new integrations should use
6
+ > [Workspai](https://github.com/chistiq/workspai) and the current documentation
7
+ > at [workspai.dev](https://www.workspai.dev/).
8
+
9
+ Use this index when maintaining an existing RapidKit installation or helping a
10
+ team migrate safely. Start with the [main README](../README.md) and
11
+ [migration guide](./MIGRATING_TO_WORKSPAI.md).
4
12
 
5
13
  ## Table of contents
6
14
 
@@ -15,6 +23,7 @@ Hub for user and contributor documentation. Start with the [main README](../READ
15
23
 
16
24
  | Document | Description |
17
25
  | --- | --- |
26
+ | [MIGRATING_TO_WORKSPAI.md](./MIGRATING_TO_WORKSPAI.md) | Canonical package, workspace, CI, agent, and rollback migration path |
18
27
  | [commands-reference.md](./commands-reference.md) | Full CLI syntax, profiles, and policy keys |
19
28
  | [workspace-operations.md](./workspace-operations.md) | Import, adopt, snapshots, archives, contracts, infra |
20
29
  | [workspace-run.md](./workspace-run.md) | Polyglot fleet orchestration (`workspace run`) |
@@ -26,7 +35,7 @@ Hub for user and contributor documentation. Start with the [main README](../READ
26
35
  | [WORKSPACE_MARKER_SPEC.md](./WORKSPACE_MARKER_SPEC.md) | Workspace marker format |
27
36
  | [PACKAGE_MANAGER_POLICY.md](./PACKAGE_MANAGER_POLICY.md) | npm-only policy for this repository |
28
37
 
29
- **Common tasks**
38
+ **Legacy maintenance tasks**
30
39
 
31
40
  - Adopt an existing repo: [workspace-operations.md#import-and-adoption](./workspace-operations.md#import-and-adoption)
32
41
  - Scaffold a frontend app: [commands-reference.md](./commands-reference.md) (`create project nextjs <name>`)
package/docs/UTILITIES.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Utilities Documentation
2
2
 
3
+ > [!NOTE]
4
+ > Legacy `rapidkit` compatibility documentation. For new projects, use
5
+ > [Workspai](https://www.workspai.dev/). See the [migration guide](./MIGRATING_TO_WORKSPAI.md).
6
+
3
7
  Internal cache and performance helpers for the npm CLI codebase.
4
8
 
5
9
  **End-user commands:** [doctor-command.md](./doctor-command.md) · [OPEN_SOURCE_USER_SCENARIOS.md](./OPEN_SOURCE_USER_SCENARIOS.md) · [../README.md](../README.md)
@@ -1,5 +1,10 @@
1
1
  # RapidKit Workspace Marker Specification
2
2
 
3
+ > [!NOTE]
4
+ > Legacy `.rapidkit` compatibility specification. New integrations should use
5
+ > [Workspai](https://www.workspai.dev/) and canonical `.workspai` contracts. See
6
+ > the [migration guide](./MIGRATING_TO_WORKSPAI.md).
7
+
3
8
  ## Overview
4
9
 
5
10
  The `.rapidkit-workspace` file is the standardized marker that identifies a RapidKit workspace. It uses a **metadata layer architecture** that allows multiple tools (npm CLI, VS Code Extension, Python Core, etc.) to add their own metadata while preserving a consistent core structure.
@@ -1,5 +1,10 @@
1
1
  # Commands Reference
2
2
 
3
+ > [!NOTE]
4
+ > This reference documents the legacy `rapidkit` compatibility command. New
5
+ > scripts should use [Workspai](https://www.workspai.dev/). See the
6
+ > [migration guide](./MIGRATING_TO_WORKSPAI.md).
7
+
3
8
  Complete CLI syntax for the RapidKit npm wrapper. For behavior and workflows, see [workspace-operations.md](./workspace-operations.md) and [OPEN_SOURCE_USER_SCENARIOS.md](./OPEN_SOURCE_USER_SCENARIOS.md).
4
9
 
5
10
  ## Workspace lifecycle
@@ -1,5 +1,9 @@
1
1
  # 📖 RapidKit Config File Guide
2
2
 
3
+ > [!NOTE]
4
+ > Legacy `rapidkit` compatibility documentation. For new projects, use
5
+ > [Workspai](https://www.workspai.dev/). See the [migration guide](./MIGRATING_TO_WORKSPAI.md).
6
+
3
7
  ## 🎯 Purpose of `rapidkit.config.js`
4
8
 
5
9
  The `rapidkit.config.js` file is an **optional configuration file** that allows you to define default settings for creating workspaces and projects.
@@ -1,5 +1,10 @@
1
1
  # Create Planner Capabilities
2
2
 
3
+ > [!NOTE]
4
+ > This document preserves the legacy RapidKit planner contract for compatibility
5
+ > consumers. New creation flows belong to [Workspai](https://www.workspai.dev/).
6
+ > See the [migration guide](./MIGRATING_TO_WORKSPAI.md).
7
+
3
8
  RapidKit is a Workspace Intelligence platform, not a blind scaffold wrapper.
4
9
  The create planner separates project creation into three lanes so developers,
5
10
  CI, and AI agents share the same expectations.
@@ -1,5 +1,10 @@
1
1
  # RapidKit Doctor Command
2
2
 
3
+ > [!NOTE]
4
+ > This page documents the legacy `rapidkit doctor` compatibility surface. New
5
+ > projects should use [Workspai](https://www.workspai.dev/). See the
6
+ > [migration guide](./MIGRATING_TO_WORKSPAI.md).
7
+
3
8
  `doctor` checks health for the npm wrapper environment in system, workspace, or project scope.
4
9
 
5
10
  **Related:** [workspace-operations.md](./workspace-operations.md) · [commands-reference.md](./commands-reference.md) · [Documentation index](./README.md)
@@ -1,5 +1,10 @@
1
1
  # From Code to Shared Understanding
2
2
 
3
+ > [!NOTE]
4
+ > Historical RapidKit architecture documentation retained for compatibility.
5
+ > Current Workspace Intelligence architecture is maintained in
6
+ > [Workspai](https://www.workspai.dev/). See the [migration guide](./MIGRATING_TO_WORKSPAI.md).
7
+
3
8
  How RapidKit transforms projects and repositories into workspace intelligence for developers, CI, and AI agents.
4
9
 
5
10
  This Mermaid diagram is kept in the internal documentation because GitHub renders it correctly. The main npm README uses a PNG version of the same diagram so it remains visible on npm package pages.
@@ -43,4 +48,3 @@ flowchart TB
43
48
  Evidence --> CI
44
49
  Evidence --> Agents
45
50
  ```
46
-
@@ -1,5 +1,10 @@
1
1
  # Workspace Operations
2
2
 
3
+ > [!NOTE]
4
+ > This page documents legacy `.rapidkit` workspace operations. New workspaces
5
+ > should use [Workspai](https://www.workspai.dev/) and `.workspai` contracts. See
6
+ > the [migration guide](./MIGRATING_TO_WORKSPAI.md).
7
+
3
8
  Behavioral guide for import, adoption, snapshots, archives, contracts, collaboration bundles, and local infra sidecars.
4
9
 
5
10
  Command syntax: [commands-reference.md](./commands-reference.md).
@@ -1,5 +1,10 @@
1
1
  # Workspace Run — Polyglot Fleet Orchestration
2
2
 
3
+ > [!NOTE]
4
+ > Legacy `rapidkit workspace run` compatibility documentation. New integrations
5
+ > should use [Workspai](https://www.workspai.dev/). See the
6
+ > [migration guide](./MIGRATING_TO_WORKSPAI.md).
7
+
3
8
  `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
9
 
5
10
  ## Quick start
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "rapidkit",
3
- "version": "0.42.1",
3
+ "version": "0.42.3",
4
4
  "type": "module",
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.",
5
+ "description": "Legacy RapidKit npm compatibility CLI for existing users and migration to Workspai. New projects should use the workspai package.",
6
6
  "keywords": [
7
7
  "rapidkit",
8
8
  "workspai",
@@ -27,11 +27,15 @@
27
27
  "generator",
28
28
  "scaffold"
29
29
  ],
30
- "author": "RapidKit Team",
30
+ "author": "Chistiq",
31
31
  "license": "MIT",
32
32
  "repository": {
33
33
  "type": "git",
34
- "url": "git+https://github.com/rapidkitlabs/rapidkit-npm.git"
34
+ "url": "git+https://github.com/chistiq/rapidkit-npm.git"
35
+ },
36
+ "homepage": "https://www.getrapidkit.com/",
37
+ "bugs": {
38
+ "url": "https://github.com/chistiq/rapidkit-npm/issues"
35
39
  },
36
40
  "bin": {
37
41
  "rapidkit": "dist/index.js",
@@ -76,6 +80,7 @@
76
80
  "generate:contracts": "node scripts/generate-shared-contracts.mjs",
77
81
  "check:generated-contracts": "node scripts/generate-shared-contracts.mjs --check",
78
82
  "check:agent-customization-drift": "node scripts/check-agent-customization-drift.mjs",
83
+ "check:brand": "node scripts/check-brand-contract.mjs",
79
84
  "validate:contracts": "npm run check:shared-contracts && vitest run src/__tests__/contracts/",
80
85
  "test:parity-contract": "npm run check:shared-contracts && vitest run src/__tests__/contracts/import-stack-parity.snapshot.test.ts",
81
86
  "test:watch": "vitest",
@@ -96,7 +101,7 @@
96
101
  "format": "prettier --write \"src/**/*.ts\"",
97
102
  "format:check": "prettier --check \"src/**/*.ts\"",
98
103
  "typecheck": "tsc --noEmit",
99
- "validate": "npm run typecheck && npm run lint && npm run format:check && npm test",
104
+ "validate": "npm run check:brand && npm run typecheck && npm run lint && npm run format:check && npm test",
100
105
  "security": "npm audit --audit-level=moderate",
101
106
  "security:fix": "npm audit fix",
102
107
  "metrics": "npx tsx scripts/metrics.ts",
@@ -113,7 +118,7 @@
113
118
  "analyze": "npm run build && node scripts/analyze-dist.mjs",
114
119
  "size-check": "npm run build && size-limit",
115
120
  "bench": "npx tsx scripts/benchmarks.ts",
116
- "quality": "npm run typecheck && npm run lint && npm run format:check && npm test && npm run size-check && npm run security && npm run validate:docs && npm run smoke:frontend-generators && npm run check:contracts && npm run check:shared-contracts && npm run check:parity-snapshot && npm run check:agent-customization-drift",
121
+ "quality": "npm run check:brand && npm run typecheck && npm run lint && npm run format:check && npm test && npm run size-check && npm run security && npm run validate:docs && npm run smoke:frontend-generators && npm run check:contracts && npm run check:shared-contracts && npm run check:parity-snapshot && npm run check:agent-customization-drift",
117
122
  "act-matrix": "act -P ubuntu-latest=ghcr.io/catthehacker/ubuntu:act-22.04 -P macos-latest=ghcr.io/catthehacker/ubuntu:act-22.04 -P windows-latest=ghcr.io/catthehacker/ubuntu:act-22.04 --pull=false -j build-test-matrix",
118
123
  "release:dry": "bash scripts/release.sh --no-publish --yes --allow-dirty",
119
124
  "release:patch": "bash scripts/release.sh patch",
@@ -1,11 +1,11 @@
1
1
  # {{ project_name }}
2
2
 
3
- Domain-driven FastAPI service generated with [RapidKit](https://github.com/rapidkitlabs/rapidkit-core).
3
+ Domain-driven FastAPI service generated with [RapidKit Core](https://github.com/chistiq/rapidkit-core). It can be adopted into Workspai workspace intelligence when you want workspace-level context, evidence, and release governance.
4
4
 
5
5
  ## Quick start
6
6
 
7
7
  ```bash
8
- # Load the project-aware RapidKit CLI (adds .rapidkit/rapidkit to PATH)
8
+ # Load the project-local RapidKit Core launcher (adds .rapidkit/rapidkit to PATH)
9
9
  source .rapidkit/activate
10
10
 
11
11
  # Bootstrap dependencies (creates .venv + installs Poetry deps)
@@ -22,7 +22,7 @@ make test
22
22
  # Run the service
23
23
  make dev
24
24
 
25
- # Use the RapidKit CLI helpers when you prefer auto-detected environments
25
+ # Use RapidKit Core helpers when you prefer auto-detected environments
26
26
  rapidkit dev
27
27
  rapidkit lint
28
28
  rapidkit test
@@ -37,7 +37,7 @@ make audit
37
37
 
38
38
  > Lockfiles are generated automatically during scaffolding. Set `RAPIDKIT_SKIP_LOCKS=1` (or `RAPIDKIT_GENERATE_LOCKS=0`) before running `rapidkit create` if you want to skip the lockfile attempt.
39
39
 
40
- > Need to see every RapidKit CLI command? Run `rapidkit --help` or check the CLI reference in the docs for the full catalog.
40
+ > Need to see every project-local RapidKit Core command? Run `rapidkit --help`. If this project is part of a Workspai workspace, run `npx workspai --help` from the workspace root for workspace intelligence commands.
41
41
 
42
42
  ## Project structure
43
43
 
@@ -99,7 +99,7 @@ health endpoint and the application factory.
99
99
 
100
100
  ## Local development
101
101
 
102
- - `rapidkit init` bootstraps dependencies via the project-local CLI (run it after sourcing `.rapidkit/activate`).
102
+ - `rapidkit init` bootstraps dependencies via the project-local RapidKit Core launcher (run it after sourcing `.rapidkit/activate`).
103
103
  - `make init` is an optional alias for `rapidkit init` when you prefer Make targets.
104
104
  - `make install` re-runs `rapidkit init` unless `SKIP_INIT=1` is set and refreshes developer tooling such as pre-commit hooks.
105
105
  - `./bootstrap.sh` copies `.env.example` to `.env` (when missing) and runs `SKIP_INIT=1 make install` for you.
@@ -107,7 +107,7 @@ health endpoint and the application factory.
107
107
  - `make lint`, `make typecheck`, and `make test` (or `rapidkit lint` / `rapidkit test`) are thin wrappers around Ruff, mypy, and pytest for consistent CI parity.
108
108
  - `make audit` runs `pip-audit` and `npm audit` to surface vulnerable dependencies early.
109
109
 
110
- Pre-commit is configured with Ruff, Black, mypy, and hygiene hooks; `./bootstrap.sh` installs them automatically (or run `SKIP_INIT=1 make install`). Use the RapidKit CLI variants when you need it to auto-discover the right virtual environment inside automation scripts.
110
+ Pre-commit is configured with Ruff, Black, mypy, and hygiene hooks; `./bootstrap.sh` installs them automatically (or run `SKIP_INIT=1 make install`). Use the RapidKit Core variants when you need them to auto-discover the right virtual environment inside automation scripts.
111
111
 
112
112
  <!-- <<<inject:module-snippet>>> -->
113
113
 
@@ -17,21 +17,21 @@ help = "src.cli:help_cmd"
17
17
 
18
18
  [tool.poetry.dependencies]
19
19
  python = "^{{ python_version }}"
20
- fastapi = "^0.128.0"
21
- uvicorn = { extras = ["standard"], version = "^0.40.0" }
20
+ fastapi = "^0.139.0"
21
+ uvicorn = { extras = ["standard"], version = "^0.50.2" }
22
22
  pydantic = "^2.12.5"
23
23
  {% if has_settings -%}
24
- pydantic-settings = { version = "^2.12.0", extras = ["yaml"] }
24
+ pydantic-settings = { version = "^2.14.2", extras = ["yaml"] }
25
25
  {% endif %}
26
26
  # <<<inject:poetry-dependencies>>>
27
27
 
28
28
  [tool.poetry.group.dev.dependencies]
29
- pytest = "^9.0.2"
29
+ pytest = "^9.0.3"
30
30
  pytest-asyncio = "^1.3.0"
31
31
  pytest-cov = "^7.0.0"
32
32
  httpx = "^0.28.1"
33
33
  ruff = "^0.14.10"
34
- black = "^25.12.0"
34
+ black = "^26.3.1"
35
35
  isort = "^7.0.0"
36
36
  mypy = "^1.19.1"
37
37
  build = "^1.3.0"
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env python3
2
2
  """Project CLI wrapper for {{ project_name }} (DDD edition).
3
3
 
4
- Prefer a per-project CLI in `.rapidkit/cli.py` when present. Otherwise
4
+ Prefer a per-project RapidKit Core wrapper in `.rapidkit/cli.py` when present. Otherwise
5
5
  provide helpful guidance to the developer rather than guessing environment
6
6
  details.
7
7
  """
@@ -14,7 +14,7 @@ from typing import Optional
14
14
 
15
15
 
16
16
  def _missing_cli(name: str) -> None:
17
- print(f"❌ Missing project-local CLI (.rapidkit/cli.py) - can't run '{name}'")
17
+ print(f"❌ Missing project-local RapidKit Core wrapper (.rapidkit/cli.py) - can't run '{name}'")
18
18
  print("💡 If you're a new user run: rapidkit init # create venv + install deps")
19
19
  sys.exit(127)
20
20
 
@@ -35,7 +35,7 @@ def _load_project_cli_module() -> Optional[object]:
35
35
  _mod = _load_project_cli_module()
36
36
 
37
37
 
38
- # Default placeholders -- call `_missing_cli` if the project-local CLI isn't
38
+ # Default placeholders -- call `_missing_cli` if the project-local RapidKit Core wrapper isn't
39
39
  # available. These are real functions so linters don't complain.
40
40
  def init() -> None:
41
41
  _missing_cli("init")