workspai 0.43.0 → 0.43.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/README.md +3 -3
  2. package/contracts/extension-cli-compatibility.v1.json +1 -1
  3. package/dist/{artifact-remediation-plan-5GJWPPRS.js → artifact-remediation-plan-244S5K6I.js} +3 -3
  4. package/dist/autopilot-release-45YVOBQO.js +1 -0
  5. package/dist/chunk-3QVTWKUI.js +4 -0
  6. package/dist/{chunk-T6OR6YOI.js → chunk-7UZVOYF5.js} +1 -1
  7. package/dist/{chunk-CVTCPPEF.js → chunk-AMDKXXLP.js} +1 -1
  8. package/dist/{chunk-EWYYLJQY.js → chunk-CDE4Q77U.js} +1 -1
  9. package/dist/{chunk-AFSZHLQT.js → chunk-DOCPUNWS.js} +1 -1
  10. package/dist/{chunk-OJEWQO3Z.js → chunk-EMTQ6OKI.js} +17 -17
  11. package/dist/{chunk-RE773WOX.js → chunk-FDDDQMJ2.js} +5 -5
  12. package/dist/{chunk-5SWNSJGW.js → chunk-FHSMY75W.js} +1 -1
  13. package/dist/chunk-FM7GMFZA.js +2 -0
  14. package/dist/{chunk-54XJNLYC.js → chunk-HV5ZFXAZ.js} +1 -1
  15. package/dist/{chunk-LO4C4VXR.js → chunk-LRW2SAGL.js} +1 -1
  16. package/dist/{chunk-PI5KUXDA.js → chunk-LTWYYP6E.js} +1 -1
  17. package/dist/{chunk-VRDF2J46.js → chunk-ONU457VN.js} +17 -17
  18. package/dist/{chunk-LUP4U6EE.js → chunk-P424XYHP.js} +1 -1
  19. package/dist/{chunk-LPZFK3Y6.js → chunk-PPHTYJ7G.js} +61 -61
  20. package/dist/{chunk-XEJD4KCV.js → chunk-TH5Y3EMA.js} +1 -1
  21. package/dist/chunk-TQEMLBAG.js +1 -0
  22. package/dist/{chunk-3KXW53QI.js → chunk-U6AXYUQY.js} +1 -1
  23. package/dist/{chunk-AAKUNWPR.js → chunk-UQKCCWUL.js} +43 -43
  24. package/dist/{chunk-VZKSNUEE.js → chunk-XNGANEXM.js} +1 -1
  25. package/dist/{create-WRZO4HK2.js → create-42RTNLH2.js} +1 -1
  26. package/dist/demo-kit-DZ7TPG7K.js +149 -0
  27. package/dist/doctor-DK4BON3N.js +1 -0
  28. package/dist/{dotnet-webapi-clean-IPY3MCGQ.js → dotnet-webapi-clean-BYUUHX5Y.js} +20 -20
  29. package/dist/{gofiber-standard-N5N3QGH3.js → gofiber-standard-B6UK5GR7.js} +31 -31
  30. package/dist/{gogin-standard-LAWQTBWL.js → gogin-standard-BXU44VEM.js} +31 -31
  31. package/dist/index.js +222 -185
  32. package/dist/pipeline-HQ57V6OZ.js +5 -0
  33. package/dist/{pythonRapidkitExec-3L3XJBSY.js → pythonRapidkitExec-GCQ3M46E.js} +1 -1
  34. package/dist/{springboot-standard-OZYF7ZM7.js → springboot-standard-PEHDKH2L.js} +27 -27
  35. package/dist/{workspace-PR6VZRBG.js → workspace-DZHWB7BV.js} +1 -1
  36. package/dist/{workspace-agent-sync-KTYF3HQR.js → workspace-agent-sync-5ADIQS7B.js} +1 -1
  37. package/dist/{workspace-context-QUTOP2XV.js → workspace-context-GEXDHA7A.js} +1 -1
  38. package/dist/{workspace-contract-XUGMCUSQ.js → workspace-contract-2TA27LGT.js} +1 -1
  39. package/dist/workspace-explain-D5NNL3NG.js +1 -0
  40. package/dist/{workspace-foundation-KGSV4E6D.js → workspace-foundation-FQWHPQGX.js} +1 -1
  41. package/dist/{workspace-intelligence-QJGVL37U.js → workspace-intelligence-BEM6WGCZ.js} +1 -1
  42. package/dist/{workspace-mcp-serve-AK4MYEHQ.js → workspace-mcp-serve-OMBA5V3C.js} +1 -1
  43. package/dist/{workspace-model-PNXXOGPO.js → workspace-model-F3B75TYT.js} +1 -1
  44. package/dist/workspace-registry-summary-6MFBRWDS.js +1 -0
  45. package/dist/workspace-run-3WJXIQKR.js +1 -0
  46. package/dist/{workspace-verify-WSDUUTR5.js → workspace-verify-OAATQV5T.js} +1 -1
  47. package/dist/{workspace-watch-AGPOJ74Q.js → workspace-watch-HU2OTQ52.js} +1 -1
  48. package/package.json +12 -2
  49. package/templates/kits/fastapi-ddd/.gitignore.j2 +11 -0
  50. package/templates/kits/fastapi-ddd/README.md.j2 +23 -18
  51. package/templates/kits/fastapi-ddd/common/env.example.j2 +2 -2
  52. package/templates/kits/fastapi-ddd/pyproject.toml.j2 +7 -7
  53. package/templates/kits/fastapi-ddd/src/app/config/__init__.py.j2 +1 -1
  54. package/templates/kits/fastapi-ddd/src/cli.py.j2 +6 -9
  55. package/templates/kits/fastapi-ddd/src/main.py.j2 +1 -1
  56. package/templates/kits/fastapi-standard/.gitignore.j2 +11 -0
  57. package/templates/kits/fastapi-standard/README.md.j2 +35 -30
  58. package/templates/kits/fastapi-standard/common/env.example.j2 +2 -2
  59. package/templates/kits/fastapi-standard/pyproject.toml.j2 +7 -7
  60. package/templates/kits/fastapi-standard/src/cli.py.j2 +7 -10
  61. package/templates/kits/fastapi-standard/src/main.py.j2 +1 -1
  62. package/templates/kits/fastapi-standard/src/routing/examples.py.j2 +1 -1
  63. package/templates/kits/fastapi-standard/tests/test_examples.py.j2 +1 -1
  64. package/templates/kits/nestjs-standard/.dockerignore.j2 +11 -0
  65. package/templates/kits/nestjs-standard/.eslintrc.js.j2 +25 -0
  66. package/templates/kits/nestjs-standard/.gitignore.j2 +22 -0
  67. package/templates/kits/nestjs-standard/.node-version.j2 +1 -0
  68. package/templates/kits/nestjs-standard/.nvmrc.j2 +1 -0
  69. package/templates/kits/nestjs-standard/.prettierrc.j2 +7 -0
  70. package/templates/kits/nestjs-standard/README.md.j2 +23 -18
  71. package/templates/kits/nestjs-standard/docs/README.md.j2 +2 -2
  72. package/templates/kits/nestjs-standard/jest.config.ts.j2 +1 -7
  73. package/templates/kits/nestjs-standard/package.json.j2 +1 -1
  74. package/templates/kits/nestjs-standard/src/config/configuration.ts.j2 +4 -4
  75. package/templates/kits/nestjs-standard/src/main.ts.j2 +1 -1
  76. package/templates/kits/nestjs-standard/src/modules/index.ts.j2 +1 -1
  77. package/templates/kits/nestjs-standard/tsconfig.build.json.j2 +1 -1
  78. package/templates/kits/nestjs-standard/tsconfig.json.j2 +1 -1
  79. package/dist/autopilot-release-QYUOVB26.js +0 -1
  80. package/dist/chunk-LYC6AIF2.js +0 -2
  81. package/dist/chunk-WU4ZRRA5.js +0 -4
  82. package/dist/demo-kit-AJ5LIM5G.js +0 -149
  83. package/dist/doctor-MF3M3FS3.js +0 -1
  84. package/dist/pipeline-QCUHFWDY.js +0 -5
  85. package/dist/workspace-explain-JEONEGZZ.js +0 -1
  86. package/dist/workspace-registry-summary-RUJE6RPH.js +0 -1
  87. package/dist/workspace-run-Y7YMUIHX.js +0 -1
