workspai 0.67.0 → 0.69.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +38 -18
- package/contracts/cli-runtime-command-inventory.v1.snapshot.json +459 -0
- package/contracts/extension-cli-compatibility.v1.json +11 -0
- package/contracts/published-contract-catalog.v1.json +55 -0
- package/contracts/runtime-command-surface.v1.json +282 -0
- package/contracts/workspace-activity-board.v1.json +6 -0
- package/contracts/workspace-activity-event.v1.json +31 -1
- package/contracts/workspace-activity-monitor-snapshot.v1.json +35 -2
- package/contracts/workspace-intelligence/architecture-change-lease.v1.json +50 -0
- package/contracts/workspace-intelligence/architecture-surprise-report.v1.json +46 -0
- package/contracts/workspace-intelligence/change-operation-result.v1.json +43 -0
- package/contracts/workspace-intelligence/decision-checkpoint.v1.json +18 -0
- package/contracts/workspace-intelligence/decision-event.v1.json +134 -0
- package/contracts/workspace-intelligence/decision-transaction.v1.json +29 -0
- package/contracts/workspace-intelligence/goal-index.v1.json +13 -0
- package/contracts/workspace-intelligence/goal-pack.v1.json +2 -1
- package/contracts/workspace-intelligence/predicted-architecture-change.v1.json +34 -0
- package/contracts/workspace-intelligence/proof-carrying-change-capsule-export.v1.json +14 -0
- package/contracts/workspace-intelligence/proof-carrying-change-capsule-validation.v1.json +16 -0
- package/contracts/workspace-intelligence/proof-carrying-change-capsule.v1.json +62 -0
- package/contracts/workspace-intelligence/proof-carrying-change-list.v1.json +80 -0
- package/contracts/workspace-intelligence/workspace-knowledge-graph-change-overlay.v1.json +9 -1
- package/contracts/workspace-intelligence/workspace-knowledge-search.v1.json +1 -0
- package/dist/analyze-GPYPXXRT.js +1 -0
- package/dist/{artifact-remediation-plan-GFFHC2ZU.js → artifact-remediation-plan-JHHZ4L24.js} +1 -1
- package/dist/autopilot-release-FL47VMF7.js +1 -0
- package/dist/capabilities-command-MYSLJIYS.js +1 -0
- package/dist/chunk-25AWHAB5.js +2 -0
- package/dist/chunk-2LZWBUJD.js +1 -0
- package/dist/{chunk-KENOAC2Q.js → chunk-37ZLNFV5.js} +2 -2
- package/dist/{chunk-CZVT7T2X.js → chunk-3G5FF2JZ.js} +1 -1
- package/dist/chunk-3HFFKW4Q.js +2 -0
- package/dist/{chunk-BHM6RHTA.js → chunk-3WHE7V4M.js} +1 -1
- package/dist/{chunk-NVND4727.js → chunk-46QH3ZVI.js} +1 -1
- package/dist/{chunk-B4IVVTMQ.js → chunk-64XWHDZ3.js} +1 -1
- package/dist/chunk-A3MYO55A.js +3 -0
- package/dist/chunk-ABMB6MJT.js +1 -0
- package/dist/chunk-AD4ZY3RF.js +12 -0
- package/dist/chunk-BM2F5C4J.js +1 -0
- package/dist/chunk-COICGD62.js +1 -0
- package/dist/{chunk-5OA33JH2.js → chunk-D5LLTUTY.js} +1 -1
- package/dist/{chunk-4WVOAX2V.js → chunk-DWL3PPLA.js} +1 -1
- package/dist/{chunk-H77ZNH5O.js → chunk-EBEAJIBI.js} +1 -1
- package/dist/chunk-EBQS5T7Q.js +7 -0
- package/dist/{chunk-VI4ZRAY6.js → chunk-EG6EZ7HW.js} +1 -1
- package/dist/chunk-ERVWW5HX.js +1 -0
- package/dist/chunk-EZPLMAW2.js +1 -0
- package/dist/chunk-FIK343LI.js +1 -0
- package/dist/chunk-GSSJJS5M.js +6 -0
- package/dist/{chunk-SRLWHOLF.js → chunk-GYN6RPNU.js} +1 -1
- package/dist/{chunk-6E2Y3XGT.js → chunk-HCFOVANQ.js} +1 -1
- package/dist/chunk-I3UCODXU.js +1 -0
- package/dist/{chunk-2RPFCBS4.js → chunk-IGJA6GBQ.js} +1 -1
- package/dist/{chunk-FX5J6JCK.js → chunk-IVYPC36J.js} +1 -1
- package/dist/chunk-K33JJVQZ.js +2 -0
- package/dist/{chunk-L5Q2S5GY.js → chunk-KFTJVVJR.js} +1 -1
- package/dist/chunk-LDBULT2T.js +4 -0
- package/dist/{chunk-THIG2YQP.js → chunk-M37ALD4V.js} +1 -1
- package/dist/{chunk-HQLBO23O.js → chunk-MAWHHHU3.js} +5 -5
- package/dist/chunk-MBICKDYP.js +1 -0
- package/dist/{chunk-QMQBX3RV.js → chunk-MGL6DBOR.js} +1 -1
- package/dist/chunk-MHQHRMKU.js +5 -0
- package/dist/{chunk-KQ2TMI26.js → chunk-N2Q4MSSP.js} +64 -64
- package/dist/chunk-N4B2M44I.js +1 -0
- package/dist/chunk-NSH7TTSV.js +1 -0
- package/dist/chunk-O5XQP5E7.js +1 -0
- package/dist/chunk-ODK4LCEL.js +1 -0
- package/dist/chunk-OU3BBWH5.js +49 -0
- package/dist/chunk-OZXCNVGW.js +2 -0
- package/dist/{chunk-TABXSDTR.js → chunk-PKKSRXUS.js} +1 -1
- package/dist/{chunk-SLFOUSRW.js → chunk-QYEQVNBF.js} +1 -1
- package/dist/chunk-RVOW3BHQ.js +2 -0
- package/dist/chunk-TKXRP2B4.js +1 -0
- package/dist/chunk-UNXG3ZFV.js +1 -0
- package/dist/chunk-UW4SESKD.js +2 -0
- package/dist/{chunk-2MTJWPQ4.js → chunk-V52R2W2Q.js} +1 -1
- package/dist/chunk-V6TIT6M3.js +157 -0
- package/dist/chunk-VNKAISFE.js +8 -0
- package/dist/chunk-W37NOQVG.js +1 -0
- package/dist/chunk-W6WRT77T.js +1 -0
- package/dist/chunk-WHR5SL33.js +4 -0
- package/dist/{chunk-HYE5UHPV.js → chunk-WZ5V5U2K.js} +1 -1
- package/dist/chunk-XPGCFVGC.js +4 -0
- package/dist/chunk-YKY4JFCF.js +1 -0
- package/dist/{chunk-VWBMDGPY.js → chunk-YWZBGSFE.js} +3 -3
- package/dist/chunk-YZL7ZY7J.js +2 -0
- package/dist/{create-72ITVZXV.js → create-GWBQ74ZI.js} +1 -1
- package/dist/{demo-kit-5UQH2OXC.js → demo-kit-RKTHTXHJ.js} +1 -1
- package/dist/doctor-OQAXSMEM.js +1 -0
- package/dist/{dotnet-webapi-clean-YEHYIGOT.js → dotnet-webapi-clean-XL4IBUQV.js} +1 -1
- package/dist/goal-lifecycle-YWBVQ2DF.js +1 -0
- package/dist/goal-pack-KUXPZVNO.js +1 -0
- package/dist/{gofiber-standard-C44IIQYH.js → gofiber-standard-OHHMCNMJ.js} +1 -1
- package/dist/{gogin-standard-X7VKACVR.js → gogin-standard-BAZXPOKL.js} +1 -1
- package/dist/index.d.ts +35 -2
- package/dist/index.js +239 -239
- package/dist/{live-command-5VXPR43F.js → live-command-GNAASZ7U.js} +1 -1
- package/dist/pipeline-PGB5TEV3.js +5 -0
- package/dist/{project-agent-entry-5IUBEREI.js → project-agent-entry-H3JAGNLS.js} +1 -1
- package/dist/{project-intelligence-lens-LQCN65P2.js → project-intelligence-lens-7NMKHV5N.js} +1 -1
- package/dist/{project-test-coverage-KD4LLFGV.js → project-test-coverage-3DKZKLWY.js} +1 -1
- package/dist/proof-carrying-change-QFH7WI2E.js +1 -0
- package/dist/{rust-axum-JKZTZDRZ.js → rust-axum-CCJ6UCBW.js} +1 -1
- package/dist/{springboot-standard-PI4FLTAN.js → springboot-standard-M5JQEJML.js} +1 -1
- package/dist/verified-goal-7XHRWYSE.js +1 -0
- package/dist/{workspace-5W7FYGDQ.js → workspace-TJHCETBV.js} +1 -1
- package/dist/{workspace-agent-sync-OZCDQORK.js → workspace-agent-sync-Z35NTXCB.js} +1 -1
- package/dist/{workspace-archive-NOSGRKRZ.js → workspace-archive-OSMU3CK6.js} +1 -1
- package/dist/{workspace-context-L65BR5L6.js → workspace-context-KNJQUJWC.js} +1 -1
- package/dist/{workspace-contract-JYHNEJPV.js → workspace-contract-VIUQT5SZ.js} +1 -1
- package/dist/workspace-explain-HM6GMK26.js +1 -0
- package/dist/workspace-explain-contract-KV7RTEJU.js +1 -0
- package/dist/{workspace-feedback-MWGCT5R2.js → workspace-feedback-YSPEGCON.js} +1 -1
- package/dist/{workspace-foundation-VIB3PXNH.js → workspace-foundation-PLXFPI3J.js} +1 -1
- package/dist/{workspace-graph-stream-45JHE4MG.js → workspace-graph-stream-FNRQ2FTB.js} +1 -1
- package/dist/workspace-graph-token-efficiency-WNAFAN2F.js +1 -0
- package/dist/{workspace-history-JKW3VJO3.js → workspace-history-HDDFG6LH.js} +1 -1
- package/dist/{workspace-intelligence-3C47PK4L.js → workspace-intelligence-QLSD5EEV.js} +1 -1
- package/dist/{workspace-intelligence-benchmark-SRDIHX3X.js → workspace-intelligence-benchmark-S5OXVNLC.js} +1 -1
- package/dist/{workspace-intelligence-evaluation-OJIQS5SN.js → workspace-intelligence-evaluation-QDSOOUHH.js} +1 -1
- package/dist/{workspace-intelligence-runner-OWN5ZI6W.js → workspace-intelligence-runner-4EW4T2OW.js} +1 -1
- package/dist/workspace-intelligence-runtime-registry-ZLPF7BAY.js +1 -0
- package/dist/{workspace-knowledge-graph-AKG5NUU6.js → workspace-knowledge-graph-EEOW5VAJ.js} +1 -1
- package/dist/workspace-knowledge-graph-change-overlay-FIIAFLO6.js +1 -0
- package/dist/{workspace-knowledge-graph-contract-X52KXBXJ.js → workspace-knowledge-graph-contract-FVX5T7SU.js} +1 -1
- package/dist/{workspace-knowledge-graph-query-DXA4CROE.js → workspace-knowledge-graph-query-WHCGPBGS.js} +1 -1
- package/dist/workspace-knowledge-graph-snapshot-X347REDB.js +1 -0
- package/dist/workspace-mcp-serve-NQ42PE2I.js +3 -0
- package/dist/{workspace-model-R4ISKDB2.js → workspace-model-NCOOY5LC.js} +1 -1
- package/dist/{workspace-onboarding-Y5RPEFUD.js → workspace-onboarding-JNC7ZFMR.js} +1 -1
- package/dist/{workspace-readme-PL5V3UDH.js → workspace-readme-OV2ADTLW.js} +2 -2
- package/dist/{workspace-registry-summary-STGUGROG.js → workspace-registry-summary-ONT4VOJX.js} +1 -1
- package/dist/{workspace-repair-engine-FNLL5ZDK.js → workspace-repair-engine-WMJCYWO4.js} +2 -2
- package/dist/workspace-run-3S35MDX6.js +1 -0
- package/dist/{workspace-verify-AXVX3PF3.js → workspace-verify-MLABQUWK.js} +1 -1
- package/dist/{workspace-watch-RLBEJKXE.js → workspace-watch-MJOG5AZ3.js} +1 -1
- package/docs/README.md +2 -0
- package/docs/ci-workflows.md +1 -1
- package/docs/commands-reference.md +26 -1
- package/docs/contracts/ARTIFACT_CATALOG.md +37 -18
- package/docs/contracts/COMMAND_OWNERSHIP_MATRIX.md +17 -0
- package/docs/contracts/PROOF_CARRYING_CHANGE_CONTRACT_PLAN.md +65 -0
- package/docs/contracts/README.md +1 -1
- package/docs/proof-carrying-change.implementation.v1.json +118 -0
- package/docs/proof-carrying-change.md +202 -0
- package/docs/workspace-knowledge-graph.md +1 -0
- package/docs/workspace-live-activity.md +18 -4
- package/package.json +1 -1
- package/dist/analyze-IC2KRVCG.js +0 -1
- package/dist/autopilot-release-RECEZAZI.js +0 -1
- package/dist/capabilities-command-X4WZIJNR.js +0 -1
- package/dist/chunk-2M62CU3O.js +0 -2
- package/dist/chunk-2MVIRJJR.js +0 -1
- package/dist/chunk-3O7LZPKA.js +0 -4
- package/dist/chunk-3OGPTLI2.js +0 -1
- package/dist/chunk-4RV4JVGR.js +0 -6
- package/dist/chunk-5EVDW7JM.js +0 -1
- package/dist/chunk-5ME4W4LN.js +0 -1
- package/dist/chunk-5TY74LLW.js +0 -2
- package/dist/chunk-6254CWUY.js +0 -49
- package/dist/chunk-ARUFY5W3.js +0 -1
- package/dist/chunk-BHFRP7TV.js +0 -8
- package/dist/chunk-BRYJTW6S.js +0 -2
- package/dist/chunk-BUYLM6QV.js +0 -1
- package/dist/chunk-CPR2CMOY.js +0 -1
- package/dist/chunk-EHCKITR4.js +0 -2
- package/dist/chunk-ENZPM52J.js +0 -1
- package/dist/chunk-FPDH3N3A.js +0 -7
- package/dist/chunk-GIQ4SDRJ.js +0 -1
- package/dist/chunk-IKUFNK46.js +0 -2
- package/dist/chunk-IQQMFRWM.js +0 -3
- package/dist/chunk-JCGSIDMC.js +0 -2
- package/dist/chunk-LPCZHKD5.js +0 -1
- package/dist/chunk-N4QFNOAI.js +0 -1
- package/dist/chunk-OCNPOYMA.js +0 -1
- package/dist/chunk-PSYQ6IJA.js +0 -12
- package/dist/chunk-SVYY55IS.js +0 -157
- package/dist/chunk-SX6A656X.js +0 -1
- package/dist/chunk-TP7VKEUF.js +0 -1
- package/dist/chunk-UTV4DTNM.js +0 -1
- package/dist/chunk-XDPTAV2T.js +0 -2
- package/dist/chunk-Y35VLVF6.js +0 -5
- package/dist/chunk-Y4Z6CEII.js +0 -1
- package/dist/chunk-YYY2WXOH.js +0 -1
- package/dist/chunk-ZEEV5J4I.js +0 -1
- package/dist/chunk-ZGHJIQXL.js +0 -1
- package/dist/chunk-ZI2E7P6O.js +0 -4
- package/dist/doctor-CVYUESRQ.js +0 -1
- package/dist/goal-lifecycle-H55AGFCB.js +0 -1
- package/dist/goal-pack-6OBZOPCD.js +0 -1
- package/dist/pipeline-SKYOXWHW.js +0 -5
- package/dist/verified-goal-HN7G532B.js +0 -1
- package/dist/workspace-explain-SUBK6FLO.js +0 -1
- package/dist/workspace-explain-contract-WMREJWHF.js +0 -1
- package/dist/workspace-graph-token-efficiency-NPECU6Y5.js +0 -1
- package/dist/workspace-intelligence-runtime-registry-UKFB3BI7.js +0 -1
- package/dist/workspace-knowledge-graph-change-overlay-XG6FC4IX.js +0 -1
- package/dist/workspace-knowledge-graph-snapshot-SNI5K2RL.js +0 -1
- package/dist/workspace-mcp-serve-PK226GMV.js +0 -3
- package/dist/workspace-run-GFBFGUFM.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import {a}from'./chunk-QMQBX3RV.js';import {m as m$1}from'./chunk-U5ENEDJA.js';import {a as a$1}from'./chunk-GR6442P7.js';import {f,e}from'./chunk-XDPTAV2T.js';import {h,i}from'./chunk-ZGHJIQXL.js';import {createHash}from'crypto';import l from'path';import {execa}from'execa';import v from'fs-extra';var D=h.projectTestCoverage.schemaVersion,P=i.projectTestCoverage,G=["package.json","pyproject.toml","requirements.txt","go.mod","pom.xml","build.gradle","build.gradle.kts","Cargo.toml","composer.json","Gemfile","mix.exs","deps.edn","project.clj","build.sbt","CMakeLists.txt","meson.build","deno.json","deno.jsonc"];function p(t){let e=Number(t);return Number.isFinite(e)&&e>=0?e:0}function m(t,e,o=0){let n=p(t),s=Math.min(p(e),n),r=p(o);return {total:n,covered:s,skipped:r,percent:n>0?Math.round(s/n*1e4)/100:null}}function W(t){if(!t||typeof t!="object"||Array.isArray(t))return;let e=t;return m(e.total,e.covered,e.skipped)}function y(t,e){let o=l.isAbsolute(e)?e:l.resolve(t,e),n=l.relative(t,o);return n&&!n.startsWith("..")?n.split(l.sep).join("/"):e}async function C(t){return createHash("sha256").update(await v.readFile(t)).digest("hex")}async function I(t){let e=l.resolve(t);for(;;){let o=await v.pathExists(l.join(e,".workspai","project.json"))||await v.pathExists(l.join(e,".rapidkit","project.json")),n=(await v.readdir(e).catch(()=>[])).some(r=>r.toLowerCase().endsWith(".gemspec"));if(o||n||(await Promise.all(G.map(r=>v.pathExists(l.join(e,r))))).some(Boolean))return e;let s=l.dirname(e);if(s===e)return l.resolve(t);e=s;}}async function V(t){return m$1(t).runtime}async function U(t,e,o=5){let n=[],s=[{dir:t,depth:0}],r=new Set([".git",".workspai",".rapidkit","node_modules",".venv","vendor","deps"]);for(;s.length>0;){let a=s.shift();if(!a)break;let i=await v.readdir(a.dir,{withFileTypes:true}).catch(()=>[]);for(let c of i){if(r.has(c.name)||a$1(c.name))continue;let u=l.join(a.dir,c.name),g=l.relative(t,u).split(l.sep).join("/");c.isFile()&&e(c.name,g)&&n.push(u),c.isDirectory()&&a.depth<o&&s.push({dir:u,depth:a.depth+1});}}return n}async function L(t,e){let o=await v.readJson(e),n=o.total??o,s={};for(let a of ["lines","branches","functions","statements"]){let i=W(n[a]);i&&(s[a]=i);}let r=[];for(let[a,i]of Object.entries(o)){if(a==="total"||!i||typeof i!="object"||Array.isArray(i))continue;let c=i,u={};for(let g of ["lines","branches","functions","statements"]){let b=W(c[g]);b&&(u[g]=b);}r.push({path:y(t,a),metrics:u});}return {metrics:s,files:r,source:{format:"istanbul-json",path:e,sha256:await C(e)}}}async function z(t,e){let o=await v.readJson(e),n=o.totals??{},s={lines:m(n.num_statements,n.covered_lines)};p(n.num_branches)>0&&(s.branches=m(n.num_branches,n.covered_branches));let r=[];for(let[a,i]of Object.entries(o.files??{})){let c=i?.summary??{};r.push({path:y(t,a),metrics:{lines:m(c.num_statements,c.covered_lines),...p(c.num_branches)>0?{branches:m(c.num_branches,c.covered_branches)}:{}}});}return {metrics:s,files:r,source:{format:"coverage-py-json",path:e,sha256:await C(e)}}}function j(t){if(!t||typeof t!="object"||Array.isArray(t))return;let e=t,o=p(e.count),n=p(e.covered);return o>0?m(o,n):void 0}async function B(t,e){let o=await v.readJson(e),n=Array.isArray(o.data)?o.data[0]??{}:o,s=n.totals??{},r={};r.lines=j(s.lines),r.functions=j(s.functions),r.branches=j(s.branches),r.statements=j(s.regions);let a=[];for(let i of Array.isArray(n.files)?n.files:[]){if(!i||typeof i!="object"||Array.isArray(i))continue;let c=i,u=c.summary??{};a.push({path:y(t,String(c.filename??"unknown")),metrics:{lines:j(u.lines),functions:j(u.functions),branches:j(u.branches),statements:j(u.regions)}});}return {metrics:r,files:a,source:{format:"llvm-cov-json",path:e,sha256:await C(e)}}}async function E(t,e){let o=await v.readFile(e,"utf8"),n=[],s="",r=0,a=0,i=0,c=0,u=0,g=0,b=d=>{s&&(n.push({path:y(t,s),metrics:{lines:m(d.lineTotal,d.lineCovered),functions:m(d.functionTotal,d.functionCovered),branches:m(d.branchTotal,d.branchCovered)}}),r+=d.lineTotal,a+=d.lineCovered,i+=d.functionTotal,c+=d.functionCovered,u+=d.branchTotal,g+=d.branchCovered);},h={lineTotal:0,lineCovered:0,functionTotal:0,functionCovered:0,branchTotal:0,branchCovered:0};for(let d of o.split(/\r?\n/))d.startsWith("SF:")?s=d.slice(3):d.startsWith("LF:")?h.lineTotal=p(d.slice(3)):d.startsWith("LH:")?h.lineCovered=p(d.slice(3)):d.startsWith("FNF:")?h.functionTotal=p(d.slice(4)):d.startsWith("FNH:")?h.functionCovered=p(d.slice(4)):d.startsWith("BRF:")?h.branchTotal=p(d.slice(4)):d.startsWith("BRH:")?h.branchCovered=p(d.slice(4)):d==="end_of_record"&&(b(h),s="",h={lineTotal:0,lineCovered:0,functionTotal:0,functionCovered:0,branchTotal:0,branchCovered:0});return {metrics:{lines:m(r,a),functions:m(i,c),branches:m(u,g)},files:n,source:{format:"lcov",path:e,sha256:await C(e)}}}async function K(t,e){let o=await v.readFile(e,"utf8"),n=new Map;for(let a of o.split(/\r?\n/).slice(1)){let i=/^(.+?):\d+\.\d+,\d+\.\d+\s+(\d+)\s+(\d+)$/.exec(a.trim());if(!i)continue;let c=n.get(i[1])??{total:0,covered:0},u=p(i[2]);c.total+=u,p(i[3])>0&&(c.covered+=u),n.set(i[1],c);}let s=[...n.entries()].map(([a,i])=>({path:y(t,a),metrics:{statements:m(i.total,i.covered)}})),r=[...n.values()].reduce((a,i)=>({total:a.total+i.total,covered:a.covered+i.covered}),{total:0,covered:0});return {metrics:{statements:m(r.total,r.covered)},files:s,source:{format:"go-coverprofile",path:e,sha256:await C(e)}}}function k(t,e){let n=[...t.matchAll(new RegExp(`<counter\\s+type=["']${e}["']\\s+missed=["'](\\d+)["']\\s+covered=["'](\\d+)["']\\s*\\/?\\s*>`,"gi"))].at(-1);return n?m(Number(n[1])+Number(n[2]),n[2]):void 0}async function x(t,e){let o=await v.readFile(t,"utf8"),n={};if(e==="cobertura-xml"){let s=/<coverage\b([^>]*)>/i.exec(o)?.[1]??"",r=/\bline-rate=["']([\d.]+)["']/i.exec(s)?.[1],a=/\bbranch-rate=["']([\d.]+)["']/i.exec(s)?.[1];r&&(n.lines=m(1e4,Math.round(Number(r)*1e4))),a&&(n.branches=m(1e4,Math.round(Number(a)*1e4)));}if(e==="clover-xml"){let r=[...o.matchAll(/<metrics\b([^>]*)\/?>/gi)].at(-1)?.[1]??"",a=g=>p(new RegExp(`\\b${g}=["'](\\d+)["']`,"i").exec(r)?.[1]),i=a("statements"),c=a("methods"),u=a("conditionals");i>0&&(n.statements=m(i,a("coveredstatements"))),c>0&&(n.functions=m(c,a("coveredmethods"))),u>0&&(n.branches=m(u,a("coveredconditionals")));}return n.lines??=k(o,"LINE"),n.branches??=k(o,"BRANCH"),n.functions??=k(o,"METHOD"),n.statements??=k(o,"INSTRUCTION"),{metrics:n,files:[],source:{format:e,path:t,sha256:await C(t)}}}async function X(t){let e=await v.readFile(t,"utf8"),o=/<scoverage\b([^>]*)>/i.exec(e)?.[1]??"",n=b=>p(new RegExp(`\\b${b}=["']([\\d.]+)["']`,"i").exec(o)?.[1]),s=n("statement-count"),r=n("statements-invoked"),a=n("branch-count"),i=n("branches-invoked"),c=n("statement-rate"),u=n("branch-rate"),g={};return s>0?g.statements=m(s,r):c>0&&(g.statements=m(1e4,Math.round(c*100))),a>0?g.branches=m(a,i):u>0&&(g.branches=m(1e4,Math.round(u*100))),{metrics:g,files:[],source:{format:"scoverage-xml",path:t,sha256:await C(t)}}}async function Q(t,e){let o=await v.readJson(e),n=new Map;for(let a of Object.values(o)){let i=a?.coverage;if(!(!i||typeof i!="object"||Array.isArray(i)))for(let[c,u]of Object.entries(i)){if(!Array.isArray(u))continue;let g=n.get(c)??[];u.forEach((b,h)=>{typeof b=="number"&&(g[h]=Math.max(g[h]??0,b));}),n.set(c,g);}}let s=[...n.entries()].map(([a,i])=>{let c=i.filter(u=>typeof u=="number");return {path:y(t,a),metrics:{lines:m(c.length,c.filter(u=>u>0).length)}}}),r=s.reduce((a,i)=>{let c=i.metrics.lines;return {total:a.total+(c?.total??0),covered:a.covered+(c?.covered??0)}},{total:0,covered:0});return {metrics:{lines:m(r.total,r.covered)},files:s,source:{format:"simplecov-json",path:e,sha256:await C(e)}}}async function q(t,e={}){let o=[{relativePath:"coverage/coverage-summary.json",parser:r=>L(t,r)},{relativePath:"coverage.json",parser:async r=>{let a=await v.readJson(r);return Array.isArray(a.data)?B(t,r):z(t,r)}},{relativePath:"coverage/lcov.info",parser:r=>E(t,r)},{relativePath:"cover/lcov.info",parser:r=>E(t,r)},{relativePath:"lcov.info",parser:r=>E(t,r)},{relativePath:"coverage.out",parser:r=>K(t,r)},{relativePath:"target/site/jacoco/jacoco.xml",parser:r=>x(r,"jacoco-xml")},{relativePath:"build/reports/jacoco/test/jacocoTestReport.xml",parser:r=>x(r,"jacoco-xml")},{relativePath:"coverage.xml",parser:r=>x(r,"clover-xml")},{relativePath:".resultset.json",parser:r=>Q(t,r)}];for(let r of o){let a=l.join(t,r.relativePath);if(await v.pathExists(a))return r.parser(a)}if(e.recursive===false)return null;let s=(await U(t,(r,a)=>r==="coverage.cobertura.xml"||r==="jacoco.xml"||r==="clover.xml"||r==="scoverage.xml"||a.endsWith("/coverage-summary.json"),7)).sort()[0];return s?s.endsWith("coverage-summary.json")?L(t,s):s.endsWith("jacoco.xml")?x(s,"jacoco-xml"):s.endsWith("coverage.cobertura.xml")?x(s,"cobertura-xml"):s.endsWith("scoverage.xml")?X(s):x(s,"clover-xml"):null}async function Y(t){return v.readJson(l.join(t,"package.json")).catch(()=>null)}async function H(t,e){let o=(n,s)=>({cwd:t,executable:n,args:s});if(e==="node"||e==="bun"){let s=(await Y(t))?.scripts??{},r=["test:coverage","test:cov","coverage"].find(i=>typeof s[i]=="string"),a=e==="bun"?"bun":await v.pathExists(l.join(t,"pnpm-lock.yaml"))?"pnpm":await v.pathExists(l.join(t,"yarn.lock"))?"yarn":"npm";if(r)return {runner:String(s[r]).split(/\s+/)[0]||a,invocations:[o(a,a==="yarn"?[r]:["run",r])],diagnostics:[]};if(typeof s.test=="string"){let i=a==="yarn"?["test","--coverage"]:a==="bun"?["test","--coverage","--coverage-reporter=lcov"]:["test","--","--coverage"];return {runner:String(s.test).split(/\s+/)[0]||a,invocations:[o(a,i)],diagnostics:[]}}return {runner:null,invocations:[],diagnostics:["No project-owned test or coverage script was detected."]}}if(e==="deno")return {runner:"deno",invocations:[o("deno",["test","--coverage=coverage"]),o("deno",["coverage","--lcov","--output=coverage/lcov.info","coverage"])],diagnostics:[]};if(e==="python")return {runner:"pytest-cov",invocations:[o(await v.pathExists(l.join(t,".venv",process.platform==="win32"?"Scripts":"bin",process.platform==="win32"?"python.exe":"python"))?l.join(".venv",process.platform==="win32"?"Scripts":"bin",process.platform==="win32"?"python.exe":"python"):process.platform==="win32"?"python":"python3",["-m","pytest","--cov=.","--cov-report=json:coverage.json"])],diagnostics:[]};if(e==="go")return {runner:"go test",invocations:[o("go",["test","./...","-coverprofile=coverage.out"])],diagnostics:[]};if(e==="java"){let n=await v.pathExists(l.join(t,"gradlew")),s=await v.pathExists(l.join(t,"gradlew.bat")),r=n||s,a=await v.pathExists(l.join(t,"mvnw")),i=await v.pathExists(l.join(t,"mvnw.cmd")),c=r?process.platform==="win32"&&s?".\\gradlew.bat":"./gradlew":await v.pathExists(l.join(t,"pom.xml"))?process.platform==="win32"&&i?".\\mvnw.cmd":a?"./mvnw":"mvn":"gradle";return {runner:r?"jacoco/gradle":"jacoco/maven",invocations:[o(c,r?["test","jacocoTestReport"]:["test","jacoco:report"])],diagnostics:[]}}return e==="dotnet"?{runner:"dotnet coverlet",invocations:[o("dotnet",["test","--collect:XPlat Code Coverage"])],diagnostics:[]}:e==="rust"?{runner:"cargo llvm-cov",invocations:[o("cargo",["llvm-cov","--json","--output-path","coverage.json"])],diagnostics:["cargo-llvm-cov must be available in the project toolchain."]}:e==="php"?{runner:"phpunit",invocations:[o(process.platform==="win32"?"vendor\\bin\\phpunit.bat":"vendor/bin/phpunit",["--coverage-clover","coverage.xml"])],diagnostics:[]}:e==="ruby"?{runner:"simplecov",invocations:[o("bundle",["exec","rspec"])],diagnostics:["The test suite must enable SimpleCov to emit .resultset.json."]}:e==="elixir"?{runner:"mix cover",invocations:[o("mix",["test","--cover"])],diagnostics:["Configure ExCoveralls for JSON or LCOV interchange when machine-readable coverage is required."]}:e==="clojure"?{runner:"cloverage",invocations:[o("clojure",["-M:coverage"])],diagnostics:["The project must declare a coverage alias such as cloverage."]}:e==="scala"?{runner:"sbt-scoverage",invocations:[o("sbt",["clean","coverage","test","coverageReport"])],diagnostics:["The project must declare the scoverage plugin."]}:e==="kotlin"?{runner:"jacoco/gradle",invocations:[o(await v.pathExists(l.join(t,process.platform==="win32"?"gradlew.bat":"gradlew"))?process.platform==="win32"?".\\gradlew.bat":"./gradlew":"gradle",["test","jacocoTestReport"])],diagnostics:["The project must declare the JaCoCo Gradle plugin."]}:e==="c"||e==="cpp"?{runner:"CTest/LLVM coverage",invocations:[o("ctest",["--test-dir","build","--output-on-failure"])],diagnostics:["The native build must be instrumented for coverage and export LCOV, Cobertura, or LLVM JSON evidence."]}:{runner:null,invocations:[],diagnostics:["Project runtime could not be detected."]}}async function ve(t,e){let o=await I(t),n=e??await V(o),s=await H(o,n),r=await q(o,{recursive:false}).catch(()=>null),a=r?.source.path&&r.source.sha256?[{path:l.relative(o,r.source.path).split(l.sep).join("/"),sha256:r.source.sha256}]:[],i=[...s.diagnostics],c=r?"available":s.invocations.length===0||n==="unknown"?"unsupported":i.length>0?"requires-setup":"available";return {runtime:n,runner:s.runner,status:c,existingEvidence:a,invocations:s.invocations,prerequisites:i}}function Z(t,e){let o=t?l.relative(t,e).split(l.sep).join("/"):l.resolve(e),n=l.basename(e).toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"").slice(0,48)||"project",s=createHash("sha256").update(o).digest("hex").slice(0,12);return `${n}--${s}`}function ee(t){return t.lines?"lines":t.statements?"statements":t.branches?"branches":"functions"}async function me(t={}){let e$1=await I(t.projectPath??process.cwd()),o=a(e$1),n=t.runtime??await V(e$1),s=Math.max(0,Math.min(100,Math.round(t.target??80))),r=await H(e$1,n),a$1=[],i=Date.now();if(t.run)for(let f of r.invocations){let w=await execa(f.executable,f.args,{cwd:f.cwd,reject:false,timeout:6e5}).catch(()=>({exitCode:1}));if(a$1.push(Number(w.exitCode??1)),Number(w.exitCode??1)!==0)break}let c=await q(e$1).catch(()=>null),u=c?ee(c.metrics):"lines",g=c?.metrics[u]?.percent??null,b=t.run&&a$1.some(f=>f!==0)?"failed":g===null?"unavailable":g>=s?"passed":"below-target",h=Z(o,e$1),d=l.join(e$1,P),R=o?`.workspai/reports/projects/${h}/project-test-coverage-last-run.json`:null,T={schemaVersion:D,generatedAt:new Date().toISOString(),status:b,project:{id:h,name:l.basename(e$1),path:e$1,workspacePath:o},runtime:n,runner:r.runner,target:{metric:u,percent:s},metrics:c?.metrics??{},files:c?.files??[],lowCoverageFiles:(c?.files??[]).map(f=>{let w=f.metrics[u]??f.metrics.lines??f.metrics.statements;return {path:f.path,percent:w?.percent??null,uncovered:Math.max(0,(w?.total??0)-(w?.covered??0))}}).filter(f=>f.percent===null||f.percent<s).sort((f,w)=>w.uncovered-f.uncovered||f.path.localeCompare(w.path)),source:c?.source??{format:"unknown",path:null,sha256:null},execution:{requested:t.run===true,invocations:r.invocations,exitCodes:a$1,durationMs:Date.now()-i},diagnostics:[...r.diagnostics,...c?[]:["No supported machine-readable coverage artifact was found."]],artifactPaths:{project:d,workspaceLatest:o?l.join(o,P):null,workspaceProject:o&&R?l.join(o,R):null}};return o&&R&&await f(o,P,[{relativePath:P,payload:T},{relativePath:R,payload:T}]),await e(e$1,P,T),T}export{D as a,P as b,ve as c,me as d};
|
|
1
|
+
import {a}from'./chunk-MGL6DBOR.js';import {m as m$1}from'./chunk-U5ENEDJA.js';import {a as a$1}from'./chunk-GR6442P7.js';import {h,g}from'./chunk-OZXCNVGW.js';import {s,t}from'./chunk-ODK4LCEL.js';import {createHash}from'crypto';import l from'path';import {execa}from'execa';import v from'fs-extra';var D=s.projectTestCoverage.schemaVersion,P=t.projectTestCoverage,G=["package.json","pyproject.toml","requirements.txt","go.mod","pom.xml","build.gradle","build.gradle.kts","Cargo.toml","composer.json","Gemfile","mix.exs","deps.edn","project.clj","build.sbt","CMakeLists.txt","meson.build","deno.json","deno.jsonc"];function p(t){let e=Number(t);return Number.isFinite(e)&&e>=0?e:0}function m(t,e,o=0){let n=p(t),s=Math.min(p(e),n),r=p(o);return {total:n,covered:s,skipped:r,percent:n>0?Math.round(s/n*1e4)/100:null}}function W(t){if(!t||typeof t!="object"||Array.isArray(t))return;let e=t;return m(e.total,e.covered,e.skipped)}function y(t,e){let o=l.isAbsolute(e)?e:l.resolve(t,e),n=l.relative(t,o);return n&&!n.startsWith("..")?n.split(l.sep).join("/"):e}async function C(t){return createHash("sha256").update(await v.readFile(t)).digest("hex")}async function I(t){let e=l.resolve(t);for(;;){let o=await v.pathExists(l.join(e,".workspai","project.json"))||await v.pathExists(l.join(e,".rapidkit","project.json")),n=(await v.readdir(e).catch(()=>[])).some(r=>r.toLowerCase().endsWith(".gemspec"));if(o||n||(await Promise.all(G.map(r=>v.pathExists(l.join(e,r))))).some(Boolean))return e;let s=l.dirname(e);if(s===e)return l.resolve(t);e=s;}}async function V(t){return m$1(t).runtime}async function U(t,e,o=5){let n=[],s=[{dir:t,depth:0}],r=new Set([".git",".workspai",".rapidkit","node_modules",".venv","vendor","deps"]);for(;s.length>0;){let a=s.shift();if(!a)break;let i=await v.readdir(a.dir,{withFileTypes:true}).catch(()=>[]);for(let c of i){if(r.has(c.name)||a$1(c.name))continue;let u=l.join(a.dir,c.name),g=l.relative(t,u).split(l.sep).join("/");c.isFile()&&e(c.name,g)&&n.push(u),c.isDirectory()&&a.depth<o&&s.push({dir:u,depth:a.depth+1});}}return n}async function L(t,e){let o=await v.readJson(e),n=o.total??o,s={};for(let a of ["lines","branches","functions","statements"]){let i=W(n[a]);i&&(s[a]=i);}let r=[];for(let[a,i]of Object.entries(o)){if(a==="total"||!i||typeof i!="object"||Array.isArray(i))continue;let c=i,u={};for(let g of ["lines","branches","functions","statements"]){let b=W(c[g]);b&&(u[g]=b);}r.push({path:y(t,a),metrics:u});}return {metrics:s,files:r,source:{format:"istanbul-json",path:e,sha256:await C(e)}}}async function z(t,e){let o=await v.readJson(e),n=o.totals??{},s={lines:m(n.num_statements,n.covered_lines)};p(n.num_branches)>0&&(s.branches=m(n.num_branches,n.covered_branches));let r=[];for(let[a,i]of Object.entries(o.files??{})){let c=i?.summary??{};r.push({path:y(t,a),metrics:{lines:m(c.num_statements,c.covered_lines),...p(c.num_branches)>0?{branches:m(c.num_branches,c.covered_branches)}:{}}});}return {metrics:s,files:r,source:{format:"coverage-py-json",path:e,sha256:await C(e)}}}function j(t){if(!t||typeof t!="object"||Array.isArray(t))return;let e=t,o=p(e.count),n=p(e.covered);return o>0?m(o,n):void 0}async function B(t,e){let o=await v.readJson(e),n=Array.isArray(o.data)?o.data[0]??{}:o,s=n.totals??{},r={};r.lines=j(s.lines),r.functions=j(s.functions),r.branches=j(s.branches),r.statements=j(s.regions);let a=[];for(let i of Array.isArray(n.files)?n.files:[]){if(!i||typeof i!="object"||Array.isArray(i))continue;let c=i,u=c.summary??{};a.push({path:y(t,String(c.filename??"unknown")),metrics:{lines:j(u.lines),functions:j(u.functions),branches:j(u.branches),statements:j(u.regions)}});}return {metrics:r,files:a,source:{format:"llvm-cov-json",path:e,sha256:await C(e)}}}async function E(t,e){let o=await v.readFile(e,"utf8"),n=[],s="",r=0,a=0,i=0,c=0,u=0,g=0,b=d=>{s&&(n.push({path:y(t,s),metrics:{lines:m(d.lineTotal,d.lineCovered),functions:m(d.functionTotal,d.functionCovered),branches:m(d.branchTotal,d.branchCovered)}}),r+=d.lineTotal,a+=d.lineCovered,i+=d.functionTotal,c+=d.functionCovered,u+=d.branchTotal,g+=d.branchCovered);},h={lineTotal:0,lineCovered:0,functionTotal:0,functionCovered:0,branchTotal:0,branchCovered:0};for(let d of o.split(/\r?\n/))d.startsWith("SF:")?s=d.slice(3):d.startsWith("LF:")?h.lineTotal=p(d.slice(3)):d.startsWith("LH:")?h.lineCovered=p(d.slice(3)):d.startsWith("FNF:")?h.functionTotal=p(d.slice(4)):d.startsWith("FNH:")?h.functionCovered=p(d.slice(4)):d.startsWith("BRF:")?h.branchTotal=p(d.slice(4)):d.startsWith("BRH:")?h.branchCovered=p(d.slice(4)):d==="end_of_record"&&(b(h),s="",h={lineTotal:0,lineCovered:0,functionTotal:0,functionCovered:0,branchTotal:0,branchCovered:0});return {metrics:{lines:m(r,a),functions:m(i,c),branches:m(u,g)},files:n,source:{format:"lcov",path:e,sha256:await C(e)}}}async function K(t,e){let o=await v.readFile(e,"utf8"),n=new Map;for(let a of o.split(/\r?\n/).slice(1)){let i=/^(.+?):\d+\.\d+,\d+\.\d+\s+(\d+)\s+(\d+)$/.exec(a.trim());if(!i)continue;let c=n.get(i[1])??{total:0,covered:0},u=p(i[2]);c.total+=u,p(i[3])>0&&(c.covered+=u),n.set(i[1],c);}let s=[...n.entries()].map(([a,i])=>({path:y(t,a),metrics:{statements:m(i.total,i.covered)}})),r=[...n.values()].reduce((a,i)=>({total:a.total+i.total,covered:a.covered+i.covered}),{total:0,covered:0});return {metrics:{statements:m(r.total,r.covered)},files:s,source:{format:"go-coverprofile",path:e,sha256:await C(e)}}}function k(t,e){let n=[...t.matchAll(new RegExp(`<counter\\s+type=["']${e}["']\\s+missed=["'](\\d+)["']\\s+covered=["'](\\d+)["']\\s*\\/?\\s*>`,"gi"))].at(-1);return n?m(Number(n[1])+Number(n[2]),n[2]):void 0}async function x(t,e){let o=await v.readFile(t,"utf8"),n={};if(e==="cobertura-xml"){let s=/<coverage\b([^>]*)>/i.exec(o)?.[1]??"",r=/\bline-rate=["']([\d.]+)["']/i.exec(s)?.[1],a=/\bbranch-rate=["']([\d.]+)["']/i.exec(s)?.[1];r&&(n.lines=m(1e4,Math.round(Number(r)*1e4))),a&&(n.branches=m(1e4,Math.round(Number(a)*1e4)));}if(e==="clover-xml"){let r=[...o.matchAll(/<metrics\b([^>]*)\/?>/gi)].at(-1)?.[1]??"",a=g=>p(new RegExp(`\\b${g}=["'](\\d+)["']`,"i").exec(r)?.[1]),i=a("statements"),c=a("methods"),u=a("conditionals");i>0&&(n.statements=m(i,a("coveredstatements"))),c>0&&(n.functions=m(c,a("coveredmethods"))),u>0&&(n.branches=m(u,a("coveredconditionals")));}return n.lines??=k(o,"LINE"),n.branches??=k(o,"BRANCH"),n.functions??=k(o,"METHOD"),n.statements??=k(o,"INSTRUCTION"),{metrics:n,files:[],source:{format:e,path:t,sha256:await C(t)}}}async function X(t){let e=await v.readFile(t,"utf8"),o=/<scoverage\b([^>]*)>/i.exec(e)?.[1]??"",n=b=>p(new RegExp(`\\b${b}=["']([\\d.]+)["']`,"i").exec(o)?.[1]),s=n("statement-count"),r=n("statements-invoked"),a=n("branch-count"),i=n("branches-invoked"),c=n("statement-rate"),u=n("branch-rate"),g={};return s>0?g.statements=m(s,r):c>0&&(g.statements=m(1e4,Math.round(c*100))),a>0?g.branches=m(a,i):u>0&&(g.branches=m(1e4,Math.round(u*100))),{metrics:g,files:[],source:{format:"scoverage-xml",path:t,sha256:await C(t)}}}async function Q(t,e){let o=await v.readJson(e),n=new Map;for(let a of Object.values(o)){let i=a?.coverage;if(!(!i||typeof i!="object"||Array.isArray(i)))for(let[c,u]of Object.entries(i)){if(!Array.isArray(u))continue;let g=n.get(c)??[];u.forEach((b,h)=>{typeof b=="number"&&(g[h]=Math.max(g[h]??0,b));}),n.set(c,g);}}let s=[...n.entries()].map(([a,i])=>{let c=i.filter(u=>typeof u=="number");return {path:y(t,a),metrics:{lines:m(c.length,c.filter(u=>u>0).length)}}}),r=s.reduce((a,i)=>{let c=i.metrics.lines;return {total:a.total+(c?.total??0),covered:a.covered+(c?.covered??0)}},{total:0,covered:0});return {metrics:{lines:m(r.total,r.covered)},files:s,source:{format:"simplecov-json",path:e,sha256:await C(e)}}}async function q(t,e={}){let o=[{relativePath:"coverage/coverage-summary.json",parser:r=>L(t,r)},{relativePath:"coverage.json",parser:async r=>{let a=await v.readJson(r);return Array.isArray(a.data)?B(t,r):z(t,r)}},{relativePath:"coverage/lcov.info",parser:r=>E(t,r)},{relativePath:"cover/lcov.info",parser:r=>E(t,r)},{relativePath:"lcov.info",parser:r=>E(t,r)},{relativePath:"coverage.out",parser:r=>K(t,r)},{relativePath:"target/site/jacoco/jacoco.xml",parser:r=>x(r,"jacoco-xml")},{relativePath:"build/reports/jacoco/test/jacocoTestReport.xml",parser:r=>x(r,"jacoco-xml")},{relativePath:"coverage.xml",parser:r=>x(r,"clover-xml")},{relativePath:".resultset.json",parser:r=>Q(t,r)}];for(let r of o){let a=l.join(t,r.relativePath);if(await v.pathExists(a))return r.parser(a)}if(e.recursive===false)return null;let s=(await U(t,(r,a)=>r==="coverage.cobertura.xml"||r==="jacoco.xml"||r==="clover.xml"||r==="scoverage.xml"||a.endsWith("/coverage-summary.json"),7)).sort()[0];return s?s.endsWith("coverage-summary.json")?L(t,s):s.endsWith("jacoco.xml")?x(s,"jacoco-xml"):s.endsWith("coverage.cobertura.xml")?x(s,"cobertura-xml"):s.endsWith("scoverage.xml")?X(s):x(s,"clover-xml"):null}async function Y(t){return v.readJson(l.join(t,"package.json")).catch(()=>null)}async function H(t,e){let o=(n,s)=>({cwd:t,executable:n,args:s});if(e==="node"||e==="bun"){let s=(await Y(t))?.scripts??{},r=["test:coverage","test:cov","coverage"].find(i=>typeof s[i]=="string"),a=e==="bun"?"bun":await v.pathExists(l.join(t,"pnpm-lock.yaml"))?"pnpm":await v.pathExists(l.join(t,"yarn.lock"))?"yarn":"npm";if(r)return {runner:String(s[r]).split(/\s+/)[0]||a,invocations:[o(a,a==="yarn"?[r]:["run",r])],diagnostics:[]};if(typeof s.test=="string"){let i=a==="yarn"?["test","--coverage"]:a==="bun"?["test","--coverage","--coverage-reporter=lcov"]:["test","--","--coverage"];return {runner:String(s.test).split(/\s+/)[0]||a,invocations:[o(a,i)],diagnostics:[]}}return {runner:null,invocations:[],diagnostics:["No project-owned test or coverage script was detected."]}}if(e==="deno")return {runner:"deno",invocations:[o("deno",["test","--coverage=coverage"]),o("deno",["coverage","--lcov","--output=coverage/lcov.info","coverage"])],diagnostics:[]};if(e==="python")return {runner:"pytest-cov",invocations:[o(await v.pathExists(l.join(t,".venv",process.platform==="win32"?"Scripts":"bin",process.platform==="win32"?"python.exe":"python"))?l.join(".venv",process.platform==="win32"?"Scripts":"bin",process.platform==="win32"?"python.exe":"python"):process.platform==="win32"?"python":"python3",["-m","pytest","--cov=.","--cov-report=json:coverage.json"])],diagnostics:[]};if(e==="go")return {runner:"go test",invocations:[o("go",["test","./...","-coverprofile=coverage.out"])],diagnostics:[]};if(e==="java"){let n=await v.pathExists(l.join(t,"gradlew")),s=await v.pathExists(l.join(t,"gradlew.bat")),r=n||s,a=await v.pathExists(l.join(t,"mvnw")),i=await v.pathExists(l.join(t,"mvnw.cmd")),c=r?process.platform==="win32"&&s?".\\gradlew.bat":"./gradlew":await v.pathExists(l.join(t,"pom.xml"))?process.platform==="win32"&&i?".\\mvnw.cmd":a?"./mvnw":"mvn":"gradle";return {runner:r?"jacoco/gradle":"jacoco/maven",invocations:[o(c,r?["test","jacocoTestReport"]:["test","jacoco:report"])],diagnostics:[]}}return e==="dotnet"?{runner:"dotnet coverlet",invocations:[o("dotnet",["test","--collect:XPlat Code Coverage"])],diagnostics:[]}:e==="rust"?{runner:"cargo llvm-cov",invocations:[o("cargo",["llvm-cov","--json","--output-path","coverage.json"])],diagnostics:["cargo-llvm-cov must be available in the project toolchain."]}:e==="php"?{runner:"phpunit",invocations:[o(process.platform==="win32"?"vendor\\bin\\phpunit.bat":"vendor/bin/phpunit",["--coverage-clover","coverage.xml"])],diagnostics:[]}:e==="ruby"?{runner:"simplecov",invocations:[o("bundle",["exec","rspec"])],diagnostics:["The test suite must enable SimpleCov to emit .resultset.json."]}:e==="elixir"?{runner:"mix cover",invocations:[o("mix",["test","--cover"])],diagnostics:["Configure ExCoveralls for JSON or LCOV interchange when machine-readable coverage is required."]}:e==="clojure"?{runner:"cloverage",invocations:[o("clojure",["-M:coverage"])],diagnostics:["The project must declare a coverage alias such as cloverage."]}:e==="scala"?{runner:"sbt-scoverage",invocations:[o("sbt",["clean","coverage","test","coverageReport"])],diagnostics:["The project must declare the scoverage plugin."]}:e==="kotlin"?{runner:"jacoco/gradle",invocations:[o(await v.pathExists(l.join(t,process.platform==="win32"?"gradlew.bat":"gradlew"))?process.platform==="win32"?".\\gradlew.bat":"./gradlew":"gradle",["test","jacocoTestReport"])],diagnostics:["The project must declare the JaCoCo Gradle plugin."]}:e==="c"||e==="cpp"?{runner:"CTest/LLVM coverage",invocations:[o("ctest",["--test-dir","build","--output-on-failure"])],diagnostics:["The native build must be instrumented for coverage and export LCOV, Cobertura, or LLVM JSON evidence."]}:{runner:null,invocations:[],diagnostics:["Project runtime could not be detected."]}}async function ve(t,e){let o=await I(t),n=e??await V(o),s=await H(o,n),r=await q(o,{recursive:false}).catch(()=>null),a=r?.source.path&&r.source.sha256?[{path:l.relative(o,r.source.path).split(l.sep).join("/"),sha256:r.source.sha256}]:[],i=[...s.diagnostics],c=r?"available":s.invocations.length===0||n==="unknown"?"unsupported":i.length>0?"requires-setup":"available";return {runtime:n,runner:s.runner,status:c,existingEvidence:a,invocations:s.invocations,prerequisites:i}}function Z(t,e){let o=t?l.relative(t,e).split(l.sep).join("/"):l.resolve(e),n=l.basename(e).toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"").slice(0,48)||"project",s=createHash("sha256").update(o).digest("hex").slice(0,12);return `${n}--${s}`}function ee(t){return t.lines?"lines":t.statements?"statements":t.branches?"branches":"functions"}async function me(t={}){let e=await I(t.projectPath??process.cwd()),o=a(e),n=t.runtime??await V(e),s=Math.max(0,Math.min(100,Math.round(t.target??80))),r=await H(e,n),a$1=[],i=Date.now();if(t.run)for(let f of r.invocations){let w=await execa(f.executable,f.args,{cwd:f.cwd,reject:false,timeout:6e5}).catch(()=>({exitCode:1}));if(a$1.push(Number(w.exitCode??1)),Number(w.exitCode??1)!==0)break}let c=await q(e).catch(()=>null),u=c?ee(c.metrics):"lines",g$1=c?.metrics[u]?.percent??null,b=t.run&&a$1.some(f=>f!==0)?"failed":g$1===null?"unavailable":g$1>=s?"passed":"below-target",h$1=Z(o,e),d=l.join(e,P),R=o?`.workspai/reports/projects/${h$1}/project-test-coverage-last-run.json`:null,T={schemaVersion:D,generatedAt:new Date().toISOString(),status:b,project:{id:h$1,name:l.basename(e),path:e,workspacePath:o},runtime:n,runner:r.runner,target:{metric:u,percent:s},metrics:c?.metrics??{},files:c?.files??[],lowCoverageFiles:(c?.files??[]).map(f=>{let w=f.metrics[u]??f.metrics.lines??f.metrics.statements;return {path:f.path,percent:w?.percent??null,uncovered:Math.max(0,(w?.total??0)-(w?.covered??0))}}).filter(f=>f.percent===null||f.percent<s).sort((f,w)=>w.uncovered-f.uncovered||f.path.localeCompare(w.path)),source:c?.source??{format:"unknown",path:null,sha256:null},execution:{requested:t.run===true,invocations:r.invocations,exitCodes:a$1,durationMs:Date.now()-i},diagnostics:[...r.diagnostics,...c?[]:["No supported machine-readable coverage artifact was found."]],artifactPaths:{project:d,workspaceLatest:o?l.join(o,P):null,workspaceProject:o&&R?l.join(o,R):null}};return o&&R&&await h(o,P,[{relativePath:P,payload:T},{relativePath:R,payload:T}]),await g(e,P,T),T}export{D as a,P as b,ve as c,me as d};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import {a}from'./chunk-A5FBGRJA.js';import {a as a$1}from'./chunk-AFIFZTOY.js';import {t,s}from'./chunk-ODK4LCEL.js';import {s as s$1}from'./chunk-RGNCL5OB.js';import {k,v,e,a as a$2,u,f as f$1}from'./chunk-VQZ5PI5J.js';import b from'crypto';import P from'fs';import d from'fs/promises';import i from'path';import T from'fs-extra';var x=s.projectWorkspaceLink.schemaVersion,L="workspai.project-workspace-link",l=class extends Error{constructor(r,a,o={}){super(a);this.code=r;this.context=o;this.name="ProjectWorkspaceResolutionError";}code;context};function $(e){return P.existsSync(i.join(e,".workspai-workspace"))?".workspai-workspace":".workspai/workspace.json"}function _(e){return b.createHash("sha256").update([e.workspaceName,a(e.workspacePath),e.projectName,a(e.projectPath),e.relativePath.replace(/\\/g,"/"),e.relationship].join("\0")).digest("hex")}function I(e){let t=i.resolve(e);for(;;){if(k(t))return t;let r=i.dirname(t);if(r===t)return null;t=r;}}function J(e){let t=i.resolve(e);for(;;){if([...u(t,"project.json"),...u(t,"context.json")].some(a=>P.existsSync(a)))return t;let r=i.dirname(t);if(r===t)return null;t=r;}}function y(e){return JSON.parse(P.readFileSync(e,"utf8"))}function K(e){let t$1=y(e);if(!t$1||typeof t$1!="object"||Array.isArray(t$1))throw new l("project.workspace.link-invalid",`Project workspace link is not a JSON object: ${e}`,{linkPath:e});let r=t$1;if(r.schemaVersion!==x||r.kind!==L||r.state!=="active"||!r.workspace||typeof r.workspace.name!="string"||r.workspace.name.trim().length===0||typeof r.workspace.root!="string"||!i.isAbsolute(r.workspace.root)||![".workspai-workspace",".workspai/workspace.json"].includes(r.workspace.marker??"")||r.workspace.contract!==t.workspaceContract||!r.project||typeof r.project.name!="string"||r.project.name.trim().length===0||typeof r.project.relativePath!="string"||i.isAbsolute(r.project.relativePath)||r.project.relativePath.split(/[\\/]/).includes("..")||!["managed","adopted","imported","linked","restored"].includes(r.project.relationship??"")||!r.integrity||r.integrity.algorithm!=="sha256"||typeof r.integrity.binding!="string"||!/^[a-f0-9]{64}$/.test(r.integrity.binding))throw new l("project.workspace.link-invalid",`Project workspace link does not satisfy ${x}: ${e}`,{linkPath:e});try{a$1(t$1,"contracts/project-workspace-link.v1.json","Project workspace link");}catch(a){throw new l("project.workspace.link-invalid",`Project workspace link does not satisfy ${x}: ${e}`,{linkPath:e,validationError:a instanceof Error?a.message:String(a)})}return r}function f(e,t){let r=i.join(e,".workspai","workspace.contract.json");if(!P.existsSync(r))return null;try{let a$1=y(r);if(!Array.isArray(a$1.projects))return false;let o=a(t);return a$1.projects.some(n=>typeof n.externalPath=="string"?a(n.externalPath)===o:typeof n.relativePath!="string"||n.relativePath.startsWith("external/")?false:a(i.resolve(e,n.relativePath))===o)}catch{return false}}function M(e,t,r){let a$1=a(e),o=new Map;for(let n of s$1(t,r)){if(!P.existsSync(n))continue;let c;try{c=y(n);}catch{continue}if(Array.isArray(c.workspaces))for(let p of c.workspaces){if(!p||typeof p.name!="string"||typeof p.path!="string"||!Array.isArray(p.projects)||!p.projects.some(w=>w&&typeof w.path=="string"&&a(w.path)===a$1))continue;let s=a(p.path);!k(s)||f(s,e)!==true||o.set(s,{name:p.name,path:s});}}return [...o.values()].sort((n,c)=>n.path.localeCompare(c.path))}function m(e,t){if(e)throw t;return null}function te(e$1){let t=e$1.strict===true,r=i.resolve(e$1.startPath),a=e$1.explicitWorkspacePath?i.resolve(e$1.explicitWorkspacePath):null,o=J(r);if(a)return k(a)?e$1.requireProjectMembership===true&&o&&f(a,o)!==true?m(t,new l("project.workspace.membership-missing",`Project is not registered in the explicit workspace contract: ${a}`,{workspacePath:a,projectPath:o})):{workspacePath:a,projectPath:o,source:"explicit",linkPath:o?v(o,e):null,recovered:false}:m(t,new l("project.workspace.explicit-invalid",`Explicit workspace path is not a Workspai workspace: ${a}`,{workspacePath:a,projectPath:o}));let n=I(r);if(n)return e$1.requireProjectMembership===true&&o&&f(n,o)!==true?m(t,new l("project.workspace.membership-missing",`Project is not registered in its parent workspace contract: ${n}`,{workspacePath:n,projectPath:o})):{workspacePath:n,projectPath:o,source:"parent",linkPath:o?v(o,e):null,recovered:false};if(!o)return m(t,new l("project.workspace.unlinked","No Workspai project or workspace could be resolved from the current directory.",{startPath:r}));let c=v(o,e),p=null;if(P.existsSync(c)){let s;try{s=K(c);}catch(O){if(t)throw O;return null}let u=_({workspaceName:s.workspace.name,workspacePath:s.workspace.root,projectName:s.project.name,projectPath:o,relativePath:s.project.relativePath,relationship:s.project.relationship}),w=f(s.workspace.root,o);if(s.integrity.binding===u&&k(s.workspace.root)&&P.existsSync(i.join(s.workspace.root,s.workspace.marker))&&w===true)return {workspacePath:i.resolve(s.workspace.root),projectPath:o,source:"local-link",linkPath:c,recovered:false};p=s;}let h=M(o,e$1.env??process.env,e$1.platform??process.platform);return h.length>1?m(t,new l("project.workspace.ambiguous",`Project is registered in more than one valid workspace: ${h.map(s=>s.name).join(", ")}. Pass --workspace <path> or run project workspace relink.`,{projectPath:o,candidates:h})):h.length===1?{workspacePath:h[0].path,projectPath:o,source:"registry",linkPath:c,recovered:p!==null}:p?m(t,new l("project.workspace.link-stale",`Project workspace link is stale and no valid registry relocation was found: ${p.workspace.root}`,{projectPath:o,linkPath:c,linkedWorkspacePath:p.workspace.root})):m(t,new l("project.workspace.unlinked","This Workspai project is not linked to a valid workspace. Run `npx workspai adopt .` or `npx workspai project workspace relink --workspace <path>`.",{projectPath:o,linkPath:c}))}async function F(e,t){await d.mkdir(i.dirname(e),{recursive:true});let r=`${e}.${process.pid}.${b.randomUUID()}.tmp`;try{await d.writeFile(r,`${JSON.stringify(t,null,2)}
|
|
2
|
+
`,{encoding:"utf8",mode:384});try{await d.rename(r,e);}catch(a){let o=a.code;if(o!=="EEXIST"&&o!=="EPERM")throw a;await T.move(r,e,{overwrite:true});}}finally{await d.rm(r,{force:true}).catch(()=>{});}}async function D(e){let t=i.join(e,".gitignore"),r=await d.readFile(t,"utf8").catch(c=>{if(c.code==="ENOENT")return "";throw c});if(r.split(/\r?\n/).map(c=>c.trim()).includes(f$1))return;let n=`${r.length>0&&!r.endsWith(`
|
|
3
|
+
`)?`
|
|
4
|
+
`:""}
|
|
5
|
+
# Workspai machine-local workspace binding
|
|
6
|
+
${f$1}
|
|
7
|
+
`;await d.writeFile(t,`${r}${n}`,"utf8");}async function V(e$1){let t$1=i.resolve(e$1.workspacePath),r=i.resolve(e$1.projectPath);if(!k(t$1))throw new l("project.workspace.explicit-invalid",`Cannot link project to an invalid Workspai workspace: ${t$1}`,{workspacePath:t$1,projectPath:r});let a$3=i.join(t$1,".workspai","workspace.contract.json"),o=e$1.workspaceName??i.basename(t$1),n=e$1.relativePath;if(P.existsSync(a$3)){let h=y(a$3);typeof h.workspace?.name=="string"&&(o=h.workspace.name);let s=a(r),u=h.projects?.find(w=>typeof w.externalPath=="string"?a(w.externalPath)===s:typeof w.relativePath=="string"&&!w.relativePath.startsWith("external/")&&a(i.resolve(t$1,w.relativePath))===s);u&&typeof u.relativePath=="string"&&(n=u.relativePath);}if(n??=i.relative(t$1,r).replace(/\\/g,"/"),(!n||n.startsWith(".."))&&(n=`external/${e$1.projectName}`),f(t$1,r)!==true)throw new l("project.workspace.membership-missing",`Project is not registered in the canonical workspace contract: ${e$1.projectName}`,{workspacePath:t$1,projectPath:r,projectName:e$1.projectName});let c={schemaVersion:x,kind:L,generatedAt:(e$1.now??new Date).toISOString(),state:"active",workspace:{name:o,root:t$1,marker:$(t$1),contract:t.workspaceContract},project:{name:e$1.projectName,relativePath:n,relationship:e$1.relationship},integrity:{algorithm:"sha256",binding:_({workspaceName:o,workspacePath:t$1,projectName:e$1.projectName,projectPath:r,relativePath:n,relationship:e$1.relationship})}};a$1(c,"contracts/project-workspace-link.v1.json","Project workspace link");let p=i.join(r,a$2,e);return await D(r),await F(p,c),{linkPath:p,link:c}}async function oe(e,t="linked"){if(!e.projectPath)return null;let r=u(e.projectPath,"project.json").find(o=>P.existsSync(o)),a=i.basename(e.projectPath);if(r)try{let o=y(r);typeof o.name=="string"?a=o.name:typeof o.slug=="string"&&(a=o.slug);}catch{}return V({workspacePath:e.workspacePath,projectPath:e.projectPath,projectName:a,relationship:t})}export{l as a,te as b,V as c,oe as d};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import a from'path';import Y from'fs-extra';import q from'chalk';async function U(p,n={}){let e=a.resolve(p),{WORKSPACE_CONTRACT_PATH:l,syncWorkspaceContract:d,verifyWorkspaceContract:S,writeWorkspaceContractVerifyEvidence:j}=await import('./workspace-contract-
|
|
1
|
+
import a from'path';import Y from'fs-extra';import q from'chalk';async function U(p,n={}){let e=a.resolve(p),{WORKSPACE_CONTRACT_PATH:l,syncWorkspaceContract:d,verifyWorkspaceContract:S,writeWorkspaceContractVerifyEvidence:j}=await import('./workspace-contract-VIUQT5SZ.js'),w=await d({workspacePath:e,strict:true}),{syncWorkspaceReadme:E,WORKSPACE_README_PATH:R}=await import('./workspace-readme-OV2ADTLW.js'),x=await E({workspacePath:e,workspaceName:w.contract.workspace.name,profile:w.contract.workspace.profile??"minimal",projectCount:w.contract.projects.length}),{buildWorkspaceModel:h,writeWorkspaceModel:g}=await import('./workspace-model-NCOOY5LC.js'),r=await h({workspacePath:e,includeEvidence:true}),k=await g(r,e),{buildWorkspaceImpact:G,buildWorkspaceModelSnapshot:O,diffWorkspaceModel:$,writeWorkspaceImpact:M,writeWorkspaceModelDiff:T,writeWorkspaceModelSnapshot:_}=await import('./workspace-intelligence-QLSD5EEV.js'),{WORKSPACE_INTELLIGENCE_ARTIFACTS:s}=await import('./workspace-intelligence-runtime-registry-ZLPF7BAY.js'),{syncWorkspaceAgentGrounding:P}=await import('./workspace-agent-sync-Z35NTXCB.js'),W=await P({workspacePath:e,model:r,write:true,refreshContext:true,strict:false,preset:"enterprise",targets:["all"],projectGrounding:n.projectGrounding??"managed"}),v=new Set(W.writtenFiles),i=new Set(W.projectLenses?.skipped.map(t=>`${t.name}: ${t.reason}`)??[]),{readWorkspaceKnowledgeGraphSnapshot:C}=await import('./workspace-knowledge-graph-snapshot-X347REDB.js'),o=await C(e),y=false;if(o.status==="miss"){if(o.reason!=="live-input-mismatch")throw new Error(`Workspace consumer sync could not validate canonical Model/Graph evidence (${o.reason}).`);r=await h({workspacePath:e,includeEvidence:true}),k=await g(r,e);let{buildWorkspaceAgentContext:t,writeWorkspaceAgentContext:f}=await import('./workspace-context-KNJQUJWC.js'),m=await t({workspacePath:e,model:r,agent:"generic",includeEvidence:true});await f(m,e);let b=await P({workspacePath:e,model:r,write:true,refreshContext:false,strict:false,preset:"enterprise",targets:["all"],projectGrounding:n.projectGrounding??"managed"});for(let c of b.writtenFiles)v.add(c);for(let c of b.projectLenses?.skipped??[])i.add(`${c.name}: ${c.reason}`);if(o=await C(e),o.status==="miss")throw new Error(`Workspace consumer reconciliation did not produce fresh canonical evidence (${o.reason}).`);y=true;}let F=a.join(e,s.snapshot),u=false;if(!await Y.pathExists(F)){let t=await O({workspacePath:e,model:r});await _(t,e),u=true;}let I=await $({workspacePath:e,fromPath:s.snapshot,model:r}),N=await T(I,e),L=await G({workspacePath:e,fromPath:s.diff}),K=await M(L,e),z=await S({workspacePath:e,strict:true}),H=await j({workspacePath:e,result:z}),V=(o.graph.source.inputs?.scopes??[]).filter(t=>t.truncated);for(let t of V)i.add(`${t.kind}:${t.id} graph inventory reached its ${t.fileLimit}-file emergency bound; inventory completeness is bounded.`);let A=o.graph.quality.completeness?.providers.bounded??0;A>0&&i.add(`${A} graph provider(s) used declared adaptive semantic/deep budgets; inspect provider inputCoverage before making exhaustive symbol-level claims.`);let D=[l,(await import('./workspace-registry-summary-ONT4VOJX.js')).WORKSPACE_REGISTRY_SUMMARY_RELATIVE_PATH,a.relative(e,x).split(a.sep).join("/")||R,a.relative(e,k).split(a.sep).join("/"),s.knowledgeGraph,...u?[s.snapshot]:[],a.relative(e,N).split(a.sep).join("/"),a.relative(e,K).split(a.sep).join("/"),a.relative(e,H).split(a.sep).join("/"),...v].filter((t,f,m)=>m.indexOf(t)===f);return n.silent||console.log(q.gray(`\u2713 Workspace Intelligence synced \xB7 ${r.summary.projectCount} project(s) \xB7 model + graph + agent grounding \xB7 freshness sealed`)),{workspacePath:e,projectCount:r.summary.projectCount,baselineCreated:u,freshnessSealed:true,reconciledAfterGrounding:y,writtenFiles:D,warnings:[...i].sort()}}async function ee(p,n={}){let e=a.resolve(p),l=n.workspaceName??a.basename(e),{registerWorkspaceStrict:d}=await import('./workspace-TJHCETBV.js');return await d(e,l),U(e,{silent:n.silent})}export{U as a,ee as b};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import {e,g}from'./chunk-OZXCNVGW.js';import {t,s}from'./chunk-ODK4LCEL.js';import {t as t$1}from'./chunk-VQZ5PI5J.js';import u from'fs';import A from'path';var a=s.workspaceRunLast.schemaVersion,W="workspace-run-last.json",o=t.workspaceRunLast;var P=new Set(["init","test","build","start"]);function _(e){return P.has(e)}async function d(e){try{return await u.promises.access(e,u.constants.F_OK),true}catch{return false}}async function w(e){try{let r=await u.promises.readFile(e,"utf-8");return JSON.parse(r)}catch{return null}}function m(e){return !e||typeof e!="object"||Array.isArray(e)?null:e}function h(e){let r=e.stage;return typeof r!="string"||r.trim().length===0||!Array.isArray(e.projects)?false:_(r)||/^[a-z][a-z0-9_-]*$/i.test(r)}function T(e){let r=m(e);return !r||r.schemaVersion===a?false:h(r)}function C(e){let r=m(e);return r?r.schemaVersion===a&&r.stages!=null:false}function p(e){if(C(e))return e;if(T(e)){let r=e.stage;return {schemaVersion:a,generatedAt:e.generatedAt,workspacePath:e.workspacePath,latestStage:r,stages:{[r]:e},enterpriseControls:e.enterpriseControls??{jsonReady:true,evidencePath:o}}}return null}function U(e,r){let n=p(e);if(!n)return null;let t=r??n.latestStage;return n.stages[t]??null}async function V(e){let r=(await Promise.all(t$1(A.resolve(e),"reports",W).map(async t=>await d(t)?t:null))).find(t=>typeof t=="string");if(!r)return null;let n=await w(r);return p(n)}async function j(e$1,r){let n=A.resolve(e$1);return e(n,o,async()=>{let t=(await Promise.all(t$1(n,"reports",W).map(async s=>await d(s)?s:null))).find(s=>typeof s=="string"),R=t?await w(t):null,i=p(R);if(t&&!i)throw new Error(`Workspace run evidence is unreadable or invalid; refusing to overwrite: ${t}`);let l=i?{...i.stages}:{};l[r.stage]=r;let g$1={schemaVersion:a,generatedAt:r.generatedAt,workspacePath:r.workspacePath,latestStage:r.stage,stages:l,enterpriseControls:{jsonReady:true,evidencePath:o}};return await g(n,o,g$1),g$1})}export{W as a,o as b,U as c,V as d,j as e};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var ne="workspace-knowledge-search.v1";function b(e){return e.trim().toLowerCase()}var V=new WeakMap;function B(e){let t=V.get(e);if(t)return t;let s=new Map(e.relations.map(a=>[a.id,a])),o=new Map(e.entities.map(a=>[a.id,a])),i=new Map(e.proofs.map(a=>[a.id,a])),r=new Map,d=new Map,h=(a,g)=>{let p=d.get(a)??[];p.push(g),d.set(a,p);};for(let a of e.entities){let g=[a.id,a.label,a.identity.key,...a.kind==="project"&&a.projectId?[a.projectId]:[],...a.identity.aliases];for(let p of new Set(g.map(b))){let k=r.get(p)??[];k.push(a),r.set(p,k);}}for(let a of e.relations)h(a.from,{from:a.from,to:a.to,relationId:a.id,kind:a.kind,direction:"forward",proofIds:a.proofIds}),h(a.to,{from:a.to,to:a.from,relationId:a.id,kind:a.kind,direction:"reverse",proofIds:a.proofIds});for(let a of r.values())a.sort((g,p)=>g.id.localeCompare(p.id));for(let a of d.values())a.sort((g,p)=>g.to.localeCompare(p.to)||g.relationId.localeCompare(p.relationId));let l={entitiesById:o,relationsById:s,entitiesByAlias:r,proofsById:i,adjacency:d};return V.set(e,l),l}function D(e,t){let s=B(e),o=s.relationsById.get(t);if(o)return {found:true,targetType:"relation",relation:o};let i=b(t),r=s.entitiesByAlias.get(i)??[];return r.length===1?{found:true,targetType:"entity",entity:r[0]}:{found:false,query:t,candidates:r.map(d=>d.id).sort()}}function Ke(e,t){let s=D(e,t);if(!s.found)return {query:t,found:false,target:null,proofs:[],candidates:s.candidates};let o=s.targetType==="entity"?s.entity:s.relation,i=new Set(o.proofIds);return {query:t,found:true,target:o,candidates:[],proofs:[...i].map(r=>B(e).proofsById.get(r)).filter(r=>!!r).sort((r,d)=>r.id.localeCompare(d.id))}}function Se(e,t,s){let o=D(e,t),i=D(e,s);if(!o.found||o.targetType!=="entity"||!i.found||i.targetType!=="entity")return {from:t,to:s,found:false,resolvedFrom:o.found&&o.targetType==="entity"?o.entity.id:null,resolvedTo:i.found&&i.targetType==="entity"?i.entity.id:null,entityPath:[],hops:[],proofs:[]};let r=B(e),d=[o.entity.id],h=new Map,l=new Set(d),a=0;for(;a<d.length&&!l.has(i.entity.id);){let u=d[a++];for(let w of r.adjacency.get(u)??[])l.has(w.to)||(l.add(w.to),h.set(w.to,w),d.push(w.to));}if(!l.has(i.entity.id))return {from:t,to:s,found:false,resolvedFrom:o.entity.id,resolvedTo:i.entity.id,entityPath:[],hops:[],proofs:[]};let g=[],p=i.entity.id;for(;p!==o.entity.id;){let u=h.get(p);if(!u)break;g.push(u),p=u.from;}g.reverse();let k=new Set(g.flatMap(u=>u.proofIds));return {from:t,to:s,found:true,resolvedFrom:o.entity.id,resolvedTo:i.entity.id,entityPath:[o.entity.id,...g.map(u=>u.to)],hops:g,proofs:[...k].map(u=>r.proofsById.get(u)).filter(u=>!!u).sort((u,w)=>u.id.localeCompare(w.id))}}function Ee(e,t,s){return e.entities.filter(o=>(!t||o.kind===t)&&(!s||o.projectId===s)).sort((o,i)=>o.kind.localeCompare(i.kind)||o.label.localeCompare(i.label))}var m={relations:12,relatedEntities:12,proofs:8,proofIdsPerItem:4,aliasesPerEntity:8,attributeArrayItems:8,attributeStringCharacters:256};function oe(e){let t=[],s=new Set;for(let o=0;o<m.proofIdsPerItem&&t.length<m.proofs;o+=1)for(let i of e){let r=i.proofIds[o];if(!(!r||s.has(r))&&(s.add(r),t.push(r),t.length>=m.proofs))break}return t}function se(e,t,s){let o=e.identity.aliases.slice(0,m.aliasesPerEntity);s.aliases+=e.identity.aliases.length-o.length;let i=Object.fromEntries(Object.entries(e.attributes).map(([d,h])=>{if(Array.isArray(h)){let l=h.slice(0,m.attributeArrayItems);return s.attributeValues+=h.length-l.length,[d,l]}return typeof h=="string"&&h.length>m.attributeStringCharacters?(s.attributeValues+=1,[d,h.slice(0,m.attributeStringCharacters)]):[d,h]})),r=e.proofIds.filter(d=>t.has(d)).slice(0,m.proofIdsPerItem);return s.proofReferences+=e.proofIds.length-r.length,{...e,identity:{...e.identity,aliases:o},attributes:i,proofIds:r}}function ae(e){let t=Object.values(e.attributes).flatMap(s=>Array.isArray(s)?s:[s]);return [e.id,e.kind,e.label,e.projectId??"",e.identity.key,...e.identity.aliases,...t.map(s=>String(s??""))].join(" ").toLowerCase()}var ie=new Set(["a","an","and","are","as","at","be","been","being","by","can","check","could","did","do","does","find","for","from","give","had","has","have","how","i","in","into","is","it","its","may","might","of","on","or","our","show","should","that","the","their","them","then","there","these","they","this","those","tell","to","was","we","were","what","when","where","which","who","why","will","with","would","you","your"]),re=new Map([["authenticate","auth"],["authenticated","auth"],["authentication","auth"],["authorization","auth"],["authorizing","auth"],["config","configuration"],["configs","configuration"],["dependencies","dependency"],["connected","connect"],["connecting","connect"],["connection","connect"],["connections","connect"],["diagnostics","diagnostic"],["reliable","reliability"],["tested","test"],["testing","test"],["tests","test"],["verification","verify"],["verified","verify"],["verifies","verify"],["verifying","verify"]]);function M(e){let t=s=>b(s).replace(/\bc\+\+/gu," cplusplus ").replace(/\bc#/gu," csharp ").split(/[^a-z0-9]+/u).filter(o=>o.length>1||o==="c"||o==="r").map(o=>re.get(o)??o);return [...new Set([...t(e),...t(e.replace(/([a-z0-9])([A-Z])/g,"$1 $2"))])]}function ce(e){let t=b(e.label),s=b(e.identity.key),o=e.identity.aliases.map(b),i=ae(e);return {entity:e,label:t,identity:s,aliases:o,haystack:i,labelTokens:new Set(M(e.label)),identityTokens:new Set(M(e.identity.key)),aliasTokens:new Set(e.identity.aliases.flatMap(M)),allTokens:new Set(M(i))}}function E(e,t){return e.has(t)||t.length>=3&&[...e].some(s=>s.startsWith(t))}function _(e,t){return E(e.labelTokens,t)||E(e.identityTokens,t)||E(e.aliasTokens,t)||E(e.allTokens,t)}function le(e,t,s,o){let{label:i,identity:r,aliases:d,haystack:h}=e,l=0;(i===t||r===t||d.includes(t))&&(l+=1e4),(i.startsWith(t)||r.startsWith(t))&&(l+=250),h.includes(t)&&(l+=100);let a=0;for(let g of s){let p=o.get(g)??1,k=E(e.labelTokens,g),u=E(e.identityTokens,g),w=E(e.aliasTokens,g),f=_(e,g);f&&(a+=1),i===g?l+=80*p:k&&(l+=36*p),u&&(l+=24*p),w&&(l+=20*p),f&&(l+=10*p);}return s.length>0&&(l+=a/s.length*120),l}function F(e,t){let s=new Set;for(let o of t){let i=e.allTokens.has(o)?o:void 0,r=i===void 0&&o.length>=3?[...e.allTokens].find(h=>h.startsWith(o)&&!s.has(h)):void 0,d=i??r;d&&!s.has(d)&&s.add(d);}return s.size}var de=new Map([["c","c"],["clojure","clojure"],["cplusplus","cpp"],["cpp","cpp"],["typescript","typescript"],["ts","typescript"],["javascript","javascript"],["js","javascript"],["nodejs","javascript"],["python","python"],["py","python"],["go","go"],["golang","go"],["csharp","csharp"],["ada","ada"],["assembly","assembly"],["asm","assembly"],["cuda","cuda"],["dotnet","csharp"],["dart","dart"],["elixir","elixir"],["fsharp","fsharp"],["fortran","fortran"],["java","java"],["kotlin","kotlin"],["hlsl","hlsl"],["llvmir","llvm-ir"],["mlir","mlir"],["lua","lua"],["php","php"],["r","r"],["ruby","ruby"],["rust","rust"],["tablegen","tablegen"],["scala","scala"],["svelte","svelte"],["swift","swift"],["vue","vue"]]);function pe(e){return new Set(e.map(t=>de.get(t)).filter(t=>!!t))}function Y(e){let t=e.attributes.language;return typeof t=="string"?b(t):null}function ge(e){return {project:1e3,service:900,api:900,package:850,endpoint:800,container:700,deployment:700,environment:650,pipeline:600,"test-suite":550,owner:500,decision:450,document:400}[e.kind]??0}var he=new Set(["language","languages","binding","bindings","bridge","bridges","dependency","dependencies","depends","core","runtime","owner","owners","ownership","maintainer","ci","pipeline","pipelines","workflow","deploy","deployment","infrastructure","container","doc","docs","document","documentation","service","services","api","rpc","schema","schemas","message","protobuf","proto","contract"]),ue=new Set(["app","application","applications","call","calls","code","communicate","communication","connect","define","defined","expose","exposed","handle","handled","implement","implementation","integrate","integration","interact","interaction","project","provide","provided","system","use","used","uses","using"]);function fe(e){return he.has(e)||ue.has(e)}function ye(e,t){let s=t.has("language")||t.has("languages"),o=t.has("binding")||t.has("bindings")||t.has("bridge")||t.has("bridges"),i=t.has("dependency")||t.has("dependencies")||t.has("depends"),r=t.has("core")||t.has("runtime"),d=t.has("owner")||t.has("owners")||t.has("ownership")||t.has("maintainer"),h=t.has("ci")||t.has("pipeline")||t.has("pipelines")||t.has("workflow"),l=t.has("deploy")||t.has("deployment")||t.has("infrastructure")||t.has("container"),a=t.has("doc")||t.has("docs")||t.has("document")||t.has("documentation"),g=t.has("service")||t.has("services")||t.has("api")||t.has("rpc"),p=t.has("schema")||t.has("schemas")||t.has("message")||t.has("protobuf")||t.has("proto")||t.has("contract"),k=typeof e.attributes.mechanism=="string"?b(e.attributes.mechanism):"",u=typeof e.attributes.specification=="string"?b(e.attributes.specification):"",w=b(e.label),f=0;if(s&&e.kind==="language"){let O=typeof e.attributes.fileCount=="number"?e.attributes.fileCount:0;f+=900+Math.min(O,1e4)/10;}return o&&e.kind==="protocol"&&(f+=800),i&&e.kind==="package"&&(f+=650),r&&e.kind==="package"&&/(?:^|[_-])core(?:$|[_-])/u.test(w)&&(f+=700),r&&e.kind==="protocol"&&k.includes("core")&&(f+=300),d&&e.kind==="owner"&&(f+=850),h&&e.kind==="pipeline"&&(f+=800),l&&["deployment","container","environment"].includes(e.kind)&&(f+=775),a&&["document","decision"].includes(e.kind)&&(f+=725),g&&["api","endpoint","service"].includes(e.kind)&&(f+=700),p&&(e.kind==="schema"||(e.kind==="api"||e.kind==="protocol")&&(u.includes("protobuf")||k.includes("protobuf")))&&(f+=750),f}function we(e){return [e.has("language")||e.has("languages"),e.has("binding")||e.has("bindings")||e.has("bridge")||e.has("bridges"),e.has("dependency")||e.has("dependencies")||e.has("depends"),e.has("core")||e.has("runtime"),e.has("owner")||e.has("ownership")||e.has("maintainer"),e.has("ci")||e.has("pipeline")||e.has("workflow"),e.has("deploy")||e.has("deployment")||e.has("infrastructure"),e.has("doc")||e.has("docs")||e.has("documentation"),e.has("service")||e.has("api")||e.has("rpc"),e.has("schema")||e.has("protobuf")||e.has("proto")||e.has("contract")].filter(Boolean).length>=3}function We(e,t){let s=b(t.query),o=[...new Set(M(t.query))],i=new Set(M(t.projectId??"")),r=t.projectId?o.filter(n=>!i.has(n)):o,d=!!(t.projectId&&o.length>0&&r.length===0),h=r.filter(n=>!ie.has(n)),l=h.length>0?h:r,a=pe(l),g=new Set(l),p=l.filter(n=>!fe(n)),k=we(g),u=l.length<=1?l.length:Math.min(2,Math.ceil(l.length/3)),w=t.minimumTermMatches===void 0?u:Math.min(u,Math.max(1,Math.trunc(t.minimumTermMatches))),f=Math.max(1,Math.min(Math.trunc(t.limit??12),100)),O=Math.max(0,Math.min(Math.trunc(t.relationsPerEntity??4),20)),G=new Set;if(t.projectId){let n=new Set(e.entities.filter(c=>c.kind==="project"&&(c.projectId===t.projectId||c.label===t.projectId)).map(c=>c.id));for(let c of e.relations)n.has(c.from)&&G.add(c.to),n.has(c.to)&&G.add(c.from);}let P=e.entities.filter(n=>(!t.kind||n.kind===t.kind)&&(!t.projectId||n.projectId===t.projectId||n.projectId===void 0&&G.has(n.id))).map(ce),$=new Map(l.map(n=>{let c=P.filter(y=>_(y,n)).length;return [n,Math.log((P.length+1)/(c+1))+1]})),X=p.some(n=>P.some(c=>_(c,n))),v=P.map(n=>{let c=F(n,l),y=F(n,p),I=Y(n.entity),S=I&&a.has(I)?400:0,x=ye(n.entity,g),j=p.length===0||p.some(te=>_(n,te))?x:0;return {entity:n.entity,matchedTerms:c,matchedQualifiers:y,intentScore:j,score:d?ge(n.entity):le(n,s,l,$)+y*300+S+j}}).filter(n=>{let c=Y(n.entity);return (a.size===0||c===null||a.has(c))&&(s.length===0||n.score>0&&(!X||p.length===0||n.matchedQualifiers>0)&&(d||n.matchedTerms>=w||n.intentScore>0&&(k||l.length<=2)))}).sort((n,c)=>c.score-n.score||n.entity.kind.localeCompare(c.entity.kind)||n.entity.label.localeCompare(c.entity.label)),W=(k?(()=>{let n=[],c=[],y=new Map,I=new Set;for(let S of v){let x=y.get(S.entity.kind)??0,j=b(S.entity.label);x<2&&!I.has(j)?(n.push(S),y.set(S.entity.kind,x+1),I.add(j)):c.push(S);}return [...n,...c]})():v).slice(0,f).map(n=>n.entity),R=new Set(W.map(n=>n.id)),L=new Map,H=e.relations.filter(n=>{if(!(R.has(n.from)||R.has(n.to)))return false;let y=R.has(n.from)?n.from:n.to,I=L.get(y)??0;return I>=O?false:(L.set(y,I+1),true)}),K=t.projection==="agent",T=K?H.slice(0,m.relations):H,z=B(e),N=[...new Set(T.flatMap(n=>[n.from,n.to]).filter(n=>!R.has(n)))].map(n=>z.entitiesById.get(n)).filter(n=>!!n).map(({id:n,kind:c,label:y,projectId:I})=>({id:n,kind:c,label:y,...I?{projectId:I}:{}})).sort((n,c)=>n.kind.localeCompare(c.kind)||n.label.localeCompare(c.label)),Q=K?N.slice(0,m.relatedEntities):N,q=new Set([...W.flatMap(n=>n.proofIds),...T.flatMap(n=>n.proofIds)]),Z=K?oe([...W,...T]):[...q],C=new Set(Z),A={entities:v.length-W.length,relations:H.length-T.length,relatedEntities:N.length-Q.length,proofs:q.size-C.size,proofReferences:0,aliases:0,attributeValues:0},U=K?W.map(n=>se(n,C,A)):W,J=K?T.map(n=>{let c=n.proofIds.filter(y=>C.has(y)).slice(0,m.proofIdsPerItem);return A.proofReferences+=n.proofIds.length-c.length,{...n,proofIds:c}}):T,ee=[...C].map(n=>z.proofsById.get(n)).filter(n=>!!n).sort((n,c)=>n.id.localeCompare(c.id));return {schemaVersion:ne,graphSourceHash:e.source.hash,query:t.query,kind:t.kind??null,...t.projectId?{projectId:t.projectId}:{},limit:f,totalMatches:v.length,truncated:v.length>U.length||K&&Object.values(A).some(n=>n>0),entities:U,relatedEntities:Q,relations:J,proofs:ee,...K?{budget:{mode:"agent",limits:{...m},omitted:A}}:{}}}export{ne as a,D as b,Ke as c,Se as d,Ee as e,We as f};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import {a}from'./chunk-FB7SCXAZ.js';import {createHash}from'crypto';function p(o){return Array.isArray(o)?`[${o.map(p).join(",")}]`:o&&typeof o=="object"?`{${Object.entries(o).sort(([t],[d])=>t.localeCompare(d)).map(([t,d])=>`${JSON.stringify(t)}:${p(d)}`).join(",")}}`:JSON.stringify(o)}function k(o){return createHash("sha256").update(p({entities:o.entities,relations:o.relations,proofs:o.proofs.map(({observedAt:t,freshness:d,...r})=>r)})).digest("hex")}function v(o,t){return [...new Set([...Object.keys(o),...Object.keys(t)])].filter(d=>p(o[d])!==p(t[d])).sort()}function f(o,t){let d=new Map(o.map(a=>[a.id,a])),r=new Map(t.map(a=>[a.id,a])),s=t.filter(a=>!d.has(a.id)),e=o.filter(a=>!r.has(a.id)),c=[];for(let[a,i]of d){let g=r.get(a);if(!g)continue;let l=v(i,g);l.length>0&&c.push({id:a,before:i,after:g,changedFields:l});}return {added:[...s].sort((a,i)=>a.id.localeCompare(i.id)),removed:[...e].sort((a,i)=>a.id.localeCompare(i.id)),changed:c.sort((a,i)=>a.id.localeCompare(i.id))}}function y(o){return {...o,observedAt:"1970-01-01T00:00:00.000Z",freshness:"fresh"}}function A(o,t){let d=f(o.map(y),t.map(y)),r=new Map(o.map(e=>[e.id,e])),s=new Map(t.map(e=>[e.id,e]));return {added:d.added.map(e=>s.get(e.id)??e),removed:d.removed.map(e=>r.get(e.id)??e),changed:d.changed.map(e=>({id:e.id,before:r.get(e.id),after:s.get(e.id),changedFields:e.changedFields}))}}function K(o,t){let d=new Set(t);return o.proofs.filter(r=>d.has(r.id)).map(r=>r.artifact)}function P(o,t,d=new Date){let r=f(o.entities,t.entities),s=f(o.relations,t.relations),e=A(o.proofs,t.proofs),c=new Set([...r.added.map(n=>n.id),...r.removed.map(n=>n.id),...r.changed.map(n=>n.id)]),a$1=[...s.added,...s.removed,...s.changed.flatMap(n=>[n.before,n.after].filter(Boolean))];for(let n of a$1)c.add(n.from),c.add(n.to);let i=new Set(c);for(let n of [...o.relations,...t.relations])(c.has(n.from)||c.has(n.to))&&(i.add(n.from),i.add(n.to));let g=new Set([...e.added.map(n=>n.id),...e.removed.map(n=>n.id),...e.changed.map(n=>n.id)]),l=[...new Set([...K(o,g),...K(t,g),...e.added.map(n=>n.artifact),...e.removed.map(n=>n.artifact),...e.changed.flatMap(n=>[n.before?.artifact,n.after?.artifact])])].filter(n=>!!n).sort(),h=r.removed.length+s.removed.length+e.removed.length,m=h+r.added.length+r.changed.length+s.added.length+s.changed.length+e.added.length+e.removed.length+e.changed.length,W=m===0?"none":h>0||i.size>=10?"high":i.size>=5||m>=5?"medium":"low";return {schemaVersion:a,generatedAt:d.toISOString(),workspace:t.workspace,base:{schemaVersion:o.schemaVersion,generatedAt:o.generatedAt,fingerprint:k(o)},head:{schemaVersion:t.schemaVersion,generatedAt:t.generatedAt,fingerprint:k(t)},entities:r,relations:s,proofs:e,impactedEntityIds:[...i].sort(),changedArtifacts:l,summary:{entityAdds:r.added.length,entityRemovals:r.removed.length,entityChanges:r.changed.length,relationAdds:s.added.length,relationRemovals:s.removed.length,relationChanges:s.changed.length,proofAdds:e.added.length,proofRemovals:e.removed.length,proofChanges:e.changed.length,impactedEntities:i.size,changedArtifacts:l.length,risk:W}}}export{P as a};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import {a}from'./chunk-NS53IPAC.js';import {a as a$1}from'./chunk-MGL6DBOR.js';import {g}from'./chunk-OZXCNVGW.js';import {s,b,a as a$2,d,c}from'./chunk-ODK4LCEL.js';import pe from'path';import h from'chalk';import {createHash}from'crypto';var F="workspai.doctor-adapter.v1",D=["runtime","dependency","security","configuration","test","quality"];function A(e){return e.trim().toLowerCase().replace(/[^a-z0-9+.#-]+/g,"-")}function ae(e){if(e.contractVersion!==F)throw new Error(`Unsupported Doctor adapter contract: ${e.contractVersion}`);if(!e.id.trim())throw new Error("Doctor adapter id must not be empty.");if(e.runtimeFamilies.length===0)throw new Error(`Doctor adapter ${e.id} must own at least one runtime family.`);if(e.platforms.length===0)throw new Error(`Doctor adapter ${e.id} must declare supported platforms.`);let i=e.domains.map(t=>t.domain);if(i.length!==D.length||new Set(i).size!==D.length||D.some(t=>!i.includes(t)))throw new Error(`Doctor adapter ${e.id} must declare every canonical diagnostic domain exactly once.`);for(let t of e.domains)if(t.level==="unsupported"&&t.limitations.length===0)throw new Error(`Doctor adapter ${e.id} must explain unsupported ${t.domain} coverage.`)}var $=class{#e=new Map;#i=new Map;#t=new Map;register(i){ae(i);let t=A(i.id);if(this.#e.has(t))throw new Error(`Doctor adapter id is already registered: ${i.id}`);let s=[...i.runtimeFamilies,...i.aliases].map(A);for(let c of s){let a=this.#i.get(c);if(a)throw new Error(`Doctor runtime ${c} is already owned by adapter ${a}.`)}for(let c of i.frameworks.map(A)){let a=this.#t.get(c);if(a)throw new Error(`Doctor framework ${c} is already owned by adapter ${a}.`)}let r=structuredClone(i);this.#e.set(t,r);for(let c of s)this.#i.set(c,t);for(let c of i.frameworks.map(A))this.#t.set(c,t);return this}resolveWithDiagnostics(i){let t=i.runtimeFamily?this.#i.get(A(i.runtimeFamily)):void 0,s=i.framework?this.#t.get(A(i.framework)):void 0;if(t&&s&&t!==s)return {status:"conflict",descriptor:null,runtimeOwner:t,frameworkOwner:s};let r=t??s;return {status:r?"matched":"unresolved",descriptor:r?structuredClone(this.#e.get(r)??null):null,...t?{runtimeOwner:t}:{},...s?{frameworkOwner:s}:{}}}resolve(i){return this.resolveWithDiagnostics(i).descriptor}list(){return [...this.#e.values()].map(i=>structuredClone(i)).sort((i,t)=>i.id.localeCompare(t.id))}};var Y=[...D],W=["linux","darwin","win32"],re=[{id:"node",aliases:["nodejs","javascript","typescript"],frameworks:["NestJS","Next.js","Remix","Nuxt","React","Vue","Angular","SvelteKit","Svelte","Vite","Astro","Solid","Express","Fastify","Koa","Electron","VS Code Extension"],tier:"first-class",native:Y},{id:"python",aliases:["py"],frameworks:["FastAPI","Django","Flask","Python"],tier:"first-class",native:Y},{id:"go",aliases:["golang"],frameworks:["Go","Go/Fiber","Go/Gin","Echo"],tier:"first-class",native:["runtime","dependency","test","quality"],portable:["security","configuration"]},{id:"java",aliases:["jvm"],frameworks:["Java","Spring Boot"],tier:"first-class",native:["runtime","dependency","test","quality"],portable:["security","configuration"]},{id:"dotnet",aliases:[".net","csharp","c#"],frameworks:["ASP.NET"],tier:"first-class",native:["runtime","dependency","test","quality"],portable:["security","configuration"]},{id:"rust",aliases:["cargo"],frameworks:["Rust","Axum"],tier:"first-class",native:["runtime","dependency","test","quality"],portable:["security","configuration"]},{id:"php",aliases:["composer"],frameworks:["PHP","Laravel"],tier:"first-class",native:["runtime","dependency","security"],portable:["configuration","test","quality"]},{id:"ruby",aliases:["bundler"],frameworks:["Ruby","Ruby on Rails"],tier:"extended",portable:["runtime","dependency","configuration","test","quality"],observable:["security"]},{id:"elixir",aliases:["beam"],frameworks:["Elixir","Phoenix"],tier:"extended",portable:["runtime","dependency","configuration","test","quality"],observable:["security"]},{id:"clojure",frameworks:["Clojure"],tier:"extended",portable:["runtime","dependency","configuration","test","quality"],observable:["security"]},{id:"deno",frameworks:["Deno"],tier:"extended",portable:["runtime","dependency","configuration","test","quality"],observable:["security"]},{id:"bun",frameworks:["Bun"],tier:"extended",portable:["runtime","dependency","configuration","test","quality"],observable:["security"]},{id:"scala",frameworks:["Scala"],tier:"extended",portable:["runtime","dependency","configuration","test","quality"],observable:["security"]},{id:"kotlin",frameworks:["Kotlin"],tier:"extended",portable:["runtime","dependency","configuration","test","quality"],observable:["security"]},{id:"c",aliases:["c-lang"],frameworks:["C"],tier:"extended",portable:["runtime","dependency","test","quality"],observable:["configuration"],limitations:["Security diagnosis requires a declared native scanner or workspace adapter."]},{id:"cpp",aliases:["c++","cplusplus"],frameworks:["C++"],tier:"extended",portable:["runtime","dependency","test","quality"],observable:["configuration"],limitations:["Security diagnosis requires a declared native scanner or workspace adapter."]}];function oe(e,i){let t={runtime:["project markers","entrypoints","toolchain evidence"],dependency:["dependency manifests","lockfiles","installed-tree evidence"],security:["runtime-native audit","advisory evidence"],configuration:["environment contracts","deployment/container markers"],test:["test scripts","test configuration","coverage evidence"],quality:["lint/format/static-analysis contracts"]};return [`${e} adapter`,...t[i]]}function ce(e,i){return e.native?.includes(i)?"native":e.portable?.includes(i)?"portable":e.observable?.includes(i)?"observable":"unsupported"}function le(e){let i=D.map(t=>{let s=ce(e,t);return {domain:t,level:s,evidenceSources:s==="unsupported"?[]:oe(e.id,t),limitations:s==="unsupported"?[`${e.id} has no built-in ${t} provider; declare a workspace adapter.`]:s==="observable"?[`${t} evidence is observable but not runtime-native for ${e.id}.`]:[]}});return {contractVersion:F,id:`builtin.${e.id}`,runtimeFamilies:[e.id],aliases:e.aliases??[],frameworks:e.frameworks,projectKinds:["backend","frontend","desktop","extension","fullstack","generic"],tier:e.tier,platforms:[...W],domains:i,repairModes:["typed-operation","structured-invocation","manual-guidance"],source:"builtin",limitations:e.limitations??[]}}function de(){return {contractVersion:F,id:"builtin.unknown",runtimeFamilies:["unknown"],aliases:["generic","unrecognized"],frameworks:["Unknown"],projectKinds:["backend","frontend","desktop","extension","fullstack","generic"],tier:"fallback",platforms:[...W],domains:D.map(e=>({domain:e,level:e==="security"?"unsupported":"observable",evidenceSources:e==="security"?[]:["portable workspace markers","declared custom checks"],limitations:[e==="security"?"No safe security claim is possible without a runtime-native audit provider.":`Only portable ${e} evidence is available until a runtime adapter is registered.`]})),repairModes:["manual-guidance"],source:"builtin",limitations:["Unknown runtimes are fail-closed: missing domain evidence is reported as unknown, never healthy.","Automatic repair is unavailable until a typed adapter owns the runtime."]}}function P(){let e=new $;for(let i of re)e.register(le(i));return e.register(de()),e}function J(e,i=P()){let t=i.resolveWithDiagnostics(e),s=t.descriptor??i.resolve({runtimeFamily:"unknown"});if(!s)throw new Error("Doctor fallback adapter is not registered.");let r=c=>s.domains.filter(a=>a.level===c).map(a=>a.domain);return {registryVersion:b,adapterId:s.id,runtimeFamily:s.runtimeFamilies[0]??"unknown",tier:s.tier,confidence:s.tier==="first-class"?"high":s.tier==="extended"?"medium":"low",nativeDomains:r("native"),portableDomains:r("portable"),observableDomains:r("observable"),unsupportedDomains:r("unsupported"),limitations:[...t.status==="conflict"?[`Runtime/framework ownership conflict (${t.runtimeOwner} vs ${t.frameworkOwner}); Doctor failed closed instead of selecting an ambiguous adapter.`]:[],...s.limitations,...s.domains.flatMap(c=>c.limitations)]}}function K(e={}){let i=P(),t=i.list(),s=i.resolveWithDiagnostics({runtimeFamily:e.runtime,framework:e.framework}),r=e.runtime||e.framework?[s.descriptor]:t;if((e.runtime||e.framework)&&!r[0]){let a=i.resolve({runtimeFamily:"unknown"});a&&(s.status==="conflict"&&a.limitations.unshift(`Runtime/framework ownership conflict (${s.runtimeOwner} vs ${s.frameworkOwner}); Doctor failed closed instead of selecting an ambiguous adapter.`),r[0]=a);}let c=r.filter(a=>!!a);return {schemaVersion:a$2,registryVersion:b,generatedBy:"workspai",policy:{unknownIsHealthy:false,unsupportedIsHealthy:false,repairRequiresTypedOperation:true,canonicalDomains:[...D]},summary:{adapterCount:c.length,firstClassRuntimes:c.filter(a=>a.tier==="first-class").length,extendedRuntimes:c.filter(a=>a.tier==="extended").length,fallbackRuntimes:c.filter(a=>a.tier==="fallback").length,frameworkCount:new Set(c.flatMap(a=>a.frameworks)).size,platformCount:new Set(c.flatMap(a=>a.platforms)).size},adapters:c}}var me=["runtime","dependency","security","configuration","test","quality"];function I(e){return createHash("sha256").update(e).digest("hex").slice(0,12)}function S(e){return e.trim().toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/^-+|-+$/g,"")||"unknown"}function Q(e){return e.trim().toLowerCase().replace(/[^a-z0-9]+/g," ").replace(/\s+/g," ").trim()}function ge(e,i){let t=Q(e);return t?i.some(s=>[s.reason,s.recommendation??""].map(Q).filter(Boolean).some(c=>c===t||c.includes(t)||t.includes(c))):true}function fe(e){return e.status==="fail"?"blocking":e.status==="warn"?"advisory":"informational"}function X(e){return e.issueClass==="dependency"?"dependency":e.issueClass==="security"?"security":e.issueClass==="environment"||e.issueClass==="configuration"||e.issueClass==="container"||e.issueClass==="deployment"||e.issueClass==="workspace-contract"?"configuration":e.issueClass==="test"?"test":e.issueClass==="quality"||e.issueClass==="custom"?"quality":e.issueClass==="runtime"||e.issueClass==="framework"||e.issueClass==="source-tree"?"runtime":null}function ye(e,i){return me.map(t=>{let s=e.filter(o=>X(o)===t),r=e.filter(o=>o.applicability!=="not-applicable"&&X(o)===t),c=i.unsupportedDomains.includes(t);if(r.length===0){let o=s.some(d=>d.applicability==="not-applicable");return {id:t,status:o?"not-applicable":"not-run",observationCount:0,blockingFindings:0,advisoryFindings:0,reason:o?`${t} checks ran and found no declared intent requiring this domain.`:c?`${t} is unsupported by Doctor adapter ${i.adapterId}; no healthy claim is allowed.`:`No ${t} diagnostic observation was produced.`}}let a=r.some(o=>o.freshness?.status==="stale"||o.freshness?.status==="unknown"),p=r.filter(o=>o.status==="fail").length,m=r.filter(o=>o.status==="warn").length,C=p>0||m>0;return {id:t,status:a?"stale":C?"findings":c?"not-run":"clean",observationCount:r.length,blockingFindings:p,advisoryFindings:m,reason:a?`${t} evidence is stale or has unknown freshness.`:C?`${t} diagnostics produced findings.`:c?`${t} observations cannot establish complete health because adapter ${i.adapterId} declares the domain unsupported.`:`${t} diagnostics completed without findings.`}})}function De(e){if(e.status==="pass")return "not-needed";let i=e.repairCapability;return i?i.status==="manual"||i.requiresReview?"manual":i.status!=="available"||!i.canAutoFix?"unavailable":i.requiresApproval?"approval-required":"automatic":"unavailable"}function be(e){if(e.freshness?.status==="stale"||e.freshness?.status==="unknown")return {label:"low",score:.35,state:"unknown"};let i=!!(e.issueClass&&e.issueClass!=="unknown"),t=!!(e.repairCapability?.operation?.type||e.repairCapability?.invocation?.executable);return i&&t&&e.repairIntent?.confidence==="high"?{label:"high",score:.95,state:"confirmed"}:i&&(e.status==="fail"||e.status==="warn")?{label:"medium",score:t?.82:.68,state:"candidate"}:e.status==="pass"?{label:"high",score:.98,state:"confirmed"}:{label:"low",score:.3,state:"unknown"}}function ve(e,i){let t=[{kind:"probe",role:"observation",ref:`probe:${e.id}`,claim:e.reason}];for(let r of e.repairCapability?.files??[])t.push({kind:"file",role:"repair-target",ref:r.split(pe.sep).join("/"),claim:"Structured repair capability declared this path as an affected target."});if(e.repairCapability?.invocation?.executable){let r=e.repairCapability.invocation;t.push({kind:"command",role:"verification",ref:[r.executable,...r.args??[]].join(" "),claim:"Structured command invocation is available for this diagnostic path."});}if(e.issueClass==="security"&&/(?:dependency|audit|vulnerab|security-hygiene)/i.test(`${e.id} ${e.label}`))for(let r of i??[])t.push({kind:"dependency",role:"subject",ref:r.version?`${r.name}@${r.version}`:r.name,claim:r.advisoryIds&&r.advisoryIds.length>0?`Dependency is referenced by ${r.advisoryIds.join(", ")}.`:"Dependency is present in security audit evidence."});return t}function we(e,i){let t=i.issueClass?.trim()||"unknown",s=be(i);return {id:`${S(i.id)}:${I(`${e.projectPath}\0${i.id}`)}`,causalKey:[S(e.projectName),I(e.projectPath),S(t),S(i.id)].join(":"),projectName:e.projectName,projectPath:e.projectPath,probeId:i.id,label:i.label,status:fe(i),severity:i.severity,issueClass:t,operationalImpact:i.operationalImpact?.trim()||"developer-friction",applicability:i.applicability??"applicable",confidence:s.label,confidenceScore:s.score,diagnosisState:s.state,symptom:i.reason,...i.recommendation?{recommendation:i.recommendation}:{},proofs:ve(i,e.dependencySubjects),repair:{disposition:De(i),...i.repairCapability?.id?{capabilityId:i.repairCapability.id}:{},...i.repairCapability?.operation?.type?{operationType:i.repairCapability.operation.type}:{},...i.repairCapability?.verifyCommand?{verifyCommand:i.repairCapability.verifyCommand}:{},requiresFreshEvidence:i.repairIntent?.requiresFreshEvidence===true||i.freshness?.verifyBeforeUse===true}}}function he(e,i,t){let s=`legacy-runtime-issue-${t+1}`;return {id:`${s}:${I(`${e.projectPath}\0${i}`)}`,causalKey:[S(e.projectName),I(e.projectPath),"unknown",I(i)].join(":"),projectName:e.projectName,projectPath:e.projectPath,probeId:s,label:"Runtime diagnostic issue",status:"blocking",severity:"error",issueClass:"unknown",operationalImpact:"runtime-risk",applicability:"applicable",confidence:"low",confidenceScore:.25,diagnosisState:"unknown",symptom:i,proofs:[{kind:"unknown",role:"observation",ref:`legacy-issue:${t+1}`,claim:i}],repair:{disposition:"unavailable",requiresFreshEvidence:true}}}function Z(e){let i=[...e.probes],t=[...new Set((e.runtimeFamilies&&e.runtimeFamilies.length>0?e.runtimeFamilies:[e.runtimeFamily??"unknown"]).filter(Boolean))],s=e.runtimeFamily??t[0]??"unknown",r=t.filter(n=>n!==s&&n!=="unknown"),c=J({runtimeFamily:e.runtimeFamily,framework:e.framework},e.adapterRegistry),a$1=ye(i,c),p=(e.legacyIssues??[]).filter(n=>!ge(n,i)),m=new Map;for(let n of i){let l=m.get(n.id)??new Set;l.add(n.status),m.set(n.id,l);}let C=[...m.entries()].filter(([,n])=>n.size>1).map(([n,l])=>({probeId:n,statuses:[...l].sort(),reason:"The same diagnostic probe produced contradictory states in one project scan."})),o=[...i.filter(n=>n.applicability!=="not-applicable"&&n.status!=="pass").map(n=>we(e,n)),...p.map((n,l)=>he(e,n,l))],d={blocking:4,unknown:3,advisory:2,informational:1},O=new Map;for(let n of o){let l=O.get(n.causalKey)??[];l.push(n),O.set(n.causalKey,l);}let g=[...O.values()].map(n=>{let u=[...n].sort((f,j)=>d[j.status]-d[f.status]||j.confidenceScore-f.confidenceScore||f.id.localeCompare(j.id)).at(0);if(!u)throw new Error("Doctor diagnosis causal group cannot be empty.");let G=structuredClone(u);return G.proofs=[...new Map(n.flatMap(f=>f.proofs).map(f=>[`${f.kind}:${f.role}:${f.ref}:${f.claim}`,f])).values()],G}).sort((n,l)=>n.causalKey.localeCompare(l.causalKey)||n.id.localeCompare(l.id)),k=new Map;for(let n of g){let l=k.get(n.causalKey)??[];l.push(n),k.set(n.causalKey,l);}let b=[...k.entries()].map(([n,l])=>({causalKey:n,issueClass:l[0]?.issueClass??"unknown",status:l.some(u=>u.status==="blocking")?"blocking":l.some(u=>u.status==="advisory")?"advisory":l.some(u=>u.status==="unknown")?"unknown":"informational",findingIds:l.map(u=>u.id),projectPaths:[...new Set(l.map(u=>u.projectPath))],repairable:l.some(u=>u.repair.disposition==="automatic"||u.repair.disposition==="approval-required")})),v=[...g.filter(n=>n.diagnosisState==="unknown"||n.issueClass==="unknown"||n.applicability==="unknown").map(n=>({id:`unknown:${n.id}`,probeId:n.probeId,reason:n.issueClass==="unknown"?"The observation is real, but Doctor cannot yet bind it to a typed issue class.":"Evidence is insufficient or stale for a confirmed diagnosis."})),...a$1.filter(n=>n.status==="not-run"||n.status==="stale").map(n=>({id:`unknown:domain:${n.id}:${I(e.projectPath)}`,reason:n.reason})),...r.map(n=>({id:`unknown:runtime:${S(n)}:${I(e.projectPath)}`,reason:e.projectArchetype==="platform"?`${n} is part of this cross-language platform, but only portable evidence and the primary ${s} runtime adapter were evaluated. Add a typed ${n} adapter before making runtime-specific health claims.`:`${n} was detected inside this composite project boundary, but the ${s} adapter is the only runtime-specific adapter evaluated for this scan. Declare a nested project boundary or a typed Doctor adapter before treating ${n} as healthy.`}))],y=g.filter(n=>n.diagnosisState!=="unknown").length,x=g.length===0?100:y/g.length*100,ie=a$1.filter(n=>n.status!=="not-run"&&n.status!=="stale").length/a$1.length*100,U=t.filter(n=>n!=="unknown").length,te=s!=="unknown"&&t.includes(s)?1:0,ne=U===0?0:te/U*100,se=Math.round(Math.min(x,ie,ne)*100)/100;return {schemaVersion:a,engineVersion:"universal-diagnosis-v1",project:{name:e.projectName,path:e.projectPath,runtimeFamily:e.runtimeFamily??"unknown",runtimeFamilies:t,framework:e.framework??"Unknown",projectKind:e.projectKind??"generic"},capability:c,domains:a$1,coverage:{totalObservations:i.length+p.length,evaluatedObservations:i.filter(n=>n.applicability!=="not-applicable").length,passingObservations:i.filter(n=>n.applicability!=="not-applicable"&&n.status==="pass").length,blockingFindings:g.filter(n=>n.status==="blocking").length,advisoryFindings:g.filter(n=>n.status==="advisory").length,unknownFindings:v.length,repairableFindings:g.filter(n=>n.repair.disposition==="automatic"||n.repair.disposition==="approval-required").length,manualFindings:g.filter(n=>n.repair.disposition==="manual").length,unsupportedFindings:g.filter(n=>n.repair.disposition==="unavailable").length,contradictionCount:C.length,diagnosisCompleteness:se},findings:g,causalGroups:b,unknowns:v,contradictions:C}}function w(e){let i=e.severity??"error",t=e.repair??"unavailable";return {id:e.id,label:e.label,status:i==="error"?"fail":"warn",severity:i,reason:`${e.label} detected by the validation corpus.`,issueClass:e.issueClass,operationalImpact:i==="error"?"release-risk":"ci-risk",repairIntent:{confidence:e.confidence??"medium",requiresFreshEvidence:true},...t==="unavailable"?{}:{repairCapability:{id:`repair.${e.id}`,status:t==="manual"?"manual":"available",canAutoFix:t==="automatic"||t==="approval-required",requiresApproval:t==="approval-required",requiresReview:t==="manual",operation:{type:"validation-operation"},verifyCommand:"npx workspai doctor project --json"}}}}var Ce=[{id:"runtime-missing",diseaseClass:"runtime",description:"Required runtime is absent.",probe:w({id:"runtime-missing",label:"Runtime missing",issueClass:"runtime"}),expected:{finding:true,domain:"runtime",status:"blocking",diagnosisState:"candidate",repairDisposition:"unavailable"}},{id:"dependencies-missing",diseaseClass:"dependency",description:"Installed dependency tree is absent.",probe:w({id:"dependencies-missing",label:"Dependencies missing",issueClass:"dependency",repair:"automatic",confidence:"high"}),expected:{finding:true,domain:"dependency",status:"blocking",diagnosisState:"confirmed",repairDisposition:"automatic"}},{id:"security-advisory",diseaseClass:"security",description:"A runtime-native audit reports a blocking advisory.",probe:w({id:"security-advisory",label:"Security advisory",issueClass:"security",repair:"approval-required",confidence:"high"}),expected:{finding:true,domain:"security",status:"blocking",diagnosisState:"confirmed",repairDisposition:"approval-required"}},{id:"environment-contract",diseaseClass:"configuration",description:"Environment/configuration contract is incomplete.",probe:w({id:"environment-contract",label:"Environment contract incomplete",issueClass:"environment",severity:"warn",repair:"manual"}),expected:{finding:true,domain:"configuration",status:"advisory",diagnosisState:"candidate",repairDisposition:"manual"}},{id:"container-contract",diseaseClass:"configuration",description:"Container delivery contract is incomplete.",probe:w({id:"container-contract",label:"Container contract incomplete",issueClass:"container",severity:"warn"}),expected:{finding:true,domain:"configuration",status:"advisory",diagnosisState:"candidate",repairDisposition:"unavailable"}},{id:"tests-missing",diseaseClass:"test",description:"No deterministic test surface is declared.",probe:w({id:"tests-missing",label:"Tests missing",issueClass:"test",severity:"warn",repair:"manual"}),expected:{finding:true,domain:"test",status:"advisory",diagnosisState:"candidate",repairDisposition:"manual"}},{id:"quality-missing",diseaseClass:"quality",description:"No lint/format/static-analysis surface is declared.",probe:w({id:"quality-missing",label:"Quality tooling missing",issueClass:"quality",severity:"warn"}),expected:{finding:true,domain:"quality",status:"advisory",diagnosisState:"candidate",repairDisposition:"unavailable"}},{id:"stale-evidence",diseaseClass:"freshness",description:"Evidence is stale and must not be treated as confirmed.",probe:{...w({id:"stale-evidence",label:"Stale evidence",issueClass:"security"}),freshness:{status:"stale",verifyBeforeUse:true}},expected:{finding:true,domain:"security",status:"blocking",diagnosisState:"unknown",repairDisposition:"unavailable"}},{id:"unknown-disease",diseaseClass:"unknown",description:"A real symptom cannot be bound to a typed disease class.",probe:w({id:"unknown-disease",label:"Unknown disease",issueClass:"unknown"}),expected:{finding:true,status:"blocking",diagnosisState:"unknown",repairDisposition:"unavailable"}},{id:"healthy-runtime",diseaseClass:"healthy-control",description:"Healthy evidence must not become a finding.",probe:{id:"healthy-runtime",label:"Healthy runtime",status:"pass",severity:"info",reason:"Runtime evidence is healthy.",issueClass:"runtime",operationalImpact:"none"},expected:{finding:false,domain:"runtime"}}];function _(e){return Math.round(e*1e4)/1e4}function ee(){let i=P().list(),t=i.flatMap(o=>Ce.map(d=>{let O=o.runtimeFamilies[0]??"unknown",g=o.frameworks[0]??"Unknown",k=Z({projectName:`validation-${o.id}-${d.id}`,projectPath:`/virtual/doctor-validation/${o.id}/${d.id}`,runtimeFamily:O,framework:g,projectKind:"generic",probes:[d.probe]}),b=k.findings.find(x=>x.probeId===d.probe.id),N=k.domains.find(x=>x.observationCount>0)?.id,v={finding:!!b,...N?{domain:N}:{},...b?.status?{status:b.status}:{},...b?.diagnosisState?{diagnosisState:b.diagnosisState}:{},...b?.repair.disposition?{repairDisposition:b.repair.disposition}:{}},y=[];return v.finding!==d.expected.finding&&y.push("finding-presence"),d.expected.domain&&v.domain!==d.expected.domain&&y.push("domain"),d.expected.status&&v.status!==d.expected.status&&y.push("status"),d.expected.diagnosisState&&v.diagnosisState!==d.expected.diagnosisState&&y.push("diagnosis-state"),d.expected.repairDisposition&&v.repairDisposition!==d.expected.repairDisposition&&y.push("repair-disposition"),k.capability.adapterId!==o.id&&y.push("adapter-binding"),{id:`${o.id}:${d.id}`,passed:y.length===0,expected:d.expected,actual:v,failures:y}})),s=t.filter(o=>o.expected.finding),r=t.filter(o=>!o.expected.finding),c$1=s.filter(o=>o.actual.finding).length,a=s.length-c$1,p=r.filter(o=>!o.actual.finding).length,m=r.length-p,C=new Set(t.map(o=>o.actual.domain).filter(o=>!!o));return {schemaVersion:c,corpusVersion:d,capabilityRegistryVersion:b,scope:"synthetic-contract-corpus",summary:{totalCases:t.length,passedCases:t.filter(o=>o.passed).length,failedCases:t.filter(o=>!o.passed).length,truePositives:c$1,trueNegatives:p,falsePositives:m,falseNegatives:a,precision:_(c$1/Math.max(1,c$1+m)),recall:_(c$1/Math.max(1,c$1+a)),domainCoverage:_(C.size/D.length),runtimeAdapterCoverage:_(new Set(t.map(o=>o.id.split(":",1)[0])).size/Math.max(1,i.length)),runtimeAdaptersExercised:i.length,declaredPlatforms:new Set(i.flatMap(o=>o.platforms)).size},cases:t,limitations:["Precision and recall describe the versioned synthetic contract corpus, not every public repository.","Every registered runtime adapter is exercised against the same disease corpus; this proves contract behavior, not tool availability on a host.","Runtime-native fixture and real Linux, macOS, and Windows acceptance gates remain separate evidence surfaces."]}}async function Qe(e={}){let i=K({runtime:e.runtime,framework:e.framework}),t=e.validate?ee():void 0,s$1,r;if(e.write){let a=e.workspace?pe.resolve(e.workspace):a$1(process.cwd());if(!a)return e.json?console.log(JSON.stringify({schemaVersion:i.schemaVersion,status:"error",error:{code:"doctor.capabilities.workspace-not-found",message:"--write requires a Workspai workspace or --workspace <path>."}},null,2)):console.log(h.red("Doctor capabilities could not be written: no workspace found.")),1;let p=K();s$1=await g(a,s.doctorCapabilities.artifactPath,p),t&&(r=await g(a,s.doctorValidation.artifactPath,t));}let c={...i,...t?{validation:t}:{},...s$1?{artifactPath:s$1}:{},...r?{validationArtifactPath:r}:{}};if(e.json)e.quiet||console.log(JSON.stringify(c,null,2));else if(!e.quiet){console.log(h.bold.cyan(`
|
|
2
|
+
\u{1FA7A} Workspai Doctor capabilities
|
|
3
|
+
`)),console.log(`${i.summary.adapterCount} adapter(s) \xB7 ${i.summary.frameworkCount} framework mapping(s) \xB7 ${i.summary.platformCount} platform(s)`);for(let a of i.adapters){let p=a.domains.map(m=>`${m.domain}:${m.level}`).join(" \xB7 ");console.log(h.bold(`
|
|
4
|
+
${a.runtimeFamilies.join(", ")} \xB7 ${a.tier}`)),console.log(h.gray(p));for(let m of a.limitations)console.log(h.yellow(` ! ${m}`));}if(t){let a=t.summary,p=a.failedCases===0?h.green:h.red;console.log(p(`
|
|
5
|
+
Validation ${a.passedCases}/${a.totalCases} \xB7 precision ${a.precision} \xB7 recall ${a.recall}`));}s$1&&console.log(h.gray(`
|
|
6
|
+
Capabilities: ${s$1}`)),r&&console.log(h.gray(`Validation: ${r}`));}return t&&t.summary.failedCases>0?1:0}export{Z as a,Qe as b};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import {b}from'./chunk-
|
|
1
|
+
import {b}from'./chunk-IGJA6GBQ.js';import {m,j,e}from'./chunk-UNXG3ZFV.js';import {a as a$1}from'./chunk-AFIFZTOY.js';import {a}from'./chunk-2LIVMG5C.js';import {s}from'./chunk-ODK4LCEL.js';import x from'crypto';import l from'path';import g from'fs-extra';var L=s.workspaceIntelligenceBenchmark.schemaVersion,O=s.workspaceIntelligenceBenchmark.artifactPath,S=s.workspaceIntelligenceBenchmark.contractPath,q={"agent-core.v1":{id:"agent-core.v1",version:1,title:"Cross-project agent retrieval core",scenarios:[{id:"architecture",title:"Architecture and runtime discovery",preferredKinds:["service","runtime-unit","language","project","workspace"]},{id:"ownership",title:"Dependency and ownership discovery",preferredKinds:["package","module","owner","project","workspace"]},{id:"interfaces",title:"Interface and contract discovery",preferredKinds:["api","endpoint","protocol","schema","project","workspace"]},{id:"change-safety",title:"Change safety and verification discovery",preferredKinds:["test-suite","lifecycle-stage","pipeline","module","project","workspace"]},{id:"delivery",title:"Build and delivery discovery",preferredKinds:["pipeline","deployment","container","lifecycle-stage","project","workspace"]}]}};function y(e,t){if(e.length===0)return 0;let n=[...e].sort((a,r)=>a-r),i=Math.min(n.length-1,Math.max(0,Math.ceil(t*n.length)-1));return n[i]??0}function G(e,t){let n=new Map;for(let a of e.entities){let r=a.label.trim().toLowerCase();n.set(r,(n.get(r)??0)+1);}for(let a of t){let r=e.entities.filter(s=>s.kind===a).sort((s,m)=>s.id.localeCompare(m.id)),o=r.find(s=>n.get(s.label.trim().toLowerCase())===1);if(o)return {entity:o,query:o.label};let u=r[0];if(u)return {entity:u,query:u.identity.key}}let i=[...e.entities].sort((a,r)=>a.id.localeCompare(r.id))[0];if(!i)throw new Error("Workspace benchmark requires at least one graph entity.");return {entity:i,query:i.identity.key}}function R(e){if(!e||e.summary.modelCalls===0)return "unavailable";let t=e.summary.tokenSources,n=t.providerReported+t.tokenizerCounted;return n+t.estimated+t.unavailable!==e.summary.modelCalls?"mixed":n===e.summary.modelCalls?"measured":t.estimated===e.summary.modelCalls?"estimated":t.unavailable===e.summary.modelCalls?"unavailable":"mixed"}function H(e){return e.comparison?.taskAligned===true&&e.comparison.comparableOutcome===true&&e.currentProvenance==="measured"&&e.baselineProvenance==="measured"?e.comparison.delta.reductionPercent:null}async function W(e,t){try{return await j(e,t)}catch{return}}async function Y(e$1){let t=l.resolve(e$1.workspacePath),n=e$1.suite??"agent-core.v1",i=q[n],a$2=[],r;for(let c of i.scenarios){let v=G(e$1.graph,c.preferredKinds),h=v.entity,d=await b({workspacePath:t,graph:e$1.graph,query:v.query,limit:e$1.limit??12,...r?{corpus:r}:{},now:e$1.now});r=d.corpus;let C=d.retrieval.payload.entities.some(M=>M.id===h.id);a$2.push({id:c.id,title:c.title,query:v.query,queryOrigin:"graph-derived",targetEntityId:h.id,targetKind:h.kind,targetRetrieved:C,result:C?"matched":"empty",matchCount:d.retrieval.matchCount,truncated:d.retrieval.truncated,retrievalCharacterCount:d.retrieval.characterCount,retrievalEstimatedTokens:d.retrieval.estimatedTokens,estimatedTokensAvoided:d.savings.estimatedTokensAvoided,estimatedReductionPercent:d.savings.reductionPercent});}r??={artifactCount:0,characterCount:0,estimatedTokens:0,unreadableArtifacts:[]};let o=await W(t,e$1.evaluationPath??e),u=e$1.baselineEvaluationPath?await W(t,e$1.baselineEvaluationPath):void 0,s=o&&u?m(o,u):void 0,m$1=R(o),_=R(u),K=H({comparison:s,currentProvenance:m$1,baselineProvenance:_}),N=await a(t),f=a$2.filter(c=>c.result==="matched").length,E=a$2.map(c=>c.retrievalEstimatedTokens),B=a$2.map(c=>c.estimatedReductionPercent),b$1={schemaVersion:L,generatedAt:(e$1.now??new Date).toISOString(),workspace:{name:N?.name||l.basename(t),path:t},suite:{id:i.id,version:i.version,title:i.title},graph:{schemaVersion:e$1.graph.schemaVersion,sourceArtifact:e$1.graph.source.artifact,sourceHash:e$1.graph.source.hash,entityCount:e$1.graph.entities.length,relationCount:e$1.graph.relations.length,proofCount:e$1.graph.proofs.length},methodology:{id:"multi-scenario-bounded-retrieval.v1",charsPerEstimatedToken:4,deterministic:true,networkRequired:false,scenarioTargetPolicy:"evidence-backed-representative.v1",claimBoundary:"Retrieval values estimate payload size against readable proof-source text across fixed scenario categories with deterministic evidence-backed representative targets. They do not establish answer equivalence, model billing savings, or task success."},corpus:r,scenarios:a$2,retrievalSummary:{provenance:"estimated",scenarioCount:a$2.length,matchedScenarioCount:f,medianRetrievalEstimatedTokens:y(E,.5),p95RetrievalEstimatedTokens:y(E,.95),medianEstimatedReductionPercent:y(B,.5),status:r.estimatedTokens===0?"unavailable":f===a$2.length?"passed":"partial"},evaluation:{availability:o?"available":"unavailable",provenance:m$1,...o?{current:{runId:o.runId,taskId:o.configuration.taskId,strategy:o.configuration.strategy,status:o.status,summary:o.summary}}:{},...s?{comparison:s}:{},trustedMeasuredReductionPercent:K,claimBoundary:"A measured reduction is reported only for task-aligned runs with comparable verified outcomes when every model call in both runs uses provider-reported or tokenizer-counted usage."}};return a$1(b$1,S,"workspace intelligence benchmark"),b$1}async function Z(e,t,n=O){a$1(t,S,n);let i=l.isAbsolute(n)?n:l.join(l.resolve(e),n),a=l.relative(l.resolve(e),i);if(a.startsWith("..")||l.isAbsolute(a))throw new Error("Workspace benchmark output must remain inside the workspace.");await g.ensureDir(l.dirname(i));let r=`${i}.${process.pid}.${x.randomUUID()}.tmp`;try{await g.writeJson(r,t,{spaces:2}),await g.rename(r,i);}finally{await g.remove(r).catch(()=>{});}return i}export{L as a,O as b,S as c,q as d,R as e,H as f,Y as g,Z as h};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {q}from'./chunk-ODK4LCEL.js';var i=q.knowledgeGraph,s=["workspace","project","service","api","endpoint","schema","protocol","language","package","runtime-unit","lifecycle-stage","module","file","symbol","database","queue","container","deployment","pipeline","environment","document","decision","test-suite","owner"],p=["contains","defines","imports","depends-on","exposes","implements","implements-protocol","uses-language","equivalent-to","calls","reads-from","writes-to","publishes","consumes","deploys","runs-on","routes-to","documents","decided-by","tests","owns","generated-by","generated-from","configured-by","references"],a=["extracted","inferred","authored"],d=["authoritative","corroborated","observed","ambiguous"],c=["high","medium","low"],l=["fresh","stale","unknown"];export{i as a,s as b,p as c,a as d,d as e,c as f,l as g};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import {a as a$1}from'./chunk-A5FBGRJA.js';import {g,p}from'./chunk-UW4SESKD.js';import {f as f$1,g as g$1}from'./chunk-OZXCNVGW.js';import {t,s}from'./chunk-ODK4LCEL.js';import {s as s$1,q}from'./chunk-RGNCL5OB.js';import {t as t$1}from'./chunk-VQZ5PI5J.js';import a from'path';import {existsSync}from'fs';import m from'fs-extra';var f=t.workspaceRegistry,w=s.workspaceRegistry.schemaVersion;function E(r){return {slug:r.slug,relativePath:r.relativePath,framework:r.framework,kit:r.kit,source:r.source}}async function b(r){let e=t$1(r,"workspace.json").find(t=>existsSync(t));if(!e)return {exists:false,legacyProjectCount:0};try{let t=await m.readJson(e),c=Array.isArray(t.projects)?t.projects.length:0,o=typeof t.workspace_name=="string"&&t.workspace_name.trim()||typeof t.name=="string"&&t.name.trim()||a.basename(r);return {exists:true,manifestPath:e,workspaceName:o,profile:typeof t.profile=="string"?t.profile:void 0,legacyProjectCount:c}}catch{return {exists:true,manifestPath:e,legacyProjectCount:0,workspaceName:a.basename(r)}}}async function _(r){let e=a$1(r);for(let t of s$1())if(await m.pathExists(t))try{let o=((await m.readJson(t)).workspaces||[]).find(s=>a$1(s.path)===e);if(o)return {exists:true,projectCount:Array.isArray(o.projects)?o.projects.length:0,registryPath:t}}catch{continue}return {exists:false,projectCount:0,registryPath:a.join(q(),"workspaces.json")}}async function T(r,e){let t=a.resolve(r),c=await f$1(t,g),o=await b(t),s=await _(t),i=e?.contract!==void 0||!!c,n=[];if(e?.contract)n=e.contract.projects||[];else if(i)try{let{contract:A}=await p({workspacePath:t});n=A.projects||[];}catch{n=[];}let d={contract:{exists:i,projectCount:n.length,path:g},globalRegistry:{exists:s.exists,projectCount:s.projectCount,path:s.registryPath},legacyWorkspaceJson:{exists:o.exists,projectCount:o.legacyProjectCount,path:o.manifestPath?a.relative(t,o.manifestPath):void 0}},p$1="none",u=[],y=0;return i?(p$1="workspace.contract.json",u=n.map(E),y=u.length):s.projectCount>0?(p$1="global-registry",y=s.projectCount):o.legacyProjectCount>0&&(p$1="legacy-workspace.json",y=o.legacyProjectCount),{contractExists:i,summary:{schemaVersion:w,kind:"rapidkit.workspace.registry",workspacePath:t,workspaceName:o.workspaceName||a.basename(t),profile:o.profile,projectCount:y,authority:p$1,contractPath:g,projects:u,sources:d}}}async function U(r){let e=await f$1(r,f);if(!e)return null;try{let t=await m.readJson(e);return t?.schemaVersion!==w?null:t}catch{return null}}async function D(r,e){let t=await M(r,e);return await g$1(r,f,t),t}async function M(r,e){return {...(await T(r,{contract:e?.contract})).summary,generatedAt:(e?.now??new Date).toISOString(),registrySummaryPath:f}}function F(r,e=""){return r.projectCount>0?r.authority==="workspace.contract.json"?`${r.projectCount} project(s) registered in workspace contract${e}.`:r.authority==="global-registry"?`${r.projectCount} project(s) registered in global workspace registry${e}.`:`${r.projectCount} project(s) registered in legacy workspace manifest${e}.`:`Workspace state exists, but no projects are registered yet${e}.`}export{f as a,w as b,T as c,U as d,D as e,M as f,F as g};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import {f}from'./chunk-
|
|
1
|
+
import {f}from'./chunk-EZPLMAW2.js';import a from'path';import d from'fs-extra';var b=4,C="workspace-graph-token-efficiency.v1";function k(e){return Math.ceil(e/b)}function y(e,o){let n=a.resolve(e,o),t=a.relative(e,n);return !t||t.startsWith("..")||a.isAbsolute(t)?null:n}async function P(e){let o=new Map,n=[a.join(e,".workspai","workspace.contract.json"),a.join(e,".rapidkit","workspace.contract.json")];for(let t of n)if(await d.pathExists(t))try{let s=await d.readJson(t);for(let r of s.projects??[])typeof r.relativePath=="string"&&typeof r.externalPath=="string"&&a.isAbsolute(r.externalPath)&&o.set(r.relativePath.replace(/\\/g,"/").replace(/\/$/,""),r.externalPath);break}catch{}return o}function A(e,o,n){if(!o||a.isAbsolute(o))return null;let t=a.resolve(e),s=o.replace(/\\/g,"/");for(let[r,c]of [...n.entries()].sort(([u],[l])=>l.length-u.length))if(s.startsWith(`${r}/`))return y(c,s.slice(r.length+1));return y(t,s)}async function S(e){let o=a.resolve(e.workspacePath),n=f(e.graph,{query:e.query,...e.kind?{kind:e.kind}:{},...e.projectId?{projectId:e.projectId}:{},limit:e.limit,projection:"agent"}),t=e.corpus;if(!t){let l=[...new Set(e.graph.proofs.map(i=>i.artifact))].sort(),p=[],v=await P(o),h=0,g=0;for(let i of l){let f=A(o,i,v);if(!f){p.push(i);continue}try{let w=await d.readFile(f,"utf8");h+=w.length,g+=1;}catch{p.push(i);}}t={artifactCount:g,characterCount:h,estimatedTokens:k(h),unreadableArtifacts:p};}let s=JSON.stringify(n).length,r=t.estimatedTokens,c=k(s),u=Math.max(0,r-c);return {schemaVersion:C,generatedAt:(e.now??new Date).toISOString(),workspacePath:o,query:e.query,graph:{schemaVersion:e.graph.schemaVersion,sourceArtifact:e.graph.source.artifact,sourceHash:e.graph.source.hash,entityCount:e.graph.entities.length,relationCount:e.graph.relations.length,proofCount:e.graph.proofs.length},methodology:{id:"indexed-corpus-vs-bounded-retrieval.v1",estimated:true,charsPerToken:b,claimBoundary:"Measures retrieval payload reduction against readable proof-source text; it does not claim equivalent answer quality or model-specific billing savings."},corpus:t,retrieval:{matchCount:n.entities.length,characterCount:s,estimatedTokens:c,truncated:n.truncated,payload:n},savings:{estimatedTokensAvoided:u,reductionRatio:c===0?0:Number((r/c).toFixed(2)),reductionPercent:r===0?0:Number((u/r*100).toFixed(2))}}}export{C as a,S as b};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {q}from'./chunk-ODK4LCEL.js';var i=q.explain,u=["project","release-blocked","blocker","trace"];function s(t){let e=t.trim();if(!e)return null;if(e==="release-blocked")return {kind:"release-blocked"};if(e.startsWith("project:")){let r=e.slice(8).trim();return r?{kind:"project",project:r}:null}if(e.startsWith("blocker:")){let r=e.slice(8).trim();return r?{kind:"blocker",blockerId:r}:null}if(e.startsWith("trace:")){let r=e.slice(6).trim();return r?{kind:"trace",diffRef:r}:null}return {kind:"project",project:e}}function E(t){let e=t.trim();if(!e)return null;if(e.startsWith("trace:")){let n=s(e);return n?.kind==="trace"?n:null}let r=e.replace(/\\/g,"/").trim().toLowerCase();return r.endsWith(".json")||r.includes("workspace-model-diff")||r.startsWith(".rapidkit/")||r.includes("/.rapidkit/")?{kind:"trace",diffRef:e}:null}function A(t){if(!t||typeof t!="object"||Array.isArray(t))return false;let e=t;return e.schemaVersion===i&&typeof e.generatedAt=="string"&&typeof e.summary=="string"&&Array.isArray(e.sections)&&e.target!=null&&typeof e.target=="object"&&!Array.isArray(e.target)&&typeof e.target.kind=="string"}export{i as a,u as b,s as c,E as d,A as e};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {a}from'./chunk-AFIFZTOY.js';import {p,r,q,s,A,u}from'./chunk-ODK4LCEL.js';import A$1 from'path';function f(t){let r=Object.values(A).filter(a=>a.produces.includes(t)).map(a=>[...a.command]),n=u[t]??[];return [...r,...n.map(a=>[...a])]}var E=Object.keys(p).flatMap(t=>{let r$1=t,n=q[r$1],a=r[r$1];if(!n||!a)return [];let c=p[r$1];return [{artifactPath:c,schemaVersion:n,contractPath:a,producerCommands:f(c)}]}),g=Object.values(s).map(t=>({...t,producerCommands:t.producerCommands.map(r=>[...r])})),d=Object.freeze(Object.fromEntries([...E,...g].map(t=>[t.artifactPath,t])));function m(t){return t.split(A$1.sep).join("/").replace(/^\.\//,"")}var e=s,T=[{pattern:/^\.workspai\/decisions\/change-[^/]+\/transaction\.json$/,canonicalPath:e.decisionTransaction.artifactPath},{pattern:/^\.workspai\/decisions\/change-[^/]+\/checkpoint\.json$/,canonicalPath:e.decisionCheckpoint.artifactPath},{pattern:/^\.workspai\/changes\/change-[^/]+\/lease\.json$/,canonicalPath:e.architectureChangeLease.artifactPath},{pattern:/^\.workspai\/changes\/change-[^/]+\/predicted-overlay\.json$/,canonicalPath:e.predictedArchitectureChange.artifactPath},{pattern:/^\.workspai\/changes\/change-[^/]+\/actual-overlay\.json$/,canonicalPath:e.actualArchitectureChange.artifactPath},{pattern:/^\.workspai\/changes\/change-[^/]+\/architecture-surprises\.json$/,canonicalPath:e.architectureSurpriseReport.artifactPath},{pattern:/^\.workspai\/changes\/change-[^/]+\/capsule\.json$/,canonicalPath:e.proofCarryingChangeCapsule.artifactPath},{pattern:/^\.workspai\/reports\/bootstrap-compliance-[^/]+\.json$/,canonicalPath:e.bootstrapCompliance.artifactPath},{pattern:/^\.workspai\/reports\/mirror-ops-[^/]+\.json$/,canonicalPath:e.mirrorOps.artifactPath},{pattern:/^\.workspai\/reports\/transparency-evidence-[^/]+\.json$/,canonicalPath:e.transparencyEvidence.artifactPath},{pattern:/^\.workspai\/reports\/projects\/[^/]+\/doctor-project-last-run\.json$/,canonicalPath:e.doctorProject.artifactPath},{pattern:/^\.workspai\/reports\/projects\/[^/]+\/project-test-coverage-last-run\.json$/,canonicalPath:e.projectTestCoverage.artifactPath}];function k(t){let r=m(t),n=d[r];if(n)return n;let a=T.find(c=>c.pattern.test(r));return a?d[a.canonicalPath]??null:null}function O(t,r,n=t){let a$1=m(t),c=k(t);if(!c){if(a$1.startsWith(".workspai/reports/")&&a$1.endsWith(".json"))throw new Error(`${n} is a public workspace report without a registered artifact contract`);return}let u=c.schemaVersionField??"schemaVersion",i=r&&typeof r=="object"?r[u]:void 0;if(i!==c.schemaVersion)throw new Error(`${n} schemaVersion is ${String(i)}, expected ${c.schemaVersion}`);a(r,c.contractPath,n);}
|
|
2
|
+
export{k as a,O as b};
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import {h as h$1,j as j$1,i,m,a,c,l,k as k$1}from'./chunk-U5ENEDJA.js';import {u,v as v$1}from'./chunk-VQZ5PI5J.js';import J from'fs';import i$1 from'path';import C from'fs-extra';var ie=[{id:"fastapi.standard",aliases:["fastapi","fastapi.standard"],label:"fastapi \u2014 FastAPI Standard Kit",description:"Core-backed FastAPI service scaffold.",owner:"core",runtime:"python",framework:"fastapi",category:"backend",moduleSupport:true,workspacePythonEngine:"required",stability:"stable",versionPolicy:"tested-baseline"},{id:"fastapi.ddd",aliases:["fastapi.ddd","fastapi-ddd"],label:"fastapi \u2014 FastAPI DDD Kit",description:"Core-backed FastAPI DDD service scaffold.",owner:"core",runtime:"python",framework:"fastapi",category:"backend",moduleSupport:true,workspacePythonEngine:"required",stability:"stable",versionPolicy:"tested-baseline"},{id:"nestjs.standard",aliases:["nestjs","nest","nestjs.standard"],label:"nestjs \u2014 NestJS Standard Kit",description:"Core-backed NestJS service scaffold.",owner:"core",runtime:"node",framework:"nestjs",category:"backend",moduleSupport:true,workspacePythonEngine:"optional",stability:"stable",versionPolicy:"tested-baseline"},{id:"springboot.standard",aliases:["spring","springboot","springboot.standard","java"],label:"spring \u2014 Spring Boot Standard Kit",description:"npm-backed Spring Boot service scaffold.",owner:"npm",runtime:"java",framework:"springboot",category:"backend",moduleSupport:false,workspacePythonEngine:"none",stability:"stable",versionPolicy:"tested-baseline",generator:"springboot",createUsage:"workspai create project springboot.standard <name> [--java-version <major>] [--spring-boot-version <semver>] [--group-id <com.example>] [--package-name <com.example.app>] [--port <number>]"},{id:"gofiber.standard",aliases:["go","go.standard","fiber","gofiber","gofiber.standard","go/fiber"],label:"go/fiber \u2014 Go Fiber Standard Kit",description:"npm-backed Go Fiber service scaffold.",owner:"npm",runtime:"go",framework:"gofiber",category:"backend",moduleSupport:false,workspacePythonEngine:"none",stability:"stable",versionPolicy:"tested-baseline",generator:"gofiber",createUsage:"workspai create project gofiber.standard <name> [--output <dir>]"},{id:"gogin.standard",aliases:["gin","gogin","gogin.standard","go/gin"],label:"go/gin \u2014 Go Gin Standard Kit",description:"npm-backed Go Gin service scaffold.",owner:"npm",runtime:"go",framework:"gogin",category:"backend",moduleSupport:false,workspacePythonEngine:"none",stability:"stable",versionPolicy:"tested-baseline",generator:"gogin",createUsage:"workspai create project gogin.standard <name> [--output <dir>]"},{id:"dotnet.webapi.clean",aliases:["dotnet","dotnet.webapi","dotnet.webapi.clean","aspnet","aspnetcore","asp.net","asp.net-core","csharp","c#"],label:"dotnet \u2014 ASP.NET Core Clean Web API",description:"npm-backed ASP.NET Core Web API with clean architecture boundaries.",owner:"npm",runtime:"dotnet",framework:"dotnet",category:"backend",moduleSupport:false,workspacePythonEngine:"none",stability:"preview",versionPolicy:"tested-baseline",generator:"dotnet-webapi-clean",createUsage:"workspai create project dotnet.webapi.clean <name> [--target-framework net8.0] [--root-namespace <Company.Product>] [--port <number>]"},{id:"rust.axum",aliases:["rust.axum","axum","rust-axum"],label:"rust/axum \u2014 Rust Axum API",description:"Workspai-owned Axum service with health, tests, CI, and container baseline.",owner:"npm",runtime:"rust",framework:"axum",category:"backend",moduleSupport:false,workspacePythonEngine:"none",stability:"preview",versionPolicy:"tested-baseline",generator:"rust-axum",createUsage:"workspai create project rust.axum <name> [--port <number>] [--output <dir>] [--skip-git]"}],U=new Map;for(let e of ie){U.set(e.id.toLowerCase(),e);for(let t of e.aliases)U.set(t.toLowerCase(),e);}function A(e){return e?U.get(e.trim().toLowerCase())??null:null}function it(e){return A(e)?.id??e}function st(){return ie.filter(e=>e.owner==="core"||e.generator)}function ct(e){return A(e)?.owner==="npm"}async function mt(e,t){if(!e.generator)throw new Error(`Kit is not backed by an npm generator: ${e.id}`);if(e.generator==="gofiber"){let{generateGoFiberKit:r}=await import('./gofiber-standard-C44IIQYH.js');await r(t.projectPath,{project_name:t.projectName,module_path:t.projectName,skipGit:t.skipGit,skipInstall:t.skipInstall});return}if(e.generator==="gogin"){let{generateGoGinKit:r}=await import('./gogin-standard-X7VKACVR.js');await r(t.projectPath,{project_name:t.projectName,module_path:t.projectName,skipGit:t.skipGit,skipInstall:t.skipInstall});return}if(e.generator==="springboot"){let{generateSpringBootKit:r}=await import('./springboot-standard-PI4FLTAN.js');await r(t.projectPath,{project_name:t.projectName,artifact_id:t.projectName,java_version:p(t.args,"--java-version")?.trim(),spring_boot_version:p(t.args,"--spring-boot-version")?.trim(),springdoc_version:p(t.args,"--springdoc-version")?.trim(),group_id:p(t.args,"--group-id")?.trim(),package_name:p(t.args,"--package-name")?.trim(),description:p(t.args,"--description")?.trim(),port:p(t.args,"--port")?.trim(),skipGit:t.skipGit,skipInstall:t.skipInstall});return}if(e.generator==="dotnet-webapi-clean"){let{generateDotnetWebApiCleanKit:r}=await import('./dotnet-webapi-clean-YEHYIGOT.js');await r(t.projectPath,{project_name:t.projectName,target_framework:p(t.args,"--target-framework")?.trim(),root_namespace:p(t.args,"--root-namespace")?.trim(),description:p(t.args,"--description")?.trim(),port:p(t.args,"--port")?.trim(),skipGit:t.skipGit,skipInstall:t.skipInstall});return}if(e.generator==="rust-axum"){let{generateRustAxumKit:r}=await import('./rust-axum-JKZTZDRZ.js');await r(t.projectPath,{project_name:t.projectName,description:p(t.args,"--description")?.trim(),port:p(t.args,"--port")?.trim(),skipGit:t.skipGit,skipInstall:t.skipInstall});return}throw new Error(`Unhandled npm kit generator: ${e.generator}`)}function p(e,t){let r=e.indexOf(t);if(r>=0&&r+1<e.length)return e[r+1];let n=e.find(o=>o.startsWith(`${t}=`));return n?n.slice(t.length+1):void 0}var b=["init","dev","start","build","test","lint","format","help"],se={python:{runtime:"python",displayName:"Python",tier:"first-class",scaffoldSupport:true,importSupport:true,lifecycleCommands:b,moduleCommands:true,doctorSupport:"full",notes:["Core-backed Python projects support RapidKit Core modules and lifecycle commands."]},node:{runtime:"node",displayName:"Node.js",tier:"extended",scaffoldSupport:true,importSupport:true,lifecycleCommands:b,moduleCommands:true,doctorSupport:"full",notes:["Node projects support npm-owned lifecycle commands; NestJS is the first-class Node framework."]},go:{runtime:"go",displayName:"Go",tier:"extended",scaffoldSupport:true,importSupport:true,lifecycleCommands:b,moduleCommands:false,doctorSupport:"readiness",notes:["Go projects support workspace governance and lifecycle commands via Go tooling."]},java:{runtime:"java",displayName:"Java / Spring Boot",tier:"extended",scaffoldSupport:true,importSupport:true,lifecycleCommands:b,moduleCommands:false,doctorSupport:"readiness",notes:["Java projects support Maven/Gradle lifecycle commands and workspace governance."]},dotnet:{runtime:"dotnet",displayName:".NET / ASP.NET Core",tier:"extended",scaffoldSupport:true,importSupport:true,lifecycleCommands:b,moduleCommands:false,doctorSupport:"readiness",notes:[".NET projects support dotnet CLI lifecycle commands and workspace governance."]},php:{runtime:"php",displayName:"PHP",tier:"extended",scaffoldSupport:true,importSupport:true,lifecycleCommands:b,moduleCommands:false,doctorSupport:"readiness",notes:["Laravel projects use the official Composer generator and PHP/Composer lifecycle adapter."]},ruby:{runtime:"ruby",displayName:"Ruby",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["Ruby projects are importable and governed as observed projects until a kit exists."]},rust:{runtime:"rust",displayName:"Rust",tier:"extended",scaffoldSupport:true,importSupport:true,lifecycleCommands:b,moduleCommands:false,doctorSupport:"readiness",notes:["Rust projects support Axum and Tauri scaffolding plus Cargo lifecycle commands."]},elixir:{runtime:"elixir",displayName:"Elixir",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["Elixir projects are importable and governed as observed projects until a kit exists."]},clojure:{runtime:"clojure",displayName:"Clojure",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["Clojure projects are importable and governed as observed projects until a kit exists."]},scala:{runtime:"scala",displayName:"Scala",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["Scala projects are importable and governed as observed projects until a kit exists."]},kotlin:{runtime:"kotlin",displayName:"Kotlin",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["Kotlin projects are importable and governed as observed projects until a kit exists."]},deno:{runtime:"deno",displayName:"Deno",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["Deno projects are importable and governed as observed projects until a kit exists."]},bun:{runtime:"bun",displayName:"Bun",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["init","dev","start","build","test","lint","format","help"],moduleCommands:false,doctorSupport:"observed",notes:["Bun projects are importable and governed as observed projects until a kit exists.","Declared package scripts execute through the Bun-aware npm wrapper; undeclared lifecycle commands remain unavailable."]},c:{runtime:"c",displayName:"C",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["C projects are importable and receive manifest, test, quality, security, and coverage evidence without assuming a package manager."]},cpp:{runtime:"cpp",displayName:"C++",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["C++ projects are importable and receive manifest, test, quality, security, and coverage evidence without assuming a package manager."]},unknown:{runtime:"unknown",displayName:"Unknown",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["Unknown projects are tracked safely but require manual command configuration."]}};function x(e){return se[e||"unknown"]??se.unknown}function ce(e){return h$1(e).supportTier}function me(e){let t=x(e.runtime);return {lifecycleCommands:t.lifecycleCommands,moduleCommands:e.moduleSupport&&t.moduleCommands,unsupportedLifecycleCommands:b.filter(r=>!t.lifecycleCommands.includes(r))}}var Pe=["python","node","bun","go","java","dotnet","rust","php"];function h(e){return !!e&&Pe.includes(e)}function F(e,t){return t!=="lint"&&t!=="format"&&t!=="docs"?false:e==="python"}function pe(e){let t=x(e),r=h(t.runtime),n=Ne[t.runtime]??[],o=Re[t.runtime]??[];return {runtime:t.runtime,displayName:t.displayName,lifecycleCommands:t.lifecycleCommands,hasExecutor:r,packageManagers:n,primaryFiles:o,notes:t.notes}}var Ne={python:["poetry","pip","uv"],node:["npm","pnpm","yarn","bun"],go:["go"],java:["maven","gradle"],dotnet:["dotnet"],php:["composer"],ruby:["bundle"],rust:["cargo"],elixir:["mix"],kotlin:["gradle"],deno:["deno"],bun:["bun"]},Re={python:["pyproject.toml","requirements.txt","requirements.in"],node:["package.json"],go:["go.mod"],java:["pom.xml","build.gradle","build.gradle.kts"],dotnet:["*.csproj","*.sln"],php:["composer.json"],ruby:["Gemfile"],rust:["Cargo.toml"],elixir:["mix.exs"],kotlin:["settings.gradle.kts"],deno:["deno.json","deno.jsonc"],bun:["package.json","bunfig.toml",".bunfig.toml"]};function v(e,t){let r=j$1(e)?null:e,n=i({runtime:typeof r?.runtime=="string"?r.runtime:void 0,framework:typeof r?.framework=="string"?r.framework:void 0,kitName:typeof r?.kit_name=="string"?r.kit_name:typeof r?.kit=="string"?r.kit:void 0});return n.runtime!=="unknown"?n.runtime:m(t,r).runtime}function le(e){let t=e;for(;;){for(let n of u(t,"project.json"))if(J.existsSync(n))try{return JSON.parse(J.readFileSync(n,"utf8"))}catch{return null}let r=i$1.dirname(t);if(r===t)break;t=r;}return null}function jt(e,t){return v(e,t)==="go"}function wt(e,t){return v(e,t)==="node"}function xt(e,t){return v(e,t)==="java"}function vt(e,t){return v(e,t)==="dotnet"}function Pt(e,t){return v(e,t)==="python"}var Me=["project.json","context.json","file-hashes.json"];async function Tt(e){let t=i$1.resolve(e),r=[];for(let n of Me){let o=v$1(t,n);if(await C.pathExists(o))continue;let c=i$1.join(t,".rapidkit",n);if(!await C.pathExists(c))continue;let m=await C.readJson(c);await C.ensureDir(i$1.dirname(o));let l=`${o}.${process.pid}.${Date.now()}.tmp`;try{await C.writeJson(l,m,{spaces:2}),await C.move(l,o,{overwrite:false}),r.push(o);}finally{await C.remove(l).catch(()=>{});}}return r}function _e(e){for(let t of u(e,"context.json"))if(J.existsSync(t))try{return JSON.parse(J.readFileSync(t,"utf8"))}catch{return null}return null}function Ae(e){let t=e?.engine;return t==="npm"||t==="pip"||t==="python"?t:"unknown"}function Fe(e,t){if(e?.module_support===false||t?.module_support===false||!e&&t)return false;let r=typeof e?.kit_name=="string"?e.kit_name:typeof e?.kit=="string"?e.kit:typeof t?.kit=="string"?t.kit:void 0,n=r?A(r):void 0;return n?.owner==="core"&&n.moduleSupport===true}function Le(e,t,r){let n=j$1(t)?null:t,o=i({runtime:typeof n?.runtime=="string"?n.runtime:typeof r?.runtime=="string"?r.runtime:void 0,framework:typeof n?.framework=="string"?n.framework:typeof r?.framework=="string"?r.framework:void 0,kitName:typeof n?.kit_name=="string"?n.kit_name:typeof n?.kit=="string"?n.kit:typeof r?.kit=="string"?r.kit:void 0});return o.key!=="unknown"?o:m(e,n)}function de(e){let t=i$1.resolve(e);if(![...u(t,"project.json"),...u(t,"context.json")].some(m=>J.existsSync(m)))return null;let n=le(t),o=_e(t),c=Le(t,n,o);return {projectRoot:t,projectJson:n,contextJson:o,detection:c,moduleSupport:Fe(n,o),engine:Ae(o)}}var De=["build","dev","start","test","lint","format"],$=["init","test","build","start"],Bt=["lint","format","docs"];function Kt(e){return !!e&&De.includes(e)}var Te={dev:["dev","start:dev","watch"],start:["start","start:prod","preview"],build:["build","compile"],test:["test","test:unit","test:ci"],lint:["lint","eslint"],format:["format","prettier"]},ge={nestjs:{dev:["dev","start:dev"],start:["start","start:prod"],build:["build"],test:["test","test:e2e"],lint:["lint"],format:["format"]},express:{dev:["dev","start:dev"],start:["start"],build:["build"],test:["test"],lint:["lint"],format:["format"]},fastify:{dev:["dev","start:dev"],start:["start"],build:["build"],test:["test"],lint:["lint"],format:["format"]},koa:{dev:["dev","start:dev"],start:["start"],build:["build"],test:["test"],lint:["lint"],format:["format"]}};function Oe(e){let t=i$1.join(e,"package.json");if(!J.existsSync(t))return {};try{let n=JSON.parse(J.readFileSync(t,"utf8")).scripts??{};return Object.fromEntries(Object.entries(n).filter(o=>typeof o[1]=="string"))}catch{return {}}}function Ie(e,t){let r=t?c(t):"unknown",n=r!=="unknown"?a(r,e):[],o=t?ge[t]?.[e]??[]:[],c$1=Te[e]??[],m=[...n,...o,...c$1];return [...new Set(m)]}function ye(e,t,r){let n=Oe(e),o=new Set(Object.keys(n));if(o.has(t))return {scriptName:t,source:"package.json"};for(let c$1 of Ie(t,r?.framework))if(o.has(c$1))return {scriptName:c$1,source:a(c(r?.framework??"unknown"),t).includes(c$1)||ge[r?.framework??""]?.[t]?.includes(c$1)?"framework-candidate":"generic-candidate"};return null}function q(e){return J.existsSync(i$1.join(e,"package.json"))}function be(e){let t=pe(e);return t.runtime==="unknown"&&e!=="unknown"?null:{runtime:t.runtime,displayName:t.displayName,supportedCommands:t.lifecycleCommands,packageManagers:t.packageManagers,primaryFiles:t.primaryFiles,notes:t.notes,hasExecutor:t.hasExecutor}}function Y(e){try{let t=J.readFileSync(e,"utf8");return /^\s*package\s+main\b/m.test(t)&&/\bfunc\s+main\s*\(/m.test(t)}catch{return false}}function z(e){let t=i$1.join(e,"main.go");if(Y(t))return "./.";try{if(J.readdirSync(e,{withFileTypes:true}).filter(o=>o.isFile()&&o.name.endsWith(".go")).map(o=>i$1.join(e,o.name)).filter(Y).length>0)return "./."}catch{}let r=i$1.join(e,"cmd");try{let n=J.readdirSync(r,{withFileTypes:true}).filter(o=>o.isDirectory()).map(o=>({name:o.name,mainPath:i$1.join(r,o.name,"main.go")})).filter(o=>Y(o.mainPath)).map(o=>`./cmd/${o.name}`).sort();return n.length===1?n[0]:null}catch{return null}}function Ke(e){try{let t=i$1.join(e,"Makefile");return J.existsSync(t)?J.readFileSync(t,"utf8"):""}catch{return ""}}function k(e,t){let r=Ke(e);return r?new RegExp(`^${t}\\s*:`,"m").test(r):false}function s(e){try{return J.existsSync(e)}catch{return false}}function j(e){try{return s(e)?J.readFileSync(e,"utf8"):""}catch{return ""}}function Ge(e){let t=[e];for(;t.length>0;){let r=t.shift();if(!r)break;let n=[];try{n=J.readdirSync(r,{withFileTypes:true});}catch{continue}for(let o of n){if(o.name==="node_modules"||o.name===".git"||o.name==="dist")continue;let c=i$1.join(r,o.name);if(o.isFile()&&o.name.endsWith(".csproj"))return true;o.isDirectory()&&t.push(c);}}return false}function Ce(e,t){let r=s(i$1.join(e,"pyproject.toml")),n=s(i$1.join(e,"requirements.txt"))||s(i$1.join(e,"requirements.in")),o=s(i$1.join(e,"manage.py"));switch(t){case "init":return r||n;case "dev":case "start":return r||o||n;case "test":return r||n||s(i$1.join(e,"tests"));case "build":return r||n;case "lint":case "format":return r||n||o||s(i$1.join(e,"setup.py"))||s(i$1.join(e,"setup.cfg"));default:return false}}function Ue(e,t){if(!s(i$1.join(e,"go.mod")))return false;switch(t){case "init":return true;case "dev":return k(e,"run")||z(e)!==null;case "test":return true;case "build":return true;case "start":return k(e,"run")||z(e)!==null;case "lint":return s(i$1.join(e,".golangci.yml"))||s(i$1.join(e,".golangci.yaml"))||k(e,"lint");case "format":return true;default:return false}}function Je(e,t,r){let n=s(i$1.join(e,"pom.xml")),o=s(i$1.join(e,"build.gradle"))||s(i$1.join(e,"build.gradle.kts"));if(!n&&!o)return false;let c=j(i$1.join(e,"pom.xml")),m=[j(i$1.join(e,"build.gradle")),j(i$1.join(e,"build.gradle.kts"))].join(`
|
|
1
|
+
import {h as h$1,j as j$1,i,m,a,c,l,k as k$1}from'./chunk-U5ENEDJA.js';import {u,v as v$1}from'./chunk-VQZ5PI5J.js';import J from'fs';import i$1 from'path';import C from'fs-extra';var ie=[{id:"fastapi.standard",aliases:["fastapi","fastapi.standard"],label:"fastapi \u2014 FastAPI Standard Kit",description:"Core-backed FastAPI service scaffold.",owner:"core",runtime:"python",framework:"fastapi",category:"backend",moduleSupport:true,workspacePythonEngine:"required",stability:"stable",versionPolicy:"tested-baseline"},{id:"fastapi.ddd",aliases:["fastapi.ddd","fastapi-ddd"],label:"fastapi \u2014 FastAPI DDD Kit",description:"Core-backed FastAPI DDD service scaffold.",owner:"core",runtime:"python",framework:"fastapi",category:"backend",moduleSupport:true,workspacePythonEngine:"required",stability:"stable",versionPolicy:"tested-baseline"},{id:"nestjs.standard",aliases:["nestjs","nest","nestjs.standard"],label:"nestjs \u2014 NestJS Standard Kit",description:"Core-backed NestJS service scaffold.",owner:"core",runtime:"node",framework:"nestjs",category:"backend",moduleSupport:true,workspacePythonEngine:"optional",stability:"stable",versionPolicy:"tested-baseline"},{id:"springboot.standard",aliases:["spring","springboot","springboot.standard","java"],label:"spring \u2014 Spring Boot Standard Kit",description:"npm-backed Spring Boot service scaffold.",owner:"npm",runtime:"java",framework:"springboot",category:"backend",moduleSupport:false,workspacePythonEngine:"none",stability:"stable",versionPolicy:"tested-baseline",generator:"springboot",createUsage:"workspai create project springboot.standard <name> [--java-version <major>] [--spring-boot-version <semver>] [--group-id <com.example>] [--package-name <com.example.app>] [--port <number>]"},{id:"gofiber.standard",aliases:["go","go.standard","fiber","gofiber","gofiber.standard","go/fiber"],label:"go/fiber \u2014 Go Fiber Standard Kit",description:"npm-backed Go Fiber service scaffold.",owner:"npm",runtime:"go",framework:"gofiber",category:"backend",moduleSupport:false,workspacePythonEngine:"none",stability:"stable",versionPolicy:"tested-baseline",generator:"gofiber",createUsage:"workspai create project gofiber.standard <name> [--output <dir>]"},{id:"gogin.standard",aliases:["gin","gogin","gogin.standard","go/gin"],label:"go/gin \u2014 Go Gin Standard Kit",description:"npm-backed Go Gin service scaffold.",owner:"npm",runtime:"go",framework:"gogin",category:"backend",moduleSupport:false,workspacePythonEngine:"none",stability:"stable",versionPolicy:"tested-baseline",generator:"gogin",createUsage:"workspai create project gogin.standard <name> [--output <dir>]"},{id:"dotnet.webapi.clean",aliases:["dotnet","dotnet.webapi","dotnet.webapi.clean","aspnet","aspnetcore","asp.net","asp.net-core","csharp","c#"],label:"dotnet \u2014 ASP.NET Core Clean Web API",description:"npm-backed ASP.NET Core Web API with clean architecture boundaries.",owner:"npm",runtime:"dotnet",framework:"dotnet",category:"backend",moduleSupport:false,workspacePythonEngine:"none",stability:"preview",versionPolicy:"tested-baseline",generator:"dotnet-webapi-clean",createUsage:"workspai create project dotnet.webapi.clean <name> [--target-framework net8.0] [--root-namespace <Company.Product>] [--port <number>]"},{id:"rust.axum",aliases:["rust.axum","axum","rust-axum"],label:"rust/axum \u2014 Rust Axum API",description:"Workspai-owned Axum service with health, tests, CI, and container baseline.",owner:"npm",runtime:"rust",framework:"axum",category:"backend",moduleSupport:false,workspacePythonEngine:"none",stability:"preview",versionPolicy:"tested-baseline",generator:"rust-axum",createUsage:"workspai create project rust.axum <name> [--port <number>] [--output <dir>] [--skip-git]"}],U=new Map;for(let e of ie){U.set(e.id.toLowerCase(),e);for(let t of e.aliases)U.set(t.toLowerCase(),e);}function A(e){return e?U.get(e.trim().toLowerCase())??null:null}function it(e){return A(e)?.id??e}function st(){return ie.filter(e=>e.owner==="core"||e.generator)}function ct(e){return A(e)?.owner==="npm"}async function mt(e,t){if(!e.generator)throw new Error(`Kit is not backed by an npm generator: ${e.id}`);if(e.generator==="gofiber"){let{generateGoFiberKit:r}=await import('./gofiber-standard-OHHMCNMJ.js');await r(t.projectPath,{project_name:t.projectName,module_path:t.projectName,skipGit:t.skipGit,skipInstall:t.skipInstall});return}if(e.generator==="gogin"){let{generateGoGinKit:r}=await import('./gogin-standard-BAZXPOKL.js');await r(t.projectPath,{project_name:t.projectName,module_path:t.projectName,skipGit:t.skipGit,skipInstall:t.skipInstall});return}if(e.generator==="springboot"){let{generateSpringBootKit:r}=await import('./springboot-standard-M5JQEJML.js');await r(t.projectPath,{project_name:t.projectName,artifact_id:t.projectName,java_version:p(t.args,"--java-version")?.trim(),spring_boot_version:p(t.args,"--spring-boot-version")?.trim(),springdoc_version:p(t.args,"--springdoc-version")?.trim(),group_id:p(t.args,"--group-id")?.trim(),package_name:p(t.args,"--package-name")?.trim(),description:p(t.args,"--description")?.trim(),port:p(t.args,"--port")?.trim(),skipGit:t.skipGit,skipInstall:t.skipInstall});return}if(e.generator==="dotnet-webapi-clean"){let{generateDotnetWebApiCleanKit:r}=await import('./dotnet-webapi-clean-XL4IBUQV.js');await r(t.projectPath,{project_name:t.projectName,target_framework:p(t.args,"--target-framework")?.trim(),root_namespace:p(t.args,"--root-namespace")?.trim(),description:p(t.args,"--description")?.trim(),port:p(t.args,"--port")?.trim(),skipGit:t.skipGit,skipInstall:t.skipInstall});return}if(e.generator==="rust-axum"){let{generateRustAxumKit:r}=await import('./rust-axum-CCJ6UCBW.js');await r(t.projectPath,{project_name:t.projectName,description:p(t.args,"--description")?.trim(),port:p(t.args,"--port")?.trim(),skipGit:t.skipGit,skipInstall:t.skipInstall});return}throw new Error(`Unhandled npm kit generator: ${e.generator}`)}function p(e,t){let r=e.indexOf(t);if(r>=0&&r+1<e.length)return e[r+1];let n=e.find(o=>o.startsWith(`${t}=`));return n?n.slice(t.length+1):void 0}var b=["init","dev","start","build","test","lint","format","help"],se={python:{runtime:"python",displayName:"Python",tier:"first-class",scaffoldSupport:true,importSupport:true,lifecycleCommands:b,moduleCommands:true,doctorSupport:"full",notes:["Core-backed Python projects support RapidKit Core modules and lifecycle commands."]},node:{runtime:"node",displayName:"Node.js",tier:"extended",scaffoldSupport:true,importSupport:true,lifecycleCommands:b,moduleCommands:true,doctorSupport:"full",notes:["Node projects support npm-owned lifecycle commands; NestJS is the first-class Node framework."]},go:{runtime:"go",displayName:"Go",tier:"extended",scaffoldSupport:true,importSupport:true,lifecycleCommands:b,moduleCommands:false,doctorSupport:"readiness",notes:["Go projects support workspace governance and lifecycle commands via Go tooling."]},java:{runtime:"java",displayName:"Java / Spring Boot",tier:"extended",scaffoldSupport:true,importSupport:true,lifecycleCommands:b,moduleCommands:false,doctorSupport:"readiness",notes:["Java projects support Maven/Gradle lifecycle commands and workspace governance."]},dotnet:{runtime:"dotnet",displayName:".NET / ASP.NET Core",tier:"extended",scaffoldSupport:true,importSupport:true,lifecycleCommands:b,moduleCommands:false,doctorSupport:"readiness",notes:[".NET projects support dotnet CLI lifecycle commands and workspace governance."]},php:{runtime:"php",displayName:"PHP",tier:"extended",scaffoldSupport:true,importSupport:true,lifecycleCommands:b,moduleCommands:false,doctorSupport:"readiness",notes:["Laravel projects use the official Composer generator and PHP/Composer lifecycle adapter."]},ruby:{runtime:"ruby",displayName:"Ruby",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["Ruby projects are importable and governed as observed projects until a kit exists."]},rust:{runtime:"rust",displayName:"Rust",tier:"extended",scaffoldSupport:true,importSupport:true,lifecycleCommands:b,moduleCommands:false,doctorSupport:"readiness",notes:["Rust projects support Axum and Tauri scaffolding plus Cargo lifecycle commands."]},elixir:{runtime:"elixir",displayName:"Elixir",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["Elixir projects are importable and governed as observed projects until a kit exists."]},clojure:{runtime:"clojure",displayName:"Clojure",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["Clojure projects are importable and governed as observed projects until a kit exists."]},scala:{runtime:"scala",displayName:"Scala",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["Scala projects are importable and governed as observed projects until a kit exists."]},kotlin:{runtime:"kotlin",displayName:"Kotlin",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["Kotlin projects are importable and governed as observed projects until a kit exists."]},deno:{runtime:"deno",displayName:"Deno",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["Deno projects are importable and governed as observed projects until a kit exists."]},bun:{runtime:"bun",displayName:"Bun",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["init","dev","start","build","test","lint","format","help"],moduleCommands:false,doctorSupport:"observed",notes:["Bun projects are importable and governed as observed projects until a kit exists.","Declared package scripts execute through the Bun-aware npm wrapper; undeclared lifecycle commands remain unavailable."]},c:{runtime:"c",displayName:"C",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["C projects are importable and receive manifest, test, quality, security, and coverage evidence without assuming a package manager."]},cpp:{runtime:"cpp",displayName:"C++",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["C++ projects are importable and receive manifest, test, quality, security, and coverage evidence without assuming a package manager."]},unknown:{runtime:"unknown",displayName:"Unknown",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["Unknown projects are tracked safely but require manual command configuration."]}};function x(e){return se[e||"unknown"]??se.unknown}function ce(e){return h$1(e).supportTier}function me(e){let t=x(e.runtime);return {lifecycleCommands:t.lifecycleCommands,moduleCommands:e.moduleSupport&&t.moduleCommands,unsupportedLifecycleCommands:b.filter(r=>!t.lifecycleCommands.includes(r))}}var Pe=["python","node","bun","go","java","dotnet","rust","php"];function h(e){return !!e&&Pe.includes(e)}function F(e,t){return t!=="lint"&&t!=="format"&&t!=="docs"?false:e==="python"}function pe(e){let t=x(e),r=h(t.runtime),n=Ne[t.runtime]??[],o=Re[t.runtime]??[];return {runtime:t.runtime,displayName:t.displayName,lifecycleCommands:t.lifecycleCommands,hasExecutor:r,packageManagers:n,primaryFiles:o,notes:t.notes}}var Ne={python:["poetry","pip","uv"],node:["npm","pnpm","yarn","bun"],go:["go"],java:["maven","gradle"],dotnet:["dotnet"],php:["composer"],ruby:["bundle"],rust:["cargo"],elixir:["mix"],kotlin:["gradle"],deno:["deno"],bun:["bun"]},Re={python:["pyproject.toml","requirements.txt","requirements.in"],node:["package.json"],go:["go.mod"],java:["pom.xml","build.gradle","build.gradle.kts"],dotnet:["*.csproj","*.sln"],php:["composer.json"],ruby:["Gemfile"],rust:["Cargo.toml"],elixir:["mix.exs"],kotlin:["settings.gradle.kts"],deno:["deno.json","deno.jsonc"],bun:["package.json","bunfig.toml",".bunfig.toml"]};function v(e,t){let r=j$1(e)?null:e,n=i({runtime:typeof r?.runtime=="string"?r.runtime:void 0,framework:typeof r?.framework=="string"?r.framework:void 0,kitName:typeof r?.kit_name=="string"?r.kit_name:typeof r?.kit=="string"?r.kit:void 0});return n.runtime!=="unknown"?n.runtime:m(t,r).runtime}function le(e){let t=e;for(;;){for(let n of u(t,"project.json"))if(J.existsSync(n))try{return JSON.parse(J.readFileSync(n,"utf8"))}catch{return null}let r=i$1.dirname(t);if(r===t)break;t=r;}return null}function jt(e,t){return v(e,t)==="go"}function wt(e,t){return v(e,t)==="node"}function xt(e,t){return v(e,t)==="java"}function vt(e,t){return v(e,t)==="dotnet"}function Pt(e,t){return v(e,t)==="python"}var Me=["project.json","context.json","file-hashes.json"];async function Tt(e){let t=i$1.resolve(e),r=[];for(let n of Me){let o=v$1(t,n);if(await C.pathExists(o))continue;let c=i$1.join(t,".rapidkit",n);if(!await C.pathExists(c))continue;let m=await C.readJson(c);await C.ensureDir(i$1.dirname(o));let l=`${o}.${process.pid}.${Date.now()}.tmp`;try{await C.writeJson(l,m,{spaces:2}),await C.move(l,o,{overwrite:false}),r.push(o);}finally{await C.remove(l).catch(()=>{});}}return r}function _e(e){for(let t of u(e,"context.json"))if(J.existsSync(t))try{return JSON.parse(J.readFileSync(t,"utf8"))}catch{return null}return null}function Ae(e){let t=e?.engine;return t==="npm"||t==="pip"||t==="python"?t:"unknown"}function Fe(e,t){if(e?.module_support===false||t?.module_support===false||!e&&t)return false;let r=typeof e?.kit_name=="string"?e.kit_name:typeof e?.kit=="string"?e.kit:typeof t?.kit=="string"?t.kit:void 0,n=r?A(r):void 0;return n?.owner==="core"&&n.moduleSupport===true}function Le(e,t,r){let n=j$1(t)?null:t,o=i({runtime:typeof n?.runtime=="string"?n.runtime:typeof r?.runtime=="string"?r.runtime:void 0,framework:typeof n?.framework=="string"?n.framework:typeof r?.framework=="string"?r.framework:void 0,kitName:typeof n?.kit_name=="string"?n.kit_name:typeof n?.kit=="string"?n.kit:typeof r?.kit=="string"?r.kit:void 0});return o.key!=="unknown"?o:m(e,n)}function de(e){let t=i$1.resolve(e);if(![...u(t,"project.json"),...u(t,"context.json")].some(m=>J.existsSync(m)))return null;let n=le(t),o=_e(t),c=Le(t,n,o);return {projectRoot:t,projectJson:n,contextJson:o,detection:c,moduleSupport:Fe(n,o),engine:Ae(o)}}var De=["build","dev","start","test","lint","format"],$=["init","test","build","start"],Bt=["lint","format","docs"];function Kt(e){return !!e&&De.includes(e)}var Te={dev:["dev","start:dev","watch"],start:["start","start:prod","preview"],build:["build","compile"],test:["test","test:unit","test:ci"],lint:["lint","eslint"],format:["format","prettier"]},ge={nestjs:{dev:["dev","start:dev"],start:["start","start:prod"],build:["build"],test:["test","test:e2e"],lint:["lint"],format:["format"]},express:{dev:["dev","start:dev"],start:["start"],build:["build"],test:["test"],lint:["lint"],format:["format"]},fastify:{dev:["dev","start:dev"],start:["start"],build:["build"],test:["test"],lint:["lint"],format:["format"]},koa:{dev:["dev","start:dev"],start:["start"],build:["build"],test:["test"],lint:["lint"],format:["format"]}};function Oe(e){let t=i$1.join(e,"package.json");if(!J.existsSync(t))return {};try{let n=JSON.parse(J.readFileSync(t,"utf8")).scripts??{};return Object.fromEntries(Object.entries(n).filter(o=>typeof o[1]=="string"))}catch{return {}}}function Ie(e,t){let r=t?c(t):"unknown",n=r!=="unknown"?a(r,e):[],o=t?ge[t]?.[e]??[]:[],c$1=Te[e]??[],m=[...n,...o,...c$1];return [...new Set(m)]}function ye(e,t,r){let n=Oe(e),o=new Set(Object.keys(n));if(o.has(t))return {scriptName:t,source:"package.json"};for(let c$1 of Ie(t,r?.framework))if(o.has(c$1))return {scriptName:c$1,source:a(c(r?.framework??"unknown"),t).includes(c$1)||ge[r?.framework??""]?.[t]?.includes(c$1)?"framework-candidate":"generic-candidate"};return null}function q(e){return J.existsSync(i$1.join(e,"package.json"))}function be(e){let t=pe(e);return t.runtime==="unknown"&&e!=="unknown"?null:{runtime:t.runtime,displayName:t.displayName,supportedCommands:t.lifecycleCommands,packageManagers:t.packageManagers,primaryFiles:t.primaryFiles,notes:t.notes,hasExecutor:t.hasExecutor}}function Y(e){try{let t=J.readFileSync(e,"utf8");return /^\s*package\s+main\b/m.test(t)&&/\bfunc\s+main\s*\(/m.test(t)}catch{return false}}function z(e){let t=i$1.join(e,"main.go");if(Y(t))return "./.";try{if(J.readdirSync(e,{withFileTypes:true}).filter(o=>o.isFile()&&o.name.endsWith(".go")).map(o=>i$1.join(e,o.name)).filter(Y).length>0)return "./."}catch{}let r=i$1.join(e,"cmd");try{let n=J.readdirSync(r,{withFileTypes:true}).filter(o=>o.isDirectory()).map(o=>({name:o.name,mainPath:i$1.join(r,o.name,"main.go")})).filter(o=>Y(o.mainPath)).map(o=>`./cmd/${o.name}`).sort();return n.length===1?n[0]:null}catch{return null}}function Ke(e){try{let t=i$1.join(e,"Makefile");return J.existsSync(t)?J.readFileSync(t,"utf8"):""}catch{return ""}}function k(e,t){let r=Ke(e);return r?new RegExp(`^${t}\\s*:`,"m").test(r):false}function s(e){try{return J.existsSync(e)}catch{return false}}function j(e){try{return s(e)?J.readFileSync(e,"utf8"):""}catch{return ""}}function Ge(e){let t=[e];for(;t.length>0;){let r=t.shift();if(!r)break;let n=[];try{n=J.readdirSync(r,{withFileTypes:true});}catch{continue}for(let o of n){if(o.name==="node_modules"||o.name===".git"||o.name==="dist")continue;let c=i$1.join(r,o.name);if(o.isFile()&&o.name.endsWith(".csproj"))return true;o.isDirectory()&&t.push(c);}}return false}function Ce(e,t){let r=s(i$1.join(e,"pyproject.toml")),n=s(i$1.join(e,"requirements.txt"))||s(i$1.join(e,"requirements.in")),o=s(i$1.join(e,"manage.py"));switch(t){case "init":return r||n;case "dev":case "start":return r||o||n;case "test":return r||n||s(i$1.join(e,"tests"));case "build":return r||n;case "lint":case "format":return r||n||o||s(i$1.join(e,"setup.py"))||s(i$1.join(e,"setup.cfg"));default:return false}}function Ue(e,t){if(!s(i$1.join(e,"go.mod")))return false;switch(t){case "init":return true;case "dev":return k(e,"run")||z(e)!==null;case "test":return true;case "build":return true;case "start":return k(e,"run")||z(e)!==null;case "lint":return s(i$1.join(e,".golangci.yml"))||s(i$1.join(e,".golangci.yaml"))||k(e,"lint");case "format":return true;default:return false}}function Je(e,t,r){let n=s(i$1.join(e,"pom.xml")),o=s(i$1.join(e,"build.gradle"))||s(i$1.join(e,"build.gradle.kts"));if(!n&&!o)return false;let c=j(i$1.join(e,"pom.xml")),m=[j(i$1.join(e,"build.gradle")),j(i$1.join(e,"build.gradle.kts"))].join(`
|
|
2
2
|
`),l=r==="springboot"||c.includes("spring-boot-maven-plugin")||/org\.springframework\.boot|id\s*\(?\s*['"]org\.springframework\.boot['"]/u.test(m),O=l||/<mainClass>\s*[^<]+\s*<\/mainClass>/iu.test(c)||/\bmainClass(?:Name)?\s*(?:=|\.)/u.test(m);switch(t){case "init":case "test":case "build":return true;case "dev":return l;case "start":return O;case "lint":return k(e,"lint")||c.includes("checkstyle")||c.includes("spotless-maven-plugin")||m.includes("checkstyle")||m.includes("spotless");case "format":return k(e,"format")||c.includes("spotless-maven-plugin")||m.includes("spotless");default:return false}}function $e(e,t){if(!Ge(e))return false;switch(t){case "init":case "dev":case "test":case "build":case "start":return true;case "lint":return k(e,"lint")||j(i$1.join(e,"Directory.Build.props")).includes("EnforceCodeStyleInBuild");case "format":return k(e,"format")||s(i$1.join(e,".editorconfig"));default:return false}}function Se(e,t,r){return t==="init"?q(e):ye(e,t,{framework:r})!==null}function We(e,t,r){switch(t){case "php":return r==="init"&&s(i$1.join(e,"composer.json"));case "ruby":return r==="init"&&s(i$1.join(e,"Gemfile"));case "rust":return s(i$1.join(e,"Cargo.toml"))?r==="init"||r==="test"||r==="build"||r==="start":false;case "elixir":return r==="init"&&s(i$1.join(e,"mix.exs"));case "deno":return s(i$1.join(e,"deno.json"))||s(i$1.join(e,"deno.jsonc"))?r==="init"||r==="dev"||r==="test"||r==="start":r==="init"&&s(i$1.join(e,"package.json"));case "bun":return s(i$1.join(e,"bunfig.toml"))||s(i$1.join(e,".bunfig.toml"))||s(i$1.join(e,"bun.lock"))?r==="init"||r==="dev"||r==="test"||r==="build"||r==="start":r==="init"&&s(i$1.join(e,"package.json"));default:return false}}function qe(e){try{let t=JSON.parse(j(i$1.join(e,"composer.json")));return new Set(Object.keys(t.scripts??{}))}catch{return new Set}}function Ye(e,t){if(!s(i$1.join(e,"composer.json")))return false;let r=qe(e),n=s(i$1.join(e,"artisan"));switch(t){case "init":return true;case "dev":return n||r.has("dev");case "start":return n||r.has("start");case "test":return n||r.has("test");case "build":return r.has("build");case "lint":return r.has("lint")||r.has("analyse")||r.has("analyze");case "format":return r.has("format")||r.has("fmt")||s(i$1.join(e,"pint.json"))||s(i$1.join(e,"vendor","bin","pint"));default:return false}}function He(e,t){let r=i$1.join(e,"Cargo.toml");if(!s(r))return false;if(t==="dev"||t==="start"){let n=j(r);if(!/^\s*\[package\]\s*$/m.test(n))return false;let c=/^\s*\[\[bin\]\]\s*$/m.test(n),l=!/^\s*autobins\s*=\s*false\s*(?:#.*)?$/m.test(n)&&s(i$1.join(e,"src","main.rs"));return c||l}return t==="init"||t==="build"||t==="test"||t==="lint"||t==="format"}function T(e,t,r,n){if(F(t,r))return Ce(e,r);if(!h(t))return We(e,t,r);switch(t){case "node":return Se(e,r,n);case "bun":return Se(e,r,n);case "python":return Ce(e,r);case "go":return Ue(e,r);case "java":return Je(e,r,n);case "dotnet":return $e(e,r);case "rust":return He(e,r);case "php":return Ye(e,r);default:return false}}function ze(e,t,r){return ["init","dev","start","build","test","lint","format"].filter(o=>T(e,t,o,r))}function he(e){let t=me({runtime:e.runtime,moduleSupport:e.moduleSupport});if(!e.projectPath)return t;let r=ze(e.projectPath,e.runtime,e.framework),n=new Set(["help"]);for(let c of r)t.lifecycleCommands.includes(c)&&n.add(c);e.runtime==="node"&&q(e.projectPath)&&n.add("init");let o=[...n].sort();return {lifecycleCommands:o,moduleCommands:t.moduleCommands,unsupportedLifecycleCommands:t.lifecycleCommands.filter(c=>!o.includes(c)).sort()}}var Q=["version","commands","doctor","project","help"],N=["init","dev","start","build","test","lint","format"],Z=["add","modules","upgrade","diff","merge","reconcile","rollback","uninstall","checkpoint","snapshot","optimize"],ee=["create","list","info","frameworks","license"];Q.filter(e=>e!=="help");function Xe(e){let t=i$1.resolve(e);for(;;){if([...u(t,"project.json"),...u(t,"context.json")].some(o=>J.existsSync(o)))return t;let n=i$1.dirname(t);if(n===t)break;t=n;}return null}function P(e,t){return {command:e,...t}}var Qe=new Set(["dev","lint","format"]),Ze=new Set($);function et(e,t){return t?Ze.has(e)?{executionScope:"fleet",fleetEligible:true}:Qe.has(e)?{executionScope:"local-only",fleetEligible:false}:{executionScope:"local-only",fleetEligible:false}:{executionScope:"local-only",fleetEligible:false}}function tt(e,t){return F(t.runtime,e)?"core":"runtime"}function rt(e,t,r,n){return !e||!n.lifecycleCommands.includes(t)?false:T(e,r.runtime,t,r.key)}function nt(e,t){let r=!!e&&(t.runtime==="python"||h(t.runtime)&&T(e,t.runtime,"build",t.key));return P("docs",{owner:t.runtime==="python"?"core":"runtime",status:r?"supported":"unsupported",reason:r?t.runtime==="python"?"Documentation generation is delegated to Python Core for this project.":"Project documentation commands are available through the npm wrapper for this runtime.":"Documentation commands require a supported Python or npm-executor project manifest."})}function ot(e){let t=i$1.resolve(e),r=Xe(e);return r||(k$1(t).length>0?t:null)}function at(e=process.cwd()){let t=ot(e),r=t?de(t):null,n=r?.detection??m(e,r?.projectJson??null),o=r?.moduleSupport??false,c=r?.engine??"unknown",m$1=be(n.runtime),l$1=x(n.runtime),O=t?l(t):[],w=[n.runtime,...O.filter(a=>a!==n.runtime)].filter((a,u,E)=>a!=="unknown"&&E.indexOf(a)===u);w.length===0&&w.push("unknown");let I=w.filter(a=>a!=="unknown").length>1,we=he({runtime:n.runtime,moduleSupport:o,projectPath:t??void 0,framework:n.key}),y={};for(let a of Q)y[a]=P(a,{owner:"npm",status:"supported",reason:a==="project"?"The npm CLI owns the project command surface and delegates only Core-specific detection operations.":a==="help"?"Help is available for every Workspai project through the npm CLI.":"Universal command available across Workspai project types."});for(let a of N){let u=rt(t,a,n,we),E=tt(a,n),B=et(a,u);y[a]=P(a,{owner:E,status:u?"supported":"unsupported",executionScope:B.executionScope,fleetEligible:B.fleetEligible,reason:u?E==="core"?`Delegated to Python Core for ${n.displayName} projects.`:B.fleetEligible?`Handled by runtime adapter and eligible for workspace fleet stages (${a}).`:a==="dev"?"Local development command only; workspace fleet excludes dev by design.":n.runtime==="node"?`Handled by npm/pnpm/yarn via the resolved ${a} script in package.json.`:`Handled by the ${m$1?.displayName??n.displayName} runtime adapter for local project execution.`:t?n.runtime==="node"?`No ${a} script was found in package.json for this ${n.displayName} project.`:h(n.runtime)?`The ${n.displayName} runtime is tracked, but ${a} is not available from detected project manifests.`:`${n.displayName} is tracked as an observed runtime; ${a} requires project manifests or explicit scripts.`:"No Workspai project was detected."});}if(I)for(let a of N){let u=y[a];u&&(u.reason=`Composite runtime boundary detected (${w.join(", ")}). This capability describes only the primary ${n.runtime} adapter; nested runtime lifecycle coverage requires explicit project boundaries or command contracts. ${u.reason??""}`.trim());}y.docs=nt(t,n);for(let a of Z)y[a]=P(a,{owner:o?"core":"none",status:o?"supported":"unsupported",reason:o?"Core module/template command supported for this project.":`Core module/template commands are not available for ${n.displayName} projects.`});for(let a of ee)y[a]=P(a,{owner:a==="create"?"npm":"core",status:"global",reason:a==="create"?"Create is orchestrated by npm for multi-language workspace support.":"Engine catalog command; not specific to the selected project runtime."});let R=Object.values(y),te=R.filter(a=>N.includes(a.command)).filter(a=>a.status==="supported"),xe=$.filter(a=>te.some(u=>u.fleetEligible===true&&u.command===a)),ve=te.filter(a=>a.executionScope==="local-only").map(a=>a.command).sort();return {schemaVersion:1,scope:"project",projectRoot:t,engine:c,runtime:n.runtime,runtimeCandidates:w,compositeRuntime:I,lifecycleCoverage:I?"primary-runtime-only":"complete",framework:n.key,frameworkDisplayName:n.displayName,frameworkConfidence:n.confidence,frameworkSupportTier:ce(n.key),runtimeSupportTier:l$1.tier,runtimeDoctorSupport:l$1.doctorSupport,moduleSupport:o,fleetStages:xe,localOnlyCommands:ve,commandMap:y,supportedCommands:R.filter(a=>a.status==="supported").map(a=>a.command).sort(),unsupportedCommands:R.filter(a=>a.status==="unsupported").map(a=>a.command).sort(),globalCommands:R.filter(a=>a.status==="global").map(a=>a.command).sort()}}function Mr(e,t=process.cwd()){let r=e[0];return r?at(t).commandMap[r]??null:null}function _r(e){if(e[0]==="project"&&e[1]==="commands")return true;if(e[0]==="commands"&&e.includes("--scope")){let t=e.indexOf("--scope");return e[t+1]==="project"}return e.some(t=>t==="--scope=project")&&e[0]==="commands"}function Ar(e,t){return [`Workspai command not supported for this project: ${e.command}`,"",`Project: ${t.projectRoot??"not detected"}`,`Runtime: ${t.runtime}`,`Framework: ${t.frameworkDisplayName}`,`Reason: ${e.reason??"Unsupported for this project type."}`,"","Run `workspai project commands` to inspect supported commands for this project."].join(`
|
|
3
3
|
`)}export{Mr as A,_r as B,Ar as C,A as a,it as b,st as c,ct as d,mt as e,x as f,ce as g,h,v as i,le as j,jt as k,wt as l,xt as m,vt as n,Pt as o,Tt as p,de as q,De as r,Bt as s,Kt as t,ye as u,z as v,k as w,he as x,Xe as y,at as z};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import {e,d,i,a,b as b$1,c}from'./chunk-W37NOQVG.js';import g from'fs';import y from'path';var B=64*1024,w=1024*1024,T="workspace-activity-monitor-snapshot.v1",N="workspace-activity-monitor-fleet.v1";function R(n){if(!n||typeof n!="object")return false;let i=n;return ["artifact","graph-entity","graph-relation","proof","project"].includes(String(i.kind))&&typeof i.ref=="string"&&i.ref.length>0&&["input","output","verification","subject"].includes(String(i.role))&&["authoritative","observed"].includes(String(i.provenance))&&(!["graph-entity","graph-relation","proof"].includes(String(i.kind))||typeof i.graphSourceHash=="string"&&i.graphSourceHash.length>0)&&(i.graphSourceHash===void 0||typeof i.graphSourceHash=="string"&&i.graphSourceHash.length>0)}function f(n,i){let o=new Map;for(let a of [...n,...i??[]]){if(!R(a))continue;let t=[a.kind,a.ref,a.role,a.provenance,a.graphSourceHash??""].join("\0");o.set(t,a);}return [...o.values()].sort((a,t)=>a.kind.localeCompare(t.kind)||a.ref.localeCompare(t.ref)||a.role.localeCompare(t.role)).slice(0,100)}function O(n){if(!n||typeof n!="object")return false;let i=n;return i.schemaVersion===a&&typeof i.eventId=="string"&&typeof i.runId=="string"&&Number.isInteger(i.sequence)&&Number(i.sequence)>0&&typeof i.timestamp=="string"&&!!i.scope&&typeof i.scope?.id=="string"&&typeof i.scope?.label=="string"&&["ephemeral-project","project","workspace"].includes(String(i.scope?.kind))&&typeof i.scope?.portable=="boolean"&&b$1.includes(i.kind)&&c.includes(i.status)&&(i.attempt===void 0||Number.isInteger(i.attempt)&&i.attempt>0)&&(i.origin===void 0||typeof i.origin.id=="string"&&typeof i.origin.label=="string"&&["project","workspace-root"].includes(i.origin.kind))&&(i.evidenceBindings===void 0||Array.isArray(i.evidenceBindings)&&i.evidenceBindings.every(R))&&typeof i.message=="string"}function x(n,i){try{let o=g.statSync(n).size,a;if(o<=B+w)a=g.readFileSync(n,"utf8");else {let t=g.openSync(n,"r");try{let r=Buffer.allocUnsafe(B),c=Buffer.allocUnsafe(w),e=g.readSync(t,r,0,r.length,0),s=Math.max(0,o-c.length),p=g.readSync(t,c,0,c.length,s),d=r.subarray(0,e).toString("utf8"),u=c.subarray(0,p).toString("utf8"),l=u.indexOf(`
|
|
2
|
+
`),m=l>=0?u.slice(l+1):"";a=`${d.endsWith(`
|
|
3
|
+
`)?d:`${d}
|
|
4
|
+
`}${m}`,i.push(`Bounded replay window applied to ${y.basename(n)}.`);}finally{g.closeSync(t);}}return a.split(/\r?\n/).filter(Boolean).flatMap(t=>{try{let r=JSON.parse(t);return O(r)?[r]:[]}catch{return i.push(`Ignored an incomplete activity record in ${y.basename(n)}.`),[]}})}catch(o){return i.push(`Unable to read ${y.basename(n)}: ${o instanceof Error?o.message:String(o)}`),[]}}function H(n,i,o){let a=i.get(n.fromBlockId),t=i.get(n.toBlockId);return !a||!t?"planned":t.status!=="planned"?t.status:o!=="running"&&o!=="planned"?"skipped":a.status==="succeeded"||a.status==="warned"?"running":a.status==="failed"?"failed":a.status==="blocked"?"blocked":a.status==="cancelled"?"cancelled":"planned"}function P(n){let i=e(n.targetPath??process.cwd(),{env:n.env}),o=[],a=y.join(i.statePath,"runs"),t=[];try{t=g.readdirSync(a,{withFileTypes:true}).filter(e=>e.isFile()&&e.name.endsWith(".ndjson")).map(e=>{let s=y.join(a,e.name);return {name:e.name,mtimeMs:g.statSync(s).mtimeMs}}).sort((e,s)=>s.mtimeMs-e.mtimeMs);}catch(e){e.code!=="ENOENT"&&o.push(e instanceof Error?e.message:String(e));}n.runId&&(t=t.filter(e=>e.name===`${n.runId}.ndjson`)),t=t.slice(0,Math.max(1,n.maxRuns??25));let r=t.flatMap(e=>x(y.join(a,e.name),o)).sort((e,s)=>e.timestamp.localeCompare(s.timestamp)||e.sequence-s.sequence),c=Math.max(100,n.maxEvents??2e4);return {resolvedScope:i,events:r.slice(-c),diagnostics:o}}function b(n){let i=new Map,o=new Map,a=new Map;for(let t of n.events){let r=i.get(t.runId);if(!r){let c=Array.isArray(t.attributes?.command)?t.attributes.command.filter(e=>typeof e=="string"):[];r={runId:t.runId,...t.parentRunId?{parentRunId:t.parentRunId}:{},...Number.isInteger(Number(t.attributes?.pid))&&Number(t.attributes?.pid)>0?{pid:Number(t.attributes?.pid)}:{},...t.origin?{origin:t.origin}:{},command:c,status:t.status,startedAt:t.timestamp,updatedAt:t.timestamp,blocks:[],edges:[],touches:[],artifacts:[],warnings:[],evidenceBindings:[]},i.set(t.runId,r),o.set(t.runId,new Map),a.set(t.runId,new Map);}if(r.updatedAt=t.timestamp,r.evidenceBindings=f(r.evidenceBindings,t.evidenceBindings),t.kind.startsWith("run.")){if(r.status=t.status,t.kind==="run.started"&&Array.isArray(t.attributes?.command)){let e=t.attributes?.command;r.command=e.filter(s=>typeof s=="string");}let c=Number(t.attributes?.pid);t.kind==="run.started"&&Number.isInteger(c)&&c>0&&(r.pid=c),t.origin&&(r.origin=t.origin),t.durationMs!==void 0&&(r.durationMs=t.durationMs);}if(t.blockId&&t.kind.startsWith("block.")){let c=o.get(t.runId),e=c.get(t.blockId),s=Number(t.attributes?.order),p=e?.attempt??0,d=t.kind==="block.planned"||t.kind==="block.skipped"&&p===0?void 0:t.kind==="block.started"&&e?.status!=="running"?p+1:Math.max(1,p),u=t.attempt??d,l=[...e?.attempts??[]];if(u!==void 0){let m=l.findIndex(C=>C.attempt===u),v=m>=0?l[m]:void 0,S={attempt:u,status:t.status,startedAt:v?.startedAt??t.timestamp,updatedAt:t.timestamp,...t.progress?{progress:t.progress}:v?.progress?{progress:v.progress}:{},...t.durationMs!==void 0?{durationMs:t.durationMs}:v?.durationMs!==void 0?{durationMs:v.durationMs}:{}};m>=0?l[m]=S:l.push(S);}c.set(t.blockId,{id:t.blockId,label:t.kind==="block.planned"||!e?t.message||t.blockId:e.label,status:t.status,order:Number.isFinite(s)?s:e?.order??c.size+1,...t.parentSpanId?{parentId:t.parentSpanId}:e?.parentId?{parentId:e.parentId}:{},...t.progress?{progress:t.progress}:e?.progress?{progress:e.progress}:{},...t.durationMs!==void 0?{durationMs:t.durationMs}:e?.durationMs!==void 0?{durationMs:e.durationMs}:{},...typeof t.attributes?.layoutHint=="string"?{layoutHint:t.attributes.layoutHint}:e?.layoutHint?{layoutHint:e.layoutHint}:{},...typeof t.attributes?.group=="string"?{group:t.attributes.group}:e?.group?{group:e.group}:{},updatedAt:t.timestamp,...u!==void 0?{attempt:u}:e?.attempt?{attempt:e.attempt}:{},attempts:l,evidenceBindings:f(e?.evidenceBindings??[],t.evidenceBindings)});}if(t.blockId&&t.evidenceBindings?.length&&!t.kind.startsWith("block.")){let c=o.get(t.runId),e=c.get(t.blockId);e&&c.set(t.blockId,{...e,evidenceBindings:f(e.evidenceBindings,t.evidenceBindings),updatedAt:t.timestamp});}if(t.kind==="edge.declared"&&t.edge){let c=a.get(t.runId),e=Number(t.attributes?.order);c.set(t.edge.id,{id:t.edge.id,fromBlockId:t.edge.fromBlockId,toBlockId:t.edge.toBlockId,kind:t.edge.kind,status:"planned",order:Number.isFinite(e)?e:c.size+1,updatedAt:t.timestamp});}(t.kind==="touch.observed"||t.kind==="touch.planned")&&(r.touches.push({locator:t.target?.locator??t.message,...t.target?.operation?{operation:t.target.operation}:{},at:t.timestamp}),r.touches=r.touches.slice(-20)),t.kind==="artifact.published"&&(r.artifacts.push({locator:t.target?.locator??t.message,at:t.timestamp}),r.artifacts=r.artifacts.slice(-20)),t.kind==="warning.detected"&&(r.warnings.push(t.message),r.warnings=r.warnings.slice(-20));}for(let[t,r]of i){r.blocks=[...o.get(t)?.values()??[]].sort((e,s)=>e.order-s.order||e.id.localeCompare(s.id));let c=o.get(t)??new Map;r.edges=[...a.get(t)?.values()??[]].map(e=>({...e,status:H(e,c,r.status),updatedAt:c.get(e.toBlockId)?.updatedAt??c.get(e.fromBlockId)?.updatedAt??e.updatedAt})).sort((e,s)=>e.order-s.order||e.id.localeCompare(s.id));}return {schemaVersion:T,generatedAt:new Date().toISOString(),scope:n.resolvedScope.scope,runs:[...i.values()].sort((t,r)=>r.updatedAt.localeCompare(t.updatedAt)),diagnostics:[...n.diagnostics??[]]}}function Z(n){let i=Math.max(0,Math.min(n.events.length,Math.floor(n.eventCount)));return b({resolvedScope:n.resolvedScope,events:n.events.slice(0,i),diagnostics:n.diagnostics})}function j(n){try{return process.kill(n,0),true}catch(i){return i.code==="EPERM"}}function V(n,i=j){return {...n,runs:n.runs.map(o=>{if(o.status!=="running"||!o.pid||i(o.pid))return o;let a=Date.parse(o.updatedAt),t=Date.parse(o.startedAt);return {...o,status:"cancelled",orphaned:true,durationMs:Number.isFinite(a)&&Number.isFinite(t)?Math.max(0,a-t):o.durationMs,blocks:o.blocks.map(r=>({...r,status:r.status==="running"?"cancelled":r.status==="planned"?"skipped":r.status,attempts:r.attempts.map((c,e,s)=>e===s.length-1&&c.status==="running"?{...c,status:"cancelled"}:c)})),edges:o.edges.map(r=>({...r,status:r.status==="running"?"cancelled":r.status==="planned"?"skipped":r.status}))}})}}function L(n){let i=[];try{i=g.readdirSync(n.stateHome,{withFileTypes:true}).filter(e=>e.isDirectory()).flatMap(e=>{let s=y.join(n.stateHome,e.name,"runs");try{return [{path:s,mtimeMs:g.statSync(s).mtimeMs}]}catch{return []}}).sort((e,s)=>s.mtimeMs-e.mtimeMs).slice(0,Math.min(200,Math.max(16,n.maxScopes*4)));}catch(e){e.code!=="ENOENT"&&n.diagnostics.push(e instanceof Error?e.message:String(e));}let o=i.flatMap(e=>{try{return g.readdirSync(e.path,{withFileTypes:true}).filter(s=>s.isFile()&&s.name.endsWith(".ndjson")&&(!n.runId||s.name===`${n.runId}.ndjson`)).map(s=>{let p=y.join(e.path,s.name);return {filePath:p,mtimeMs:g.statSync(p).mtimeMs}})}catch{return []}}).sort((e,s)=>s.mtimeMs-e.mtimeMs).slice(0,Math.max(n.maxRuns*4,n.maxScopes*2)),a=new Map;for(let e of o)for(let s of x(e.filePath,n.diagnostics))a.has(s.eventId)||a.set(s.eventId,s);let t=[...a.values()].sort((e,s)=>e.timestamp.localeCompare(s.timestamp)||e.sequence-s.sequence),r=[...new Set([...t].reverse().map(e=>e.runId))].slice(0,n.maxRuns),c=new Set(r);return t.filter(e=>c.has(e.runId))}function tt(n={}){let i=[],o=Math.max(1,Math.min(100,n.maxRuns??12)),a=Math.max(1,Math.min(50,n.maxScopes??12)),t=L({stateHome:d(n.env),runId:n.runId,maxRuns:o,maxScopes:a,diagnostics:i}),r=Math.max(100,Math.min(5e5,n.maxEvents??5e4));t=t.slice(-r);let c=new Map;for(let s of t){let p=c.get(s.scope.id)??{scope:s.scope,events:[]};p.events.push(s),c.set(s.scope.id,p);}let e=[...c.values()].map(s=>V(b({resolvedScope:{scope:s.scope},events:s.events}))).sort((s,p)=>(p.runs[0]?.updatedAt??"").localeCompare(s.runs[0]?.updatedAt??"")||s.scope.label.localeCompare(p.scope.label)).slice(0,a);return {schemaVersion:N,generatedAt:new Date().toISOString(),scopes:e,diagnostics:i}}function et(n={}){let i=P(n);return V(b({resolvedScope:i.resolvedScope,events:i.events,diagnostics:i.diagnostics}))}function nt(n={}){let i$1=e(n.targetPath??process.cwd(),{env:n.env}),o=y.join(i$1.statePath,"runs");return i(o,{maxRuns:n.maxRuns,maxAgeDays:n.maxAgeDays})}var $=new Set(["planned","running"]),F="workspace-activity-board.v1";function J(n){return $.has(n)}function D(n){return n.command.length>0?`workspai ${n.command.join(" ")}`:`run ${n.runId.slice(0,8)}`}function Y(n){return n.slice(1).map((i,o)=>{let a=n[o];return {id:`inferred:${a.id}->${i.id}`,fromBlockId:a.id,toBlockId:i.id,kind:i.layoutHint==="gate"?"gate":i.layoutHint==="sink"?"handoff":"sequence",status:K(a.status,i.status),order:o+1,updatedAt:i.updatedAt,inferred:true}})}function K(n,i){return i!=="planned"?i:n==="succeeded"||n==="warned"?"running":n==="failed"||n==="blocked"||n==="cancelled"?n:"planned"}function q(n,i,o){let a=[...n.blocks].sort((e,s)=>e.order-s.order||e.id.localeCompare(s.id)),t=a.some(e=>e.parentId),r=a.filter(e=>!t||!!e.parentId).map(e=>({...e,root:!e.parentId})),c=n.edges.length>0?n.edges.map(e=>({...e,inferred:false})):Y(r);return {run:n,commandLabel:D(n),active:n.status==="running",nodes:r,edges:c,activeBlockCount:r.filter(e=>e.status==="running").length,warningCount:n.warnings.length+r.filter(e=>e.status==="warned").length,scope:i,locationLabel:n.origin&&(n.origin.label!==i.label||o.originLabel!==n.origin.label)?`${o.scopeLabel}/${o.originLabel}`:o.scopeLabel}}function rt(n,i={}){let o=Math.max(1,i.maxRuns??6),a=n.schemaVersion==="workspace-activity-monitor-fleet.v1",t=a?n.scopes:[n],r=new Map,c=new Map;for(let d of t){let u=r.get(d.scope.label)??new Set;u.add(d.scope.id),r.set(d.scope.label,u);for(let l of d.runs){if(!l.origin)continue;let m=`${d.scope.id}\0${l.origin.label}`,v=c.get(m)??new Set;v.add(l.origin.id),c.set(m,v);}}let e=t.flatMap(d=>d.runs.map(u=>{let l=(r.get(d.scope.label)?.size??0)>1?`${d.scope.label}#${d.scope.id.slice(-4)}`:d.scope.label,m=u.origin?`${d.scope.id}\0${u.origin.label}`:void 0,v=u.origin?(c.get(m??"")?.size??0)>1?`${u.origin.label}#${u.origin.id.slice(-4)}`:u.origin.label:void 0;return q(u,d.scope,{scopeLabel:l,originLabel:v})})).sort((d,u)=>d.active!==u.active?d.active?-1:1:u.run.updatedAt.localeCompare(d.run.updatedAt)),s=(i.activeOnly?e.filter(d=>d.active):e).slice(0,o),p=s.find(d=>d.run.runId===i.selectedRunId)?.run.runId??s.find(d=>d.active)?.run.runId??s[0]?.run.runId;return {schemaVersion:F,scopeLabel:a?"Global activity":t[0]?.scope.label??"activity",generatedAt:n.generatedAt,activeRunCount:e.filter(d=>d.active).length,healthyRunCount:e.filter(d=>d.run.status==="succeeded").length,warningRunCount:e.filter(d=>d.run.status==="warned"||d.warningCount>0).length,failedRunCount:e.filter(d=>d.run.status==="failed").length,...p?{selectedRunId:p}:{},runs:s,diagnostics:a?[...n.diagnostics,...t.flatMap(d=>d.diagnostics)]:n.diagnostics,global:a,scopeCount:t.length}}function ot(n,i,o){return n.edges.find(a=>a.fromBlockId===i&&a.toBlockId===o)}function at(n){return n.runs.map(i=>i.run.runId)}function ct(n){return n.runs.some(i=>i.active||i.nodes.some(o=>J(o.status))||i.edges.some(o=>o.status==="running"))}export{T as a,N as b,P as c,Z as d,tt as e,et as f,nt as g,F as h,rt as i,ot as j,at as k,ct as l};
|