workspai 0.51.0 → 0.52.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 +1 -0
- package/contracts/artifact-remediation-plan.v1.json +87 -0
- package/contracts/cli-runtime-command-inventory.v1.snapshot.json +24 -0
- package/contracts/doctor-project-evidence.v1.json +46 -0
- package/contracts/doctor-remediation-plan.v1.json +82 -0
- package/contracts/doctor-workspace-evidence.v1.json +46 -0
- package/contracts/extension-cli-compatibility.v1.json +6 -2
- package/contracts/published-contract-catalog.v1.json +22 -1
- package/contracts/runtime-command-surface.v1.json +104 -0
- package/contracts/workspace-intelligence/doctor-dependency-repair-transaction.v1.json +66 -0
- package/contracts/workspace-intelligence/studio-blocker-handoff.v1.json +5 -0
- package/contracts/workspace-intelligence/verified-goal-status.v1.json +27 -0
- package/contracts/workspace-intelligence/verified-goal.v1.json +163 -0
- package/contracts/workspace-intelligence-chain.v1.json +6 -0
- package/dist/analyze-J7VNZMDH.js +1 -0
- package/dist/artifact-remediation-plan-2UKY4TKO.js +3 -0
- package/dist/autopilot-release-UG23AWVH.js +1 -0
- package/dist/chunk-27UR373Z.js +1 -0
- package/dist/chunk-2PY65U6X.js +5 -0
- package/dist/{chunk-DQ3PI7EP.js → chunk-3D3PFPP5.js} +1 -1
- package/dist/chunk-4D7DIGAB.js +1 -0
- package/dist/{chunk-IND3TUVU.js → chunk-4UVGTFOX.js} +1 -1
- package/dist/{chunk-U2QL5733.js → chunk-5XJRCP3D.js} +24 -24
- package/dist/chunk-62K2H72S.js +1 -0
- package/dist/chunk-6AXRIAP2.js +86 -0
- package/dist/{chunk-TROHVI2V.js → chunk-6HJJHEL6.js} +1 -1
- package/dist/{chunk-BHYTI3RH.js → chunk-6PBSAAS5.js} +1 -1
- package/dist/{chunk-MVLIONQD.js → chunk-7MQZQ4UU.js} +1 -1
- package/dist/chunk-7RLGOEWV.js +1 -0
- package/dist/chunk-B4CPDK6J.js +2 -0
- package/dist/{chunk-SHXJ2GDR.js → chunk-DZ4VKAXB.js} +1 -1
- package/dist/{chunk-FKWB66NQ.js → chunk-F4KBYFZ5.js} +1 -1
- package/dist/{chunk-Q6TKQVKQ.js → chunk-FRJYAJH6.js} +1 -1
- package/dist/chunk-FUPHQOJB.js +1 -0
- package/dist/{chunk-BG4FWJJ3.js → chunk-GHB6QMQH.js} +1 -1
- package/dist/chunk-GR6442P7.js +1 -0
- package/dist/{chunk-DLM6C7FU.js → chunk-HPWLSLMC.js} +1 -1
- package/dist/{chunk-HMGPELXS.js → chunk-ICLYL3N5.js} +1 -1
- package/dist/{chunk-MAF3LLGK.js → chunk-IO54DFWR.js} +1 -1
- package/dist/{chunk-FZ76CF2W.js → chunk-KHEJO3JU.js} +1 -1
- package/dist/{chunk-U2LR73E2.js → chunk-LOCPNNSK.js} +1 -1
- package/dist/{chunk-EPVFKJF4.js → chunk-LPCL4U4L.js} +1 -1
- package/dist/{chunk-4WJC5QCD.js → chunk-M5ICGR55.js} +1 -1
- package/dist/{chunk-XBM2P45G.js → chunk-MBRU3VWJ.js} +1 -1
- package/dist/{chunk-VCW5HSPC.js → chunk-MZFSINY7.js} +3 -3
- package/dist/{chunk-E3CT7TYT.js → chunk-OTDGTAZJ.js} +1 -1
- package/dist/chunk-P4OSLAVD.js +3 -0
- package/dist/{chunk-GBAO4GSW.js → chunk-PTTZPDLX.js} +1 -1
- package/dist/chunk-Q6CUJ3WF.js +10 -0
- package/dist/{chunk-6HLPTJZ3.js → chunk-QURMI7ID.js} +1 -1
- package/dist/{chunk-RVQLMTTI.js → chunk-ULR66OJR.js} +1 -1
- package/dist/{chunk-HSZCINFX.js → chunk-WJY7ZXVJ.js} +1 -1
- package/dist/{chunk-VU2BKKMB.js → chunk-XHRHNVCZ.js} +1 -1
- package/dist/chunk-ZTKIBREF.js +1 -0
- package/dist/{chunk-HE4PUMU4.js → chunk-ZVOEPWQM.js} +1 -1
- package/dist/{create-SBFBFXKN.js → create-ESK3CQPK.js} +1 -1
- package/dist/{doctor-OPCMTBJB.js → doctor-DLEBZSF7.js} +1 -1
- package/dist/index.d.ts +26 -11
- package/dist/index.js +240 -240
- package/dist/{pipeline-7BUXAFS2.js → pipeline-NT6AYYWM.js} +1 -1
- package/dist/{project-intelligence-lens-BKKVPCLC.js → project-intelligence-lens-Q4SZDI2N.js} +1 -1
- package/dist/project-test-coverage-A677ZLW3.js +1 -0
- package/dist/verified-goal-MJNZROS5.js +1 -0
- package/dist/{workspace-U6ZQLELX.js → workspace-LSOZM2CG.js} +1 -1
- package/dist/{workspace-agent-sync-L4SY7B4Q.js → workspace-agent-sync-RZBQXCNJ.js} +1 -1
- package/dist/{workspace-archive-4JNT4S7N.js → workspace-archive-ZOWQXWJ6.js} +1 -1
- package/dist/{workspace-context-KOBSLZTI.js → workspace-context-IYJKO5BN.js} +1 -1
- package/dist/{workspace-contract-SOD3OOVF.js → workspace-contract-AZFISDLS.js} +1 -1
- package/dist/workspace-explain-26UGV7L4.js +1 -0
- package/dist/workspace-explain-contract-GIWPCCEF.js +1 -0
- package/dist/{workspace-feedback-ZZ4HPW2T.js → workspace-feedback-LIHEWTNV.js} +1 -1
- package/dist/{workspace-foundation-PUIYBQUF.js → workspace-foundation-H5UTAUXQ.js} +1 -1
- package/dist/{workspace-graph-stream-BLKIC7VN.js → workspace-graph-stream-KUDOZE73.js} +1 -1
- package/dist/{workspace-history-SPKNRHIX.js → workspace-history-HULG5EFN.js} +1 -1
- package/dist/{workspace-intelligence-I3ABOH2F.js → workspace-intelligence-A4UE4DZK.js} +1 -1
- package/dist/{workspace-intelligence-evaluation-7CABG5Y6.js → workspace-intelligence-evaluation-AOLGHYHC.js} +1 -1
- package/dist/workspace-intelligence-runner-42QI5RYA.js +1 -0
- package/dist/{workspace-intelligence-runtime-registry-ZZ3GRAL2.js → workspace-intelligence-runtime-registry-YOQ5GFFJ.js} +1 -1
- package/dist/{workspace-knowledge-graph-5MKEI4Z5.js → workspace-knowledge-graph-LEM6X5CM.js} +1 -1
- package/dist/{workspace-mcp-serve-ETNUA72W.js → workspace-mcp-serve-N2QPR7VJ.js} +1 -1
- package/dist/{workspace-model-HHA37SNH.js → workspace-model-FJXX3NET.js} +1 -1
- package/dist/{workspace-onboarding-ELHZABJE.js → workspace-onboarding-IKFISWWY.js} +1 -1
- package/dist/{workspace-readme-HGGZ4AZB.js → workspace-readme-E2M35RJH.js} +1 -1
- package/dist/{workspace-registry-summary-D2QM5JF6.js → workspace-registry-summary-HOQ3OBNT.js} +1 -1
- package/dist/workspace-run-GOZTUGJS.js +1 -0
- package/dist/{workspace-verify-4WJTLXRA.js → workspace-verify-32AWCJQG.js} +1 -1
- package/dist/workspace-watch-4WVNB26E.js +1 -0
- package/docs/README.md +1 -0
- package/docs/ci-workflows.md +40 -11
- package/docs/commands-reference.md +12 -0
- package/docs/doctor-command.md +16 -0
- package/docs/workspace-intelligence-runner.md +48 -0
- package/package.json +4 -2
- package/dist/analyze-4H33PAUB.js +0 -1
- package/dist/artifact-remediation-plan-TQ6KTTXD.js +0 -3
- package/dist/autopilot-release-BHZYM5KX.js +0 -1
- package/dist/chunk-2D4UOYOJ.js +0 -1
- package/dist/chunk-3D2PAIRH.js +0 -3
- package/dist/chunk-AHLMIL2T.js +0 -1
- package/dist/chunk-BBGNDMRU.js +0 -2
- package/dist/chunk-BYTFXQ6G.js +0 -1
- package/dist/chunk-GQRWRHSR.js +0 -86
- package/dist/chunk-L2E2Z4OE.js +0 -5
- package/dist/chunk-TDTCMZK7.js +0 -10
- package/dist/project-test-coverage-BALEHHTT.js +0 -1
- package/dist/workspace-explain-2CTMW2YW.js +0 -1
- package/dist/workspace-explain-contract-H7O26QJU.js +0 -1
- package/dist/workspace-intelligence-runner-Q2XSR3ZL.js +0 -1
- package/dist/workspace-run-DAAZBCN7.js +0 -1
- package/dist/workspace-watch-2PIFTQ6B.js +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export{b as AUTOPILOT_RELEASE_ALIAS_FILENAME,a as AUTOPILOT_RELEASE_LAST_RUN_FILENAME,c as runAutopilotRelease}from'./chunk-Q6TKQVKQ.js';
|
package/dist/chunk-2D4UOYOJ.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import {j as j$1,a,b as b$1,t}from'./chunk-MOSXTVPU.js';import {promises}from'fs';import c from'path';var j=new Set(["node_modules","dist","build","target","coverage","htmlcov",".workspai",".rapidkit",".venv"]);function b(e,r){if(r.has(e))return true;let i=e.toLowerCase();return !!(i==="dist"||i.startsWith("dist-")||i.startsWith("dist_")||i==="build"||i.startsWith("build-")||i.startsWith("build_"))}async function p(e){try{return await promises.access(e),true}catch{return false}}async function v(e){for(let r of t(e,"context.json"))if(await p(r))return true;for(let r of t(e,"project.json"))if(await p(r))return true;return false}async function _(e,r){let i=[],o=[c.resolve(e)],d=new Set,m=r?.skipDirs??j,P=r?.includeHiddenDirs===true,g=r?.descendIntoMatchedProjects!==false,y=r?.isProjectDir??v,u=c.resolve(e);for(;o.length>0;){let t=o.shift();if(!t||d.has(t)||(d.add(t),t!==u&&j$1(t))||await y(t,u)&&(i.push(t),!g))continue;let n=[];try{n=await promises.readdir(t,{withFileTypes:true});}catch{continue}for(let s of n)s.isDirectory()&&(!P&&s.name.startsWith(".")||b(s.name,m)||s.name===a||s.name===b$1||o.push(c.join(t,s.name)));}return i.sort((t,n)=>t.localeCompare(n))}export{_ as a};
|
package/dist/chunk-3D2PAIRH.js
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import {l}from'./chunk-BYTFXQ6G.js';import {d,c}from'./chunk-EWZZUQBR.js';import {b as b$1,a}from'./chunk-AHLMIL2T.js';import h from'path';import {createHash}from'crypto';import $ from'fs-extra';import {parseAllDocuments}from'yaml';var U=b$1.knowledgeGraph;var Ye=a.knowledgeGraph;function Qe(e,t){if(e.source.kind!=="workspace-model")throw new Error(`Workspace knowledge graph is not bound to the canonical workspace model (source: ${e.source.kind}).`);if(e.source.artifact!==a.model)throw new Error(`Workspace knowledge graph source artifact is ${e.source.artifact}; expected ${a.model}.`);if(e.source.hashAlgorithm!=="sha256")throw new Error(`Workspace knowledge graph source hash algorithm is ${e.source.hashAlgorithm}; expected sha256.`);let o=d(t);if(e.source.hash!==o)throw new Error("Workspace knowledge graph is stale: its source hash does not match the canonical workspace model.");if(e.workspace.name!==t.workspace.name||(e.workspace.profile??void 0)!==(t.workspace.profile??void 0))throw new Error("Workspace knowledge graph identity does not match the canonical workspace model.");let i=l(t);if(!i)throw new Error("Canonical workspace model has no project topology for the workspace knowledge graph.");let r=d=>({...d,generatedAt:"<ignored>"});if(c(r(e.projectTopology))!==c(r(i)))throw new Error("Workspace knowledge graph project topology does not match the canonical workspace model.")}var ue=new Set([".git",".hg",".svn",".workspai",".rapidkit",".venv","venv","vendor","node_modules","dist","build","target","coverage",".next",".turbo",".cache"]),V=new Set(["package.json","pyproject.toml","requirements.txt","Pipfile","go.mod","Cargo.toml","pom.xml","build.gradle","build.gradle.kts","composer.json","Gemfile","mix.exs","pubspec.yaml","Package.swift","CMakeLists.txt","deno.json","deno.jsonc","project.clj","deps.edn","build.sbt","BUILD","BUILD.bazel","WORKSPACE.bazel"]),me=new Set(["get","put","post","delete","options","head","patch","trace"]),L=new Set([".c",".cc",".cpp",".cs",".dart",".ex",".exs",".go",".h",".hpp",".java",".js",".jsx",".kt",".kts",".mjs",".php",".py",".r",".rb",".rs",".scala",".svelte",".swift",".ts",".tsx",".vue",".clj",".cljs",".fs",".fsx",".lua",".vb"]);function F(e){let t=h.extname(e).toLowerCase();return {".c":"c",".cc":"cpp",".cpp":"cpp",".cs":"csharp",".dart":"dart",".ex":"elixir",".exs":"elixir",".go":"go",".h":"c",".hpp":"cpp",".java":"java",".js":"javascript",".jsx":"javascript",".kt":"kotlin",".kts":"kotlin",".mjs":"javascript",".php":"php",".py":"python",".r":"r",".rb":"ruby",".rs":"rust",".scala":"scala",".svelte":"svelte",".swift":"swift",".ts":"typescript",".tsx":"typescript",".vue":"vue",".clj":"clojure",".cljs":"clojure",".fs":"fsharp",".fsx":"fsharp",".lua":"lua",".vb":"visual-basic"}[t]??t.slice(1)}function B(e,t,o){let i=[],r=e.split(/\r?\n/);for(let d=0;d<r.length&&i.length<o;d+=1)for(let s of t){let a=r[d].match(s.pattern)?.[1]?.trim();if(a){i.push({name:a,line:d+1,detail:s.detail});break}}return i}var ge=[{pattern:/^\s*(?:export\s+)?(?:async\s+)?function\s+([A-Za-z_$][\w$]*)/,detail:"function"},{pattern:/^\s*(?:export\s+)?(?:abstract\s+)?(?:class|interface|enum|type)\s+([A-Za-z_$][\w$]*)/,detail:"type"},{pattern:/^\s*(?:async\s+)?def\s+([A-Za-z_]\w*)/,detail:"function"},{pattern:/^\s*class\s+([A-Za-z_]\w*)/,detail:"type"},{pattern:/^\s*func\s+(?:\([^)]*\)\s*)?([A-Za-z_]\w*)/,detail:"function"},{pattern:/^\s*(?:public\s+|private\s+|protected\s+|internal\s+|abstract\s+|final\s+)*(?:class|interface|record|enum)\s+([A-Za-z_]\w*)/,detail:"type"},{pattern:/^\s*(?:pub\s+)?fn\s+([A-Za-z_]\w*)/,detail:"function"},{pattern:/^\s*(?:pub\s+)?(?:struct|trait|enum)\s+([A-Za-z_]\w*)/,detail:"type"},{pattern:/^\s*(?:public\s+|private\s+|protected\s+)?function\s+([A-Za-z_]\w*)/,detail:"function"},{pattern:/^\s*(?:class|module|struct|protocol|mixin)\s+([A-Za-z_]\w*)/,detail:"type"}],he=[{pattern:/^\s*import(?:.+?from\s*)?["']([^"']+)["']/,detail:"import"},{pattern:/require\(["']([^"']+)["']\)/,detail:"require"},{pattern:/^\s*from\s+([A-Za-z0-9_.]+)\s+import\s+/,detail:"import"},{pattern:/^\s*import\s+([A-Za-z0-9_.]+)(?:\s|$)/,detail:"import"},{pattern:/^\s*(?:import|using|use)\s+([A-Za-z0-9_:.*\\/.-]+)/,detail:"import"},{pattern:/^\s*require(?:_relative)?\s+["']([^"']+)["']/,detail:"require"}];function ke(e,t,o){if(!t.startsWith("."))return null;let i=h.resolve(h.dirname(e),t),r=h.extname(i).toLowerCase(),d=L.has(r),s=new Set([i]);if(d){let n=i.slice(0,-r.length);if([".js",".jsx",".mjs"].includes(r))for(let a of [".ts",".tsx",".js",".jsx",".mjs"])s.add(`${n}${a}`);}else for(let n of L)s.add(`${i}${n}`),s.add(h.join(i,`index${n}`));return [...s].find(n=>o.has(h.resolve(n)))??null}var ye=[{pattern:/@(?:Get|Post|Put|Delete|Patch|Options|Head)\s*\(\s*["']([^"']*)["']/i,detail:"decorated route"},{pattern:/\b(?:app|router|server|api|route|fastify|fiber)\.(?:get|post|put|delete|patch|options|head)\s*\(\s*["']([^"']+)["']/i,detail:"router route"},{pattern:/@(?:GetMapping|PostMapping|PutMapping|DeleteMapping|PatchMapping|RequestMapping)\s*\([^"']*["']([^"']*)["']/,detail:"mapped route"},{pattern:/\[Http(?:Get|Post|Put|Delete|Patch)\s*\(\s*["']([^"']*)["']/i,detail:"HTTP route"},{pattern:/^\s*(?:get|post|put|delete|patch)\s+["']([^"']+)["']/i,detail:"HTTP route"}];function z(e){return createHash("sha256").update(e).digest("hex")}function w(e,t){return `wkg:${e}:${z(`${e}\0${t}`).slice(0,20)}`}function K(e){return e.replace(/\\/g,"/")}function N(e){let t=K(e).replace(/^\.\//,"");return !t||t.startsWith("/")||/^[A-Za-z]:\//.test(t)?"unknown":t}function b(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function j(e){return typeof e=="string"&&e.trim()?e.trim():void 0}function E(e){if(Array.isArray(e))return e.filter(o=>typeof o=="string").sort();let t=b(e);return t?Object.keys(t).sort():[]}function ve(e){if(Array.isArray(e))return e.map(o=>typeof o=="string"?o.split("=",1)[0]?.trim():"").filter(o=>!!o).sort();let t=b(e);return t?Object.keys(t).sort():[]}function we(e){return Object.fromEntries(Object.entries(e).filter(t=>t[1]!==void 0).sort(([t],[o])=>t.localeCompare(o)))}async function x(e,t){let o=[],i=[e],r=0;for(;r<i.length&&o.length<t;){let d=i[r++],s;try{s=await $.readdir(d,{withFileTypes:true});}catch{continue}s.sort((n,a)=>n.name.localeCompare(a.name));for(let n of s){if(o.length>=t)break;if(n.isSymbolicLink())continue;let a=h.join(d,n.name);n.isDirectory()?ue.has(n.name)||i.push(a):n.isFile()&&o.push(a);}}return o.sort((d,s)=>d.localeCompare(s))}async function A(e){let t=await $.readFile(e,"utf8");if(e.toLowerCase().endsWith(".json")){let o=JSON.parse(t),i=b(o);return i?[i]:[]}return parseAllDocuments(t,{logLevel:"silent"}).map(o=>b(o.toJSON())).filter(o=>o!==null)}function G(e){return [...new Set([...e.workspaceFiles,...e.projects.flatMap(t=>e.filesByProject.get(t.id)??[])])].sort((t,o)=>t.localeCompare(o))}function Y(e){return /^(?:openapi|swagger)(?:\.[^.]+)?\.(?:json|ya?ml)$/i.test(h.basename(e))}function Q(e){let t=h.basename(e).toLowerCase();return /\.(?:graphql|gql|proto)$/.test(t)||/^asyncapi(?:\.[^.]+)?\.(?:json|ya?ml)$/.test(t)}function X(e){let t=h.basename(e);return /^Dockerfile(?:\..+)?$/i.test(t)||/\.tf$/i.test(t)||t==="Chart.yaml"}function ee(e){return /(?:^|[\\/])(?:README|ARCHITECTURE|CONTRIBUTING|SECURITY)\.md$/i.test(e)}function be(e,t){let o=K(h.relative(e,t));return /^\.github\/workflows\/.+\.ya?ml$/i.test(o)||/^(?:\.gitlab-ci\.ya?ml|azure-pipelines\.ya?ml|Jenkinsfile|bitbucket-pipelines\.ya?ml|\.woodpecker\.ya?ml)$/i.test(o)||/^\.circleci\/config\.ya?ml$/i.test(o)}function te(e,t){let o=K(h.relative(e,t));return /(?:^|\/)(?:adr|adrs|decisions)(?:\/).+\.md$/i.test(o)||/(?:^|\/)ADR[-_0-9].+\.md$/i.test(o)}async function oe(e){let t=new Set;for(let o of [e.workspacePath,...e.projects.map(i=>i.root)])for(let i of ["compose.yml","compose.yaml","docker-compose.yml","docker-compose.yaml"]){let r=h.join(o,i);await $.pathExists(r)&&t.add(r);}return [...t].sort((o,i)=>o.localeCompare(i))}async function re(e){let o=[e.workspacePath,...e.projects.map(r=>r.root)].flatMap(r=>[h.join(r,"CODEOWNERS"),h.join(r,".github","CODEOWNERS"),h.join(r,"docs","CODEOWNERS")]),i=await Promise.all(o.map(async r=>await $.pathExists(r)?r:null));return [...new Set(i.filter(r=>!!r))].sort((r,d)=>r.localeCompare(d))}function se(e){let t=[{root:e.workspacePath,files:e.workspaceFiles},...e.projects.map(o=>({root:o.root,files:e.filesByProject.get(o.id)??[]}))];return [...new Set(t.flatMap(o=>o.files.filter(i=>be(o.root,i))))].sort((o,i)=>o.localeCompare(i))}async function ie(e){let t=[];for(let o of G(e))if(/\.ya?ml$/i.test(o))try{(await A(o)).some(r=>{let d=b(r.metadata);return !!(j(r.apiVersion)&&j(r.kind)&&j(d?.name))})&&t.push(o);}catch{}return t.sort((o,i)=>o.localeCompare(i))}function C(e,t){let o=h.resolve(t);return e.filter(i=>o===i.root||o.startsWith(`${i.root}${h.sep}`)).sort((i,r)=>r.root.length-i.root.length)[0]??null}var q=class{constructor(t,o,i){this.workspacePath=t;this.now=o;this.workspaceName=i;}workspacePath;now;workspaceName;entities=new Map;relations=new Map;proofs=new Map;providers=[];diagnostics=[];contentHashes=new Map;attributeConflicts=new Set;artifactPath(t,o){if(o){let i=K(h.relative(o.root,t));return N(h.posix.join(o.artifactPrefix,i))}return N(h.relative(this.workspacePath,t))}async addProof(t){let o;if(t.absolutePath){if(!this.contentHashes.has(t.absolutePath))try{this.contentHashes.set(t.absolutePath,z(await $.readFile(t.absolutePath)));}catch{this.contentHashes.set(t.absolutePath,null);}o=this.contentHashes.get(t.absolutePath)??void 0;}let i=N(t.artifact),r=w("proof",[t.provider,i,t.pointer??"",t.line??"",t.detail??""].join("\0"));return this.proofs.has(r)||this.proofs.set(r,{id:r,provider:t.provider,artifact:i,...t.pointer?{pointer:t.pointer}:{},...t.line?{line:t.line}:{},...t.column?{column:t.column}:{},...o?{contentHash:o}:{},observedAt:this.now.toISOString(),derivation:t.derivation??"extracted",trust:t.trust??"observed",confidence:t.confidence??"high",freshness:"fresh",...t.detail?{detail:t.detail}:{}}),r}addEntity(t){let o=w(t.kind,t.key),i=we(t.attributes??{}),r=this.entities.get(o),d={...r?.attributes??{}};for(let[a,f]of Object.entries(i)){if(a in d&&JSON.stringify(d[a])!==JSON.stringify(f)){let c=`${o}\0${a}`;this.attributeConflicts.has(c)||(this.attributeConflicts.add(c),this.diagnostics.push({code:"graph.knowledge.attribute_conflict",severity:"warning",message:`Conflicting ${a} values were observed for ${t.kind} ${t.label}.`,entityIds:[o],recommendation:"Inspect the entity proof paths and make the authoritative source explicit."}));continue}d[a]=f;}let s=[...new Set([...r?.identity.aliases??[],...t.aliases??[]])].sort(),n=[...new Set([...r?.proofIds??[],...t.proofIds??[]])].sort();return this.entities.set(o,{id:o,kind:t.kind,label:t.label,...t.projectId?{projectId:t.projectId}:{},identity:{key:t.key,scope:t.projectId?"project":"workspace",aliases:s,fingerprint:z(JSON.stringify({kind:t.kind,key:t.key,attributes:d}))},attributes:d,proofIds:n}),o}addRelation(t){let o=w("relation",`${t.from}\0${t.kind}\0${t.to}`),i=this.relations.get(o),r=[...new Set([...i?.proofIds??[],...t.proofIds])].sort(),d=new Set(r.map(a=>this.proofs.get(a)?.provider).filter(Boolean)).size,s=t.trust??i?.trust??"observed",n=d>=2&&s!=="ambiguous"?"corroborated":s;return this.relations.set(o,{id:o,from:t.from,to:t.to,kind:t.kind,derivation:t.derivation??i?.derivation??"extracted",trust:n,confidence:n==="corroborated"?"high":t.confidence??i?.confidence??"high",proofIds:r}),o}};function Pe(e,t){let o=h.basename(e);try{if(o==="package.json"||o==="composer.json"){let s=JSON.parse(t);return {ecosystem:o==="package.json"?"npm":"composer",name:j(s.name),version:j(s.version),dependencies:[...E(s.dependencies),...E(s.devDependencies),...E(s.require),...E(s["require-dev"])].filter((n,a,f)=>f.indexOf(n)===a).sort()}}if(o==="deno.json"||o==="deno.jsonc"){let s=JSON.parse(t.replace(/\/\*[\s\S]*?\*\/|^\s*\/\/.*$/gm,""));return {ecosystem:"deno",name:j(s.name),version:j(s.version),dependencies:E(s.imports)}}}catch{}let i=s=>t.match(s)?.[1]?.trim();if(o==="pyproject.toml"){let s=t.match(/^dependencies\s*=\s*\[([\s\S]*?)\]/m)?.[1]??"";return {ecosystem:"python",name:i(/^(?:name)\s*=\s*["']([^"']+)["']/m),version:i(/^(?:version)\s*=\s*["']([^"']+)["']/m),dependencies:[...[...s.matchAll(/["']([A-Za-z0-9_.-]+)/g)].map(n=>n[1]),...[...t.matchAll(/^([A-Za-z0-9_.-]+)\s*=\s*(?:["'{[])/gm)].map(n=>n[1]).filter(n=>!["name","version","description","python","dependencies"].includes(n))].filter((n,a,f)=>f.indexOf(n)===a).sort()}}if(o==="go.mod")return {ecosystem:"go",name:i(/^module\s+(\S+)/m),dependencies:[...t.matchAll(/^\s*([A-Za-z0-9_.~/-]+)\s+v\d+/gm)].map(s=>s[1]).sort()};if(o==="Cargo.toml"){let s=t.match(/^\[dependencies\]\s*$([\s\S]*?)(?=^\[|\s*$)/m)?.[1]??"";return {ecosystem:"cargo",name:i(/^name\s*=\s*["']([^"']+)["']/m),version:i(/^version\s*=\s*["']([^"']+)["']/m),dependencies:[...s.matchAll(/^([A-Za-z0-9_.-]+)\s*=/gm)].map(n=>n[1]).sort()}}if(o==="pom.xml")return {ecosystem:"maven",name:i(/<artifactId>([^<]+)<\/artifactId>/),version:i(/<version>([^<]+)<\/version>/),dependencies:[...t.matchAll(/<artifactId>([^<]+)<\/artifactId>/g)].slice(1).map(s=>s[1]).sort()};if(/\.(?:cs|fs|vb)proj$/i.test(o))return {ecosystem:"nuget",name:i(/<AssemblyName>([^<]+)<\/AssemblyName>/)??o.replace(/\.[^.]+$/,""),version:i(/<Version>([^<]+)<\/Version>/),dependencies:[...t.matchAll(/<PackageReference\s+Include=["']([^"']+)["']/g)].map(s=>s[1]).sort()};let r={"requirements.txt":"python",Pipfile:"python","build.gradle":"gradle","build.gradle.kts":"gradle",Gemfile:"ruby","mix.exs":"elixir","pubspec.yaml":"dart","Package.swift":"swift","CMakeLists.txt":"cmake","deno.json":"deno","deno.jsonc":"deno","project.clj":"clojure","deps.edn":"clojure","build.sbt":"scala",BUILD:"bazel","BUILD.bazel":"bazel","WORKSPACE.bazel":"bazel"},d=o==="requirements.txt"?t.split(/\r?\n/).map(s=>s.trim().match(/^([A-Za-z0-9_.-]+)/)?.[1]):o.startsWith("build.gradle")?[...t.matchAll(/(?:implementation|api|compileOnly|runtimeOnly|testImplementation)\s*\(?["']([^:"']+):([^:"']+)/g)].map(s=>`${s[1]}:${s[2]}`):o==="Gemfile"?[...t.matchAll(/^\s*gem\s+["']([^"']+)["']/gm)].map(s=>s[1]):o==="mix.exs"?[...t.matchAll(/\{:\s*([A-Za-z0-9_]+)\s*,/g)].map(s=>s[1]):o==="pubspec.yaml"?[...t.matchAll(/^\s{2}([A-Za-z0-9_]+):\s+/gm)].map(s=>s[1]):o==="Package.swift"?[...t.matchAll(/\.package\s*\(\s*url:\s*["']([^"']+)["']/g)].map(s=>s[1]):o==="CMakeLists.txt"?[...t.matchAll(/find_package\s*\(\s*([A-Za-z0-9_.+-]+)/gi)].map(s=>s[1]):o==="project.clj"||o==="deps.edn"?[...t.matchAll(/\[?([A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+)\s+/g)].map(s=>s[1]):o==="build.sbt"?[...t.matchAll(/["']([^"']+)["']\s*%%?\s*["']([^"']+)["']/g)].map(s=>`${s[1]}:${s[2]}`):[];return {ecosystem:r[o]??"unknown",dependencies:d.filter(s=>!!s).filter((s,n,a)=>a.indexOf(s)===n).sort()}}var je={id:"workspace-foundation",version:"1.0.0",async run(e){let{state:t}=e,o=await t.addProof({provider:this.id,artifact:".workspai/workspace.contract.json",absolutePath:h.join(e.workspacePath,".workspai","workspace.contract.json"),trust:"authoritative",derivation:"authored",detail:"Workspace identity and project registry boundary"}),i=t.addEntity({kind:"workspace",key:`workspace:${t.workspaceName}`,label:t.workspaceName,aliases:[t.workspaceName],proofIds:[o]});for(let r of e.projects){let d=e.filesByProject.get(r.id)??[],s=d.find(g=>/[\\/]\.(?:workspai|rapidkit)[\\/](?:project|context)\.json$/.test(g)),n=d.find(g=>V.has(h.basename(g))),a=s??n,f=await t.addProof({provider:this.id,artifact:a?t.artifactPath(a,r):N(h.posix.join(r.artifactPrefix,".workspai/project.json")),...a?{absolutePath:a}:{},trust:s?"authoritative":"observed",derivation:s?"authored":"inferred",detail:`Project ${r.id}`}),c=t.addEntity({kind:"project",key:`project:${r.id}`,label:r.id,projectId:r.id,aliases:[r.id,r.path],attributes:{path:r.path,runtime:r.runtime,runtimeCandidates:r.runtimeCandidates,framework:r.framework,kit:r.kit,kind:r.kind,category:r.category},proofIds:[f]});t.addRelation({from:i,to:c,kind:"contains",trust:"authoritative",derivation:"authored",proofIds:[f]});let m=new Set,l=[];for(let g of d){let u=h.basename(g);if(/^(?:\.env\.example|\.env\.sample|\.env\.template)$/i.test(u))try{let v=await $.readFile(g,"utf8");for(let k of v.split(/\r?\n/)){let P=k.match(/^\s*([A-Za-z_][A-Za-z0-9_]*)\s*=/)?.[1];P&&m.add(P);}}catch{}if((/(?:^|[\\/])(?:test|tests|spec|specs|__tests__)(?:[\\/]|$)/i.test(g)||/(?:\.test|\.spec|_test)\.[A-Za-z0-9]+$/i.test(u))&&l.push(g),!(!V.has(u)&&!/\.(?:cs|fs|vb)proj$/i.test(u)))try{let v=await $.readFile(g,"utf8"),k=Pe(g,v),P=await t.addProof({provider:this.id,artifact:t.artifactPath(g,r),absolutePath:g,pointer:"/",confidence:k.name?"high":"medium",detail:`${k.ecosystem} manifest`}),I=t.addEntity({kind:"package",key:`package:${r.id}:${k.ecosystem}:${k.name??u}`,label:k.name??`${r.id}/${u}`,projectId:r.id,aliases:[u,...k.name?[k.name]:[]],attributes:{ecosystem:k.ecosystem,version:k.version,manifest:t.artifactPath(g,r),dependencies:k.dependencies},proofIds:[P]});t.addRelation({from:c,to:I,kind:"contains",proofIds:[P]});for(let p of k.dependencies.slice(0,500)){let y=t.addEntity({kind:"module",key:`dependency:${k.ecosystem}:${p}`,label:p,aliases:[p],attributes:{ecosystem:k.ecosystem,external:true},proofIds:[P]});t.addRelation({from:I,to:y,kind:"depends-on",trust:"authoritative",derivation:"authored",proofIds:[P]});}}catch{}}if(m.size>0){let g=d.find(u=>/^\.env\.(?:example|sample|template)$/i.test(h.basename(u)));if(g){let u=await t.addProof({provider:this.id,artifact:t.artifactPath(g,r),absolutePath:g,detail:"Public environment template keys only; values are intentionally excluded"}),v=t.addEntity({kind:"environment",key:`environment:${r.id}:template`,label:`${r.id} environment contract`,projectId:r.id,attributes:{keys:[...m].sort(),valuesEmitted:false},proofIds:[u]});t.addRelation({from:c,to:v,kind:"configured-by",proofIds:[u]});}}if(l.length>0){let g=await t.addProof({provider:this.id,artifact:t.artifactPath(l[0],r),absolutePath:l[0],detail:`${l.length} test file(s) discovered`}),u=t.addEntity({kind:"test-suite",key:`tests:${r.id}`,label:`${r.id} tests`,projectId:r.id,attributes:{fileCount:l.length},proofIds:[g]});t.addRelation({from:u,to:c,kind:"tests",proofIds:[g]});}}}},$e={id:"source-structure",version:"1.0.0",applicable(e){return e.projects.some(t=>(e.filesByProject.get(t.id)??[]).some(o=>L.has(h.extname(o).toLowerCase())))},async run(e){for(let t of e.projects){let o=(e.filesByProject.get(t.id)??[]).filter(s=>L.has(h.extname(s).toLowerCase())).slice(0,1e3),i=new Set;await Promise.all(o.map(async s=>{try{let n=await $.stat(s);n.isFile()&&n.size<=2*1024*1024&&i.add(h.resolve(s));}catch{}}));let r=0,d=0;for(let s of o){let n;try{if((await $.stat(s)).size>2*1024*1024)continue;n=await $.readFile(s,"utf8");}catch{continue}let a=e.state.artifactPath(s,t),f=await e.state.addProof({provider:this.id,artifact:a,absolutePath:s,derivation:"extracted",trust:"observed",confidence:"high",detail:`${F(s)} source file`}),c=e.state.addEntity({kind:"file",key:`file:${t.id}:${a}`,label:a,projectId:t.id,aliases:[h.basename(s)],attributes:{artifact:a,language:F(s),bytes:Buffer.byteLength(n)},proofIds:[f]});e.state.addRelation({from:w("project",`project:${t.id}`),to:c,kind:"contains",proofIds:[f]});let m=B(n,he,250);for(let l of m){let g=await e.state.addProof({provider:this.id,artifact:a,absolutePath:s,line:l.line,derivation:"extracted",trust:"observed",confidence:"medium",detail:`${l.detail}: ${l.name}`}),u=ke(s,l.name,i);if(u){let v=e.state.artifactPath(u,t);e.state.addRelation({from:c,to:w("file",`file:${t.id}:${v}`),kind:"imports",confidence:"high",proofIds:[g]});}else {let v=l.name.startsWith(".");v&&(d+=1);let k=e.state.addEntity({kind:"module",key:`module:${t.id}:${l.name}`,label:l.name,projectId:t.id,aliases:[l.name],attributes:{specifier:l.name,resolution:v?"unresolved-local":"external"},proofIds:[g]});e.state.addRelation({from:c,to:k,kind:"imports",confidence:v?"low":"medium",proofIds:[g]});}}if(r<500){let l=B(n,ge,Math.min(100,500-r));r+=l.length;for(let g of l){let u=await e.state.addProof({provider:this.id,artifact:a,absolutePath:s,line:g.line,derivation:"extracted",trust:"observed",confidence:"medium",detail:`${g.detail}: ${g.name}`}),v=e.state.addEntity({kind:"symbol",key:`symbol:${t.id}:${a}:${g.detail}:${g.name}`,label:g.name,projectId:t.id,attributes:{symbolKind:g.detail,language:F(s)},proofIds:[u]});e.state.addRelation({from:c,to:v,kind:"defines",confidence:"medium",proofIds:[u]});}}for(let l of B(n,ye,100)){let u=(n.split(/\r?\n/)[l.line-1]??"").match(/(?:@|\.|\[|^\s*)(get|post|put|delete|patch|options|head)/i)?.[1]?.toUpperCase()??"HTTP",v=await e.state.addProof({provider:this.id,artifact:a,absolutePath:s,line:l.line,derivation:"extracted",trust:"observed",confidence:"medium",detail:`${u} ${l.name}`}),k=e.state.addEntity({kind:"endpoint",key:`source-endpoint:${t.id}:${a}:${u}:${l.name}`,label:`${u} ${l.name||"/"}`,projectId:t.id,attributes:{method:u,path:l.name||"/",source:a},proofIds:[v]});e.state.addRelation({from:c,to:k,kind:"defines",confidence:"medium",proofIds:[v]});}}(o.length>=1e3||r>=500)&&e.state.diagnostics.push({code:"graph.provider.source_structure.limit_reached",severity:"info",message:`Source extraction for ${t.id} reached its bounded inventory limit.`,recommendation:"Use the standalone graph package provider configuration for deeper symbol indexing."}),d>0&&e.state.diagnostics.push({code:"graph.provider.source_structure.unresolved_local_imports",severity:"warning",message:`${d} local import(s) in ${t.id} could not be resolved to an indexed source file.`,recommendation:"Check path aliases, generated sources, extension mapping, or provider limits before treating the import graph as complete."});}}},Ee={id:"workspace-service-contract",version:"1.0.0",applicable(e){return !!e.contract?.projects.length},async run(e){if(!e.contract)return;let t=new Map;for(let o of [...e.contract.projects].sort((i,r)=>i.slug.localeCompare(r.slug))){let i=o.contracts,r=await e.state.addProof({provider:this.id,artifact:".workspai/workspace.contract.json",absolutePath:h.join(e.workspacePath,".workspai","workspace.contract.json"),pointer:`/projects/${o.slug}/contracts`,trust:"authoritative",derivation:"authored",detail:`Service contract for ${o.slug}`}),d=w("project",`project:${o.slug}`),s=e.state.addEntity({kind:"service",key:`contract-service:${o.slug}`,label:o.slug,projectId:o.slug,attributes:{ports:o.ports.map(n=>`${n.protocol}:${n.port}`),owns:[...i.owns].sort(),environmentKeys:[...i.env].sort()},proofIds:[r]});e.state.addRelation({from:d,to:s,kind:"implements",trust:"authoritative",derivation:"authored",proofIds:[r]});for(let n of [...i.apis].sort((a,f)=>a.name.localeCompare(f.name))){let a=e.state.addEntity({kind:"api",key:`contract-api:${o.slug}:${n.name}:${n.basePath}`,label:n.name,projectId:o.slug,attributes:{basePath:n.basePath},proofIds:[r]});e.state.addRelation({from:s,to:a,kind:"exposes",trust:"authoritative",derivation:"authored",proofIds:[r]});}for(let n of [...i.publishes,...i.consumes].sort())t.has(n)||t.set(n,e.state.addEntity({kind:"queue",key:`event:${n}`,label:n,attributes:{protocol:"workspace-event"},proofIds:[r]}));for(let n of [...i.publishes].sort()){let a=t.get(n);a&&e.state.addRelation({from:s,to:a,kind:"publishes",trust:"authoritative",derivation:"authored",proofIds:[r]});}for(let n of [...i.consumes].sort()){let a=t.get(n);a&&e.state.addRelation({from:s,to:a,kind:"consumes",trust:"authoritative",derivation:"authored",proofIds:[r]});}}}},Ie={id:"openapi",version:"1.0.0",applicable(e){return e.projects.some(t=>(e.filesByProject.get(t.id)??[]).some(Y))},async run(e){for(let t of e.projects){let o=(e.filesByProject.get(t.id)??[]).filter(Y);for(let i of o){let r;try{r=await A(i);}catch(d){e.state.diagnostics.push({code:"graph.provider.openapi.parse_failed",severity:"warning",message:`Could not parse ${e.state.artifactPath(i,t)}: ${d instanceof Error?d.message:String(d)}`});continue}for(let d of r){if(!("openapi"in d)&&!("swagger"in d))continue;let s=b(d.info),n=j(s?.title)??`${t.id} API`,a=await e.state.addProof({provider:this.id,artifact:e.state.artifactPath(i,t),absolutePath:i,pointer:"/info",trust:"authoritative",detail:"Authored OpenAPI contract"}),f=w("project",`project:${t.id}`),c=e.state.addEntity({kind:"api",key:`api:${t.id}:${n}`,label:n,projectId:t.id,attributes:{version:j(s?.version),specification:j(d.openapi)??j(d.swagger)},proofIds:[a]});e.state.addRelation({from:f,to:c,kind:"exposes",trust:"authoritative",derivation:"authored",proofIds:[a]});let m=b(b(d.components)?.schemas)??b(d.definitions),l=new Map;for(let u of Object.keys(m??{}).sort()){let v=await e.state.addProof({provider:this.id,artifact:e.state.artifactPath(i,t),absolutePath:i,pointer:`/components/schemas/${u}`,trust:"authoritative",detail:`OpenAPI schema ${u}`}),k=e.state.addEntity({kind:"schema",key:`schema:${t.id}:${n}:${u}`,label:u,projectId:t.id,proofIds:[v]});l.set(u,k),e.state.addRelation({from:c,to:k,kind:"contains",trust:"authoritative",derivation:"authored",proofIds:[v]});}let g=b(d.paths);for(let u of Object.keys(g??{}).sort()){let v=b(g?.[u]);for(let k of Object.keys(v??{}).filter(P=>me.has(P.toLowerCase())).sort()){let P=b(v?.[k]),I=`/paths/${u.replace(/~/g,"~0").replace(/\//g,"~1")}/${k}`,p=await e.state.addProof({provider:this.id,artifact:e.state.artifactPath(i,t),absolutePath:i,pointer:I,trust:"authoritative",detail:`${k.toUpperCase()} ${u}`}),y=e.state.addEntity({kind:"endpoint",key:`endpoint:${t.id}:${n}:${k.toUpperCase()}:${u}`,label:`${k.toUpperCase()} ${u}`,projectId:t.id,aliases:E(P?.tags),attributes:{method:k.toUpperCase(),path:u,operationId:j(P?.operationId),deprecated:typeof P?.deprecated=="boolean"?P.deprecated:void 0,tags:E(P?.tags)},proofIds:[p]});e.state.addRelation({from:c,to:y,kind:"contains",trust:"authoritative",derivation:"authored",proofIds:[p]});let R=JSON.stringify(P??{});for(let[S,_]of l)R.includes(`/${S}`)&&e.state.addRelation({from:y,to:_,kind:"references",trust:"authoritative",derivation:"authored",proofIds:[p]});}}}}}}},Ce={id:"interface-contracts",version:"1.0.0",applicable(e){return e.projects.some(t=>(e.filesByProject.get(t.id)??[]).some(Q))},async run(e){for(let t of e.projects){let o=(e.filesByProject.get(t.id)??[]).filter(Q);for(let i of o){let r=e.state.artifactPath(i,t),d=h.extname(i).toLowerCase();if(d===".graphql"||d===".gql"){let s=await $.readFile(i,"utf8"),n=await e.state.addProof({provider:this.id,artifact:r,absolutePath:i,trust:"authoritative",derivation:"authored",detail:"GraphQL schema"}),a=e.state.addEntity({kind:"api",key:`graphql:${t.id}:${r}`,label:`${t.id} GraphQL API`,projectId:t.id,attributes:{specification:"graphql",artifact:r},proofIds:[n]});e.state.addRelation({from:w("project",`project:${t.id}`),to:a,kind:"exposes",trust:"authoritative",derivation:"authored",proofIds:[n]});for(let f of s.matchAll(/^\s*(?:type|input|interface|enum|scalar|union)\s+([A-Za-z_]\w*)/gm)){let c=e.state.addEntity({kind:"schema",key:`graphql-schema:${t.id}:${r}:${f[1]}`,label:f[1],projectId:t.id,proofIds:[n]});e.state.addRelation({from:a,to:c,kind:"contains",trust:"authoritative",derivation:"authored",proofIds:[n]});}continue}if(d===".proto"){let s=await $.readFile(i,"utf8"),n=z(s.replace(/\r\n/g,`
|
|
2
|
-
`).trim()),a=s.match(/^\s*package\s+([A-Za-z_][\w.]*)\s*;/m)?.[1],f=a||`unscoped:${n.slice(0,16)}`,c=await e.state.addProof({provider:this.id,artifact:r,absolutePath:i,trust:"authoritative",derivation:"authored",detail:"Protocol Buffers contract"});for(let m of s.matchAll(/^\s*service\s+([A-Za-z_]\w*)/gm)){let l=e.state.addEntity({kind:"api",key:`protobuf-service:${f}:${m[1]}`,label:m[1],aliases:[...a?[`${a}.${m[1]}`]:[],m[1]],attributes:{specification:"protobuf",package:a,definitionHash:n},proofIds:[c]});e.state.addRelation({from:w("project",`project:${t.id}`),to:l,kind:"exposes",trust:"authoritative",derivation:"authored",proofIds:[c]});}for(let m of s.matchAll(/^\s*message\s+([A-Za-z_]\w*)/gm))e.state.addEntity({kind:"schema",key:`protobuf-message:${f}:${m[1]}`,label:m[1],aliases:[...a?[`${a}.${m[1]}`]:[],m[1]],attributes:{specification:"protobuf",package:a,definitionHash:n},proofIds:[c]});continue}try{let s=(await A(i))[0];if(!s||!("asyncapi"in s))continue;let n=await e.state.addProof({provider:this.id,artifact:r,absolutePath:i,trust:"authoritative",derivation:"authored",detail:"AsyncAPI contract"}),a=e.state.addEntity({kind:"api",key:`asyncapi:${t.id}:${r}`,label:j(b(s.info)?.title)??`${t.id} AsyncAPI`,projectId:t.id,attributes:{specification:`asyncapi ${String(s.asyncapi)}`,artifact:r},proofIds:[n]});e.state.addRelation({from:w("project",`project:${t.id}`),to:a,kind:"exposes",trust:"authoritative",derivation:"authored",proofIds:[n]});for(let f of Object.keys(b(s.channels)??{}).sort()){let c=e.state.addEntity({kind:"queue",key:`asyncapi-channel:${t.id}:${f}`,label:f,projectId:t.id,attributes:{protocol:"asyncapi"},proofIds:[n]});e.state.addRelation({from:a,to:c,kind:"publishes",trust:"authoritative",derivation:"authored",proofIds:[n]});}}catch{}}}}},Re={id:"infrastructure-as-code",version:"1.0.0",applicable(e){return G(e).some(X)},async run(e){let t=G(e).filter(X);for(let o of t){let i=C(e.projects,o),r=i?.id??e.state.workspaceName,d=i?w("project",`project:${i.id}`):w("workspace",`workspace:${e.state.workspaceName}`),s=e.state.artifactPath(o,i),n=await $.readFile(o,"utf8"),a=await e.state.addProof({provider:this.id,artifact:s,absolutePath:o,trust:"authoritative",derivation:"authored",detail:"Infrastructure definition"});if(/^Dockerfile/i.test(h.basename(o))){let c=[...n.matchAll(/^\s*FROM\s+([^\s]+)(?:\s+AS\s+([^\s]+))?/gim)],m=e.state.addEntity({kind:"container",key:`dockerfile:${r}:${s}`,label:`${r} container image`,...i?{projectId:i.id}:{},attributes:{artifact:s,baseImages:c.map(l=>l[1])},proofIds:[a]});e.state.addRelation({from:d,to:m,kind:"deploys",trust:"authoritative",derivation:"authored",proofIds:[a]});continue}if(/\.tf$/i.test(o)){for(let c of n.matchAll(/^\s*resource\s+["']([^"']+)["']\s+["']([^"']+)["']/gm)){let m=c[1],l=/(?:db|sql|rds|database)/i.test(m)?"database":/(?:queue|kafka|sqs|pubsub|servicebus)/i.test(m)?"queue":"deployment",g=e.state.addEntity({kind:l,key:`terraform:${r}:${m}:${c[2]}`,label:`${m}.${c[2]}`,...i?{projectId:i.id}:{},attributes:{resourceType:m,artifact:s},proofIds:[a]});e.state.addRelation({from:d,to:g,kind:"deploys",trust:"authoritative",derivation:"authored",proofIds:[a]});}continue}let f=e.state.addEntity({kind:"deployment",key:`helm:${r}:${s}`,label:`${r} Helm chart`,...i?{projectId:i.id}:{},attributes:{artifact:s,format:"helm"},proofIds:[a]});e.state.addRelation({from:d,to:f,kind:"deploys",trust:"authoritative",derivation:"authored",proofIds:[a]});}}};function ae(e){let t=e.toLowerCase();return /(?:postgres|mysql|mariadb|mongo|cassandra|cockroach|mssql|oracle)/.test(t)?"database":/(?:rabbitmq|kafka|nats|pulsar|activemq|redis)/.test(t)?"queue":"container"}var We={id:"compose",version:"1.0.0",async applicable(e){return (await oe(e)).length>0},async run(e){for(let t of await oe(e)){let o;try{o=(await A(t))[0];}catch(s){e.state.diagnostics.push({code:"graph.provider.compose.parse_failed",severity:"warning",message:`Could not parse ${e.state.artifactPath(t)}: ${s instanceof Error?s.message:String(s)}`});}let i=b(o?.services);if(!i)continue;let r=C(e.projects,t),d=new Map;for(let s of Object.keys(i).sort()){let n=b(i[s]),a=n?.build,f=j(a)??j(b(a)?.context),c=f?C(e.projects,h.resolve(h.dirname(t),f)):e.projects.find(u=>u.id.toLowerCase()===s.toLowerCase()||h.basename(u.path).toLowerCase()===s.toLowerCase())??r,m=await e.state.addProof({provider:this.id,artifact:e.state.artifactPath(t,r),absolutePath:t,pointer:`/services/${s}`,trust:"authoritative",derivation:"authored",detail:`Compose service ${s}`}),l=j(n?.image),g=e.state.addEntity({kind:"service",key:`compose-service:${e.state.artifactPath(t,r)}:${s}`,label:s,...c?{projectId:c.id}:{},attributes:{image:l,ports:E(n?.ports).map(String),networks:E(n?.networks),environmentKeys:ve(n?.environment)},proofIds:[m]});if(d.set(s,g),c&&e.state.addRelation({from:w("project",`project:${c.id}`),to:g,kind:"contains",trust:"authoritative",derivation:"authored",proofIds:[m]}),l){let u=e.state.addEntity({kind:ae(l),key:`image:${l}`,label:l,...c?{projectId:c.id}:{},attributes:{image:l},proofIds:[m]});e.state.addRelation({from:g,to:u,kind:ae(l)==="container"?"runs-on":"depends-on",trust:"authoritative",derivation:"authored",proofIds:[m]});}}for(let s of Object.keys(i).sort()){let n=b(i[s]),a=d.get(s);if(a)for(let f of E(n?.depends_on)){let c=d.get(f);if(!c)continue;let m=await e.state.addProof({provider:this.id,artifact:e.state.artifactPath(t,r),absolutePath:t,pointer:`/services/${s}/depends_on/${f}`,trust:"authoritative",derivation:"authored",detail:`${s} depends on ${f}`});e.state.addRelation({from:a,to:c,kind:"depends-on",trust:"authoritative",derivation:"authored",proofIds:[m]});}}}}},Ke={id:"documentation",version:"1.0.0",applicable(e){return G(e).some(ee)},async run(e){let t=new Set,o=[e.workspaceFiles,...e.projects.map(i=>e.filesByProject.get(i.id)??[])];for(let i of o){let r=i.filter(ee);for(let d of r){if(t.has(d))continue;t.add(d);let s=C(e.projects,d),a=(await $.readFile(d,"utf8")).match(/^#\s+(.+)$/m)?.[1]?.trim()??h.basename(d),f=await e.state.addProof({provider:this.id,artifact:e.state.artifactPath(d,s),absolutePath:d,line:1,trust:"authoritative",derivation:"authored",detail:`Documentation: ${a}`}),c=e.state.addEntity({kind:"document",key:`document:${e.state.artifactPath(d,s)}`,label:a,...s?{projectId:s.id}:{},attributes:{artifact:e.state.artifactPath(d,s)},proofIds:[f]}),m=s?w("project",`project:${s.id}`):w("workspace",`workspace:${e.state.workspaceName}`);e.state.addRelation({from:c,to:m,kind:"documents",trust:"authoritative",derivation:"authored",proofIds:[f]});}}}},Ae={id:"kubernetes",version:"1.0.0",async applicable(e){return (await ie(e)).length>0},async run(e){for(let t of await ie(e)){let o=C(e.projects,t),i=o?w("project",`project:${o.id}`):w("workspace",`workspace:${e.state.workspaceName}`),r=await A(t);for(let d=0;d<r.length;d+=1){let s=r[d],n=j(s.kind),a=b(s.metadata),f=j(a?.name);if(!n||!f)continue;let c=j(a?.namespace)??"default",m=/Deployment|StatefulSet|DaemonSet/i.test(n)?"deployment":/Service|Ingress/i.test(n)?"service":/ConfigMap|Secret/i.test(n)?"environment":"deployment",l=await e.state.addProof({provider:this.id,artifact:e.state.artifactPath(t,o),absolutePath:t,pointer:`/documents/${d}`,trust:"authoritative",derivation:"authored",detail:`${n} ${c}/${f}`}),g=e.state.addEntity({kind:m,key:`kubernetes:${n}:${c}:${f}`,label:`${n}/${f}`,...o?{projectId:o.id}:{},attributes:{resourceKind:n,namespace:c,secret:n==="Secret",keys:n==="Secret"||n==="ConfigMap"?Object.keys(b(s.data)??{}).sort():void 0},proofIds:[l]});e.state.addRelation({from:i,to:g,kind:m==="deployment"?"deploys":"contains",trust:"authoritative",derivation:"authored",proofIds:[l]});let u=e.state.addEntity({kind:"environment",key:`kubernetes-namespace:${c}`,label:`Kubernetes namespace ${c}`,attributes:{namespace:c},proofIds:[l]});e.state.addRelation({from:g,to:u,kind:"runs-on",trust:"authoritative",derivation:"authored",proofIds:[l]});}}}},Se={id:"ci-workflow",version:"1.0.0",applicable(e){return se(e).length>0},async run(e){let t=se(e);for(let o of t){let i=C(e.projects,o),r=e.state.artifactPath(o,i),d=h.basename(o)==="Jenkinsfile",s=h.basename(o),n=[],a=[];if(d)n=[...(await $.readFile(o,"utf8")).matchAll(/\bstage\s*\(\s*["']([^"']+)["']/g)].map(l=>l[1]);else {let m;try{m=(await A(o))[0];}catch{continue}if(!m)continue;s=j(m.name)??s;let l=K(h.relative(i?.root??e.workspacePath,o));if(/^\.gitlab-ci\./i.test(l)){let g=new Set(["stages","variables","workflow","include","default","image","services","cache","before_script","after_script"]);n=Object.keys(m).filter(u=>!u.startsWith(".")&&!g.has(u)).sort();}else n=[...new Set([...Object.keys(b(m.jobs)??{}),...Object.keys(b(b(m.workflows)?.jobs)??{}),...E(m.stages)])].sort();a=E(m.on);}n.length===0&&(n=["pipeline"]);let f=await e.state.addProof({provider:this.id,artifact:r,absolutePath:o,...d?{}:{pointer:"/jobs"},trust:"authoritative",derivation:"authored",detail:"CI/CD workflow"}),c=e.state.addEntity({kind:"pipeline",key:`pipeline:${r}`,label:s,attributes:{jobs:n,triggers:a,artifact:r},proofIds:[f]});e.state.addRelation({from:i?w("project",`project:${i.id}`):w("workspace",`workspace:${e.state.workspaceName}`),to:c,kind:"contains",trust:"authoritative",derivation:"authored",proofIds:[f]});}}},_e={id:"codeowners",version:"1.0.0",async applicable(e){return (await re(e)).length>0},async run(e){for(let t of await re(e)){let o=C(e.projects,t),r=(await $.readFile(t,"utf8")).split(/\r?\n/);for(let d=0;d<r.length;d+=1){let s=r[d].trim();if(!s||s.startsWith("#"))continue;let[n,...a]=s.split(/\s+/);for(let f of a.filter(c=>c.startsWith("@"))){let c=await e.state.addProof({provider:this.id,artifact:e.state.artifactPath(t,o),absolutePath:t,line:d+1,trust:"authoritative",derivation:"authored",detail:`${n} ${f}`}),m=e.state.addEntity({kind:"owner",key:`owner:${f.toLowerCase()}`,label:f,aliases:[f],proofIds:[c]}),l=e.projects.filter(u=>{let v=n.replace(/^\//,"").replace(/\*.*$/,""),k=h.dirname(t),P=[".github","docs"].includes(h.basename(k))?h.dirname(k):k,I=K(h.relative(P,u.root));return v&&(I==="."||I.startsWith(v.replace(/\/$/,""))||u.path.startsWith(v.replace(/\/$/,"")))}),g=l.length>0?l.map(u=>w("project",`project:${u.id}`)):o?[w("project",`project:${o.id}`)]:[w("workspace",`workspace:${e.state.workspaceName}`)];for(let u of g)e.state.addRelation({from:m,to:u,kind:"owns",trust:"authoritative",derivation:"authored",proofIds:[c]});}}}}},Oe={id:"architecture-decisions",version:"1.0.0",applicable(e){return [{root:e.workspacePath,files:e.workspaceFiles},...e.projects.map(t=>({root:t.root,files:e.filesByProject.get(t.id)??[]}))].some(t=>t.files.some(o=>te(t.root,o)))},async run(e){let t=new Set,o=[{root:e.workspacePath,files:e.workspaceFiles},...e.projects.map(i=>({root:i.root,files:e.filesByProject.get(i.id)??[]}))];for(let i of o){let r=i.files.filter(d=>te(i.root,d));for(let d of r){if(t.has(d))continue;t.add(d);let s=C(e.projects,d),n=await $.readFile(d,"utf8"),a=n.match(/^#\s+(.+)$/m)?.[1]?.trim()??h.basename(d,".md"),f=n.match(/^status\s*:\s*(.+)$/im)?.[1]?.trim(),c=await e.state.addProof({provider:this.id,artifact:e.state.artifactPath(d,s),absolutePath:d,line:1,trust:"authoritative",derivation:"authored",detail:`Architecture decision: ${a}`}),m=e.state.addEntity({kind:"decision",key:`decision:${e.state.artifactPath(d,s)}`,label:a,...s?{projectId:s.id}:{},attributes:{status:f,artifact:e.state.artifactPath(d,s)},proofIds:[c]}),l=s?w("project",`project:${s.id}`):w("workspace",`workspace:${e.state.workspaceName}`);e.state.addRelation({from:l,to:m,kind:"decided-by",trust:"authoritative",derivation:"authored",proofIds:[c]});}}}},Ne=[je,$e,Ee,Ie,Ce,We,Re,Ae,Se,_e,Ke,Oe];async function De(e,t){for(let o of t.edges){let i=[];for(let r of o.evidence){let d=N(r.file);i.push(await e.addProof({provider:"project-topology",artifact:d,absolutePath:h.resolve(e.workspacePath,d),derivation:o.source==="inferred"?"inferred":"authored",trust:o.source==="inferred"?"observed":"authoritative",confidence:o.confidence,detail:r.detail??`${o.kind} relationship`}));}i.length===0&&i.push(await e.addProof({provider:"project-topology",artifact:a.model,derivation:"inferred",trust:"ambiguous",confidence:o.confidence,detail:`${o.kind} relationship without source locator`})),e.addRelation({from:w("project",`project:${o.from}`),to:w("project",`project:${o.to}`),kind:o.kind==="event-pub-sub"?"consumes":"depends-on",derivation:o.source==="inferred"?"inferred":"authored",trust:o.source==="inferred"?"observed":"authoritative",confidence:o.confidence,proofIds:i});}}function Te(e){let t=[...e.entities.values()].filter(i=>i.kind==="endpoint"),o=new Map;for(let i of t){let r=String(i.attributes.method??"").toUpperCase(),d=String(i.attributes.path??"");if(!i.projectId||!r||!d)continue;let s=`${i.projectId}\0${r}\0${d}`,n=o.get(s)??[];n.push(i),o.set(s,n);}for(let i of o.values()){if(i.length<2)continue;let r=i.find(d=>d.proofIds.some(s=>e.proofs.get(s)?.trust==="authoritative"));if(r)for(let d of i.filter(s=>s.id!==r.id))e.addRelation({from:d.id,to:r.id,kind:"implements",derivation:"extracted",trust:"corroborated",confidence:"high",proofIds:[...d.proofIds,...r.proofIds]});}}function T(e,t){let o=[...new Set(e)],i=o.filter(r=>t.has(r)).length;return {eligibleCount:o.length,boundCount:i,unknownCount:o.length-i,coverageRatio:o.length===0?null:i/o.length}}function Le(e,t){let o=e.filter(a=>a.kind==="project").map(a=>a.id),i=e.filter(a=>a.kind==="endpoint").map(a=>a.id),r=new Set(t.filter(a=>a.kind==="implements").flatMap(a=>[a.from,a.to])),d=new Set(t.filter(a=>a.kind==="tests").flatMap(a=>[a.from,a.to]).filter(a=>o.includes(a))),s=new Set(t.filter(a=>a.kind==="deploys").flatMap(a=>[a.from,a.to]).filter(a=>o.includes(a))),n=new Set(t.filter(a=>a.kind==="owns").flatMap(a=>[a.from,a.to]).filter(a=>o.includes(a)));return {apiImplementation:T(i,r),projectTests:T(o,d),projectDeployment:T(o,s),projectOwnership:T(o,n)}}async function Xe(e){let t=h.resolve(e.workspacePath),o=e.now??new Date,i=e.projects.map(p=>({...p,root:p.absolutePath?h.resolve(p.absolutePath):h.resolve(t,p.path),artifactPrefix:p.absolutePath?`external/${p.id}`:K(p.path)})).sort((p,y)=>p.id.localeCompare(y.id)),r=new q(t,o,e.workspace.name),d=Math.max(100,Math.min(e.maxFilesPerProject??2e3,1e4)),s=new Map(await Promise.all(i.map(async p=>[p.id,await x(p.root,d)]))),n=await x(t,Math.min(d*Math.max(i.length,1),2e4)),a={workspacePath:t,projects:i,filesByProject:s,workspaceFiles:n,now:o,maxFilesPerProject:d,contract:e.contract??null,state:r};for(let p of Ne){let y={entities:r.entities.size,relations:r.relations.size,proofs:r.proofs.size,diagnostics:r.diagnostics.length},R="passed",S=null;try{if(!(p.applicable?await p.applicable(a):true))R="skipped";else {await p.run(a);let D=r.entities.size-y.entities,ne=r.relations.size-y.relations,de=r.proofs.size-y.proofs;D===0&&ne===0&&de===0?(R="partial",r.diagnostics.push({code:`graph.provider.${p.id}.empty_result`,severity:"warning",message:`${p.id} found an applicable source surface but produced no graph evidence.`,recommendation:"Inspect the matching source format or extend the provider before treating this graph dimension as complete."})):r.diagnostics.length>y.diagnostics&&(R="partial");}}catch(W){R="failed";let D=W instanceof Error?W.message:String(W);S=D,r.diagnostics.push({code:`graph.provider.${p.id}.failed`,severity:"warning",message:`${p.id} provider failed: ${D}`,recommendation:"Repair the referenced source artifact and rerun workspace graph emit."});}let _=r.diagnostics.slice(y.diagnostics).map(W=>`${W.code}: ${W.message}`);S&&_.length===0&&_.push(S),r.providers.push({id:p.id,version:p.version,status:R,permission:"filesystem-read",discoveredEntities:r.entities.size-y.entities,discoveredRelations:r.relations.size-y.relations,proofCount:r.proofs.size-y.proofs,diagnostics:_});}Te(r),await De(r,e.projectTopology);let f=[...r.entities.values()].sort((p,y)=>p.id.localeCompare(y.id)),c=[...r.relations.values()].sort((p,y)=>p.id.localeCompare(y.id)),m=[...r.proofs.values()].sort((p,y)=>p.id.localeCompare(y.id)),l=f.filter(p=>p.proofIds.length>0).length,g=c.filter(p=>p.proofIds.length>0).length,u=r.providers.filter(p=>p.status!=="failed").length,v=e.projectTopology.diagnostics?.filter(p=>p.code==="graph.edges.missing").flatMap(p=>p.nodeIds??[])??[];v.length>0&&r.diagnostics.push({code:"graph.knowledge.project_relationships_unknown",severity:"warning",message:`${v.length} project(s) have no proven inter-project relationship. This is unknown topology, not proof of independence.`,entityIds:v.map(p=>w("project",`project:${p}`)),recommendation:"Author service contracts or add OpenAPI, Compose, Kubernetes, package or import evidence."});let k=r.diagnostics.filter(p=>p.code.includes("unknown")||p.code.includes("unresolved")||p.code.includes("limit_reached")||p.code.endsWith(".empty_result")).reduce((p,y)=>p+Math.max(y.entityIds?.length??0,y.relationIds?.length??0,1),0),P=Le(f,c),I=Object.values(P).reduce((p,y)=>p+y.unknownCount,0);return {schemaVersion:U,generatedAt:o.toISOString(),source:e.source,workspace:e.workspace,projectTopology:e.projectTopology,entities:f,relations:c,proofs:m,providers:[...r.providers].sort((p,y)=>p.id.localeCompare(y.id)),quality:{entityCount:f.length,relationCount:c.length,proofCount:m.length,entityProofCoverageRatio:f.length===0?1:l/f.length,relationProofCoverageRatio:c.length===0?1:g/c.length,providerSuccessRatio:r.providers.length===0?1:u/r.providers.length,conflictCount:r.diagnostics.filter(p=>p.code.includes("conflict")).length,unknownCount:k+I,bindingCoverage:P,portable:true,secretValuesEmitted:false},diagnostics:[...r.diagnostics].sort((p,y)=>p.code.localeCompare(y.code)||p.message.localeCompare(y.message))}}function et(e,t){return w(e,t)}
|
|
3
|
-
export{U as a,Ye as b,Qe as c,Xe as d,et as e};
|
package/dist/chunk-AHLMIL2T.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var o={model:".workspai/reports/workspace-model.json",knowledgeGraph:".workspai/reports/workspace-knowledge-graph.json",snapshot:".workspai/reports/workspace-model-snapshot.json",diff:".workspai/reports/workspace-model-diff-last-run.json",impact:".workspai/reports/workspace-impact-last-run.json",analyze:".workspai/reports/analyze-last-run.json",doctor:".workspai/reports/doctor-last-run.json",contractVerify:".workspai/reports/workspace-contract-verify-last-run.json",readiness:".workspai/reports/release-readiness-last-run.json",verify:".workspai/reports/workspace-verify-last-run.json",history:".workspai/reports/workspace-intelligence-history.json",agentContext:".workspai/reports/workspace-context-agent.json",agentIndex:".workspai/reports/INDEX.json",agentCustomizationPack:".workspai/reports/agent-customization-pack.json",skillsIndex:".workspai/reports/workspace-skills-index.json",agents:"AGENTS.md",explain:".workspai/reports/workspace-explain-last-run.json",intelligenceRun:".workspai/reports/workspace-intelligence-run-last-run.json",evaluationLive:".workspai/reports/workspace-intelligence-evaluation-live.json",evaluationLastRun:".workspai/reports/workspace-intelligence-evaluation-last-run.json"},r={model:"workspace-model.v1",knowledgeGraph:"workspace-knowledge-graph.v1",snapshot:"workspace-model-snapshot.v1",diff:"workspace-model-diff.v1",impact:"workspace-impact.v1",analyze:"rapidkit-analyze-v1",doctor:"doctor-workspace-evidence-v1",contractVerify:"workspace-contract-verify.v1",readiness:"release-readiness-v1",verify:"workspace-verify.v1",history:"workspace-intelligence-history.v1",agentContext:"workspace-context.v1",agentIndex:"rapidkit-agent-reports-index.v1",agentCustomizationPack:"rapidkit-agent-customization-pack.v1",skillsIndex:"workspace-skills-index.v1",agents:null,explain:"workspace-explain.v1",intelligenceRun:"workspace-intelligence-run.v1",evaluationLive:"workspace-intelligence-evaluation.v1",evaluationLastRun:"workspace-intelligence-evaluation.v1"},c={model:"contracts/workspace-intelligence/workspace-model.v1.json",knowledgeGraph:"contracts/workspace-intelligence/workspace-knowledge-graph.v1.json",snapshot:"contracts/workspace-intelligence/workspace-model-snapshot.v1.json",diff:"contracts/workspace-intelligence/workspace-model-diff.v1.json",impact:"contracts/workspace-intelligence/workspace-impact.v1.json",analyze:"contracts/analyze-last-run.v1.json",doctor:"contracts/doctor-workspace-evidence.v1.json",contractVerify:"contracts/workspace-intelligence/workspace-contract-verify.v1.json",readiness:"contracts/release-readiness.v1.json",verify:"contracts/workspace-intelligence/workspace-verify.v1.json",history:"contracts/workspace-intelligence/workspace-intelligence-history.v1.json",agentContext:"contracts/workspace-intelligence/workspace-context.v1.json",agentIndex:"contracts/workspace-intelligence/agent-reports-index.v1.json",agentCustomizationPack:"contracts/workspace-intelligence/agent-customization-pack-report.v1.json",skillsIndex:"contracts/workspace-intelligence/workspace-skills-index.v1.json",agents:null,explain:"contracts/workspace-intelligence/workspace-explain.v1.json",intelligenceRun:"contracts/workspace-intelligence/workspace-intelligence-run.v1.json",evaluationLive:"contracts/workspace-intelligence/workspace-intelligence-evaluation.v1.json",evaluationLastRun:"contracts/workspace-intelligence/workspace-intelligence-evaluation.v1.json"},i={analyze:"analyze",workspace:"workspace <action> [subaction] [key] [value]",doctor:"doctor [scope]",readiness:"readiness"},p=["analyze","readiness","doctor","workspace"],l=["model","diff","impact","doctor-evidence","contract-evidence","analyze-evidence","readiness-evidence","verify","context","agent-sync","explain"],k=["sync","baseline"],d={sync:[".workspai/workspace.contract.json",".workspai/workspace-registry.v1.json"],baseline:[o.snapshot]},e=o,s={model:{command:["workspace","model","--json","--write"],produces:[e.model,e.knowledgeGraph]},diff:{command:["workspace","diff","--from",e.snapshot,"--json"],produces:[e.diff]},impact:{command:["workspace","impact","--from",e.diff,"--json"],produces:[e.impact]},"doctor-evidence":{command:["doctor","workspace","--json"],produces:[e.doctor]},"contract-evidence":{command:["workspace","contract","verify","--strict","--json"],produces:[e.contractVerify]},"analyze-evidence":{command:["analyze","--json"],produces:[e.analyze]},"readiness-evidence":{command:["readiness","--json","--skip-verify"],produces:[e.readiness]},verify:{command:["workspace","verify","--from-impact",e.impact,"--json"],produces:[e.verify,e.history]},context:{command:["workspace","context","--for-agent","--json","--write","--no-agent-sync"],produces:[e.agentContext]},"agent-sync":{command:["workspace","agent-sync","--write","--json","--preset","enterprise"],produces:[e.agentIndex,e.agentCustomizationPack,e.skillsIndex,e.agents]},explain:{command:["workspace","explain","release-blocked","--json","--write"],produces:[e.explain]}};function w(n){return s[n]}export{o as a,r as b,c,i as d,p as e,l as f,k as g,d as h,s as i,w as j};
|
package/dist/chunk-BBGNDMRU.js
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import {w}from'./chunk-TROHVI2V.js';import {a as a$1,d,c,e as e$1}from'./chunk-XBM2P45G.js';import {b as b$1}from'./chunk-RVQLMTTI.js';import {a,b}from'./chunk-AHLMIL2T.js';import {l}from'./chunk-OCGZNSOE.js';import {e}from'./chunk-RO73VVHW.js';import {s,t,p}from'./chunk-MOSXTVPU.js';import*as g from'path';import g__default from'path';import h from'fs-extra';var me="unknown-run";function q(e$1){let t=e();return !t||t===me?e$1:{...e$1,runId:t}}async function Z(e,t){await h.ensureDir(g.dirname(e));let r=`${e}.${process.pid}.${Date.now()}.tmp`;try{await h.writeJSON(r,t,{spaces:2}),await h.move(r,e,{overwrite:true});}finally{await h.remove(r).catch(()=>{});}}function Q(e){return p(e,"imported-projects.json")}async function I(e){let t=(await Promise.all(s(e,"imported-projects.json").map(async r=>await h.pathExists(r)?r:null))).find(r=>typeof r=="string");if(!t)return [];try{let r=await h.readJSON(t);if(!r||typeof r!="object"||r.version!==1||!Array.isArray(r.projects))throw new Error("expected a version 1 registry with a projects array");let o=r.projects,a=o.filter(c=>{if(!c||typeof c!="object")return false;let i=c;return typeof i.name=="string"&&typeof i.path=="string"&&typeof i.stack=="string"&&typeof i.confidence=="string"&&typeof i.importedAt=="string"});if(a.length!==o.length)throw new Error("one or more project entries are invalid");return a}catch(r){throw new Error(`Imported-project registry is invalid: ${t}`,{cause:r})}}async function Ie(e,t){if(t.length===0)return;let r=await I(e),o=new Map;for(let l of r)o.set(l.path,l);for(let l of t)o.set(l.path,l);let a=Array.from(o.values()).sort((l,u)=>l.name.localeCompare(u.name)).map(l=>({...l})),c={version:1,updatedAt:new Date().toISOString(),projects:a},i=Q(e);await Z(i,c);}async function Ne(e,t){if(t.length===0)return;let r=await I(e),o=new Set(t.map(l=>g.resolve(l))),a=r.filter(l=>!o.has(g.resolve(l.path))),c={version:1,updatedAt:new Date().toISOString(),projects:a},i=Q(e);await Z(i,c);}var Ve="workspace-dependency-graph.v1",X=["code-import","package-dep","event-pub-sub","service-dependsOn","shared-resource"],ee=["inferred","contract","manual"];var E=".workspai/workspace.contract.json",ge=a.contractVerify,R=1,fe=b.contractVerify,N=class extends Error{constructor(r){super(`Workspace contract verification failed: ${r.violations.join("; ")}`);this.verification=r;this.name="WorkspaceContractVerificationError";}verification};function ae(e){return e.replace(/\\/g,"/")}function H(e){let t=ae(e).trim();return !t||t.startsWith("/")||t.startsWith("~")||/^[a-zA-Z]:\//.test(t)||t.includes("\0")?false:!t.split("/").filter(Boolean).some(r=>r===".."||r===".")}function te(e,t){return e.trim().toLowerCase().replace(/[^a-z0-9._-]+/g,"-").replace(/-+/g,"-").replace(/^[-_.]+|[-_.]+$/g,"").slice(0,80)||t}function he(e){return Array.isArray(e)?e.filter(t=>typeof t=="string"&&t.trim().length>0):[]}function ke(e){let r=(Array.isArray(e.ports)?e.ports:[]).map(c=>{if(!c||typeof c!="object"||Array.isArray(c))return null;let i=c,l=Number(i.port);if(!Number.isInteger(l)||l<1||l>65535)return null;let u=i.protocol==="https"||i.protocol==="grpc"||i.protocol==="tcp"||i.protocol==="udp"?i.protocol:"http";return {name:typeof i.name=="string"&&i.name.trim()?i.name:"http",port:l,protocol:u}}).filter(c=>c!==null);if(r.length>0)return r;let o=e.frontend&&typeof e.frontend=="object"&&!Array.isArray(e.frontend)?e.frontend:void 0,a=Number(e.port??o?.default_port);return Number.isInteger(a)&&a>=1&&a<=65535?[{name:"http",port:a,protocol:"http"}]:[]}async function D(e){for(let t of e)if(await h.pathExists(t))return t;return null}async function we(e){for(let t of s(e,"workspace.json"))try{let r=await h.readJson(t);return {name:typeof r.workspace_name=="string"&&r.workspace_name.trim()||typeof r.name=="string"&&r.name.trim()||g__default.basename(e),profile:typeof r.profile=="string"?r.profile:void 0}}catch{}return {name:g__default.basename(e)}}async function Pe(e){let t$1=[],r=[e],o=new Set,a=new Set([".git",".workspai",".rapidkit","node_modules",".venv","venv","dist","build","target",".next",".turbo",".cache"]);for(;r.length>0;){let c=r.shift();if(!c||o.has(c))continue;o.add(c);let i=await D(t(c,"project.json")),l=await D(t(c,"context.json"));if(i||l){t$1.push(i??l??"");continue}let u;try{u=await h.readdir(c,{withFileTypes:true});}catch{continue}for(let d of u)!d.isDirectory()||a.has(d.name)||r.push(g__default.join(c,d.name));}return t$1.sort()}function ye(e){let t=(e||"").toLowerCase();if(t.includes("fastapi"))return "fastapi";if(t.includes("nestjs"))return "nestjs";if(t.includes("springboot"))return "springboot";if(t.includes("gofiber"))return "fiber";if(t.includes("gogin"))return "gin"}function Ce(e,t){let r=(e||"").toLowerCase(),o=(t||"").toLowerCase();return r.includes("fastapi")?8e3:r.includes("nestjs")?3e3:r.includes("springboot")?8080:r.includes("gofiber")?3e3:r.includes("gogin")?8080:o==="node"?3e3:o==="python"?8e3:o==="java"||o==="go"?8080:null}function re(e,t){let r=e;for(;t.has(r)&&r<65535;)r+=1;return r}function M(e,t,r){let o=e!==void 0&&e.source===void 0,a=Ce(t.kit,t.runtime),c=e?.ports||[],i=t.ports||[],u=(c.length>0?c:i.length>0?i:a?[{name:"http",port:re(a,r),protocol:"http"}]:[]).map(p=>({...p,port:re(p.port,r)}));for(let p of u)r.add(p.port);let d={...t,...e,slug:e?.slug||t.slug,relativePath:o&&e?.relativePath&&H(e.relativePath)?e.relativePath:t.relativePath,source:o&&e?.source||t.source,relationship:o&&e?.relationship||t.relationship,externalPath:o&&e?.externalPath||t.externalPath,runtime:e?.runtime||t.runtime,framework:e?.framework||t.framework,kit:e?.kit||t.kit,modules:e?.modules?.length?e.modules:t.modules,ports:u,contracts:{owns:e?.contracts?.owns||[],apis:e?.contracts?.apis||[],publishes:e?.contracts?.publishes||[],consumes:e?.contracts?.consumes||[],dependsOn:e?.contracts?.dependsOn||[],env:e?.contracts?.env||[]}},s=JSON.stringify(e||null)!==JSON.stringify(d);return {project:d,changed:s}}async function se(e){let t$1=g__default.resolve(e.workspacePath),r=await we(t$1),o=await Pe(t$1),a=await I(t$1),c=[];for(let d of a){let s=g__default.resolve(d.path),p=await D(t(s,"project.json"))??await D(t(s,"context.json"));!p||o.some(k=>g__default.resolve(k)===g__default.resolve(p))||c.push({projectJsonPath:p,registryEntry:d});}let i=[],l=[...o.map(d=>({projectJsonPath:d})),...c];for(let{projectJsonPath:d,registryEntry:s}of l){let p=g__default.dirname(g__default.dirname(d)),k=ae(g__default.relative(t$1,p)),f=s!==void 0&&!H(k),P=te(s?.name||g__default.basename(p),g__default.basename(p)),y=f?`external/${P}`:k||P,w=await h.readJson(d),x=typeof w.kit_name=="string"&&w.kit_name||typeof w.kit=="string"&&w.kit||void 0,n=typeof w.framework=="string"&&w.framework||ye(x);i.push({slug:s?.name||y||g__default.basename(p),relativePath:y,source:s?.source??"workspace",relationship:s?.relationship,externalPath:f?p:void 0,runtime:typeof w.runtime=="string"?w.runtime:void 0,framework:n,kit:x,modules:he(w.modules),ports:ke(w),contracts:{owns:[],apis:[],publishes:[],consumes:[],dependsOn:[],env:[]}});}let u=new Map;for(let d of i){let s=te(d.slug,d.relativePath),p=u.get(s);(!p||p.source!=="workspace"&&d.source==="workspace")&&u.set(s,d);}return {schemaVersion:R,kind:"rapidkit.workspace.contract",generatedAt:(e.now??new Date).toISOString(),workspace:r,projects:[...u.values()]}}async function Qe(e){let t=g__default.resolve(e.outputPath||a$1(e.workspacePath,E));if(await h.pathExists(t)&&e.force!==true)throw new Error(`Workspace contract already exists: ${t}. Use --force to overwrite.`);let r=await se({workspacePath:e.workspacePath,now:e.now}),o=new Set,a={...r,projects:r.projects.map(i=>M(void 0,i,o).project)},c=await pe({workspacePath:e.workspacePath,contractPath:t,contract:a});if(e.strict&&c.status==="failed")throw new N(c);return await ce({workspacePath:e.workspacePath,contractPath:t,contract:a,now:e.now}),{contractPath:t,contract:a}}async function Xe(e){let t=g__default.resolve(e.workspacePath),r=a$1(t,E),o=await d(t,E)??r,a=await se({workspacePath:t,now:e.now}),c=await h.pathExists(o)?await h.readJson(o):null,i=new Map((c?.projects||[]).map(f=>[f.slug,f])),l=new Set,u=[],d$1=[],s=[];for(let f of a.projects){let P=i.get(f.slug),y=M(P,f,l);P?y.changed&&d$1.push(f.slug):u.push(f.slug),s.push(y.project),i.delete(f.slug);}for(let f of i.values()){if(f.source)continue;let P=M(f,f,l);s.push(P.project);}let p={schemaVersion:R,kind:"rapidkit.workspace.contract",generatedAt:(e.now??new Date).toISOString(),workspace:{...c?.workspace||{},...a.workspace,name:a.workspace.name||c?.workspace?.name||g__default.basename(t)},projects:s.sort((f,P)=>f.slug.localeCompare(P.slug))},k=await pe({workspacePath:t,contractPath:r,contract:p});if(e.strict&&k.status==="failed")throw new N(k);return await ce({workspacePath:t,contractPath:r,contract:p,now:e.now}),{contractPath:r,contract:p,addedProjects:u,updatedProjects:d$1,verification:k}}async function oe(e){return await h.pathExists(e)?{exists:true,contents:await h.readFile(e)}:{exists:false}}async function ne(e,t){if(!t.exists){await h.remove(e);return}await h.outputFile(e,t.contents);}async function ce(e){let{buildWorkspaceRegistrySummary:t,WORKSPACE_REGISTRY_SUMMARY_RELATIVE_PATH:r}=await import('./workspace-registry-summary-D2QM5JF6.js'),o=await t(e.workspacePath,{now:e.now,contract:e.contract}),a=a$1(e.workspacePath,r),c$1=i=>{if(!i||typeof i!="object"||Array.isArray(i))return JSON.stringify(i);let{generatedAt:l,...u}=i;return JSON.stringify(u)};if(await h.pathExists(e.contractPath)&&await h.pathExists(a)){let[i,l]=await Promise.all([h.readJson(e.contractPath),h.readJson(a)]);if(c$1(i)===c$1(e.contract)&&c$1(l)===c$1(o))return}b$1(E,e.contract),b$1(r,o),await c(e.workspacePath,E,async()=>{let[i,l]=await Promise.all([oe(e.contractPath),oe(a)]);try{if(e.contractPath===a$1(e.workspacePath,E)?await e$1(e.workspacePath,E,e.contract):(await h.ensureDir(g__default.dirname(e.contractPath)),await h.writeJson(e.contractPath,e.contract,{spaces:2})),process.env.WORKSPAI_TEST_FAIL_WORKSPACE_REGISTRY_PUBLISH==="1")throw new Error("Injected workspace registry summary publication failure.");await e$1(e.workspacePath,r,o);}catch(u){let s=(await Promise.allSettled([ne(e.contractPath,i),ne(a,l)])).filter(p=>p.status==="rejected");throw s.length>0?new AggregateError([u,...s.map(p=>p.reason)],"Workspace contract publication failed and rollback was incomplete."):u}});}async function ie(e){let t=e.contractPath??(await d(e.workspacePath,E)||a$1(e.workspacePath,E)),r=await h.readJson(t);return {contractPath:t,contract:r}}var Ee={metadata:[".workspai/project.json",".workspai/context.json",".rapidkit/project.json",".rapidkit/context.json"],manifests:["package.json","package-lock.json","pnpm-lock.yaml","yarn.lock","pyproject.toml","poetry.lock","requirements.txt","go.mod","go.sum","pom.xml","build.gradle","build.gradle.kts","Cargo.toml","Gemfile","composer.json"],entrypoints:["src/main.ts","src/index.ts","src/app.ts","src/main.js","src/index.js","main.py","app/main.py","manage.py","main.go","cmd/main.go","Program.cs"],apiSpecifications:["openapi.yaml","openapi.yml","openapi.json","swagger.yaml","swagger.yml","swagger.json"],infrastructure:["Dockerfile","docker-compose.yml","docker-compose.yaml","compose.yml","compose.yaml","k8s","kubernetes","terraform"],documentation:["README.md","ARCHITECTURE.md","CONTRIBUTING.md","docs"]};function je(e,t){return t.externalPath?g__default.resolve(t.externalPath):g__default.resolve(e,t.relativePath)}async function be(e){let t={metadata:[],manifests:[],entrypoints:[],apiSpecifications:[],infrastructure:[],documentation:[]};for(let[r,o]of Object.entries(Ee))for(let a of o)await h.pathExists(g__default.join(e,a))&&t[r].push(a);try{let r=await h.readdir(e,{withFileTypes:true});for(let o of r)o.isFile()&&(o.name.endsWith(".csproj")||o.name.endsWith(".sln"))&&t.manifests.push(o.name),o.isFile()&&o.name.endsWith(".tf")&&t.infrastructure.push(o.name);}catch{}for(let r of Object.values(t))r.sort((o,a)=>o.localeCompare(a));return t}function A(e){return !e||typeof e!="object"||Array.isArray(e)?[]:Object.keys(e).sort((t,r)=>t.localeCompare(r))}async function ve(e){try{let t=await h.readJson(g__default.join(e,"package.json")),r={runtime:A(t.dependencies),development:A(t.devDependencies),peer:A(t.peerDependencies),optional:A(t.optionalDependencies)};return {...typeof t.name=="string"?{name:t.name}:{},...typeof t.version=="string"?{version:t.version}:{},...typeof t.private=="boolean"?{private:t.private}:{},scripts:A(t.scripts),dependencies:r,dependencyCount:new Set(Object.values(r).flat()).size}}catch{return}}async function We(e){for(let t of [".env.example",".env.sample",".env.template"])try{return (await h.readFile(g__default.join(e,t),"utf8")).split(/\r?\n/).map(o=>o.trim()).filter(o=>o.length>0&&!o.startsWith("#")&&o.includes("=")).map(o=>o.slice(0,o.indexOf("=")).trim()).filter(o=>/^[A-Za-z_][A-Za-z0-9_]*$/.test(o)).sort((o,a)=>o.localeCompare(a))}catch{}return []}function Se(e,t){try{let r=w(e);if(r.engine!=="unknown")return r;let o=h.pathExistsSync(g__default.join(e,"package.json"))?"npm":h.pathExistsSync(g__default.join(e,"pyproject.toml"))?"python":h.pathExistsSync(g__default.join(e,"requirements.txt"))?"pip":"unknown";return {...r,engine:o,runtime:t.runtime??r.runtime,framework:t.framework??r.framework,frameworkDisplayName:t.framework??r.frameworkDisplayName}}catch{return {schemaVersion:1,scope:"project",projectRoot:null,engine:"unknown",runtime:"unknown",framework:"unknown",frameworkDisplayName:"Unknown",frameworkConfidence:"low",frameworkSupportTier:"observed",runtimeSupportTier:"observed",runtimeDoctorSupport:"observed",moduleSupport:false,fleetStages:[],localOnlyCommands:[],commandMap:{},supportedCommands:[],unsupportedCommands:[],globalCommands:[]}}}function Ae(e,t,r){let o=e.projects.map(a=>({id:a.slug,path:a.relativePath,runtime:a.runtime,framework:a.framework}));return {schemaVersion:"workspace-dependency-graph.v1",generatedAt:t,nodes:o,edges:[],stats:{nodeCount:o.length,edgeCount:0,inferredEdges:0,contractEdges:0,manualEdges:0,authoritativeEdges:0,lowConfidenceEdges:0,orphanCount:o.length,connectedNodeCount:0,density:0,edgeCoverageRatio:o.length===0?1:0,evidenceCoverageRatio:1,hotspotCount:0,hasCycle:false},diagnostics:[{code:"graph.enrichment.failed",severity:"warning",message:r,recommendation:"Review project manifests and graph overrides, then rerun workspace contract graph."}]}}async function et(e){let{contractPath:t,contract:r}=await ie(e),o=e.now??new Date,a$1=o.toISOString(),{buildWorkspaceModel:c,workspaceModelProjectTopology:i}=await import('./workspace-model-HHA37SNH.js'),{hashWorkspaceModel:l}=await import('./workspace-model-hash-ZXYPIGCW.js'),u=await c({workspacePath:e.workspacePath,includeEvidence:false,now:o}),d=i(u)??Ae(r,a$1,"The canonical Workspace Model did not provide a project dependency topology."),s=new Map(d.nodes.map(n=>[n.id,n.operationalProfile])),{buildWorkspaceKnowledgeGraph:p}=await import('./workspace-knowledge-graph-5MKEI4Z5.js'),k=await p({workspacePath:e.workspacePath,workspace:{name:u.workspace.name,...u.workspace.profile?{profile:u.workspace.profile}:{}},contract:r,projectTopology:d,now:o,projects:u.projects.map(n=>({id:n.name,path:n.path,...n.absolutePath?{absolutePath:n.absolutePath}:{},runtime:n.runtime,runtimeCandidates:n.runtimeCandidates,framework:n.framework,...n.kit?{kit:n.kit}:{}})),source:{kind:"workspace-model",artifact:a.model,hashAlgorithm:"sha256",hash:l(u)}}),f=await Promise.all(r.projects.map(async n=>{let m=je(e.workspacePath,n),[_,v,de]=await Promise.all([be(m),ve(m),We(m)]),C=Se(m,n);return {id:n.slug,label:n.slug,relativePath:n.relativePath,source:n.source,relationship:n.relationship,externalPath:n.externalPath,runtime:n.runtime??C.runtime,framework:n.framework??C.framework,kit:n.kit,modules:n.modules,ports:n.ports,apis:n.contracts.apis,owns:n.contracts.owns,env:[...new Set([...n.contracts.env,...de])].sort((le,ue)=>le.localeCompare(ue)),contracts:{owns:[...n.contracts.owns],apis:[...n.contracts.apis],publishes:[...n.contracts.publishes],consumes:[...n.contracts.consumes],dependsOn:[...n.contracts.dependsOn],env:[...n.contracts.env]},capabilities:{engine:C.engine,supportTier:C.frameworkSupportTier,runtimeSupportTier:C.runtimeSupportTier,doctorSupport:C.runtimeDoctorSupport,moduleSupport:C.moduleSupport,fleetStages:[...C.fleetStages],localOnlyCommands:[...C.localOnlyCommands],supportedCommands:[...C.supportedCommands]},files:_,...v?{package:v}:{},...s.get(n.slug)?{operationalProfile:s.get(n.slug)}:{}}})),P=new Set(f.map(n=>n.id)),y=new Map,w=[];for(let n of r.projects){for(let m of n.contracts.dependsOn||[])P.has(m)&&w.push({from:m,to:n.slug,type:"dependency",label:"dependsOn"});for(let m of n.contracts.publishes||[])y.has(m)||y.set(m,new Set),y.get(m)?.add(n.slug);}for(let n of r.projects)for(let m of n.contracts.consumes||[]){let _=y.get(m);if(_)for(let v of _)v!==n.slug&&w.push({from:v,to:n.slug,type:"event",label:m});}let x={schemaVersion:1,kind:"rapidkit.workspace.contract.graph",workspace:r.workspace,generatedAt:a$1,nodes:f.sort((n,m)=>n.id.localeCompare(m.id)),edges:w.sort((n,m)=>`${n.from}:${n.to}:${n.type}:${n.label}`.localeCompare(`${m.from}:${m.to}:${m.type}:${m.label}`)),dependencyGraph:d,knowledgeGraph:k,semantics:{legacyEdges:"producer-to-consumer",dependencyGraphEdges:"consumer-to-dependency"},summary:{projectCount:f.length,dependencyEdges:w.filter(n=>n.type==="dependency").length,eventEdges:w.filter(n=>n.type==="event").length,portCount:f.reduce((n,m)=>n+m.ports.length,0),apiCount:f.reduce((n,m)=>n+m.apis.length,0),relationshipEdges:d.stats.edgeCount,inferredEdges:d.stats.inferredEdges,authoritativeEdges:d.stats.authoritativeEdges,orphanProjects:d.stats.orphanCount,hotspotProjects:d.stats.hotspotCount,evidenceCoverageRatio:d.stats.evidenceCoverageRatio,edgeCoverageRatio:d.stats.edgeCoverageRatio,connectedProjects:d.stats.connectedNodeCount,lowConfidenceEdges:d.stats.lowConfidenceEdges,hasCycle:d.stats.hasCycle,manifestCount:f.reduce((n,m)=>n+m.files.manifests.length,0),entrypointCount:f.reduce((n,m)=>n+m.files.entrypoints.length,0),diagnostics:d.diagnostics?.length??0,relationshipKinds:Object.fromEntries(X.map(n=>[n,d.edges.filter(m=>m.kind===n).length])),relationshipSources:Object.fromEntries(ee.map(n=>[n,d.edges.filter(m=>m.source===n).length])),entityCount:k.quality.entityCount,knowledgeRelations:k.quality.relationCount,proofCount:k.quality.proofCount,providerCount:k.providers.length,knowledgeUnknowns:k.quality.unknownCount}};return {contractPath:t,graph:x}}async function pe(e){let t=e.contract?{contractPath:e.contractPath??a$1(e.workspacePath,E),contract:e.contract}:await ie(e),{contractPath:r,contract:o}=t,a=[],c=[];o.kind!=="rapidkit.workspace.contract"&&a.push("Contract kind must be rapidkit.workspace.contract."),o.schemaVersion!==R&&a.push(`Contract schemaVersion must be ${R}.`),o.workspace?.name||a.push("Contract workspace.name is required."),Array.isArray(o.projects)||a.push("Contract projects must be an array.");let i=new Set,l$1=new Map;for(let s of o.projects||[]){if(!s.slug){a.push("Every project must declare slug.");continue}i.has(s.slug)&&a.push(`Duplicate project slug: ${s.slug}.`),i.add(s.slug),s.relativePath?H(s.relativePath)||a.push(`Project ${s.slug} declares unsafe relativePath: ${s.relativePath}.`):a.push(`Project ${s.slug} must declare relativePath.`),s.externalPath&&(s.relationship==="adopted"||s.source==="adopted-local"||s.source==="local-folder"||s.source==="git-url"||a.push(`Project ${s.slug} declares externalPath without imported/adopted provenance.`),g__default.isAbsolute(s.externalPath)||a.push(`Project ${s.slug} declares non-absolute externalPath.`));for(let p of s.ports||[]){(!Number.isInteger(p.port)||p.port<1||p.port>65535)&&a.push(`Project ${s.slug} declares invalid port: ${p.port}.`);let k=l$1.get(p.port);k&&a.push(`Port ${p.port} is claimed by both ${k} and ${s.slug}.`),l$1.set(p.port,s.slug);}for(let p of s.contracts?.apis||[])(!p.name?.trim()||!p.basePath?.startsWith("/"))&&a.push(`Project ${s.slug} declares invalid API contract.`);for(let p of [...s.contracts?.publishes||[],...s.contracts?.consumes||[]])p.trim()||a.push(`Project ${s.slug} declares an empty event contract.`);for(let p of s.contracts?.env||[])/^[A-Z_][A-Z0-9_]*$/.test(p)||a.push(`Project ${s.slug} declares invalid env contract: ${p}.`);for(let p of s.contracts?.dependsOn||[])i.has(p);}for(let s of o.projects||[])for(let p of s.contracts?.dependsOn||[])i.has(p)||a.push(`Project ${s.slug} depends on unknown project: ${p}.`);c.push({id:"schema",status:o.kind==="rapidkit.workspace.contract"&&o.schemaVersion===R?"passed":"failed",message:"Contract schema and kind are valid."}),c.push({id:"projects",status:Array.isArray(o.projects)?"passed":"failed",message:`Contract declares ${Array.isArray(o.projects)?o.projects.length:0} project(s).`}),c.push({id:"ports",status:a.some(s=>s.toLowerCase().includes("port"))?"failed":"passed",message:"Project port declarations are valid and collision-free."}),c.push({id:"dependencies",status:a.some(s=>s.includes("depends on unknown project"))?"failed":"passed",message:"Project dependencies point to known project slugs."}),c.push({id:"contracts",status:a.some(s=>s.includes("unsafe relativePath")||s.includes("invalid API contract")||s.includes("event contract")||s.includes("env contract"))?"failed":"passed",message:"Project path, API, event, and env contracts are valid."});let u=await l(e.workspacePath);if(u.moduleCount>0){for(let s of u.issues)a.push(`${g__default.basename(s.projectRoot)}: ${s.message} (slug=${s.slug})`);c.push({id:"module-paths",status:u.status,message:u.status==="passed"?`All ${u.moduleCount} registered module(s) resolve under canonical paths.`:`${u.issues.length} registered module(s) missing canonical install paths.`});}else e.strict&&c.push({id:"module-paths",status:"passed",message:"No registry-backed modules declared in workspace projects."});return {status:a.length>0?"failed":"passed",contractPath:r,projectCount:Array.isArray(o.projects)?o.projects.length:0,checks:c,violations:a}}async function tt(e){let t=g__default.resolve(e.workspacePath),r={schemaVersion:fe,generatedAt:e.generatedAt??new Date().toISOString(),status:e.result.status,contractPath:e.result.contractPath,projectCount:e.result.projectCount,checks:e.result.checks,violations:e.result.violations};return e$1(t,ge,q(r))}
|
|
2
|
-
export{I as a,Ie as b,Ne as c,q as d,Ve as e,X as f,E as g,ge as h,R as i,fe as j,N as k,Pe as l,se as m,Qe as n,Xe as o,ie as p,et as q,pe as r,tt as s};
|
package/dist/chunk-BYTFXQ6G.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import {a as a$5}from'./chunk-HTYMXMQM.js';import {i,o}from'./chunk-WJVB6SSD.js';import {a as a$3}from'./chunk-2D4UOYOJ.js';import {a as a$1}from'./chunk-Y5YAP4F3.js';import {d as d$1,c as c$1}from'./chunk-EWZZUQBR.js';import {a as a$2,p,d,g,f as f$3,e as e$1}from'./chunk-BBGNDMRU.js';import {c,b as b$2,i as i$1,w,f as f$2}from'./chunk-TROHVI2V.js';import {j as j$1,i as i$2,h}from'./chunk-L2E2Z4OE.js';import {f as f$1,d as d$2,a as a$4,e}from'./chunk-XBM2P45G.js';import {b as b$1,a}from'./chunk-AHLMIL2T.js';import {t,s}from'./chunk-MOSXTVPU.js';import f from'path';import E from'fs-extra';import Mt from'crypto';import {createRequire}from'module';var Et=new Set(["backend","desktop","extension","service","frontend","worker","library","infra","docs","test-suite","unknown"]);async function Ze(e){try{if(!await E.pathExists(e))return null;let t=await E.readJSON(e);return t&&typeof t=="object"?t:null}catch{return null}}async function Wt(e){for(let t of e){let r=await Ze(t);if(r)return r}return null}function Qe(e){if(typeof e!="string")return null;let t=e.trim().toLowerCase();return Et.has(t)?t==="service"?"backend":t:null}function et(e){switch(e){case "backend":case "service":case "worker":return "backend";case "frontend":case "desktop":case "extension":case "library":return e;case "infra":return "infrastructure";case "docs":return "documentation";case "test-suite":return "quality";default:return "unknown"}}async function tt(e,t$1){let r=t$1??await Wt(t(e,"project.json")),o=Qe(r?.kind)??Qe(r?.type);if(o)return o;let s=typeof r?.kit_name=="string"?r.kit_name:r?.kit,n=typeof r?.framework=="string"?r.framework:null,i=typeof r?.runtime=="string"?r.runtime:null,a=`${typeof s=="string"?s:""} ${n??""} ${i??""}`.trim().toLowerCase();if(/\b(tauri|electron|wails|desktop)\b/.test(a))return "desktop";if(/\b(vscode-extension|visual studio code extension|jetbrains-plugin|browser-extension)\b/.test(a))return "extension";if(/\b(frontend|nextjs|next\.js|react|vue|svelte|vite|angular|astro|remix|nuxt)\b/.test(a))return "frontend";if(/\b(fastapi|nestjs|springboot|spring boot|gofiber|gogin|dotnet|webapi|django|flask|express|fastify|python|node|java|go|rust|php|ruby|elixir)\b/.test(a))return "backend";let c=await Ze(f.join(e,"package.json"));if(c){let d={...c.dependencies??{},...c.devDependencies??{}},u=c.scripts??{},p=Object.values(u).filter(v=>typeof v=="string").join(" ").toLowerCase(),l=c.engines??{},m=Array.isArray(c.categories)?c.categories.filter(v=>typeof v=="string"):[];if(d["@tauri-apps/api"]||d["@tauri-apps/cli"]||await E.pathExists(f.join(e,"src-tauri","tauri.conf.json"))||await E.pathExists(f.join(e,"src-tauri","tauri.conf.json5"))||d.electron||d["@electron-forge/cli"]||p.includes("electron-forge")||p.includes("electron "))return "desktop";if(typeof l.vscode=="string"||m.some(v=>v.toLowerCase()==="extension packs")||c.publisher&&(c.activationEvents||c.contributes))return "extension";if(d.next||d.react||d.vue||d.svelte||d.vite||d["@angular/core"]||p.includes("next ")||p.includes("vite "))return "frontend";if(c.private===true&&!d.express&&!d["@nestjs/core"])return "library"}return await E.pathExists(f.join(e,"Dockerfile"))||await E.pathExists(f.join(e,"docker-compose.yml"))||await E.pathExists(f.join(e,"terraform.tf"))?"infra":"backend"}var xt=new Set(c().map(e=>e.id)),Rt=[...i().map(e=>({id:e.kitId,aliases:[...e.aliases],ecosystem:e.framework,status:"available",canExecuteCreate:true,versionPolicy:e.versionPolicy,officialCommands:[e.commandDisplay("<name>",{skipGit:false,skipInstall:false})],adoptAfterCreate:true,...e.minNodeVersion?{runtimeRequirements:{node:`>=${e.minNodeVersion}`}}:e.minNodeMajor?{runtimeRequirements:{node:`>=${e.minNodeMajor}`}}:{}})),...o().map(e=>({id:e.kitId,aliases:[...e.aliases],ecosystem:e.framework,status:"available",canExecuteCreate:true,versionPolicy:e.versionPolicy,officialCommands:[e.commandDisplay("<name>",{skipGit:false,skipInstall:false})],adoptAfterCreate:true,...e.nodeSupport?{runtimeRequirements:{node:e.nodeSupport.requirement}}:{}})),{id:"wordpress-site",aliases:["wordpress","wordpress-site","wp","wp-site"],ecosystem:"wordpress",status:"planned",canExecuteCreate:false,versionPolicy:"planned",officialCommands:["wp core download","wp config create","wp db create","wp core install"],adoptAfterCreate:true},{id:"wordpress-block",aliases:["wordpress-block","wp-block","gutenberg-block"],ecosystem:"wordpress",status:"planned",canExecuteCreate:false,versionPolicy:"planned",officialCommands:["npx @wordpress/create-block@latest <slug>"],adoptAfterCreate:true},{id:"symfony",aliases:["symfony","php-symfony"],ecosystem:"php",status:"planned",canExecuteCreate:false,versionPolicy:"planned",officialCommands:["composer create-project symfony/skeleton <name>"],adoptAfterCreate:true},{id:"rails",aliases:["rails","ruby-on-rails","ruby-rails"],ecosystem:"ruby",status:"planned",canExecuteCreate:false,versionPolicy:"planned",officialCommands:["rails new <name>"],adoptAfterCreate:true}],B=new Map;for(let e of Rt){B.set(e.id,e);for(let t of e.aliases)B.set(t,e);}var At=new Set(["php","ruby","rust","elixir","clojure","scala","kotlin","unknown"]);function T(e){return e?.trim().toLowerCase()||void 0}function rt(e){let t=T(e.kitId)??T(e.framework)??T(e.runtime)??"unknown";if(e.projectExists)return {lane:"existing",status:"available",canExecuteCreate:false,requested:t,reason:"Existing projects enter Workspace Intelligence through adopt/import."};let r=e.kitId?b$2(e.kitId):void 0;if(r&&xt.has(r))return {lane:"native",status:"available",canExecuteCreate:true,requested:t,resolved:r,reason:"Workspai owns the create contract, project marker, registry, doctor, and workspace model path."};let o=B.get(t)??B.get(T(e.framework)??"")??B.get(T(e.runtime)??"");if(o)return {lane:"official",status:o.status,canExecuteCreate:o.canExecuteCreate,requested:t,resolved:o.id,officialCommands:o.officialCommands,fallbackLane:o.canExecuteCreate?void 0:"existing",reason:o.status==="available"?"Workspai runs the official ecosystem generator, then registers the project in Workspace Intelligence.":"Official generator support is planned but not enabled; use adopt/import until Workspai owns the post-create contract."};let s=T(e.runtime);return s&&At.has(s)?{lane:"existing",status:"available",canExecuteCreate:false,requested:t,resolved:s,reason:"Runtime can be governed through Workspace Intelligence, but native create is not supported."}:{lane:"existing",status:"available",canExecuteCreate:false,requested:t,reason:"No native create contract is available; use adopt/import to enter Workspace Intelligence."}}function Fr(e){return !e.canExecuteCreate&&(e.lane==="official"||e.lane==="existing"&&e.resolved!==void 0)}var _r="rapidkit-freshness-metadata-v1";function ge(e){if(Array.isArray(e))return e.map(t=>ge(t));if(e&&typeof e=="object"){let t={};for(let r of Object.keys(e).sort())t[r]=ge(e[r]);return t}return e}function It(e){return JSON.stringify(ge(e))}function N(e){return Mt.createHash("sha256").update(It(e)).digest("hex")}var nt=".workspai/workspace-graph.overrides.json",Ft=new Set([".ts",".tsx",".js",".jsx",".mjs",".cjs"]),Dt=new Set([".git",".hg",".svn",".workspai",".rapidkit",".venv","node_modules","dist","build","out","target","coverage","htmlcov",".next",".turbo",".cache"]),st=600,at=5,Ot=256*1024,ot={inferred:1,contract:2,manual:3};function Gt(e){return e.split(f.sep).join("/")}function te(e,t){return Gt(f.relative(e,t)||".")}function it(e){let t=new Map;for(let r of e.projects)t.has(r.name)||t.set(r.name,{id:r.name,path:r.path,...r.runtime?{runtime:r.runtime}:{},...r.framework?{framework:r.framework}:{},...r.kind?{kind:r.kind}:{}});return [...t.values()].sort((r,o)=>r.id.localeCompare(o.id))}function ct(e,t){let r=new Map,o=new Map;for(let n of t.projects){if(r.has(n.name))continue;let i=n.absolutePath?f.resolve(n.absolutePath):f.resolve(e,n.path);r.set(n.name,i),o.has(i)||o.set(i,n.name);}let s=[...o.entries()].map(([n,i])=>({dir:n,id:i})).sort((n,i)=>i.dir.length-n.dir.length||n.dir.localeCompare(i.dir));return {idToDir:r,dirToId:o,sortedDirs:s}}function re(e,t){let r=f.resolve(t);for(let{dir:o,id:s}of e.sortedDirs)if(r===o||r.startsWith(`${o}${f.sep}`))return s;return null}async function ye(e){try{if(!await E.pathExists(e))return null;let t=await E.readJSON(e);return t&&typeof t=="object"&&!Array.isArray(t)?t:null}catch{return null}}async function ve(e){try{return await E.pathExists(e)?await E.readFile(e,"utf8"):null}catch{return null}}async function dt(e,t){let r=[],o=new Map;for(let[s,n]of t.idToDir.entries()){let i=await ye(f.join(n,"package.json")),a=typeof i?.name=="string"?i.name.trim():"";a&&!o.has(a)&&o.set(a,s);}for(let[s,n]of t.idToDir.entries()){let i=await ye(f.join(n,"package.json"));if(i){let a=["dependencies","devDependencies","peerDependencies","optionalDependencies"],c=new Set;for(let d of a){let u=i[d];if(!(!u||typeof u!="object"||Array.isArray(u)))for(let p of Object.keys(u)){let l=o.get(p);!l||l===s||c.has(l)||(c.add(l),r.push({from:s,to:l,kind:"package-dep",source:"inferred",confidence:"high",evidence:[{file:te(e,f.join(n,"package.json")),detail:`declares dependency ${p}`}]}));}}}r.push(...await _t(e,t,s,n)),r.push(...await Tt(e,t,s,n));}return r}async function _t(e,t,r,o){let s=await ve(f.join(o,"pyproject.toml"));if(!s)return [];let n=[],i=new Set,a=/path\s*=\s*["']([^"']+)["']/g,c;for(;(c=a.exec(s))!==null;){let d=re(t,f.resolve(o,c[1]));!d||d===r||i.has(d)||(i.add(d),n.push({from:r,to:d,kind:"package-dep",source:"inferred",confidence:"high",evidence:[{file:te(e,f.join(o,"pyproject.toml")),detail:`path dependency ${c[1]}`}]}));}return n}async function Tt(e,t,r,o){let s=await ve(f.join(o,"go.mod"));if(!s)return [];let n=[],i=new Set,a=/replace\s+\S+\s+=>\s+(\.[^\s]+)/g,c;for(;(c=a.exec(s))!==null;){let d=re(t,f.resolve(o,c[1]));!d||d===r||i.has(d)||(i.add(d),n.push({from:r,to:d,kind:"package-dep",source:"inferred",confidence:"high",evidence:[{file:te(e,f.join(o,"go.mod")),detail:`go.mod replace ${c[1]}`}]}));}return n}async function Nt(e,t){let r=[],o=[e];for(;o.length>0&&r.length<t;){let s=o.shift();if(!s)continue;let n=[];try{n=await E.readdir(s,{withFileTypes:true});}catch{continue}let i=[],a=[];for(let c of n)if(c.isDirectory()){if(Dt.has(c.name)||c.name.startsWith("."))continue;i.push(f.join(s,c.name));}else c.isFile()&&Ft.has(f.extname(c.name))&&a.push(f.join(s,c.name));a.sort((c,d)=>c.localeCompare(d)),i.sort((c,d)=>c.localeCompare(d));for(let c of a){if(r.length>=t)break;r.push(c);}o.push(...i);}return r}var $t=[/\bfrom\s+["']([^"']+)["']/g,/\bimport\s+["']([^"']+)["']/g,/\bimport\s*\(\s*["']([^"']+)["']\s*\)/g,/\brequire\s*\(\s*["']([^"']+)["']\s*\)/g];function Vt(e){let t=new Set;for(let r of $t){r.lastIndex=0;let o;for(;(o=r.exec(e))!==null;){let s=o[1];s.startsWith(".")&&t.add(s);}}return [...t]}async function we(e,t,r,o){let s=new Map;for(let[n,i]of t.idToDir.entries()){if(o&&!o.has(n))continue;let a=await Nt(i,r);for(let c of a){let d=await E.stat(c).catch(()=>null);if(!d||d.size>Ot)continue;let u=await ve(c);if(u)for(let p of Vt(u)){let l=f.resolve(f.dirname(c),p),m=re(t,l);if(!m||m===n)continue;let v=`${n}\0${m}`,h=s.get(v);h||(h={from:n,to:m,evidence:[]},s.set(v,h)),h.evidence.length<at&&h.evidence.push({file:te(e,c),detail:`imports ${p}`});}}}return [...s.values()].map(n=>({from:n.from,to:n.to,kind:"code-import",source:"inferred",confidence:"medium",evidence:n.evidence}))}function Ht(e,t,r){let o=new Map;for(let s of r.projects){let n=Kt(e,t,s);n&&o.set(s.slug,n);}return o}function Kt(e,t,r){let o=[r.relativePath,r.externalPath].filter(s=>typeof s=="string"&&s.length>0);for(let s of o){let n=f.resolve(e,s),i=t.dirToId.get(n)??re(t,n);if(i)return i}return t.idToDir.has(r.slug)?r.slug:null}function pt(e,t,r){let o=[],s=Ht(e,t,r),n=g,i=new Map,a=new Map;for(let c of r.projects){let d=s.get(c.slug);if(!d)continue;let u=c.contracts??{publishes:[],consumes:[],dependsOn:[]};for(let p of u.dependsOn??[]){let l=s.get(p);!l||l===d||o.push({from:d,to:l,kind:"service-dependsOn",source:"contract",confidence:"high",evidence:[{file:n,detail:`dependsOn ${p}`}]});}for(let p of u.publishes??[])i.has(p)||i.set(p,new Set),i.get(p)?.add(d);for(let p of u.consumes??[])a.has(p)||a.set(p,new Set),a.get(p)?.add(d);}for(let[c,d]of i.entries()){let u=a.get(c);if(u)for(let p of u)for(let l of d)p!==l&&o.push({from:p,to:l,kind:"event-pub-sub",source:"contract",confidence:"high",evidence:[{file:n,detail:`consumes event ${c}`}]});}return o.push(...Bt(r,s)),o}function he(e){return e.toLowerCase().replace(/[^a-z0-9]/g,"")}function Bt(e,t){let r=[],o=e.projects.map(s=>({project:s,id:t.get(s.slug)})).filter(s=>!!s.id).filter(s=>he(s.project.slug).length>=3);for(let s of e.projects){let n=t.get(s.slug);if(!n)continue;let i=s.contracts?.env??[];if(i.length===0)continue;let a=new Set;for(let c of i){let d=he(c);for(let u of o)u.id===n||a.has(u.id)||!(d.includes(he(u.project.slug))&&(u.project.ports?.length??0)>0)||(a.add(u.id),r.push({from:n,to:u.id,kind:"shared-resource",source:"inferred",confidence:"low",evidence:[{file:g,detail:`env ${c} references ${u.project.slug}`}]}));}}return r}async function lt(e,t){let r=await ye(f.join(e,nt)),o=Array.isArray(r?.edges)?r?.edges:[],s=[],n=new Set(f$3);for(let i of o){if(!i||typeof i!="object"||Array.isArray(i))continue;let a=i,c=typeof a.from=="string"?a.from:"",d=typeof a.to=="string"?a.to:"",u=typeof a.kind=="string"?a.kind:"";if(!t.has(c)||!t.has(d)||c===d||!n.has(u))continue;let p=Array.isArray(a.evidence)?a.evidence.map(l=>l&&typeof l=="object"&&typeof l.file=="string"?{file:l.file,...typeof l.detail=="string"?{detail:l.detail}:{}}:null).filter(l=>!!l):[];s.push({from:c,to:d,kind:u,source:"manual",confidence:"high",evidence:p.length>0?p:[{file:nt,detail:"manual edge"}]});}return s}function Lt(e){return `${e.from}\0${e.to}\0${e.kind}`}function zt(e){let t=new Set,r=[];for(let o of e){let s=`${o.file}\0${o.detail??""}`;t.has(s)||(t.add(s),r.push(o));}return r.sort((o,s)=>o.file.localeCompare(s.file)||(o.detail??"").localeCompare(s.detail??"")).slice(0,at)}function qt(e){let t=new Map;for(let r of e){let o=Lt(r),s=t.get(o);if(!s){t.set(o,{...r,evidence:[...r.evidence]});continue}let n=ot[s.source],i=ot[r.source];i>n?t.set(o,{...r,evidence:[...r.evidence,...s.evidence]}):i===n&&s.evidence.push(...r.evidence);}return [...t.values()].map(r=>({from:r.from,to:r.to,kind:r.kind,source:r.source,confidence:r.confidence,evidence:zt(r.evidence)})).sort((r,o)=>r.from.localeCompare(o.from)||r.to.localeCompare(o.to)||r.kind.localeCompare(o.kind)||r.source.localeCompare(o.source))}function ke(e){return Math.round(e*1e3)/1e3}function Ut(e){return Math.max(0,Math.min(100,Math.round(e)))}function Jt(e){return e>=75?"critical":e>=50?"high":e>=20?"medium":"low"}function Xt(e){return e==="critical"||e==="high"?"strict":e==="medium"?"elevated":"normal"}function Yt(e,t){let r=a$5({nodes:e,edges:t}),o=new Map;for(let s of e){let n=r.byId.get(s.id)??{fanIn:0,fanOut:0,reach:0,betweenness:0,isHotspot:false},i=t.filter(m=>m.from===s.id||m.to===s.id),a=i.filter(m=>m.source==="contract"||m.source==="manual").length,c=i.filter(m=>m.confidence==="low").length,d=[],u=n.reach*20+n.fanIn*14+n.fanOut*8+Math.min(20,n.betweenness*4)+a*8;n.isHotspot&&(u+=24,d.push("Critical-path hotspot in dependency graph")),n.reach>0&&d.push(`Change reaches ${n.reach} dependent project(s)`),n.fanIn>0&&d.push(`${n.fanIn} direct dependent project(s)`),n.fanOut>0&&d.push(`${n.fanOut} direct dependency project(s)`),a>0&&d.push(`${a} contract/manual edge(s)`),c>0&&d.push(`${c} low-confidence inferred edge(s) need review`),i.length===0&&d.push("No dependency evidence connected to this project yet");let p=Ut(u),l=Jt(p);o.set(s.id,{weight:l,score:p,verificationPriority:Xt(l),reasons:d.slice(0,5),centrality:{fanIn:n.fanIn,fanOut:n.fanOut,reach:n.reach,betweenness:n.betweenness,isHotspot:n.isHotspot}});}return o}function Qt(e,t){let r=Yt(e,t);return e.map(o=>({...o,operationalProfile:r.get(o.id)}))}function Zt(e,t){let r=new Set;for(let c of t)r.add(c.from),r.add(c.to);let o=e.length,s=t.length,n=e.filter(c=>r.has(c.id)).length,i=Math.max(0,o-n),a=a$5({nodes:e,edges:t});return {nodeCount:o,edgeCount:s,inferredEdges:t.filter(c=>c.source==="inferred").length,contractEdges:t.filter(c=>c.source==="contract").length,manualEdges:t.filter(c=>c.source==="manual").length,authoritativeEdges:t.filter(c=>c.source==="contract"||c.source==="manual").length,lowConfidenceEdges:t.filter(c=>c.confidence==="low").length,orphanCount:i,connectedNodeCount:n,density:ke(o>1?s/(o*(o-1)):0),edgeCoverageRatio:ke(o>0?n/o:1),evidenceCoverageRatio:ke(s>0?t.filter(c=>c.evidence.length>0).length/s:1),hotspotCount:a.hotspots.length,hasCycle:tr(e,t)}}function er(e,t,r){let o=[],s=e.filter(n=>!t.some(i=>i.from===n.id||i.to===n.id)).map(n=>n.id).sort((n,i)=>n.localeCompare(i));return r.nodeCount===0&&o.push({code:"graph.empty",severity:"info",message:"Workspace model has no projects, so dependency reasoning is unavailable.",recommendation:"Import, scaffold, or register projects before relying on graph-aware impact."}),r.nodeCount>1&&r.edgeCount===0?o.push({code:"graph.edges.missing",severity:"warning",message:"Projects were detected, but no inter-project dependency edges were found.",recommendation:"Run graph explain, add workspace contract relationships, or define manual graph overrides for operational dependencies that code imports cannot reveal.",nodeIds:s}):r.orphanCount>0&&o.push({code:"graph.orphans.detected",severity:"warning",message:`${r.orphanCount} project(s) have no dependency evidence connected to the graph.`,recommendation:"Review isolated projects and add package, contract, or manual edges when they participate in release-critical flows.",nodeIds:s.slice(0,12)}),r.lowConfidenceEdges>0&&o.push({code:"graph.low_confidence_edges",severity:"info",message:`${r.lowConfidenceEdges} inferred edge(s) are low confidence.`,recommendation:"Promote important low-confidence relationships to workspace contract or manual overrides."}),r.edgeCount>0&&r.evidenceCoverageRatio<1&&o.push({code:"graph.evidence.partial",severity:"warning",message:"Some dependency edges do not include file-level evidence.",recommendation:"Attach evidence to manual overrides so agents can audit why a relationship exists."}),r.hasCycle&&o.push({code:"graph.cycle.detected",severity:"error",message:"The dependency graph contains at least one directed cycle.",recommendation:"Break the cycle or document the relationship explicitly before using graph-aware release gates."}),o.sort((n,i)=>{let a={error:0,warning:1,info:2};return a[n.severity]-a[i.severity]||n.code.localeCompare(i.code)})}function tr(e,t){let r=new Map;for(let c of e)r.set(c.id,[]);for(let c of t)r.has(c.from)||r.set(c.from,[]),r.get(c.from)?.push(c.to);let o=0,s=1,n=2,i=new Map;for(let c of r.keys())i.set(c,o);let a=c=>{let d=[{id:c,index:0}];for(i.set(c,s);d.length>0;){let u=d[d.length-1],p=r.get(u.id)??[];if(u.index>=p.length){i.set(u.id,n),d.pop();continue}let l=p[u.index];u.index+=1;let m=i.get(l)??o;if(m===s)return true;m===o&&(i.set(l,s),d.push({id:l,index:0}));}return false};for(let c of [...r.keys()].sort())if(i.get(c)===o&&a(c))return true;return false}function ut(e,t,r,o){let s=qt(r.filter(c=>t.has(c.from)&&t.has(c.to))),n=Qt(e,s),i=Zt(e,s),a=er(e,s,i);return {schemaVersion:e$1,generatedAt:(o??new Date).toISOString(),nodes:n,edges:s,stats:i,...a.length>0?{diagnostics:a}:{}}}async function ft(e){let t=f.resolve(e.workspacePath),r=e.maxImportFilesPerProject??st,o=it(e.model),s=new Set(o.map(a=>a.id)),n=ct(t,e.model),i=[];return i.push(...await dt(t,n)),i.push(...await we(t,n,r)),e.contract&&i.push(...pt(t,n,e.contract)),i.push(...await lt(t,s)),ut(o,s,i,e.now)}async function mt(e){let t=f.resolve(e.workspacePath),r=e.maxImportFilesPerProject??st,o=it(e.model),s=new Set(o.map(a=>a.id)),n=ct(t,e.model),i=[];if(i.push(...await dt(t,n)),e.structuralChange)i.push(...await we(t,n,r));else {i.push(...await we(t,n,r,e.changedProjectIds));for(let a of e.previousGraph.edges)a.kind==="code-import"&&a.source==="inferred"&&!e.changedProjectIds.has(a.from)&&s.has(a.from)&&s.has(a.to)&&i.push({from:a.from,to:a.to,kind:"code-import",source:"inferred",confidence:a.confidence,evidence:a.evidence});}return e.contract&&i.push(...pt(t,n,e.contract)),i.push(...await lt(t,s)),ut(o,s,i,e.now)}var je="workspace-model-cache.v1",be=".workspai/cache/workspace-model.v1.json",gt=["package.json","pyproject.toml","requirements.txt","go.mod","go.sum","pom.xml","build.gradle","build.gradle.kts","Cargo.toml","composer.json","Gemfile","workspai.project.json",".workspai/project.json",".workspai/context.json","rapidkit.project.json",".rapidkit/project.json",".rapidkit/context.json"],ht=[".workspai/workspace.contract.json",".workspai/workspace.json","workspai.workspace.json",".workspai/policies.yml",".workspai/policies.yaml",".rapidkit/workspace.contract.json",".rapidkit/workspace.json","rapidkit.workspace.json",".rapidkit/policies.yml",".rapidkit/policies.yaml"],or=new Set([".ts",".tsx",".js",".jsx",".mjs",".cjs"]),sr=new Set([".git",".workspai",".rapidkit","node_modules","dist","build","out","target","coverage",".next",".turbo",".cache",".venv"]),ar=1500,L=null;function Pe(){if(L)return L;try{L=createRequire(import.meta.url)("../package.json")?.version??"0.0.0";}catch{L="0.0.0";}return L}async function ne(e){try{let t=await E.readFile(e);return Mt.createHash("sha256").update(t).digest("hex")}catch{return null}}async function ir(e){let t={};for(let s of gt){let n=await ne(f.join(e,s));n&&(t[s]=n);}let r=[],o=[e];for(;o.length>0&&r.length<ar;){let s=o.shift();if(!s)continue;let n=[];try{n=await E.readdir(s,{withFileTypes:true});}catch{continue}let i=[];for(let a of n)if(a.isDirectory()){if(sr.has(a.name)||a.name.startsWith("."))continue;i.push(f.join(s,a.name));}else if(a.isFile()&&or.has(f.extname(a.name))){let c=f.join(s,a.name),d=await E.stat(c).catch(()=>null);if(d){let u=f.relative(e,c).split(f.sep).join("/");r.push(`${u}:${d.size}:${Math.round(d.mtimeMs)}`);}}i.sort((a,c)=>a.localeCompare(c)),o.push(...i);}return r.sort((s,n)=>s.localeCompare(n)),N({manifests:t,source:r})}async function oe(e,t){let r=f.resolve(e),o={},s=[...new Set(t.map(n=>f.relative(r,f.resolve(n)).split(f.sep).join("/")))].sort((n,i)=>n.localeCompare(i));for(let n of s)o[n]=await ir(f.join(r,n));return o}async function se(e){let t=f.resolve(e),r={};for(let o of ht){let s=await ne(f.join(t,o));s&&(r[o]=s);}return r}async function ae(e){let t=f.resolve(e.workspacePath),r=[...new Set(e.projectPaths.map(n=>f.relative(t,f.resolve(n)).split(f.sep).join("/")))].sort((n,i)=>n.localeCompare(i)),o=[];for(let n of r){let i={};for(let a of gt){let c=await ne(f.join(t,n,a));c&&(i[a]=c);}o.push({project:n,manifests:i});}let s={};for(let n of ht){let i=await ne(f.join(t,n));i&&(s[n]=i);}return N({cacheSchema:je,cliVersion:e.cliVersion,flags:e.flags,workspaceJson:e.workspaceJson??null,marker:e.marker??null,projects:o,workspaceFiles:s})}async function Ce(e){let t=await d$2(e,be)??a$4(e,be);try{if(!await E.pathExists(t))return null;let r=await E.readJson(t);return !r||r.schemaVersion!==je||typeof r.inputsHash!="string"||typeof r.cliVersion!="string"||!r.model?null:r}catch{return null}}async function ie(e$1,t){let r={schemaVersion:je,...t};return e(e$1,be,r)}var kt="rapidkit-fact-freshness-v1",q={durable:720*60*60,derived:10080*60,evidenceBacked:1440*60,live:300,verifyBeforeUse:1440*60};function cr(e){switch(e){case "durable":return q.durable;case "derived":return q.derived;case "evidence-backed":return q.evidenceBacked;case "live":return q.live;case "verify-before-use":return q.verifyBeforeUse}}function dr(e){if(e.status)return e.status;if(e.ttlSeconds===null)return "unknown";let t=Date.parse(e.generatedAt);if(!Number.isFinite(t))return "unknown";let r=t+e.ttlSeconds*1e3;return e.now.getTime()>r?"stale":"fresh"}function pr(e){let t=e.now??new Date,r=e.generatedAt??t.toISOString(),o=Date.parse(r),s=Number.isFinite(o),n=s?r:t.toISOString(),i=e.ttlSeconds===void 0?cr(e.kind):e.ttlSeconds,a=dr({generatedAt:n,ttlSeconds:i,status:e.status??(s?void 0:"unknown"),now:t}),c=Date.parse(n),d=i===null||!Number.isFinite(c)?void 0:new Date(c+i*1e3),u=e.verifyBeforeUse??(e.kind==="live"||e.kind==="verify-before-use"||e.category!=="structure"||a!=="fresh");return {schemaVersion:kt,kind:e.kind,category:e.category,generatedAt:n,ttlSeconds:i,...d?{expiresAt:d.toISOString()}:{},status:a,verifyBeforeUse:u,...e.sourceArtifact?{sourceArtifact:e.sourceArtifact}:{},...e.sourcePath?{sourcePath:e.sourcePath}:{},inputsHash:e.inputsHash??N(e.value??null),reason:e.reason}}function b(e){return {id:e.id,label:e.label,scope:e.scope,value:e.value,...e.project?{project:e.project}:{},freshness:pr({...e.freshness,value:e.value})}}function yt(e){let t=e.generatedAt??(e.now??new Date).toISOString(),r={durable:0,derived:0,"evidence-backed":0,live:0,"verify-before-use":0},o={structure:0,verification:0,state:0},s=0,n=0,i=0,a=0;for(let c of e.facts)r[c.freshness.kind]+=1,o[c.freshness.category]+=1,c.freshness.status==="stale"&&(s+=1),c.freshness.status==="unknown"&&(n+=1),c.freshness.kind==="live"&&(i+=1),c.freshness.verifyBeforeUse&&(a+=1);return {schemaVersion:kt,generatedAt:t,status:s>0?"stale":n>0?"unknown":"fresh",totalFacts:e.facts.length,staleFacts:s,unknownFacts:n,liveFacts:i,verifyBeforeUseFacts:a,byKind:r,byCategory:o}}var lr=b$1.model,ce=a.model;function Se(e){return e.projectTopology??e.graph}function vt(e){return !!(e.projectTopology&&e.graph&&c$1(e.projectTopology)===c$1(e.graph))}function En(e){let t=e.engineStatus==="hit"||e.engineStatus==="unchanged"?"reused":e.engineStatus==="incremental"?"partially-reused":"rebuilt";return {schemaVersion:"workspace-model-build.v1",mode:e.mode,outcome:t,engineStatus:e.engineStatus}}var ur=["package.json","pyproject.toml","requirements.txt","go.mod","pom.xml","build.gradle","build.gradle.kts","Cargo.toml","composer.json","Gemfile","mix.exs","deno.json","deno.jsonc","bun.lock","bun.lockb","deps.edn","project.clj","build.sbt","docker-compose.yml","docker-compose.yaml","terraform.tf"],fr=new Set([".git",".hg",".svn",".workspai",".rapidkit",".venv","node_modules","dist","build","target","coverage","htmlcov",".next",".turbo"]);function bt(e,t){return (f.relative(e,t)||".").split(f.sep).join("/")}async function jt(e){try{if(!await E.pathExists(e))return null;let t=await E.readJSON(e);return t&&typeof t=="object"?t:null}catch{return null}}async function mr(e,t){for(let r of t)if(await E.pathExists(f.join(e,r)))return true;return false}function Ee(e){let t=Number.parseInt(process.env.RAPIDKIT_WORKSPACE_MODEL_SCAN_DEPTH??"",10),r=typeof e=="number"&&Number.isFinite(e)?e:Number.isFinite(t)?t:4;return Math.min(12,Math.max(1,Math.trunc(r)))}async function We(e,t){let r=f.resolve(e),o=[{dirPath:r,depth:0}],s=new Set,n=new Set;for(;o.length>0;){let i=o.shift();if(!i)continue;let a=f.resolve(i.dirPath);if(n.has(a))continue;if(n.add(a),a!==r&&await mr(a,ur)){s.add(a);continue}if(i.depth>=t)continue;let c=[];try{c=await E.readdir(a,{withFileTypes:true});}catch{continue}for(let d of c)!d.isDirectory()||fr.has(d.name)||d.name.startsWith(".")&&d.name!==".config"||o.push({dirPath:f.join(a,d.name),depth:i.depth+1});}return Array.from(s).sort((i,a)=>i.localeCompare(a))}function xe(e){let t=new Set,r=[];for(let o of e){let s=f.resolve(o);t.has(s)||(t.add(s),r.push(s));}return r.sort((o,s)=>o.localeCompare(s))}function wt(e,t){let r=e?.[t];return typeof r=="string"&&r.trim()?r.trim():void 0}function gr(e,t){return e?.[t]===true}function hr(e,t,r){let o=e?.frontend&&typeof e.frontend=="object"&&!Array.isArray(e.frontend)?e.frontend:void 0,s=wt(o,"generator"),n=wt(o,"command_display"),i=typeof t=="string"&&t.startsWith("frontend.");if(!(!s&&!i))return {...s?{id:s}:{},...t?{kit:t}:{},displayName:r,source:gr(o,"official_generator")?"official-generator":"metadata",...n?{commandDisplay:n}:{}}}async function kr(e){let t=[".workspai/project.json",".workspai/context.json",".rapidkit/project.json",".rapidkit/context.json","package.json","pyproject.toml","requirements.txt","go.mod","pom.xml","build.gradle","build.gradle.kts","Cargo.toml","composer.json","Gemfile","mix.exs","deno.json","Dockerfile","docker-compose.yml","README.md"],r=[];for(let o of t)await E.pathExists(f.join(e,o))&&r.push(o);return r}async function S(e,t,r,o=t){let s=await d$2(e,t),n=s!==null,i={path:o.split(f.sep).join("/"),exists:n};if(s&&r){let a=await jt(s);typeof a?.generatedAt=="string"&&(i.generatedAt=a.generatedAt);let c=a?.status??a?.result??a?.verdict;typeof c=="string"&&(i.status=c);}return i}async function yr(e,t,r){let o=bt(e,t),s=".workspai/reports",n=c=>S(t,`${s}/${c}`,r,`${o}/${s}/${c}`),i=await n("doctor-project-last-run.json");return {doctor:i?.exists===true?i:await n("doctor-last-run.json"),remediationPlan:await n("doctor-remediation-plan-last-run.json"),fixResult:await n("doctor-fix-result-last-run.json"),analyze:await n("analyze-last-run.json"),readiness:await n("release-readiness-last-run.json")}}async function wr(e,t,r){let o=i$1(t),s=j$1(t,o),n=w(t),i=f$2(s.runtime),a=await tt(t,o),c=r.contractProject?.slug?r.contractProject.slug:typeof o?.name=="string"&&o.name.trim()?o.name.trim():f.basename(t),d=typeof o?.kit_name=="string"?o.kit_name:typeof o?.kit=="string"?o.kit:r.contractProject?.kit,u=typeof o?.engine=="string"?o.engine:n.engine!=="unknown"?n.engine:void 0,p=hr(o,d,s.displayName),l=rt({kitId:d,framework:s.key,runtime:s.runtime}),m=f.relative(e,t),h$1=m===".."||m.startsWith(`..${f.sep}`)?i$2(t):h(t),W=[s.runtime,...h$1.filter(x=>x!==s.runtime)];return {name:c,path:bt(e,t),...r.includeAbsolutePaths?{absolutePath:t}:{},kind:a,category:et(a),runtime:s.runtime,runtimeCandidates:W,framework:s.key,frameworkDisplayName:s.displayName,confidence:s.confidence,detectionSource:s.source,supportTier:s.supportTier,runtimeSupportTier:i.tier,runtimeDoctorSupport:i.doctorSupport,moduleSupport:n.moduleSupport,...d?{kit:d}:{},...u?{engine:u}:{},...p?{generator:p}:{},createCapability:l,commands:{supported:n.supportedCommands,unsupported:n.unsupportedCommands,global:n.globalCommands,fleetStages:n.fleetStages,localOnly:n.localOnlyCommands,map:n.commandMap},importantFiles:await kr(t),evidence:await yr(e,t,r.includeEvidence),provenance:{path:r.contractProject?"workspace contract declaration reconciled with filesystem discovery":"filesystem discovery",runtime:s.source,framework:s.source,commands:"project command capability matrix",createCapability:"create planner capability contract",evidence:"project .workspai/reports"}}}async function Re(e){for(let t of s(e,"workspace.json")){let r=await jt(t);if(r)return r}return null}function vr(e){if(e.length===0)return "empty-workspace";let t=new Set(e.map(r=>r.category));return t.size>1?"polyglot-product-workspace":t.has("frontend")&&e.length>1?"full-stack-workspace":t.has("frontend")?"frontend-workspace":t.has("desktop")?"desktop-application-workspace":t.has("extension")?"extension-workspace":t.has("library")?"library-workspace":e.length>1?"backend-platform":"backend-workspace"}function br(e){let t=new Set;for(let r of e){let o=`${r.name} ${r.path}`.toLowerCase();for(let s of ["auth","billing","payment","notification","order","admin","report","search","analytics"])o.includes(s)&&t.add(s);}return Array.from(t).sort()}function P(e,t,r,o){return {severity:e,code:t,message:r,target:o}}function Pt(e){let t=[];e.workspace.name.trim()||t.push(P("error","workspace.name.missing","Workspace name could not be resolved.","workspace")),e.workspace.type==="observed-workspace"&&t.push(P("warning","workspace.marker.missing","Workspace marker is missing; model is based on filesystem observation.","workspace.marker")),e.summary.projectCount===0&&t.push(P("warning","workspace.projects.empty","No project roots were detected in this workspace.","projects")),e.contracts.exists||t.push(P("warning","workspace.contract.missing","Workspace contract is missing; dependency and API edges may be incomplete.",e.contracts.workspaceContractPath));let r=new Map;for(let n of e.projects){let i=n.name.toLowerCase(),a=r.get(i)??[];a.push(n),r.set(i,a),n.importantFiles.length||t.push(P("warning","project.markers.missing",`Project ${n.name} has no important manifest files recorded.`,n.path));let c=f.isAbsolute(n.path)?n.path:f.resolve(e.workspace.root,n.path);E.existsSync(c)||t.push(P("warning","project.path.missing",`Registered project ${n.name} is not available at its declared path.`,n.path)),n.runtime==="unknown"&&t.push(P("warning","project.runtime.unknown",`Project ${n.name} runtime could not be confidently detected.`,n.path));let d=["test","build"];for(let l of d)n.commands.supported.includes(l)&&n.commands.unsupported.includes(l)&&t.push(P("error","project.commands.conflict",`Project ${n.name} marks ${l} as both supported and unsupported.`,n.path));let u=new Set(n.commands.fleetStages),p=new Set(n.commands.localOnly);for(let l of n.commands.fleetStages){p.has(l)&&t.push(P("error","project.commands.scope-conflict",`Project ${n.name} marks ${l} as both fleet and local-only.`,n.path));let m=n.commands.map[l];(!m||m.status!=="supported"||m.fleetEligible!==true||m.executionScope!=="fleet")&&t.push(P("error","project.commands.fleet-stage-invalid",`Project ${n.name} advertises ${l} as a fleet stage without a supported fleet capability.`,n.path));}for(let l of n.commands.localOnly){let m=n.commands.map[l];(!m||m.status!=="supported"||m.executionScope!=="local-only"||m.fleetEligible===true)&&t.push(P("error","project.commands.local-only-invalid",`Project ${n.name} advertises ${l} as local-only without a matching local-only capability.`,n.path));}for(let l of Object.values(n.commands.map))l.status==="supported"&&(l.fleetEligible===true&&!u.has(l.command)&&t.push(P("error","project.commands.fleet-stage-missing",`Project ${n.name} capability ${l.command} is fleet-eligible but missing from fleetStages.`,n.path)),l.executionScope==="local-only"&&l.fleetEligible!==true&&!p.has(l.command)&&t.push(P("error","project.commands.local-only-missing",`Project ${n.name} capability ${l.command} is local-only but missing from localOnly commands.`,n.path)));}for(let[n,i]of r.entries())i.length>1&&t.push(P("error","project.name.duplicate",`Project name "${n}" is ambiguous across ${i.length} project roots.`,i.map(a=>a.path).join(", ")));e.projectTopology&&e.graph&&c$1({...e.projectTopology,generatedAt:"<ignored>"})!==c$1({...e.graph,generatedAt:"<ignored>"})&&t.push(P("error","workspace.project-topology.alias-mismatch","Deprecated model.graph must remain structurally identical to canonical model.projectTopology during the v1 migration window.","projectTopology"));let o=t.filter(n=>n.severity==="error").length,s=t.filter(n=>n.severity==="warning").length;return {status:o>0?"failed":s>0?"warning":"passed",errors:o,warnings:s,issues:t}}function Wn(e){return Pt(e)}function j(e){return e.join(".")}function jr(e,t){let r=ce,o=e.generatedAt,s=[b({id:"workspace.name",label:"Workspace name",scope:"workspace",value:e.workspace.name,freshness:{kind:"durable",category:"structure",generatedAt:o,now:t,sourceArtifact:r,sourcePath:j(["workspace","name"]),reason:"Workspace identity is structural metadata and changes through workspace setup."}}),b({id:"workspace.type",label:"Workspace type",scope:"workspace",value:e.identity.workspaceType,freshness:{kind:"derived",category:"structure",generatedAt:o,now:t,sourceArtifact:r,sourcePath:j(["identity","workspaceType"]),reason:"Workspace type is derived from the current project inventory."}}),b({id:"workspace.projectCount",label:"Project count",scope:"workspace",value:e.summary.projectCount,freshness:{kind:"derived",category:"structure",generatedAt:o,now:t,sourceArtifact:r,sourcePath:j(["summary","projectCount"]),reason:"Project count is derived from workspace discovery and should be refreshed after structural changes."}}),b({id:"workspace.runtimeFamilies",label:"Runtime families",scope:"workspace",value:e.identity.runtimeFamilies,freshness:{kind:"derived",category:"structure",generatedAt:o,now:t,sourceArtifact:r,sourcePath:j(["identity","runtimeFamilies"]),reason:"Runtime coverage is inferred from project surfaces."}}),b({id:"workspace.policyMode",label:"Workspace policy mode",scope:"policy",value:e.policies.mode,freshness:{kind:"durable",category:"structure",generatedAt:o,now:t,sourceArtifact:r,sourcePath:j(["policies","mode"]),reason:"Policy mode is configuration, not runtime state."}}),b({id:"workspace.contract.exists",label:"Workspace contract presence",scope:"contract",value:e.contracts.exists,freshness:{kind:"derived",category:"structure",generatedAt:o,now:t,sourceArtifact:r,sourcePath:j(["contracts","exists"]),reason:"Contract presence is derived from workspace files and should be refreshed before release gating."}})],n=Se(e);n&&s.push(b({id:"graph.edgeCount",label:"Dependency graph edge count",scope:"graph",value:n.stats.edgeCount,freshness:{kind:"derived",category:"structure",generatedAt:n.generatedAt??o,now:t,sourceArtifact:r,sourcePath:j(["projectTopology","stats","edgeCount"]),reason:"Graph topology is derived from manifests, imports, and workspace contracts."}}),b({id:"graph.evidenceCoverageRatio",label:"Dependency graph evidence coverage",scope:"graph",value:n.stats.evidenceCoverageRatio,freshness:{kind:"derived",category:"structure",generatedAt:n.generatedAt??o,now:t,sourceArtifact:r,sourcePath:j(["projectTopology","stats","evidenceCoverageRatio"]),reason:"Graph evidence coverage changes when dependency evidence or contract edges change."}}));for(let[i,a]of e.projects.entries()){let c=`projects[${i}]`,d={kind:"derived",category:"structure",generatedAt:o,now:t,sourceArtifact:r,reason:"Project facts are derived from workspace discovery, project metadata, and framework probes."};s.push(b({id:`project.${a.name}.kind`,label:`${a.name} kind`,scope:"project",project:a.name,value:a.kind,freshness:{...d,sourcePath:j([c,"kind"])}}),b({id:`project.${a.name}.category`,label:`${a.name} category`,scope:"project",project:a.name,value:a.category,freshness:{...d,sourcePath:j([c,"category"])}}),b({id:`project.${a.name}.runtime`,label:`${a.name} runtime`,scope:"project",project:a.name,value:a.runtime,freshness:{...d,sourcePath:j([c,"runtime"])}}),b({id:`project.${a.name}.framework`,label:`${a.name} framework`,scope:"project",project:a.name,value:a.frameworkDisplayName,freshness:{...d,sourcePath:j([c,"frameworkDisplayName"])}}),b({id:`project.${a.name}.supportTier`,label:`${a.name} support tier`,scope:"project",project:a.name,value:a.supportTier,freshness:{...d,sourcePath:j([c,"supportTier"])}}),b({id:`project.${a.name}.safeFleetStages`,label:`${a.name} safe fleet stages`,scope:"command",project:a.name,value:a.commands.fleetStages,freshness:{...d,sourcePath:j([c,"commands","fleetStages"]),reason:"Safe command availability is derived from package and project command surfaces."}}));for(let[u,p]of Object.entries(a.evidence))s.push(b({id:`project.${a.name}.evidence.${u}`,label:`${a.name} ${u} evidence`,scope:"evidence",project:a.name,value:p?{path:p.path,exists:p.exists,status:p.status??null}:{exists:false},freshness:{kind:p?.exists?"evidence-backed":"verify-before-use",category:"verification",generatedAt:p?.generatedAt??o,now:t,status:p?.exists?void 0:"unknown",sourceArtifact:p?.path??r,sourcePath:j([c,"evidence",u]),verifyBeforeUse:true,reason:p?.exists?"Evidence reports can expire or become stale after source changes.":"Missing evidence must be generated before this fact is used for verification."}}));}for(let[i,a]of Object.entries(e.evidence))s.push(b({id:`workspace.evidence.${i}`,label:`Workspace ${i} evidence`,scope:"evidence",value:a?{path:a.path,exists:a.exists,status:a.status??null}:null,freshness:{kind:a?.exists?"evidence-backed":"verify-before-use",category:"verification",generatedAt:a?.generatedAt??o,now:t,status:a?.exists?void 0:"unknown",sourceArtifact:a?.path??r,sourcePath:j(["evidence",i]),verifyBeforeUse:true,reason:a?.exists?"Workspace evidence can expire or become stale after project, dependency, or policy changes.":"Missing workspace evidence must be generated before release or repair decisions."}}));return s}async function de(e){let t=f.resolve(e.workspacePath),r=e.includeAbsolutePaths===true,o=e.includeEvidence===true,s$1=Ee(e.observableScanDepth),n=e.now??new Date,[i,a$4,c,d,u,p]=await Promise.all([a$1(t),Re(t),Ae(t),a$2(t),a$3(t,{descendIntoMatchedProjects:false}),We(t,s$1)]),l=new Map;for(let g of c?.projects??[]){let le=g.externalPath?f.resolve(g.externalPath):f.resolve(t,g.relativePath);l.set(le,g);}let m=xe([...u,...p,...l.keys(),...d.map(g=>f.isAbsolute(g.path)?g.path:f.join(t,g.path))]),v=e.reuseProjectModels,h=await Promise.all(m.map(g=>{if(v){let le=f.relative(t,f.resolve(g)).split(f.sep).join("/"),Me=v.get(le);if(Me)return Promise.resolve(Me)}return wr(t,g,{includeAbsolutePaths:r,includeEvidence:o,contractProject:l.get(f.resolve(g))})})),W=typeof a$4?.workspace_name=="string"?a$4.workspace_name:typeof a$4?.name=="string"?a$4.name:i?.name||c?.workspace.name||f.basename(t),x=typeof a$4?.profile=="string"?a$4.profile:typeof a$4?.mode=="string"?a$4.mode:c?.workspace.profile,V=Array.from(new Set(h.map(g=>g.kind))).sort(),pe=Array.from(new Set(h.map(g=>g.category))).sort(),H=Array.from(new Set(h.flatMap(g=>g.runtimeCandidates.length>0?g.runtimeCandidates:[g.runtime]))).sort(),U=Array.from(new Set(h.map(g=>g.framework))).sort(),I=[".workspai/policies.yml",".workspai/policies.yaml",".rapidkit/policies.yml",".rapidkit/policies.yaml"].find(g=>E.existsSync(f.join(t,g))),J=s(t,"workspace.contract.json").map(g=>f.relative(t,g).split(f.sep).join("/")).find(g=>E.existsSync(f.join(t,g)))??".workspai/workspace.contract.json",R=await E.pathExists(f.join(t,J)),X={schemaVersion:lr,generatedAt:n.toISOString(),workspace:{name:W,root:t,...x?{profile:x}:{},type:i?"rapidkit-workspace":"observed-workspace",...i?{marker:{createdBy:i.createdBy,version:i.version,createdAt:i.createdAt}}:{}},identity:{workspaceType:vr(h),surfaces:V,categories:pe,runtimeFamilies:H,businessCapabilities:br(h)},discovery:{observableScanDepth:s$1},projects:h,policies:{mode:typeof a$4?.policy_mode=="string"?a$4.policy_mode:typeof a$4?.policyMode=="string"?a$4.policyMode:"warn",source:I??null,exists:!!I},contracts:{workspaceContractPath:J,exists:R,status:R?"known":"missing"},evidence:{doctor:await S(t,a.doctor,o),projectDoctor:await S(t,".workspai/reports/doctor-project-last-run.json",o),doctorRemediationPlan:await S(t,".workspai/reports/doctor-remediation-plan-last-run.json",o),artifactRemediationPlan:await S(t,".workspai/reports/artifact-remediation-plan-last-run.json",o),doctorFixResult:await S(t,".workspai/reports/doctor-fix-result-last-run.json",o),analyze:await S(t,a.analyze,o),readiness:await S(t,a.readiness,o),pipeline:await S(t,".workspai/reports/pipeline-last-run.json",o)},summary:{projectCount:h.length,runtimes:H,frameworks:U,firstClassProjects:h.filter(g=>g.supportTier==="first-class").length,observedProjects:h.filter(g=>g.supportTier==="observed").length}},w=await Ct(t,X,{contractExists:R,now:n,incrementalGraph:e.incrementalGraph}),C={...X,projectTopology:w,graph:w},A=Pt(C),F=jr({...C},n),St=yt({facts:F,generatedAt:n.toISOString(),now:n});return {...C,facts:F,factFreshness:St,validation:A}}async function xn(e){if(e.cache!==true)return {model:await de(e),cache:"disabled"};let t=f.resolve(e.workspacePath),r=Ee(e.observableScanDepth),o=Pe(),[s,n,i,a,c]=await Promise.all([a$1(t),Re(t),a$2(t),a$3(t,{descendIntoMatchedProjects:false}),We(t,r)]),d=xe([...a,...c,...i.map(h=>f.isAbsolute(h.path)?h.path:f.join(t,h.path))]),u=await ae({workspacePath:t,cliVersion:o,flags:{includeAbsolutePaths:e.includeAbsolutePaths===true,includeEvidence:e.includeEvidence===true,observableScanDepth:r},projectPaths:d,workspaceJson:n,marker:s}),p=await Ce(t);if(p&&p.cliVersion===o&&p.inputsHash===u&&vt(p.model))return {model:p.model,cache:"hit"};let l=await de({...e}),[m,v]=await Promise.all([oe(t,d),se(t)]);return await ie(t,{cliVersion:o,inputsHash:u,generatedAt:(e.now??new Date).toISOString(),model:l,projectSignatures:m,workspaceFileSignatures:v}),{model:l,cache:"miss"}}function Pr(e,t){let r=new Set,o=new Set,s=new Set;for(let[n,i]of Object.entries(t))n in e?e[n]!==i&&r.add(n):o.add(n);for(let n of Object.keys(e))n in t||s.add(n);return {changed:r,added:o,removed:s}}function Cr(e={},t={}){let r=new Set([...Object.keys(e),...Object.keys(t)]);for(let o of r)if(e[o]!==t[o])return false;return true}async function Rn(e){let t=f.resolve(e.workspacePath),r=Ee(e.observableScanDepth),o=Pe(),s=e.now??new Date,[n,i,a,c,d]=await Promise.all([a$1(t),Re(t),a$2(t),a$3(t,{descendIntoMatchedProjects:false}),We(t,r)]),u=xe([...c,...d,...a.map(w=>f.isAbsolute(w.path)?w.path:f.join(t,w.path))]),p=await Ce(t),l=async()=>{let w=await de({...e}),C=await ae({workspacePath:t,cliVersion:o,flags:{includeAbsolutePaths:e.includeAbsolutePaths===true,includeEvidence:e.includeEvidence===true,observableScanDepth:r},projectPaths:u,workspaceJson:i,marker:n}),[A,F]=await Promise.all([oe(t,u),se(t)]);return await ie(t,{cliVersion:o,inputsHash:C,generatedAt:s.toISOString(),model:w,projectSignatures:A,workspaceFileSignatures:F}),{model:w,mode:"full"}},m=p?Se(p.model):void 0;if(!p||p.cliVersion!==o||!p.projectSignatures||!m||!vt(p.model))return l();let v=await se(t);if(!Cr(p.workspaceFileSignatures,v))return l();let h=await oe(t,u),{changed:W,added:x,removed:V}=Pr(p.projectSignatures,h);if(W.size===0&&x.size===0&&V.size===0)return {model:p.model,mode:"unchanged"};let pe=new Set([...W,...x]),H=new Map;for(let w of p.model.projects){let C=w.path.split(f.sep).join("/");!pe.has(C)&&!V.has(C)&&H.set(C,w);}let U=new Set,I=false;for(let w of p.model.projects){let C=w.path.split(f.sep).join("/");W.has(C)&&U.add(w.name);}let J=x.size>0||V.size>0,R=await de({...e,reuseProjectModels:H,incrementalGraph:{previousGraph:m,changedProjectIds:U,structuralChange:J||I}});for(let w of p.model.projects){let C=w.path.split(f.sep).join("/");if(!W.has(C))continue;let A=R.projects.find(F=>F.path.split(f.sep).join("/")===C);if(A&&A.name!==w.name){I=true;break}}if(I)return l();let X=await ae({workspacePath:t,cliVersion:o,flags:{includeAbsolutePaths:e.includeAbsolutePaths===true,includeEvidence:e.includeEvidence===true,observableScanDepth:r},projectPaths:u,workspaceJson:i,marker:n});return await ie(t,{cliVersion:o,inputsHash:X,generatedAt:s.toISOString(),model:R,projectSignatures:h,workspaceFileSignatures:v}),{model:R,mode:"incremental"}}async function Ae(e){try{let{contract:t}=await p({workspacePath:e});return t&&typeof t=="object"?t:null}catch{return null}}async function Ct(e,t,r){let o=r.contractExists?await Ae(e):null;try{return r.incrementalGraph?await mt({workspacePath:e,model:t,contract:o,now:r.now,previousGraph:r.incrementalGraph.previousGraph,changedProjectIds:r.incrementalGraph.changedProjectIds,structuralChange:r.incrementalGraph.structuralChange}):await ft({workspacePath:e,model:t,contract:o,now:r.now})}catch{let s=t.projects.map(n=>({id:n.name,path:n.path}));return {schemaVersion:"workspace-dependency-graph.v1",generatedAt:r.now.toISOString(),nodes:s,edges:[],stats:{nodeCount:s.length,edgeCount:0,inferredEdges:0,contractEdges:0,manualEdges:0,authoritativeEdges:0,lowConfidenceEdges:0,orphanCount:s.length,connectedNodeCount:0,density:0,edgeCoverageRatio:s.length>0?0:1,evidenceCoverageRatio:1,hotspotCount:0,hasCycle:false},diagnostics:s.length>1?[{code:"graph.inference.failed",severity:"warning",message:"Dependency graph inference failed; model contains projects but no dependency edges.",recommendation:"Run workspace model again after fixing graph inputs, or add workspace contract/manual graph overrides.",nodeIds:s.map(n=>n.id).sort((n,i)=>n.localeCompare(i))}]:void 0}}}async function An(e,t){let r=e.contracts.exists?await Ae(t):null,{buildWorkspaceKnowledgeGraph:o}=await import('./workspace-knowledge-graph-5MKEI4Z5.js'),s=d(e),n=await o({workspacePath:t,workspace:{name:e.workspace.name,...e.workspace.profile?{profile:e.workspace.profile}:{}},projects:e.projects.map(a=>({id:a.name,path:a.path,...a.absolutePath?{absolutePath:a.absolutePath}:{},runtime:a.runtime,runtimeCandidates:a.runtimeCandidates,framework:a.framework,kind:a.kind,category:a.category,...a.kit?{kit:a.kit}:{}})),projectTopology:Se(e)??await Ct(t,e,{contractExists:e.contracts.exists,now:new Date(e.generatedAt)}),contract:r,now:new Date(e.generatedAt),source:{kind:"workspace-model",artifact:ce,hashAlgorithm:"sha256",hash:d$1(s)}}),[,i]=await f$1(t,ce,[{relativePath:a.knowledgeGraph,payload:n},{relativePath:ce,payload:s}]);return i}export{et as a,tt as b,rt as c,Fr as d,_r as e,N as f,kt as g,b as h,yt as i,lr as j,ce as k,Se as l,En as m,Wn as n,jr as o,de as p,xn as q,Rn as r,An as s};
|