@@ -0,0 +1,5 @@
1
+ import {a as a$2}from'./chunk-OL64GWQC.js';import {c as c$1}from'./chunk-LTWYYP6E.js';import {d}from'./chunk-UQKCCWUL.js';import {b}from'./chunk-ONU457VN.js';import {a as a$3}from'./chunk-LRW2SAGL.js';import {f,e}from'./chunk-T3GJ7YVG.js';import {a}from'./chunk-22DT744Z.js';import {c,a as a$1,d as d$1}from'./chunk-NAAQMSO3.js';import c$2 from'chalk';import p from'path';function W(s){return s===0?"pass":s===2?"warn":"fail"}function F(s){return s.some(r=>r.status==="fail")?"blocked":s.some(r=>r.status==="warn")?"needs-attention":"ready"}function j(s,r){if(r)return 3;let t=s.some(i=>i.status==="fail"),n=s.some(i=>i.status==="warn");return t?1:n?2:0}async function G(s){let r=await b(s,true),t=false;try{let{syncWorkspaceContract:n}=await import('./workspace-contract-2TA27LGT.js');await n({workspacePath:s}),t=true;}catch{t=false;}return {sync:r,contractSynced:t}}async function I(s={}){let r=p.resolve(s.workspacePath??process.cwd()),t=a(r);if(!t)throw new Error("No Workspai workspace found in current directory or parents");let n=[],i=[],l=false,d$2,m,g,f$1=Date.now();try{let{sync:e,contractSynced:a}=await G(t),o=e.workspaceFound&&(e.added.length>0||e.skipped>=0)||e.workspaceFound?"pass":"warn";n.push({name:"sync",status:o,durationMs:Date.now()-f$1,summary:e.workspaceFound?`registry sync complete (${e.added.length} added, ${e.skipped} existing)${a?", contract synced":""}`:"workspace not registered in global registry; contract sync attempted"}),e.workspaceFound||i.push("workspace registry entry missing \u2014 run workspai create workspace or register manually");}catch(e){l=true,n.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 y=Date.now();try{let e=await d({workspace:true,json:true,quiet:true,strict:s.strict===true,ci:s.strict!==true}),a=W(e),o=await c(t,".workspai/reports/doctor-last-run.json")??a$1(t,".workspai/reports/doctor-last-run.json");n.push({name:"doctor",status:a,durationMs:Date.now()-y,summary:a==="pass"?"doctor workspace passed":a==="warn"?"doctor workspace reported warnings":"doctor workspace did not pass",exitCode:e,evidencePath:o}),a==="fail"?i.push("doctor workspace gate failed"):a==="warn"&&i.push("doctor workspace reported warnings");}catch(e){l=true,n.push({name:"doctor",status:"fail",durationMs:Date.now()-y,summary:`doctor failed: ${e instanceof Error?e.message:String(e)}`}),i.push("doctor workspace stage failed");}if(s.skipAnalyze)n.push({name:"analyze",status:"skipped",durationMs:0,summary:"analyze stage skipped"});else {let e=Date.now();try{let a=await a$2({workspacePath:t,json:true,strict:s.strict===true});d$2=p.isAbsolute(a.enterpriseControls.evidencePath)?a.enterpriseControls.evidencePath:p.join(t,a.enterpriseControls.evidencePath);let o=a.summary.verdict==="blocked"?"fail":a.summary.verdict==="needs-attention"?"warn":"pass";n.push({name:"analyze",status:o,durationMs:Date.now()-e,summary:`analyze verdict: ${a.summary.verdict} (score ${a.summary.score}/100)`,evidencePath:d$2}),o==="fail"?i.push("analyze reported blocked verdict"):o==="warn"&&i.push("analyze reported needs-attention verdict");}catch(a){l=true,n.push({name:"analyze",status:"fail",durationMs:Date.now()-e,summary:`analyze failed: ${a instanceof Error?a.message:String(a)}`}),i.push("analyze stage failed");}}let w=Date.now();try{let e=await a$3({startPath:t,writeReport:true,skipVerify:s.skipVerify===true});m=e.evidencePath;let a=e.overallStatus==="pass"?"pass":e.overallStatus==="warn"?"warn":"fail";n.push({name:"readiness",status:a,durationMs:Date.now()-w,summary:`readiness overall: ${e.overallStatus}`,evidencePath:e.evidencePath}),a==="fail"?i.push(...e.blockingReasons.map(o=>`readiness: ${o}`)):a==="warn"&&i.push(...e.gates.filter(o=>o.status==="warn").map(o=>`readiness warn: ${o.gate}: ${o.summary}`));}catch(e){l=true,n.push({name:"readiness",status:"fail",durationMs:Date.now()-w,summary:`readiness failed: ${e instanceof Error?e.message:String(e)}`}),i.push("readiness stage failed");}if(s.skipAutopilot)n.push({name:"autopilot",status:"skipped",durationMs:0,summary:"autopilot stage skipped"});else {let e=Date.now(),a=s.autopilotMode??"audit";try{let o=await c$1({workspacePath:t,mode:a,json:true,skipPipelineStages:true});g=o.artifacts.reportPath;let k=o.summary.verdict==="approved"?"pass":o.summary.verdict==="partial"?"warn":"fail";n.push({name:"autopilot",status:k,durationMs:Date.now()-e,summary:`autopilot ${a}: ${o.summary.verdict}`,exitCode:o.summary.exitCode,evidencePath:g}),k!=="pass"&&i.push(...o.blockingReasons.slice(0,5));}catch(o){l=true,n.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=F(n),h=j(n,l),M=p.join(t,".workspai","reports","pipeline-last-run.json"),u={schemaVersion:"rapidkit-pipeline-v1",generatedAt:new Date().toISOString(),workspacePath:t,summary:{verdict:z,exitCode:h,stagesPassed:n.filter(e=>e.status==="pass").length,stagesWarn:n.filter(e=>e.status==="warn").length,stagesFailed:n.filter(e=>e.status==="fail").length},stages:n,blockingReasons:[...new Set(i)],artifacts:{reportPath:M,analyzeEvidencePath:d$2,readinessEvidencePath:m,autopilotEvidencePath:g}};if(s.writeReport!==false){let e$1=f(u,{commandId:"workspacePipeline",exitCode:h,generatedAt:u.generatedAt,blockers:u.blockingReasons,runId:e()});await d$1(t,".workspai/reports/pipeline-last-run.json",e$1);}if(s.writeReport!==false&&s.noAgentSync!==true&&process.env.RAPIDKIT_NO_AGENT_SYNC!=="1"&&s.agentSync!==false)try{let{syncWorkspaceAgentGrounding:e}=await import('./workspace-agent-sync-5ADIQS7B.js'),a=await e({workspacePath:t,write:true,refreshContext:true,strict:false});u.agentGrounding={indexPath:a.indexPath,writtenFiles:a.writtenFiles,blockers:a.blockers};}catch{}return u}async function H(s){let r;try{r=await I(s);}catch(t){let n=t instanceof Error?t.message:String(t);s.json?console.log(JSON.stringify({schemaVersion:"rapidkit-pipeline-error-v1",ok:false,error:{message:n}},null,2)):console.log(c$2.red(`Pipeline failed: ${n}`)),process.exit(1);}if(s.json)console.log(JSON.stringify(r,null,2));else {console.log(c$2.bold.cyan(`
2
+ \u{1F517} Workspai Governance Pipeline
3
+ `)),console.log(c$2.bold(`Workspace: ${c$2.cyan(p.basename(r.workspacePath))}`)),console.log(c$2.gray(`Path: ${r.workspacePath}`)),console.log(c$2.white(`Verdict: ${r.summary.verdict} Exit: ${r.summary.exitCode} (${r.summary.stagesPassed} pass / ${r.summary.stagesWarn} warn / ${r.summary.stagesFailed} fail)`));for(let t of r.stages){let n=t.status==="pass"?c$2.green("PASS"):t.status==="warn"?c$2.yellow("WARN"):t.status==="skipped"?c$2.gray("SKIP"):c$2.red("FAIL");console.log(` - ${t.name}: ${n} ${t.summary}`);}if(r.blockingReasons.length>0){console.log(c$2.bold(`
4
+ Blocking reasons:`));for(let t of r.blockingReasons.slice(0,8))console.log(c$2.gray(` \u2022 ${t}`));}console.log(c$2.gray(`
5
+ Evidence: ${r.artifacts.reportPath}`)),r.agentGrounding?.writtenFiles.length&&console.log(c$2.gray(`Agent grounding: ${r.agentGrounding.writtenFiles.length} file(s) synced (INDEX + AGENTS.md + Copilot/Cursor/Claude hooks)`));}r.summary.exitCode!==0&&process.exit(r.summary.exitCode);}export{I as runPipeline,H as runPipelineCommand};
@@ -1 +1 @@
1
- export{k as __test__,b as checkRapidkitCoreAvailable,c as checkRapidkitCoreVersionCompatible,i as getCachedCoreTopLevelCommands,h as getCoreTopLevelCommands,j as getModulesCatalog,d as resolveRapidkitPython,e as runCoreRapidkit,g as runCoreRapidkitCapture,f as runCoreRapidkitStreamed}from'./chunk-OJEWQO3Z.js';
1
+ export{k as __test__,b as checkRapidkitCoreAvailable,c as checkRapidkitCoreVersionCompatible,i as getCachedCoreTopLevelCommands,h as getCoreTopLevelCommands,j as getModulesCatalog,d as resolveRapidkitPython,e as runCoreRapidkit,g as runCoreRapidkitCapture,f as runCoreRapidkitStreamed}from'./chunk-EMTQ6OKI.js';
@@ -1,4 +1,4 @@
1
- import {b,c as c$1}from'./chunk-IBJEQHJR.js';import {c}from'./chunk-Y45WZR5N.js';import {promises}from'fs';import g from'path';import i from'chalk';import y from'ora';import {execa}from'execa';var R="21",$="3.5.0",x="2.8.9";function u(e){return e.trim().toLowerCase().replace(/[^a-z0-9]+/g,".").replace(/^\.+|\.+$/g,"").replace(/\.{2,}/g,".").split(".").map(p=>p.replace(/^[^a-z]+/,"").replace(/[^a-z0-9]/g,"")).filter(Boolean).join(".")}function _(e,t){return e.replace(/[\r\n\t]+/g," ").trim()||t}function j(e){return e.trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").replace(/-{2,}/g,"-")}function M(e,t){let s=u(e)||"com.workspai.apps",p=u(t)||"service";return `${s}.${p}`}function E(e){return e.replace(/\./g,"/")}function T(){return JSON.stringify({engine:"npm",runtime:"java"},null,2)}function A(e,t){return JSON.stringify({kit_name:"springboot.standard",runtime:"java",module_support:false,project_name:e.project_name,artifact_id:e.artifact_id,group_id:e.group_id,package_name:e.package_name,app_version:e.app_version,created_by:"workspai",workspai_version:t,rapidkit_version:t,created_at:new Date().toISOString()},null,2)}function P(e){return `<?xml version="1.0" encoding="UTF-8"?>
1
+ import {b,c as c$1}from'./chunk-IBJEQHJR.js';import {c}from'./chunk-Y45WZR5N.js';import {b as b$1,a}from'./chunk-TQEMLBAG.js';import {promises}from'fs';import g from'path';import i from'chalk';import $ from'ora';import {execa}from'execa';var x="21",j="3.5.0",M="2.8.9";function f(e){return e.trim().toLowerCase().replace(/[^a-z0-9]+/g,".").replace(/^\.+|\.+$/g,"").replace(/\.{2,}/g,".").split(".").map(p=>p.replace(/^[^a-z]+/,"").replace(/[^a-z0-9]/g,"")).filter(Boolean).join(".")}function h(e,t){return e.replace(/[\r\n\t]+/g," ").trim()||t}function E(e){return e.trim().toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").replace(/-{2,}/g,"-")}function T(e,t){let s=f(e)||"com.workspai.apps",p=f(t)||"service";return `${s}.${p}`}function A(e){return e.replace(/\./g,"/")}function P(){return JSON.stringify({engine:"npm",runtime:"java"},null,2)}function C(e,t){return JSON.stringify({kit_name:"springboot.standard",runtime:"java",module_support:false,project_name:e.project_name,artifact_id:e.artifact_id,group_id:e.group_id,package_name:e.package_name,app_version:e.app_version,created_by:"workspai",workspai_version:t,rapidkit_version:t,created_at:new Date().toISOString()},null,2)}function D(e){return `<?xml version="1.0" encoding="UTF-8"?>
2
2
  <project xmlns="http://maven.apache.org/POM/4.0.0"
3
3
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4
4
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
@@ -131,7 +131,7 @@ import {b,c as c$1}from'./chunk-IBJEQHJR.js';import {c}from'./chunk-Y45WZR5N.js'
131
131
  </plugins>
132
132
  </build>
133
133
  </project>
134
- `}function C(e,t){return `package ${e.package_name};
134
+ `}function B(e,t){return `package ${e.package_name};
135
135
 
136
136
  import ${e.package_name}.config.ApplicationInfoProperties;
137
137
  import org.springframework.boot.SpringApplication;
@@ -146,7 +146,7 @@ public class ${t} {
146
146
  SpringApplication.run(${t}.class, args);
147
147
  }
148
148
  }
149
- `}function D(e){return `package ${e.package_name}.config;
149
+ `}function V(e){return `package ${e.package_name}.config;
150
150
 
151
151
  import org.springframework.boot.context.properties.ConfigurationProperties;
152
152
 
@@ -157,7 +157,7 @@ public record ApplicationInfoProperties(
157
157
  String version,
158
158
  String owner
159
159
  ) {}
160
- `}function B(e){return `package ${e.package_name}.config;
160
+ `}function O(e){return `package ${e.package_name}.config;
161
161
 
162
162
  import io.swagger.v3.oas.models.OpenAPI;
163
163
  import io.swagger.v3.oas.models.info.Contact;
@@ -180,7 +180,7 @@ public class OpenApiConfiguration {
180
180
  .license(new License().name("MIT")));
181
181
  }
182
182
  }
183
- `}function V(e){return `package ${e.package_name}.api.http.dto;
183
+ `}function L(e){return `package ${e.package_name}.api.http.dto;
184
184
 
185
185
  import java.time.Instant;
186
186
  import java.util.List;
@@ -193,7 +193,7 @@ public record SystemInfoResponse(
193
193
  List<String> profiles,
194
194
  Instant timestamp
195
195
  ) {}
196
- `}function O(e){return `package ${e.package_name}.application;
196
+ `}function q(e){return `package ${e.package_name}.application;
197
197
 
198
198
  import ${e.package_name}.api.http.dto.SystemInfoResponse;
199
199
  import ${e.package_name}.config.ApplicationInfoProperties;
@@ -232,7 +232,7 @@ public class SystemInfoService {
232
232
  );
233
233
  }
234
234
  }
