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.
- package/README.md +3 -3
- package/contracts/extension-cli-compatibility.v1.json +1 -1
- package/dist/{artifact-remediation-plan-5GJWPPRS.js → artifact-remediation-plan-244S5K6I.js} +3 -3
- package/dist/autopilot-release-45YVOBQO.js +1 -0
- package/dist/chunk-3QVTWKUI.js +4 -0
- package/dist/{chunk-T6OR6YOI.js → chunk-7UZVOYF5.js} +1 -1
- package/dist/{chunk-CVTCPPEF.js → chunk-AMDKXXLP.js} +1 -1
- package/dist/{chunk-EWYYLJQY.js → chunk-CDE4Q77U.js} +1 -1
- package/dist/{chunk-AFSZHLQT.js → chunk-DOCPUNWS.js} +1 -1
- package/dist/{chunk-OJEWQO3Z.js → chunk-EMTQ6OKI.js} +17 -17
- package/dist/{chunk-RE773WOX.js → chunk-FDDDQMJ2.js} +5 -5
- package/dist/{chunk-5SWNSJGW.js → chunk-FHSMY75W.js} +1 -1
- package/dist/chunk-FM7GMFZA.js +2 -0
- package/dist/{chunk-54XJNLYC.js → chunk-HV5ZFXAZ.js} +1 -1
- package/dist/{chunk-LO4C4VXR.js → chunk-LRW2SAGL.js} +1 -1
- package/dist/{chunk-PI5KUXDA.js → chunk-LTWYYP6E.js} +1 -1
- package/dist/{chunk-VRDF2J46.js → chunk-ONU457VN.js} +17 -17
- package/dist/{chunk-LUP4U6EE.js → chunk-P424XYHP.js} +1 -1
- package/dist/{chunk-LPZFK3Y6.js → chunk-PPHTYJ7G.js} +61 -61
- package/dist/{chunk-XEJD4KCV.js → chunk-TH5Y3EMA.js} +1 -1
- package/dist/chunk-TQEMLBAG.js +1 -0
- package/dist/{chunk-3KXW53QI.js → chunk-U6AXYUQY.js} +1 -1
- package/dist/{chunk-AAKUNWPR.js → chunk-UQKCCWUL.js} +43 -43
- package/dist/{chunk-VZKSNUEE.js → chunk-XNGANEXM.js} +1 -1
- package/dist/{create-WRZO4HK2.js → create-42RTNLH2.js} +1 -1
- package/dist/demo-kit-DZ7TPG7K.js +149 -0
- package/dist/doctor-DK4BON3N.js +1 -0
- package/dist/{dotnet-webapi-clean-IPY3MCGQ.js → dotnet-webapi-clean-BYUUHX5Y.js} +20 -20
- package/dist/{gofiber-standard-N5N3QGH3.js → gofiber-standard-B6UK5GR7.js} +31 -31
- package/dist/{gogin-standard-LAWQTBWL.js → gogin-standard-BXU44VEM.js} +31 -31
- package/dist/index.js +222 -185
- package/dist/pipeline-HQ57V6OZ.js +5 -0
- package/dist/{pythonRapidkitExec-3L3XJBSY.js → pythonRapidkitExec-GCQ3M46E.js} +1 -1
- package/dist/{springboot-standard-OZYF7ZM7.js → springboot-standard-PEHDKH2L.js} +27 -27
- package/dist/{workspace-PR6VZRBG.js → workspace-DZHWB7BV.js} +1 -1
- package/dist/{workspace-agent-sync-KTYF3HQR.js → workspace-agent-sync-5ADIQS7B.js} +1 -1
- package/dist/{workspace-context-QUTOP2XV.js → workspace-context-GEXDHA7A.js} +1 -1
- package/dist/{workspace-contract-XUGMCUSQ.js → workspace-contract-2TA27LGT.js} +1 -1
- package/dist/workspace-explain-D5NNL3NG.js +1 -0
- package/dist/{workspace-foundation-KGSV4E6D.js → workspace-foundation-FQWHPQGX.js} +1 -1
- package/dist/{workspace-intelligence-QJGVL37U.js → workspace-intelligence-BEM6WGCZ.js} +1 -1
- package/dist/{workspace-mcp-serve-AK4MYEHQ.js → workspace-mcp-serve-OMBA5V3C.js} +1 -1
- package/dist/{workspace-model-PNXXOGPO.js → workspace-model-F3B75TYT.js} +1 -1
- package/dist/workspace-registry-summary-6MFBRWDS.js +1 -0
- package/dist/workspace-run-3WJXIQKR.js +1 -0
- package/dist/{workspace-verify-WSDUUTR5.js → workspace-verify-OAATQV5T.js} +1 -1
- package/dist/{workspace-watch-AGPOJ74Q.js → workspace-watch-HU2OTQ52.js} +1 -1
- package/package.json +12 -2
- package/templates/kits/fastapi-ddd/.gitignore.j2 +11 -0
- package/templates/kits/fastapi-ddd/README.md.j2 +23 -18
- package/templates/kits/fastapi-ddd/common/env.example.j2 +2 -2
- package/templates/kits/fastapi-ddd/pyproject.toml.j2 +7 -7
- package/templates/kits/fastapi-ddd/src/app/config/__init__.py.j2 +1 -1
- package/templates/kits/fastapi-ddd/src/cli.py.j2 +6 -9
- package/templates/kits/fastapi-ddd/src/main.py.j2 +1 -1
- package/templates/kits/fastapi-standard/.gitignore.j2 +11 -0
- package/templates/kits/fastapi-standard/README.md.j2 +35 -30
- package/templates/kits/fastapi-standard/common/env.example.j2 +2 -2
- package/templates/kits/fastapi-standard/pyproject.toml.j2 +7 -7
- package/templates/kits/fastapi-standard/src/cli.py.j2 +7 -10
- package/templates/kits/fastapi-standard/src/main.py.j2 +1 -1
- package/templates/kits/fastapi-standard/src/routing/examples.py.j2 +1 -1
- package/templates/kits/fastapi-standard/tests/test_examples.py.j2 +1 -1
- package/templates/kits/nestjs-standard/.dockerignore.j2 +11 -0
- package/templates/kits/nestjs-standard/.eslintrc.js.j2 +25 -0
- package/templates/kits/nestjs-standard/.gitignore.j2 +22 -0
- package/templates/kits/nestjs-standard/.node-version.j2 +1 -0
- package/templates/kits/nestjs-standard/.nvmrc.j2 +1 -0
- package/templates/kits/nestjs-standard/.prettierrc.j2 +7 -0
- package/templates/kits/nestjs-standard/README.md.j2 +23 -18
- package/templates/kits/nestjs-standard/docs/README.md.j2 +2 -2
- package/templates/kits/nestjs-standard/jest.config.ts.j2 +1 -7
- package/templates/kits/nestjs-standard/package.json.j2 +1 -1
- package/templates/kits/nestjs-standard/src/config/configuration.ts.j2 +4 -4
- package/templates/kits/nestjs-standard/src/main.ts.j2 +1 -1
- package/templates/kits/nestjs-standard/src/modules/index.ts.j2 +1 -1
- package/templates/kits/nestjs-standard/tsconfig.build.json.j2 +1 -1
- package/templates/kits/nestjs-standard/tsconfig.json.j2 +1 -1
- package/dist/autopilot-release-QYUOVB26.js +0 -1
- package/dist/chunk-LYC6AIF2.js +0 -2
- package/dist/chunk-WU4ZRRA5.js +0 -4
- package/dist/demo-kit-AJ5LIM5G.js +0 -149
- package/dist/doctor-MF3M3FS3.js +0 -1
- package/dist/pipeline-QCUHFWDY.js +0 -5
- package/dist/workspace-explain-JEONEGZZ.js +0 -1
- package/dist/workspace-registry-summary-RUJE6RPH.js +0 -1
- 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-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
376
|
+
`}function z(){return `target
|
|
377
377
|
.git
|
|
378
378
|
.idea
|
|
379
379
|
.vscode
|
|
380
380
|
node_modules
|
|
381
381
|
coverage
|
|
382
|
-
`}function
|
|
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
|
|
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
|
|
402
|
-
`)}function
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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{
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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.
|
|
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",
|
|
@@ -1,12 +1,15 @@
|
|
|
1
1
|
# {{ project_name }}
|
|
2
2
|
|
|
3
|
-
Domain-driven FastAPI service generated with
|
|
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
|
-
|
|
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
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
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-
|
|
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 `
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
-
- `
|
|
98
|
-
- `make init` is an optional alias for `
|
|
99
|
-
- `make install` re-runs `
|
|
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 `
|
|
102
|
-
- `make lint`, `make typecheck`, and `make test` (or `
|
|
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
|
|
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
|
|
|
@@ -17,21 +17,21 @@ help = "src.cli:help_cmd"
|
|
|
17
17
|
|
|
18
18
|
[tool.poetry.dependencies]
|
|
19
19
|
python = "^{{ python_version }}"
|
|
20
|
-
fastapi = "^0.
|
|
21
|
-
uvicorn = { extras = ["standard"], version = "^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.
|
|
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.
|
|
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 = "^
|
|
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 = [".
|
|
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 = "(^\\.
|
|
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
|
|
10
|
+
"""Application-level configuration aggregated from RapidKit settings."""
|
|
11
11
|
|
|
12
12
|
environment: str = "development"
|
|
13
13
|
service_name: str = "{{ project_name }}"
|