235
- `}function L(e){return `package ${e.package_name}.api.http;
235
+ `}function N(e){return `package ${e.package_name}.api.http;
236
236
 
237
237
  import ${e.package_name}.api.http.dto.SystemInfoResponse;
238
238
  import ${e.package_name}.application.SystemInfoService;
@@ -259,7 +259,7 @@ public class SystemInfoController {
259
259
  return systemInfoService.snapshot();
260
260
  }
261
261
  }
262
- `}function q(e){return `package ${e.package_name}.api.http;
262
+ `}function W(e){return `package ${e.package_name}.api.http;
263
263
 
264
264
  import java.time.Instant;
265
265
  import java.util.Map;
@@ -292,7 +292,7 @@ public class ApiExceptionHandler {
292
292
  ));
293
293
  }
294
294
  }
295
- `}function N(e){return `server:
295
+ `}function J(e){return `server:
296
296
  port: \${PORT:${e.port}}
297
297
  shutdown: graceful
298
298
 
@@ -331,7 +331,7 @@ rapidkit:
331
331
  description: ${e.description}
332
332
  version: ${e.app_version}
333
333
  owner: ${e.author}
334
- `}function W(){return `spring:
334
+ `}function G(){return `spring:
335
335
  main:
336
336
  banner-mode: off
337
337
 
@@ -340,11 +340,11 @@ management:
340
340
  web:
341
341
  exposure:
342
342
  include: health,info
343
- `}function J(e){return `PORT=${e.port}
343
+ `}function U(e){return `PORT=${e.port}
344
344
  SPRING_PROFILES_ACTIVE=local
345
345
  API_BASE_PATH=/api/v1
346
346
  JAVA_OPTS=-Xms256m -Xmx512m
347
- `}function U(){return `FROM maven:3.9.9-eclipse-temurin-21 AS build
347
+ `}function H(){return `FROM maven:3.9.9-eclipse-temurin-21 AS build
348
348
  WORKDIR /workspace
349
349
 
350
350
  COPY pom.xml ./
@@ -362,7 +362,7 @@ EXPOSE 8080
362
362
  ENV JAVA_OPTS=""
363
363
 
364
364
  ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar /app/app.jar"]
365
- `}function G(e){return `services:
365
+ `}function F(e){return `services:
366
366
  ${e.artifact_id}:
367
367
  build:
368
368
  context: .
@@ -373,20 +373,20 @@ ENTRYPOINT ["sh", "-c", "java $JAVA_OPTS -jar /app/app.jar"]
373
373
  - .env
374
374
  environment:
375
375
  SPRING_PROFILES_ACTIVE: docker
376
- `}function H(){return `target
376
+ `}function z(){return `target
377
377
  .git
378
378
  .idea
379
379
  .vscode
380
380
  node_modules
381
381
  coverage
382
- `}function F(){return `.idea/
382
+ `}function Y(){return `.idea/
383
383
  .vscode/
384
384
  target/
385
385
  .mvn/
386
386
  *.log
387
387
  .DS_Store
388
388
  .env
389
- `}function z(){return `root = true
389
+ `}function X(){return `root = true
390
390
 
391
391
  [*]
392
392
  charset = utf-8
@@ -398,8 +398,8 @@ trim_trailing_whitespace = true
398
398
 
399
399
  [*.md]
400
400
  trim_trailing_whitespace = false
401
- `}function Y(e){return ["name: ci","","on:"," push:"," branches: [main]"," pull_request:","","jobs:"," build-test-e2e:"," runs-on: ${{ matrix.os }}"," strategy:"," fail-fast: false"," matrix:"," os: [ubuntu-latest, windows-latest]",` java: ['${e.java_version}', '22']`," steps:"," - uses: actions/checkout@v4"," - uses: actions/setup-java@v4"," with:"," distribution: temurin"," java-version: ${{ matrix.java }}"," cache: maven"," - name: Generate Maven Wrapper (Unix)"," if: runner.os != 'Windows'"," run: |"," if [ ! -f mvnw ]; then"," mvn -N wrapper:wrapper -Dmaven=3.9.9"," chmod +x mvnw"," fi"," - name: Generate Maven Wrapper (Windows)"," if: runner.os == 'Windows'"," shell: pwsh"," run: |"," if (-not (Test-Path 'mvnw.cmd')) {"," mvn -N wrapper:wrapper -Dmaven=3.9.9"," }"," - name: Verify (Unix)"," if: runner.os != 'Windows'"," run: ./mvnw -B verify"," - name: Verify (Windows)"," if: runner.os == 'Windows'"," run: .\\mvnw.cmd -B verify"," - name: Package (Unix)"," if: runner.os != 'Windows'"," run: ./mvnw -B -DskipTests package"," - name: Package (Windows)"," if: runner.os == 'Windows'"," run: .\\mvnw.cmd -B -DskipTests package"," - name: Security scan (Unix)"," if: runner.os != 'Windows'"," run: ./mvnw -B -DskipTests org.owasp:dependency-check-maven:check -DfailBuildOnCVSS=9"," - name: Security scan (Windows)"," if: runner.os == 'Windows'"," run: .\\mvnw.cmd -B -DskipTests org.owasp:dependency-check-maven:check -DfailBuildOnCVSS=9"," - name: Upload SCA report"," if: always()"," uses: actions/upload-artifact@v4"," with:"," name: dependency-check-report-${{ matrix.os }}-${{ matrix.java }}"," path: target/dependency-check-report.html"," if-no-files-found: ignore"," - name: Upload SBOM"," if: always()"," uses: actions/upload-artifact@v4"," with:"," name: sbom-${{ matrix.os }}-${{ matrix.java }}"," path: target/bom.xml"," if-no-files-found: ignore",""].join(`
402
- `)}function X(e){return `# ${e.project_name}
401
+ `}function K(e){return ["name: ci","","on:"," push:"," branches: [main]"," pull_request:","","jobs:"," build-test-e2e:"," runs-on: ${{ matrix.os }}"," strategy:"," fail-fast: false"," matrix:"," os: [ubuntu-latest, windows-latest]",` java: ['${e.java_version}', '22']`," steps:"," - uses: actions/checkout@v4"," - uses: actions/setup-java@v4"," with:"," distribution: temurin"," java-version: ${{ matrix.java }}"," cache: maven"," - name: Generate Maven Wrapper (Unix)"," if: runner.os != 'Windows'"," run: |"," if [ ! -f mvnw ]; then"," mvn -N wrapper:wrapper -Dmaven=3.9.9"," chmod +x mvnw"," fi"," - name: Generate Maven Wrapper (Windows)"," if: runner.os == 'Windows'"," shell: pwsh"," run: |"," if (-not (Test-Path 'mvnw.cmd')) {"," mvn -N wrapper:wrapper -Dmaven=3.9.9"," }"," - name: Verify (Unix)"," if: runner.os != 'Windows'"," run: ./mvnw -B verify"," - name: Verify (Windows)"," if: runner.os == 'Windows'"," run: .\\mvnw.cmd -B verify"," - name: Package (Unix)"," if: runner.os != 'Windows'"," run: ./mvnw -B -DskipTests package"," - name: Package (Windows)"," if: runner.os == 'Windows'"," run: .\\mvnw.cmd -B -DskipTests package"," - name: Security scan (Unix)"," if: runner.os != 'Windows'"," run: ./mvnw -B -DskipTests org.owasp:dependency-check-maven:check -DfailBuildOnCVSS=9"," - name: Security scan (Windows)"," if: runner.os == 'Windows'"," run: .\\mvnw.cmd -B -DskipTests org.owasp:dependency-check-maven:check -DfailBuildOnCVSS=9"," - name: Upload SCA report"," if: always()"," uses: actions/upload-artifact@v4"," with:"," name: dependency-check-report-${{ matrix.os }}-${{ matrix.java }}"," path: target/dependency-check-report.html"," if-no-files-found: ignore"," - name: Upload SBOM"," if: always()"," uses: actions/upload-artifact@v4"," with:"," name: sbom-${{ matrix.os }}-${{ matrix.java }}"," path: target/bom.xml"," if-no-files-found: ignore",""].join(`
402
+ `)}function Q(e){return `# ${e.project_name}
403
403
 
404
404
  Built with Spring Boot and scaffolded by Workspai.
405
405
 
@@ -453,7 +453,7 @@ src/main/resources # Spring configuration
453
453
  - This kit is npm-level and intentionally independent from rapidkit-core modules.
454
454
  - Use environment variables for deployment concerns; Spring Boot maps them automatically.
455
455
  - CI runs matrix build/test + dependency scan + SBOM artifact generation by default.
456
- `}function K(e){return `#!/usr/bin/env sh
456
+ `}function Z(e){return `#!/usr/bin/env sh
457
457
  set -eu
458
458
 
459
459
  PORT="${e.port}"
@@ -484,7 +484,7 @@ done
484
484
  READY_EPOCH=$(date +%s)
485
485
  echo "startup_seconds=$((READY_EPOCH - START_EPOCH))" >> "$LOG_FILE"
486
486
  cat "$LOG_FILE"
487
- `}function Q(e){return `#!/usr/bin/env sh
487
+ `}function ee(e){return `#!/usr/bin/env sh
488
488
  # Workspai Spring Boot project launcher - generated by Workspai CLI
489
489
 
490
490
  SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
@@ -569,7 +569,7 @@ case "$CMD" in
569
569
  exit 1
570
570
  ;;
571
571
  esac
572
- `}function Z(){return `@echo off
572
+ `}function te(){return `@echo off
573
573
  set CMD=%1
574
574
  if "%CMD%"=="" goto usage
575
575
  shift
@@ -605,7 +605,7 @@ if "%CMD%"=="start" (
605
605
  :usage
606
606
  echo Available: init, dev, test, build, start
607
607
  exit /b 1
608
- `}function ee(e,t){return `package ${e.package_name};
608
+ `}function ne(e,t){return `package ${e.package_name};
609
609
 
610
610
  import org.junit.jupiter.api.Test;
611
611
  import org.springframework.boot.test.context.SpringBootTest;
@@ -617,7 +617,7 @@ class ${t}Tests {
617
617
  void contextLoads() {
618
618
  }
619
619
  }
620
- `}function te(e){return `package ${e.package_name}.api.http;
620
+ `}function re(e){return `package ${e.package_name}.api.http;
621
621
 
622
622
  import static org.mockito.BDDMockito.given;
623
623
  import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
@@ -663,7 +663,7 @@ class SystemInfoControllerTest {
663
663
  .andExpect(jsonPath("$.environment").value("test"));
664
664
  }
665
665
  }
666
- `}function ne(e){return `package ${e.package_name};
666
+ `}function ie(e){return `package ${e.package_name};
667
667
 
668
668
  import static org.assertj.core.api.Assertions.assertThat;
669
669
 
@@ -687,11 +687,11 @@ class ServiceRuntimeE2ETest {
687
687
  assertThat(response.getBody()).containsEntry("status", "UP");
688
688
  }
689
689
  }
690
- `}async function re(e){try{await execa("mvn",["-N","wrapper:wrapper","-Dmaven=3.9.9"],{cwd:e,timeout:12e4});let t=g.join(e,"mvnw");return await promises.stat(t).then(()=>true).catch(()=>false)&&await promises.chmod(t,493),true}catch{return false}}async function le(e,t){let s=j(t.artifact_id||t.project_name)||"service",p=u(t.group_id||"com.workspai.apps")||"com.workspai.apps",I=u(t.package_name||M(p,s))||"com.workspai.apps.service",r={project_name:t.project_name,artifact_id:s,group_id:p,package_name:I,author:_(t.author||"","Workspai User"),description:_(t.description||"",`Spring Boot service generated with Workspai - ${t.project_name}`),java_version:t.java_version||R,spring_boot_version:t.spring_boot_version||$,springdoc_version:t.springdoc_version||x,app_version:t.app_version||"0.1.0",port:t.port||"8080",skipGit:t.skipGit??false,skipInstall:t.skipInstall??false},h=c(),l=`${b(r.project_name)}Application`,o=E(r.package_name);try{await execa("mvn",["-version"],{timeout:3e3});}catch{console.log(i.yellow(`
690
+ `}async function oe(e){try{await execa("mvn",["-N","wrapper:wrapper","-Dmaven=3.9.9"],{cwd:e,timeout:12e4});let t=g.join(e,"mvnw");return await promises.stat(t).then(()=>true).catch(()=>false)&&await promises.chmod(t,493),true}catch{return false}}async function ve(e,t){let s=E(t.artifact_id||t.project_name)||"service",p=f(t.group_id||"com.workspai.apps")||"com.workspai.apps",S=f(t.package_name||T(p,s))||"com.workspai.apps.service",r={project_name:t.project_name,artifact_id:s,group_id:p,package_name:S,author:h(t.author||"","Workspai User"),description:h(t.description||"",`Spring Boot service generated with Workspai - ${t.project_name}`),java_version:t.java_version||x,spring_boot_version:t.spring_boot_version||j,springdoc_version:t.springdoc_version||M,app_version:t.app_version||"0.1.0",port:t.port||"8080",skipGit:t.skipGit??false,skipInstall:t.skipInstall??false},b$2=c(),l=`${b(r.project_name)}Application`,o=A(r.package_name);try{await execa("mvn",["-version"],{timeout:3e3});}catch{console.log(i.yellow(`
691
691
  \u26A0 Maven not found in PATH - project will be scaffolded, but init/build commands require Maven 3.9+`)),console.log(i.gray(` Install: https://maven.apache.org/install.html
692
- `));}let c$2=y(`Generating Spring Boot project: ${r.project_name}...`).start();try{let n=(d,f)=>c$1(g.join(e,d),f),S=g.join(e,"rapidkit"),b=g.join(e,"rapidkit.cmd");if(await Promise.all([n("pom.xml",P(r)),n(".gitignore",F()),n(".editorconfig",z()),n(".env.example",J(r)),n(".dockerignore",H()),n("Dockerfile",U()),n("docker-compose.yml",G(r)),n(".github/workflows/ci.yml",Y(r)),n("README.md",X(r)),n("src/main/resources/application.yml",N(r)),n("src/test/resources/application.yml",W()),n(`src/main/java/${o}/${l}.java`,C(r,l)),n(`src/main/java/${o}/config/ApplicationInfoProperties.java`,D(r)),n(`src/main/java/${o}/config/OpenApiConfiguration.java`,B(r)),n(`src/main/java/${o}/application/SystemInfoService.java`,O(r)),n(`src/main/java/${o}/api/http/dto/SystemInfoResponse.java`,V(r)),n(`src/main/java/${o}/api/http/SystemInfoController.java`,L(r)),n(`src/main/java/${o}/api/http/ApiExceptionHandler.java`,q(r)),n(`src/test/java/${o}/${l}Tests.java`,ee(r,l)),n(`src/test/java/${o}/api/http/SystemInfoControllerTest.java`,te(r)),n(`src/test/java/${o}/ServiceRuntimeE2ETest.java`,ne(r)),n("scripts/perf-smoke.sh",K(r)),n(".workspai/project.json",A(r,h)),n(".workspai/context.json",T()),n("rapidkit",Q(r)),n("rapidkit.cmd",Z())]),await promises.chmod(S,493),await promises.chmod(b,493),await promises.chmod(g.join(e,"scripts","perf-smoke.sh"),493),r.skipInstall||await re(e)||console.log(i.yellow("\u26A0 Maven Wrapper could not be generated automatically. Run `mvn -N wrapper:wrapper -Dmaven=3.9.9` inside the project.")),c$2.succeed(i.green(`Project created at ${e}`)),r.skipInstall)c$2.info(i.gray("Skipped Maven dependency warm-up (--skip-install)."));else try{c$2.start("Resolving Maven dependencies...");let d=g.join(e,process.platform==="win32"?"mvnw.cmd":"mvnw"),f=await promises.stat(d).then(()=>d).catch(()=>"mvn");await execa(f,["-B","-q","-DskipTests","dependency:go-offline"],{cwd:e,timeout:18e4}),c$2.succeed(i.gray("\u2713 maven dependency warm-up completed"));}catch{c$2.warn(i.yellow("\u26A0 Maven dependency warm-up failed - run manually: mvn -B -DskipTests dependency:go-offline"));}if(!r.skipGit)try{await execa("git",["init"],{cwd:e}),await execa("git",["add","-A"],{cwd:e}),await execa("git",["commit","-m","chore: initial scaffold (rapidkit springboot.standard)"],{cwd:e});}catch{console.log(i.yellow("\u26A0 Git initialization failed - continuing without initial commit"));}console.log(i.green(`
692
+ `));}let c$2=$(`Generating Spring Boot project: ${r.project_name}...`).start();try{let n=(d,v)=>c$1(g.join(e,d),v),y=g.join(e,"rapidkit"),R=g.join(e,"rapidkit.cmd");if(await Promise.all([n("pom.xml",D(r)),n(".gitignore",Y()),n(".editorconfig",X()),n(".env.example",U(r)),n(".dockerignore",z()),n("Dockerfile",H()),n("docker-compose.yml",F(r)),n(".github/workflows/ci.yml",K(r)),n("README.md",Q(r)),n("src/main/resources/application.yml",J(r)),n("src/test/resources/application.yml",G()),n(`src/main/java/${o}/${l}.java`,B(r,l)),n(`src/main/java/${o}/config/ApplicationInfoProperties.java`,V(r)),n(`src/main/java/${o}/config/OpenApiConfiguration.java`,O(r)),n(`src/main/java/${o}/application/SystemInfoService.java`,q(r)),n(`src/main/java/${o}/api/http/dto/SystemInfoResponse.java`,L(r)),n(`src/main/java/${o}/api/http/SystemInfoController.java`,N(r)),n(`src/main/java/${o}/api/http/ApiExceptionHandler.java`,W(r)),n(`src/test/java/${o}/${l}Tests.java`,ne(r,l)),n(`src/test/java/${o}/api/http/SystemInfoControllerTest.java`,re(r)),n(`src/test/java/${o}/ServiceRuntimeE2ETest.java`,ie(r)),n("scripts/perf-smoke.sh",Z(r)),n(".workspai/project.json",C(r,b$2)),n(".workspai/context.json",P()),n("rapidkit",ee(r)),n("rapidkit.cmd",te())]),await promises.chmod(y,493),await promises.chmod(R,493),await promises.chmod(g.join(e,"scripts","perf-smoke.sh"),493),r.skipInstall||await oe(e)||console.log(i.yellow("\u26A0 Maven Wrapper could not be generated automatically. Run `mvn -N wrapper:wrapper -Dmaven=3.9.9` inside the project.")),c$2.succeed(i.green(`Project created at ${e}`)),r.skipInstall)c$2.info(i.gray("Skipped Maven dependency warm-up (--skip-install)."));else try{c$2.start("Resolving Maven dependencies...");let d=g.join(e,process.platform==="win32"?"mvnw.cmd":"mvnw"),v=await promises.stat(d).then(()=>d).catch(()=>"mvn");await execa(v,["-B","-q","-DskipTests","dependency:go-offline"],{cwd:e,timeout:18e4}),c$2.succeed(i.gray("\u2713 maven dependency warm-up completed"));}catch{c$2.warn(i.yellow("\u26A0 Maven dependency warm-up failed - run manually: mvn -B -DskipTests dependency:go-offline"));}if(!r.skipGit)try{await b$1(e)?console.log(i.gray("\u26A0 git init skipped (target is inside an existing git worktree)")):(await execa("git",["init"],{cwd:e,env:a()}),await execa("git",["add","-A"],{cwd:e,env:a()}),await execa("git",["commit","-m","chore: initial scaffold (rapidkit springboot.standard)"],{cwd:e,env:a()}));}catch{console.log(i.yellow("\u26A0 Git initialization failed - continuing without initial commit"));}console.log(i.green(`
693
693
  \u2728 Spring Boot project created successfully!
694
694
  `)),console.log(i.cyan("\u{1F4C2} Location:"),i.white(e)),console.log(i.cyan(`
695
695
  \u{1F680} Get started:
696
696
  `)),console.log(i.white(` cd ${r.project_name}`)),console.log(i.white(" npx workspai init")),console.log(i.white(` npx workspai dev
697
- `)),console.log(i.gray("Endpoints: /actuator/health, /api/v1/system/info, /docs"));}catch(n){c$2.fail("Failed to create Spring Boot project");try{await promises.rm(e,{recursive:true,force:true});}catch{}throw n}}export{R as DEFAULT_JAVA_VERSION,x as DEFAULT_SPRINGDOC_VERSION,$ as DEFAULT_SPRING_BOOT_VERSION,le as generateSpringBootKit};
697
+ `)),console.log(i.gray("Endpoints: /actuator/health, /api/v1/system/info, /docs"));}catch(n){c$2.fail("Failed to create Spring Boot project");try{await promises.rm(e,{recursive:true,force:true});}catch{}throw n}}export{x as DEFAULT_JAVA_VERSION,M as DEFAULT_SPRINGDOC_VERSION,j as DEFAULT_SPRING_BOOT_VERSION,ve as generateSpringBootKit};
@@ -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-VRDF2J46.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-ONU457VN.js';
@@ -1 +1 @@
1
- export{f as AGENT_CUSTOMIZATION_PACK_REPORT_PATH,d as AGENT_CUSTOMIZATION_PACK_SCHEMA,e as AGENT_REPORTS_INDEX_PATH,c as AGENT_REPORTS_INDEX_SCHEMA,g as AGENT_REPORT_CATALOG,h as buildWorkspaceAgentReportsIndex,i as parseAgentGroundingTargets,j as syncWorkspaceAgentGrounding}from'./chunk-XEJD4KCV.js';export{f as AGENT_GROUNDING_DOC_PATH,g as LEGACY_AGENT_GROUNDING_DOC_PATH,A as LEGACY_COPILOT_GROUNDING_SKILL_PATH,m as LEGACY_COPILOT_WORKSPACE_INSTRUCTIONS_PATH,C as LEGACY_COPILOT_WORKSPACE_INTELLIGENCE_SKILL_PATH,i as LEGACY_CURSOR_GROUNDING_RULE_PATH,E as LEGACY_MCP_DESIGN_REPORT_PATH,G as LEGACY_VSCODE_AGENT_HOOKS_PATH,z as WORKSPAI_COPILOT_GROUNDING_SKILL_PATH,l as WORKSPAI_COPILOT_WORKSPACE_INSTRUCTIONS_PATH,B as WORKSPAI_COPILOT_WORKSPACE_INTELLIGENCE_SKILL_PATH,h as WORKSPAI_CURSOR_GROUNDING_RULE_PATH,D as WORKSPAI_MCP_DESIGN_REPORT_PATH,F as WORKSPAI_VSCODE_AGENT_HOOKS_PATH}from'./chunk-DNAY5ALC.js';
1
+ export{f as AGENT_CUSTOMIZATION_PACK_REPORT_PATH,d as AGENT_CUSTOMIZATION_PACK_SCHEMA,e as AGENT_REPORTS_INDEX_PATH,c as AGENT_REPORTS_INDEX_SCHEMA,g as AGENT_REPORT_CATALOG,h as buildWorkspaceAgentReportsIndex,i as parseAgentGroundingTargets,j as syncWorkspaceAgentGrounding}from'./chunk-TH5Y3EMA.js';export{f as AGENT_GROUNDING_DOC_PATH,g as LEGACY_AGENT_GROUNDING_DOC_PATH,A as LEGACY_COPILOT_GROUNDING_SKILL_PATH,m as LEGACY_COPILOT_WORKSPACE_INSTRUCTIONS_PATH,C as LEGACY_COPILOT_WORKSPACE_INTELLIGENCE_SKILL_PATH,i as LEGACY_CURSOR_GROUNDING_RULE_PATH,E as LEGACY_MCP_DESIGN_REPORT_PATH,G as LEGACY_VSCODE_AGENT_HOOKS_PATH,z as WORKSPAI_COPILOT_GROUNDING_SKILL_PATH,l as WORKSPAI_COPILOT_WORKSPACE_INSTRUCTIONS_PATH,B as WORKSPAI_COPILOT_WORKSPACE_INTELLIGENCE_SKILL_PATH,h as WORKSPAI_CURSOR_GROUNDING_RULE_PATH,D as WORKSPAI_MCP_DESIGN_REPORT_PATH,F as WORKSPAI_VSCODE_AGENT_HOOKS_PATH}from'./chunk-DNAY5ALC.js';
@@ -1 +1 @@
1
- export{b as WORKSPACE_CONTEXT_AGENT_REPORT_PATH,a as WORKSPACE_CONTEXT_SCHEMA_VERSION,c as buildWorkspaceAgentContext,d as writeWorkspaceAgentContext}from'./chunk-EWYYLJQY.js';
1
+ export{b as WORKSPACE_CONTEXT_AGENT_REPORT_PATH,a as WORKSPACE_CONTEXT_SCHEMA_VERSION,c as buildWorkspaceAgentContext,d as writeWorkspaceAgentContext}from'./chunk-CDE4Q77U.js';
@@ -1 +1 @@
1
- export{b as WORKSPACE_CONTRACT_PATH,d as WORKSPACE_CONTRACT_SCHEMA_VERSION,c as WORKSPACE_CONTRACT_VERIFY_REPORT_PATH,e as WORKSPACE_CONTRACT_VERIFY_SCHEMA_VERSION,g as buildWorkspaceContract,k as buildWorkspaceContractGraph,f as discoverProjectJsonFiles,j as readWorkspaceContract,i as syncWorkspaceContract,l as verifyWorkspaceContract,h as writeWorkspaceContract,m as writeWorkspaceContractVerifyEvidence}from'./chunk-VZKSNUEE.js';
1
+ export{b as WORKSPACE_CONTRACT_PATH,d as WORKSPACE_CONTRACT_SCHEMA_VERSION,c as WORKSPACE_CONTRACT_VERIFY_REPORT_PATH,e as WORKSPACE_CONTRACT_VERIFY_SCHEMA_VERSION,g as buildWorkspaceContract,k as buildWorkspaceContractGraph,f as discoverProjectJsonFiles,j as readWorkspaceContract,i as syncWorkspaceContract,l as verifyWorkspaceContract,h as writeWorkspaceContract,m as writeWorkspaceContractVerifyEvidence}from'./chunk-XNGANEXM.js';
@@ -0,0 +1 @@
1
+ export{b as buildWorkspaceExplain,a as resolveWorkspaceExplainArtifactPath,c as writeWorkspaceExplainReport}from'./chunk-HV5ZFXAZ.js';export{d as WORKSPACE_MODEL_DIFF_REPORT_PATH}from'./chunk-FM7GMFZA.js';export{c as WORKSPACE_EXPLAIN_REPORT_PATH,e as WORKSPACE_TRACE_REPORT_PATH,d as WORKSPACE_WHY_REPORT_PATH}from'./chunk-DNAY5ALC.js';
@@ -1 +1 @@
1
- import {b}from'./chunk-LPZFK3Y6.js';import {a}from'./chunk-GSWPGELT.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-RUJE6RPH.js');return await y(t),{workspacePath:t,created:s,status:s.length>0?"passed":"skipped"}}export{W as ensureWorkspaceFoundation};
1
+ import {b}from'./chunk-PPHTYJ7G.js';import {a}from'./chunk-GSWPGELT.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-6MFBRWDS.js');return await y(t),{workspacePath:t,created:s,status:s.length>0?"passed":"skipped"}}export{W as ensureWorkspaceFoundation};
@@ -1 +1 @@
1
- export{f as WORKSPACE_IMPACT_REPORT_PATH,e as WORKSPACE_IMPACT_SCHEMA_VERSION,d as WORKSPACE_MODEL_DIFF_REPORT_PATH,b as WORKSPACE_MODEL_DIFF_SCHEMA_VERSION,c as WORKSPACE_MODEL_SNAPSHOT_REPORT_PATH,a as WORKSPACE_MODEL_SNAPSHOT_SCHEMA_VERSION,n as buildWorkspaceImpact,i as buildWorkspaceModelSnapshot,k as diffWorkspaceModel,g as isGitDiffSource,h as parseGitDiffRef,m as workspaceVerificationPlan,o as writeWorkspaceImpact,l as writeWorkspaceModelDiff,j as writeWorkspaceModelSnapshot}from'./chunk-LYC6AIF2.js';
1
+ export{f as WORKSPACE_IMPACT_REPORT_PATH,e as WORKSPACE_IMPACT_SCHEMA_VERSION,d as WORKSPACE_MODEL_DIFF_REPORT_PATH,b as WORKSPACE_MODEL_DIFF_SCHEMA_VERSION,c as WORKSPACE_MODEL_SNAPSHOT_REPORT_PATH,a as WORKSPACE_MODEL_SNAPSHOT_SCHEMA_VERSION,n as buildWorkspaceImpact,i as buildWorkspaceModelSnapshot,k as diffWorkspaceModel,g as isGitDiffSource,h as parseGitDiffRef,m as workspaceVerificationPlan,o as writeWorkspaceImpact,l as writeWorkspaceModelDiff,j as writeWorkspaceModelSnapshot}from'./chunk-FM7GMFZA.js';
@@ -1,3 +1,3 @@
1
- import {b}from'./chunk-54XJNLYC.js';import {b as b$1}from'./chunk-EWYYLJQY.js';import {d}from'./chunk-CVTCPPEF.js';import {c,e}from'./chunk-AQ4XZZC6.js';import {c as c$2,b as b$2}from'./chunk-DNAY5ALC.js';import {k}from'./chunk-5SWNSJGW.js';import {c as c$3}from'./chunk-VZKSNUEE.js';import {c as c$1}from'./chunk-NAAQMSO3.js';import u from'path';import P from'readline';import v from'fs-extra';var h=".workspai/reports/INDEX.json";function O(t,e){return t.kind!==e.kind?false:t.kind==="project"&&e.kind==="project"?t.project.toLowerCase()===e.project.toLowerCase():t.kind==="blocker"&&e.kind==="blocker"?t.blockerId===e.blockerId:t.kind==="trace"&&e.kind==="trace"?t.diffRef===e.diffRef:true}var C=[{name:"getWorkspaceModel",description:"Read workspace-model.json",inputSchema:{type:"object",properties:{}}},{name:"getEvidenceIndex",description:"Read agent reports INDEX.json",inputSchema:{type:"object",properties:{}}},{name:"getBlockers",description:"Aggregate blocking reasons from verify, explain, and contract-verify reports",inputSchema:{type:"object",properties:{}}},{name:"getSafeCommands",description:"Read safe commands from workspace-context-agent.json",inputSchema:{type:"object",properties:{}}},{name:"getProjectContext",description:"Read scoped project context from workspace-context-agent.json",inputSchema:{type:"object",properties:{project:{type:"string",description:"Optional project name; defaults to active scope"}}}},{name:"getArtifact",description:"Read one workspace-relative artifact path",inputSchema:{type:"object",properties:{relativePath:{type:"string"}},required:["relativePath"]}},{name:"listOperationalSkills",description:"Read workspace-skills-index.json",inputSchema:{type:"object",properties:{}}},{name:"getWorkspaceExplain",description:"Build or read workspace explain report",inputSchema:{type:"object",properties:{target:{type:"string",description:"release-blocked | project:<name> | blocker:<id> | trace:<diffRef> | <project>"}}}}];function _(t){let e=t.trim().replace(/\\/g,"/");return e.length>0&&!u.isAbsolute(e)&&!e.split("/").includes("..")&&(e.startsWith(".workspai/")||e.startsWith(".rapidkit/"))}async function l(t,e){if(!_(e))throw new Error(`Unsafe artifact path: ${e}`);let i=await c$1(t,e)??u.join(t,e);return await v.pathExists(i)?v.readJson(i):null}async function W(t){let e$1=[],i=new Set,s=((await l(t,d))?.blockingReasons??[]).filter(n=>typeof n=="string"&&n.trim().length>0);if(s.length>0){e$1.push({artifact:d,reasons:s});for(let n of s)i.add(n);}let a=await l(t,c$2);if(e(a)){let n=(a.blockingReasons??[]).filter(r=>typeof r=="string"&&r.trim().length>0);if(n.length>0){e$1.push({artifact:c$2,reasons:n});for(let r of n)i.add(r);}}let c=await l(t,c$3),p=(c?.violations??[]).filter(n=>typeof n=="string"&&n.trim().length>0);if(p.length>0||String(c?.status??"").toLowerCase()==="failed"){let n=p.length>0?p:["Workspace contract verification failed"];e$1.push({artifact:c$3,reasons:n});for(let r of n)i.add(r);}return {blockingReasons:[...i],sources:e$1}}async function A(t,e$1,i){switch(e$1){case "getWorkspaceModel":return l(t,k);case "getEvidenceIndex":return l(t,h);case "getBlockers":return W(t);case "getSafeCommands":return {safeCommands:(await l(t,b$1))?.safeCommands??[]};case "getProjectContext":{let o=await l(t,b$1);if(!o)return null;let s=String(i.project??"").trim(),a=o.scope?.activeProject??void 0,c=s||a,p=Array.isArray(o.projects)?o.projects:[],n=c&&p.find(r=>typeof r.name=="string"&&r.name.toLowerCase()===c.toLowerCase());return {workspace:o.workspace??null,scope:o.scope??null,validation:o.validation??null,project:n??null,safeCommands:o.safeCommands??[]}}case "getArtifact":{let o=String(i.relativePath??"").trim();return l(t,o)}case "listOperationalSkills":return l(t,b$2);case "getWorkspaceExplain":{let o=String(i.target??"release-blocked").trim(),s=c(o);if(!s)throw new Error(`Invalid explain target: ${o}`);let a=await l(t,c$2);return e(a)&&O(a.target,s)?a:b({workspacePath:t,target:s})}default:throw new Error(`Unknown tool: ${e$1}`)}}function R(t,e){process.stdout.write(`${JSON.stringify({jsonrpc:"2.0",id:t??null,result:e})}
1
+ import {b}from'./chunk-HV5ZFXAZ.js';import {b as b$1}from'./chunk-CDE4Q77U.js';import {d}from'./chunk-AMDKXXLP.js';import {c,e}from'./chunk-AQ4XZZC6.js';import {c as c$2,b as b$2}from'./chunk-DNAY5ALC.js';import {k}from'./chunk-FHSMY75W.js';import {c as c$3}from'./chunk-XNGANEXM.js';import {c as c$1}from'./chunk-NAAQMSO3.js';import u from'path';import P from'readline';import v from'fs-extra';var h=".workspai/reports/INDEX.json";function O(t,e){return t.kind!==e.kind?false:t.kind==="project"&&e.kind==="project"?t.project.toLowerCase()===e.project.toLowerCase():t.kind==="blocker"&&e.kind==="blocker"?t.blockerId===e.blockerId:t.kind==="trace"&&e.kind==="trace"?t.diffRef===e.diffRef:true}var C=[{name:"getWorkspaceModel",description:"Read workspace-model.json",inputSchema:{type:"object",properties:{}}},{name:"getEvidenceIndex",description:"Read agent reports INDEX.json",inputSchema:{type:"object",properties:{}}},{name:"getBlockers",description:"Aggregate blocking reasons from verify, explain, and contract-verify reports",inputSchema:{type:"object",properties:{}}},{name:"getSafeCommands",description:"Read safe commands from workspace-context-agent.json",inputSchema:{type:"object",properties:{}}},{name:"getProjectContext",description:"Read scoped project context from workspace-context-agent.json",inputSchema:{type:"object",properties:{project:{type:"string",description:"Optional project name; defaults to active scope"}}}},{name:"getArtifact",description:"Read one workspace-relative artifact path",inputSchema:{type:"object",properties:{relativePath:{type:"string"}},required:["relativePath"]}},{name:"listOperationalSkills",description:"Read workspace-skills-index.json",inputSchema:{type:"object",properties:{}}},{name:"getWorkspaceExplain",description:"Build or read workspace explain report",inputSchema:{type:"object",properties:{target:{type:"string",description:"release-blocked | project:<name> | blocker:<id> | trace:<diffRef> | <project>"}}}}];function _(t){let e=t.trim().replace(/\\/g,"/");return e.length>0&&!u.isAbsolute(e)&&!e.split("/").includes("..")&&(e.startsWith(".workspai/")||e.startsWith(".rapidkit/"))}async function l(t,e){if(!_(e))throw new Error(`Unsafe artifact path: ${e}`);let i=await c$1(t,e)??u.join(t,e);return await v.pathExists(i)?v.readJson(i):null}async function W(t){let e$1=[],i=new Set,s=((await l(t,d))?.blockingReasons??[]).filter(n=>typeof n=="string"&&n.trim().length>0);if(s.length>0){e$1.push({artifact:d,reasons:s});for(let n of s)i.add(n);}let a=await l(t,c$2);if(e(a)){let n=(a.blockingReasons??[]).filter(r=>typeof r=="string"&&r.trim().length>0);if(n.length>0){e$1.push({artifact:c$2,reasons:n});for(let r of n)i.add(r);}}let c=await l(t,c$3),p=(c?.violations??[]).filter(n=>typeof n=="string"&&n.trim().length>0);if(p.length>0||String(c?.status??"").toLowerCase()==="failed"){let n=p.length>0?p:["Workspace contract verification failed"];e$1.push({artifact:c$3,reasons:n});for(let r of n)i.add(r);}return {blockingReasons:[...i],sources:e$1}}async function A(t,e$1,i){switch(e$1){case "getWorkspaceModel":return l(t,k);case "getEvidenceIndex":return l(t,h);case "getBlockers":return W(t);case "getSafeCommands":return {safeCommands:(await l(t,b$1))?.safeCommands??[]};case "getProjectContext":{let o=await l(t,b$1);if(!o)return null;let s=String(i.project??"").trim(),a=o.scope?.activeProject??void 0,c=s||a,p=Array.isArray(o.projects)?o.projects:[],n=c&&p.find(r=>typeof r.name=="string"&&r.name.toLowerCase()===c.toLowerCase());return {workspace:o.workspace??null,scope:o.scope??null,validation:o.validation??null,project:n??null,safeCommands:o.safeCommands??[]}}case "getArtifact":{let o=String(i.relativePath??"").trim();return l(t,o)}case "listOperationalSkills":return l(t,b$2);case "getWorkspaceExplain":{let o=String(i.target??"release-blocked").trim(),s=c(o);if(!s)throw new Error(`Invalid explain target: ${o}`);let a=await l(t,c$2);return e(a)&&O(a.target,s)?a:b({workspacePath:t,target:s})}default:throw new Error(`Unknown tool: ${e$1}`)}}function R(t,e){process.stdout.write(`${JSON.stringify({jsonrpc:"2.0",id:t??null,result:e})}
2
2
  `);}function w(t,e){process.stdout.write(`${JSON.stringify({jsonrpc:"2.0",id:t??null,error:{code:-32e3,message:e}})}
3
3
  `);}async function z(t){let e=u.resolve(t.workspacePath),i=P.createInterface({input:process.stdin,terminal:false});for await(let o of i){let s=o.trim();if(!s)continue;let a;try{a=JSON.parse(s);}catch{w(null,"Invalid JSON-RPC request");continue}let{id:c,method:p,params:n}=a;try{if(p==="initialize"){R(c,{protocolVersion:"2024-11-05",capabilities:{tools:{}},serverInfo:{name:"workspai-workspace-mcp",version:"0.1.0"}});continue}if(p==="notifications/initialized")continue;if(p==="tools/list"){R(c,{tools:C.map(r=>({name:r.name,description:r.description,inputSchema:r.inputSchema}))});continue}if(p==="tools/call"){let r=String(n?.name??""),T=n?.arguments&&typeof n.arguments=="object"?n.arguments:{},E=await A(e,r,T);R(c,{content:[{type:"text",text:JSON.stringify(E,null,2)}],isError:E==null});continue}w(c,`Unsupported method: ${p??"unknown"}`);}catch(r){w(c,r instanceof Error?r.message:String(r));}}}async function U(t,e,i={}){return A(u.resolve(t),e,i)}export{C as WORKSPACE_MCP_READ_TOOLS,U as invokeMcpToolForTest,z as runWorkspaceMcpServe};
@@ -1 +1 @@
1
- export{k as WORKSPACE_MODEL_REPORT_PATH,j as WORKSPACE_MODEL_SCHEMA_VERSION,n as buildWorkspaceModel,o as buildWorkspaceModelCached,m as buildWorkspaceModelFacts,p as buildWorkspaceModelIncremental,l as validateWorkspaceModelStrict,q as writeWorkspaceModel}from'./chunk-5SWNSJGW.js';
1
+ export{k as WORKSPACE_MODEL_REPORT_PATH,j as WORKSPACE_MODEL_SCHEMA_VERSION,n as buildWorkspaceModel,o as buildWorkspaceModelCached,m as buildWorkspaceModelFacts,p as buildWorkspaceModelIncremental,l as validateWorkspaceModelStrict,q as writeWorkspaceModel}from'./chunk-FHSMY75W.js';
@@ -0,0 +1 @@
1
+ import {a}from'./chunk-A5FBGRJA.js';import {b as b$1,j}from'./chunk-XNGANEXM.js';import {c,d}from'./chunk-NAAQMSO3.js';import {r,p}from'./chunk-LZQNVH7D.js';import {o}from'./chunk-5XATWNME.js';import n from'path';import {existsSync}from'fs';import y from'fs-extra';var k=".workspai/workspace-registry.v1.json",w="workspace-registry.v1";function C(t){return {slug:t.slug,relativePath:t.relativePath,framework:t.framework,kit:t.kit,source:t.source}}async function x(t){let r=o(t,"workspace.json").find(e=>existsSync(e));if(!r)return {exists:false,legacyProjectCount:0};try{let e=await y.readJson(r),s=Array.isArray(e.projects)?e.projects.length:0,o=typeof e.workspace_name=="string"&&e.workspace_name.trim()||typeof e.name=="string"&&e.name.trim()||n.basename(t);return {exists:true,manifestPath:r,workspaceName:o,profile:typeof e.profile=="string"?e.profile:void 0,legacyProjectCount:s}}catch{return {exists:true,manifestPath:r,legacyProjectCount:0,workspaceName:n.basename(t)}}}async function A(t){let r$1=a(t);for(let e of r())if(await y.pathExists(e))try{let o=((await y.readJson(e)).workspaces||[]).find(a$1=>a(a$1.path)===r$1);if(o)return {exists:true,projectCount:Array.isArray(o.projects)?o.projects.length:0,registryPath:e}}catch{continue}return {exists:false,projectCount:0,registryPath:n.join(p(),"workspaces.json")}}async function b(t){let r=n.resolve(t),e=await c(r,b$1),s=await x(r),o=await A(r),a=!!e,c$1=[];if(a)try{let{contract:S}=await j({workspacePath:r});c$1=S.projects||[];}catch{c$1=[];}let W={contract:{exists:a,projectCount:c$1.length,path:b$1},globalRegistry:{exists:o.exists,projectCount:o.projectCount,path:o.registryPath},legacyWorkspaceJson:{exists:s.exists,projectCount:s.legacyProjectCount,path:s.manifestPath?n.relative(r,s.manifestPath):void 0}},i="none",u=[],p=0;return a?(i="workspace.contract.json",u=c$1.map(C),p=u.length):o.projectCount>0?(i="global-registry",p=o.projectCount):s.legacyProjectCount>0&&(i="legacy-workspace.json",p=s.legacyProjectCount),{contractExists:a,summary:{schemaVersion:w,kind:"rapidkit.workspace.registry",workspacePath:r,workspaceName:s.workspaceName||n.basename(r),profile:s.profile,projectCount:p,authority:i,contractPath:b$1,projects:u,sources:W}}}async function J(t){let r=await c(t,k);if(!r)return null;try{let e=await y.readJson(r);return e?.schemaVersion!==w?null:e}catch{return null}}async function V(t,r){let s={...(await b(t)).summary,generatedAt:(r?.now??new Date).toISOString(),registrySummaryPath:k};return await d(t,k,s),s}function Y(t,r=""){return t.projectCount>0?t.authority==="workspace.contract.json"?`${t.projectCount} project(s) registered in workspace contract${r}.`:t.authority==="global-registry"?`${t.projectCount} project(s) registered in global workspace registry${r}.`:`${t.projectCount} project(s) registered in legacy workspace manifest${r}.`:`Workspace state exists, but no projects are registered yet${r}.`}export{k as WORKSPACE_REGISTRY_SUMMARY_RELATIVE_PATH,w as WORKSPACE_REGISTRY_SUMMARY_SCHEMA_VERSION,Y as formatWorkspaceRegistrySyncSummary,V as publishWorkspaceRegistrySummary,J as readWorkspaceRegistrySummary,b as resolveWorkspaceRegisteredProjects};
@@ -0,0 +1 @@
1
+ export{a as runWorkspaceStage}from'./chunk-3QVTWKUI.js';export{a as WORKSPACE_RUN_LAST_REPORT_FILENAME}from'./chunk-753LOKFZ.js';
@@ -1 +1 @@
1
- export{d as WORKSPACE_VERIFY_REPORT_PATH,c as WORKSPACE_VERIFY_SCHEMA_VERSION,f as buildWorkspaceVerify,e as computeAffectedSubgraphGate,h as evaluateWorkspaceVerifyGate,i as workspaceVerifyExitCode,g as writeWorkspaceVerify}from'./chunk-CVTCPPEF.js';
1
+ export{d as WORKSPACE_VERIFY_REPORT_PATH,c as WORKSPACE_VERIFY_SCHEMA_VERSION,f as buildWorkspaceVerify,e as computeAffectedSubgraphGate,h as evaluateWorkspaceVerifyGate,i as workspaceVerifyExitCode,g as writeWorkspaceVerify}from'./chunk-AMDKXXLP.js';
@@ -1 +1 @@
1
- import {a}from'./chunk-3KXW53QI.js';import {b as b$1,p}from'./chunk-5SWNSJGW.js';import w from'fs';var M="workspace-watch-event.v1";function g(t){return `${t.from}\0${t.to}\0${t.kind}`}function f(t){return (t.graph?.edges??[]).map(r=>({from:r.from,to:r.to,kind:r.kind}))}function m(t){let o=[...a(t).entries()].sort((a,n)=>a[0].localeCompare(n[0])).map(([a,n])=>({id:a,hash:n})),c=f(t).map(g).sort((a,n)=>a.localeCompare(n));return b$1({projects:o,edges:c})}function b(t,r){let o=a(r),c=t?a(t):new Map,a$1=[],n=[];for(let[e,s]of o.entries())c.has(e)?c.get(e)!==s&&a$1.push(e):n.push(e);let d=[];for(let e of c.keys())o.has(e)||d.push(e);let i=new Map(t?f(t).map(e=>[g(e),e]):[]),l=new Map(f(r).map(e=>[g(e),e])),p=[];for(let[e,s]of l.entries())i.has(e)||p.push(s);let h=[];for(let[e,s]of i.entries())l.has(e)||h.push(s);let u=(e,s)=>g(e).localeCompare(g(s));return a$1.sort((e,s)=>e.localeCompare(s)),n.sort((e,s)=>e.localeCompare(s)),d.sort((e,s)=>e.localeCompare(s)),p.sort(u),h.sort(u),{changedProjects:a$1,addedProjects:n,removedProjects:d,edgesAdded:p,edgesRemoved:h}}var k=class{model=null;sequence=0;rebuild;now;constructor(r,o){this.rebuild=o?.rebuild??(()=>p({...r})),this.now=o?.now??(()=>new Date);}get currentModel(){return this.model}async start(){let r=Date.now(),{model:o}=await this.rebuild();return this.model=o,this.buildEvent("ready","initial",null,o,Date.now()-r)}async pulse(){let r=Date.now(),o=this.model,{model:c,mode:a}=await this.rebuild(),n=this.buildEvent(this.hasStructuralChange(o,c)?"changed":"unchanged",a,o,c,Date.now()-r);return this.model=c,n}hasStructuralChange(r,o){return r?m(r)!==m(o):true}buildEvent(r,o,c,a,n){let d=b(c,a),i=m(a),l=c?m(c)!==i:true;return {schemaVersion:M,kind:r,sequence:this.sequence++,timestamp:this.now().toISOString(),mode:o,modelHash:i,modelHashChanged:l,changedProjects:d.changedProjects,addedProjects:d.addedProjects,removedProjects:d.removedProjects,graph:{nodeCount:a.graph?.nodes.length??0,edgeCount:a.graph?.edges.length??0,edgesAdded:d.edgesAdded,edgesRemoved:d.edgesRemoved},durationMs:n}}},P=new Set([".git",".hg",".svn","node_modules",".venv","venv","dist","build","out","target","coverage","htmlcov",".next",".turbo",".cache"]),R=new Set(["reports","cache","tmp",".cache"]);function y(t){if(!t)return false;let r=t.split(/[\\/]/).filter(Boolean);if(r.some(o=>P.has(o)))return false;for(let o=0;o<r.length-1;o+=1)if((r[o]===".workspai"||r[o]===".rapidkit")&&R.has(r[o+1]))return false;return true}async function G(t){let r=new k(t.buildOptions,t.engineOptions),o=await r.start();if(t.emit(o),t.once)return;let c=t.debounceMs??250,a=t.selfWriteSuppressionMs??Math.max(400,c+150),n=null,d=false,i=false,l=0,p=async()=>{if(d){i=true;return}d=true;try{let e=await r.pulse();t.emit(e);}catch(e){t.emit({schemaVersion:M,kind:"error",sequence:-1,timestamp:new Date().toISOString(),mode:"full",modelHash:r.currentModel?m(r.currentModel):"",modelHashChanged:false,changedProjects:[],addedProjects:[],removedProjects:[],graph:{nodeCount:0,edgeCount:0,edgesAdded:[],edgesRemoved:[]},durationMs:0,error:e instanceof Error?e.message:String(e)});}finally{d=false,l=Date.now()+a,i&&(i=false,p());}},h=e=>{y(e)&&(d||Date.now()<l||(n&&clearTimeout(n),n=setTimeout(()=>{n=null,p();},c)));};t.onProgress?.(`Watching ${t.workspacePath} for changes (Ctrl+C to stop).`);let u=w.watch(t.workspacePath,{recursive:true},(e,s)=>{typeof s=="string"?h(s):s&&h(Buffer.from(s).toString("utf8"));});await new Promise(e=>{let s=()=>{n&&clearTimeout(n),u.close(),e();};if(t.signal){if(t.signal.aborted){s();return}t.signal.addEventListener("abort",s,{once:true});}u.on("error",()=>s());});}export{M as WORKSPACE_WATCH_EVENT_SCHEMA_VERSION,k as WorkspaceWatchEngine,m as computeWatchModelHash,b as diffWatchModels,y as isWatchRelevantPath,G as runWorkspaceWatch};
1
+ import {a}from'./chunk-U6AXYUQY.js';import {b as b$1,p}from'./chunk-FHSMY75W.js';import w from'fs';var M="workspace-watch-event.v1";function g(t){return `${t.from}\0${t.to}\0${t.kind}`}function f(t){return (t.graph?.edges??[]).map(r=>({from:r.from,to:r.to,kind:r.kind}))}function m(t){let o=[...a(t).entries()].sort((a,n)=>a[0].localeCompare(n[0])).map(([a,n])=>({id:a,hash:n})),c=f(t).map(g).sort((a,n)=>a.localeCompare(n));return b$1({projects:o,edges:c})}function b(t,r){let o=a(r),c=t?a(t):new Map,a$1=[],n=[];for(let[e,s]of o.entries())c.has(e)?c.get(e)!==s&&a$1.push(e):n.push(e);let d=[];for(let e of c.keys())o.has(e)||d.push(e);let i=new Map(t?f(t).map(e=>[g(e),e]):[]),l=new Map(f(r).map(e=>[g(e),e])),p=[];for(let[e,s]of l.entries())i.has(e)||p.push(s);let h=[];for(let[e,s]of i.entries())l.has(e)||h.push(s);let u=(e,s)=>g(e).localeCompare(g(s));return a$1.sort((e,s)=>e.localeCompare(s)),n.sort((e,s)=>e.localeCompare(s)),d.sort((e,s)=>e.localeCompare(s)),p.sort(u),h.sort(u),{changedProjects:a$1,addedProjects:n,removedProjects:d,edgesAdded:p,edgesRemoved:h}}var k=class{model=null;sequence=0;rebuild;now;constructor(r,o){this.rebuild=o?.rebuild??(()=>p({...r})),this.now=o?.now??(()=>new Date);}get currentModel(){return this.model}async start(){let r=Date.now(),{model:o}=await this.rebuild();return this.model=o,this.buildEvent("ready","initial",null,o,Date.now()-r)}async pulse(){let r=Date.now(),o=this.model,{model:c,mode:a}=await this.rebuild(),n=this.buildEvent(this.hasStructuralChange(o,c)?"changed":"unchanged",a,o,c,Date.now()-r);return this.model=c,n}hasStructuralChange(r,o){return r?m(r)!==m(o):true}buildEvent(r,o,c,a,n){let d=b(c,a),i=m(a),l=c?m(c)!==i:true;return {schemaVersion:M,kind:r,sequence:this.sequence++,timestamp:this.now().toISOString(),mode:o,modelHash:i,modelHashChanged:l,changedProjects:d.changedProjects,addedProjects:d.addedProjects,removedProjects:d.removedProjects,graph:{nodeCount:a.graph?.nodes.length??0,edgeCount:a.graph?.edges.length??0,edgesAdded:d.edgesAdded,edgesRemoved:d.edgesRemoved},durationMs:n}}},P=new Set([".git",".hg",".svn","node_modules",".venv","venv","dist","build","out","target","coverage","htmlcov",".next",".turbo",".cache"]),R=new Set(["reports","cache","tmp",".cache"]);function y(t){if(!t)return false;let r=t.split(/[\\/]/).filter(Boolean);if(r.some(o=>P.has(o)))return false;for(let o=0;o<r.length-1;o+=1)if((r[o]===".workspai"||r[o]===".rapidkit")&&R.has(r[o+1]))return false;return true}async function G(t){let r=new k(t.buildOptions,t.engineOptions),o=await r.start();if(t.emit(o),t.once)return;let c=t.debounceMs??250,a=t.selfWriteSuppressionMs??Math.max(400,c+150),n=null,d=false,i=false,l=0,p=async()=>{if(d){i=true;return}d=true;try{let e=await r.pulse();t.emit(e);}catch(e){t.emit({schemaVersion:M,kind:"error",sequence:-1,timestamp:new Date().toISOString(),mode:"full",modelHash:r.currentModel?m(r.currentModel):"",modelHashChanged:false,changedProjects:[],addedProjects:[],removedProjects:[],graph:{nodeCount:0,edgeCount:0,edgesAdded:[],edgesRemoved:[]},durationMs:0,error:e instanceof Error?e.message:String(e)});}finally{d=false,l=Date.now()+a,i&&(i=false,p());}},h=e=>{y(e)&&(d||Date.now()<l||(n&&clearTimeout(n),n=setTimeout(()=>{n=null,p();},c)));};t.onProgress?.(`Watching ${t.workspacePath} for changes (Ctrl+C to stop).`);let u=w.watch(t.workspacePath,{recursive:true},(e,s)=>{typeof s=="string"?h(s):s&&h(Buffer.from(s).toString("utf8"));});await new Promise(e=>{let s=()=>{n&&clearTimeout(n),u.close(),e();};if(t.signal){if(t.signal.aborted){s();return}t.signal.addEventListener("abort",s,{once:true});}u.on("error",()=>s());});}export{M as WORKSPACE_WATCH_EVENT_SCHEMA_VERSION,k as WorkspaceWatchEngine,m as computeWatchModelHash,b as diffWatchModels,y as isWatchRelevantPath,G as runWorkspaceWatch};
package/package.json CHANGED
@@ -1,11 +1,12 @@
1
1
  {
2
2
  "name": "workspai",
3
- "version": "0.43.0",
3
+ "version": "0.43.1",
4
4
  "type": "module",
5
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",
9
+ "wspai",
9
10
  "ai",
10
11
  "cli",
11
12
  "create",
@@ -59,6 +60,7 @@
59
60
  "preinstall": "node scripts/enforce-package-manager.cjs",
60
61
  "postinstall": "node scripts/check-cli-resolution.cjs",
61
62
  "sync-kits": "bash scripts/sync-kits.sh",
63
+ "sync:kits": "corepack npm run sync-kits",
62
64
  "build": "tsup",
63
65
  "build:watch": "tsup --watch",
64
66
  "dev": "tsup --watch",
@@ -120,7 +122,15 @@
120
122
  "release:dry": "bash scripts/release.sh --no-publish --yes --allow-dirty",
121
123
  "release:patch": "bash scripts/release.sh patch",
122
124
  "release:minor": "bash scripts/release.sh minor",
123
- "release:major": "bash scripts/release.sh major"
125
+ "release:major": "bash scripts/release.sh major",
126
+ "check": "corepack npm run typecheck && corepack npm run lint && corepack npm run format:check",
127
+ "ci": "corepack npm run quality",
128
+ "contracts:sync": "corepack npm run sync:contracts && corepack npm run sync:shared-contracts",
129
+ "contracts:check": "corepack npm run check:contracts && corepack npm run check:shared-contracts && corepack npm run check:parity-snapshot && corepack npm run check:generated-contracts && corepack npm run check:agent-customization-drift",
130
+ "contracts:validate": "corepack npm run contracts:check && corepack npm run validate:contracts",
131
+ "docs:validate": "corepack npm run validate:docs",
132
+ "smoke": "corepack npm run smoke:enterprise-package && corepack npm run smoke:readme && corepack npm run smoke:frontend-generators",
133
+ "fix": "corepack npm run lint:fix && corepack npm run format && corepack npm run sync:contracts && corepack npm run sync:shared-contracts && corepack npm run sync-kits"
124
134
  },
125
135
  "dependencies": {
126
136
  "@clack/prompts": "^0.9.1",
@@ -0,0 +1,11 @@
1
+ __pycache__/
2
+ .env
3
+ *.py[cod]
4
+ *.log
5
+ .cache/
6
+ /.mypy_cache/
7
+ /.pytest_cache/
8
+ /.ruff_cache/
9
+ .idea/
10
+ .vscode/
11
+ dist/
@@ -1,12 +1,15 @@
1
1
  # {{ project_name }}
2
2
 
3
- Domain-driven FastAPI service generated with Workspai. Python-backed module commands use [RapidKit Core](https://github.com/rapidkitlabs/rapidkit-core).
3
+ Domain-driven FastAPI service generated with [RapidKit Core](https://github.com/rapidkitlabs/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-local RapidKit Core launcher (adds .rapidkit/rapidkit to PATH)
9
+ source .rapidkit/activate
10
+
8
11
  # Bootstrap dependencies (creates .venv + installs Poetry deps)
9
- npx workspai init # use make init if you prefer a Make target
12
+ rapidkit init # use make init if you prefer a Make target
10
13
 
11
14
  # Copy env templates and install hooks/tooling
12
15
  ./bootstrap.sh
@@ -19,20 +22,22 @@ make test
19
22
  # Run the service
20
23
  make dev
21
24
 
22
- # Use the project-local RapidKit Core helpers when you prefer auto-detected environments
23
- npx workspai dev
24
- npx workspai lint
25
- npx workspai test
25
+ # Use RapidKit Core helpers when you prefer auto-detected environments
26
+ rapidkit dev
27
+ rapidkit lint
28
+ rapidkit test
26
29
 
27
30
  # Run supply-chain and dependency audits
28
31
  make audit
29
32
  ```
30
33
 
31
- > Re-run `npx workspai init` (or `make init`) when dependencies change. If you only need to refresh tooling/hooks, run `SKIP_INIT=1 make install` or rely on `./bootstrap.sh`.
34
+ > Re-source `.rapidkit/activate` whenever you open a new shell so the project-local `rapidkit` launcher is always on your PATH.
35
+
36
+ > Re-run `rapidkit init` (or `make init`) when dependencies change. If you only need to refresh tooling/hooks, run `SKIP_INIT=1 make install` or rely on `./bootstrap.sh`.
32
37
 
33
- > Lockfiles are generated automatically during scaffolding. Set `RAPIDKIT_SKIP_LOCKS=1` (or `RAPIDKIT_GENERATE_LOCKS=0`) before running `workspai create` if you want to skip the lockfile attempt.
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.
34
39
 
35
- > Need to see every project-local RapidKit Core command? Run `rapidkit --help` when RapidKit Core is installed, or use `npx workspai --help` for workspace-level commands.
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.
36
41
 
37
42
  ## Project structure
38
43
 
@@ -45,7 +50,7 @@ src/
45
50
  presentation/ # API routers and dependencies
46
51
  shared/ # Cross-cutting primitives (Result, types, etc.)
47
52
  routing/ # Glue for module-provided routers
48
- modules/ # RapidKit Core module bootstrapping
53
+ modules/ # RapidKit module bootstrapping
49
54
  ```
50
55
 
51
56
  ## Layer overview
@@ -72,7 +77,7 @@ curl -s -X POST http://localhost:8000/api/examples/notes \
72
77
  curl -s http://localhost:8000/api/examples/notes/1 | jq
73
78
  ```
74
79
 
75
- Swap the in-memory repository with a RapidKit Core database module when you are ready for persistence.
80
+ Swap the in-memory repository with a RapidKit database module when you are ready for persistence.
76
81
 
77
82
  ## Deployment
78
83
 
@@ -84,7 +89,7 @@ Swap the in-memory repository with a RapidKit Core database module when you are
84
89
  ## Testing
85
90
 
86
91
  ```bash
87
- npx workspai test
92
+ rapidkit test
88
93
  ```
89
94
 
90
95
  The scaffold ships with a smoke test (`tests/test_app_factory.py`) that validates the
@@ -94,15 +99,15 @@ health endpoint and the application factory.
94
99
 
95
100
  ## Local development
96
101
 
97
- - `npx workspai init` bootstraps dependencies via the project-aware CLI.
98
- - `make init` is an optional alias for `npx workspai init` when you prefer Make targets.
99
- - `make install` re-runs `npx workspai init` unless `SKIP_INIT=1` is set and refreshes developer tooling such as pre-commit hooks.
102
+ - `rapidkit init` bootstraps dependencies via the project-local RapidKit Core launcher (run it after sourcing `.rapidkit/activate`).
103
+ - `make init` is an optional alias for `rapidkit init` when you prefer Make targets.
104
+ - `make install` re-runs `rapidkit init` unless `SKIP_INIT=1` is set and refreshes developer tooling such as pre-commit hooks.
100
105
  - `./bootstrap.sh` copies `.env.example` to `.env` (when missing) and runs `SKIP_INIT=1 make install` for you.
101
- - `make dev` or `npx workspai dev` starts the FastAPI server with hot-reload and ensures environment variables from `.env` are loaded.
102
- - `make lint`, `make typecheck`, and `make test` (or `npx workspai lint` / `npx workspai test`) are thin wrappers around Ruff, mypy, and pytest for consistent CI parity.
106
+ - `make dev` or `rapidkit dev` starts the FastAPI server with hot-reload and ensures environment variables from `.env` are loaded.
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.
103
108
  - `make audit` runs `pip-audit` and `npm audit` to surface vulnerable dependencies early.
104
109
 
105
- 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 project-local launcher variants when you need auto-discovery of 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.
106
111
 
107
112
  <!-- <<<inject:module-snippet>>> -->
108
113
 
@@ -1,5 +1,5 @@
1
- # Workspai environment defaults
2
- PROJECT_NAME="{{ project_name | default('workspai-app') }}"
1
+ # RapidKit environment defaults
2
+ PROJECT_NAME="{{ project_name | default('rapidkit-app') }}"
3
3
  ENV="development"
4
4
  DEBUG="true"
5
5
  APP_HOST="0.0.0.0"
@@ -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"
@@ -50,7 +50,7 @@ markers = [
50
50
 
51
51
  [tool.ruff]
52
52
  line-length = 100
53
- exclude = [".workspai/vendor", ".rapidkit/vendor"]
53
+ exclude = [".rapidkit/vendor"]
54
54
 
55
55
  [tool.ruff.lint]
56
56
  ignore = ["E501"]
@@ -61,4 +61,4 @@ ignore_missing_imports = true
61
61
  warn_unused_configs = false
62
62
  show_error_codes = true
63
63
  # Ignore vendor snapshots and generated health shims from strict static checking
64
- exclude = "(^\\.workspai/vendor/|^\\.rapidkit/vendor/|src/health/|src/main.py$|src/app/)"
64
+ exclude = "(^\\.rapidkit/vendor/|src/health/|src/main.py$|src/app/)"
@@ -7,7 +7,7 @@ from dataclasses import dataclass
7
7
 
8
8
  @dataclass(slots=True)
9
9
  class AppConfig:
10
- """Application-level configuration aggregated from RapidKit Core settings."""
10
+ """Application-level configuration aggregated from RapidKit settings."""
11
11
 
12
12
  environment: str = "development"
13
13
  service_name: str = "{{ project_name }}"