workspai 0.63.0 → 0.65.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 +37 -44
- package/contracts/cli-runtime-command-inventory.v1.snapshot.json +4 -0
- package/contracts/create-planner-capabilities.v1.json +251 -8
- package/contracts/runtime-command-surface.v1.json +12 -1
- package/contracts/workspace-contract.v1.json +51 -6
- package/contracts/workspace-intelligence/project-context-agent.v1.json +29 -0
- package/contracts/workspace-intelligence/workspace-knowledge-graph.v1.json +11 -1
- package/contracts/workspace-intelligence/workspace-model.v1.json +28 -1
- package/contracts/workspace-model-cache.v1.json +4 -0
- package/contracts/workspace-repair-capabilities.v1.json +66 -0
- package/dist/analyze-5PDVWECJ.js +1 -0
- package/dist/autopilot-release-JVIJCTKX.js +1 -0
- package/dist/capabilities-command-LHM3XIS6.js +1 -0
- package/dist/chunk-2C5ZBVBI.js +2 -0
- package/dist/{chunk-QQU536KA.js → chunk-2RL6RRT2.js} +3 -3
- package/dist/{chunk-QB3BLYUR.js → chunk-6JWNDWOA.js} +1 -1
- package/dist/{chunk-HS3DJMU5.js → chunk-6TBTMWNA.js} +1 -1
- package/dist/chunk-D5YJOQYK.js +1 -0
- package/dist/chunk-DFG33SBR.js +2 -0
- package/dist/chunk-FY4IIAIF.js +1 -0
- package/dist/chunk-GQSRNUCU.js +105 -0
- package/dist/{chunk-2LLMKTMO.js → chunk-HDNATYW7.js} +1 -1
- package/dist/chunk-HEZZ72V4.js +94 -0
- package/dist/chunk-HN7P4T3B.js +681 -0
- package/dist/chunk-J7QYANXK.js +8 -0
- package/dist/{chunk-Z5L2IK54.js → chunk-JD3A5QM6.js} +1 -1
- package/dist/{chunk-DIJGQUEV.js → chunk-JQLJBK5N.js} +1 -1
- package/dist/chunk-KLSSPJTV.js +1 -0
- package/dist/{chunk-GPOZILMY.js → chunk-L22EABIC.js} +1 -1
- package/dist/{chunk-J5OMC4RZ.js → chunk-MDTI3UEB.js} +1 -1
- package/dist/chunk-MYJQGGIU.js +5 -0
- package/dist/chunk-NOV6723U.js +1 -0
- package/dist/chunk-NYEAMMUL.js +1 -0
- package/dist/chunk-O5B2L3R2.js +1 -0
- package/dist/chunk-OWB5KWSS.js +13 -0
- package/dist/chunk-P5PSZQPB.js +2 -0
- package/dist/chunk-QI3HG6IG.js +144 -0
- package/dist/chunk-RGNCL5OB.js +1 -0
- package/dist/chunk-SWGSFLTC.js +1 -0
- package/dist/chunk-U5FCQTVL.js +4 -0
- package/dist/{chunk-W3HXTCSY.js → chunk-UXEO5QCF.js} +1 -1
- package/dist/{chunk-QJCCZLOF.js → chunk-VRGEPPUB.js} +1 -1
- package/dist/chunk-VVJK5NFY.js +2 -0
- package/dist/chunk-VXKWWX7S.js +8 -0
- package/dist/chunk-W322YDHS.js +49 -0
- package/dist/chunk-WCJU3CFG.js +1 -0
- package/dist/chunk-WPRLXKWC.js +8 -0
- package/dist/{chunk-E4LJ3PQD.js → chunk-XGE2FDI4.js} +1 -1
- package/dist/{chunk-5SFCBZOH.js → chunk-YN5X2FTP.js} +1 -1
- package/dist/chunk-YOCN7GF4.js +1 -0
- package/dist/chunk-YYQEWAES.js +1 -0
- package/dist/chunk-ZEEV5J4I.js +1 -0
- package/dist/create-ALT2ME6H.js +1 -0
- package/dist/{doctor-LDZ7BIU3.js → doctor-RW4R3O5C.js} +1 -1
- package/dist/{goal-lifecycle-HAWBRYDF.js → goal-lifecycle-VYOKS6E6.js} +1 -1
- package/dist/goal-pack-YWPI43QL.js +1 -0
- package/dist/index.d.ts +2 -1
- package/dist/index.js +199 -195
- package/dist/{pipeline-TWHWU6GP.js → pipeline-U4N2DVD7.js} +1 -1
- package/dist/{platform-capabilities-PR6YL4KC.js → platform-capabilities-DB4BZPTD.js} +1 -1
- package/dist/{project-agent-entry-YFRLKNOB.js → project-agent-entry-YAQCHIMP.js} +1 -1
- package/dist/project-intelligence-lens-MRQR2LQW.js +1 -0
- package/dist/{project-test-coverage-E2Q4QL44.js → project-test-coverage-4S7MEQ6T.js} +1 -1
- package/dist/{pythonRapidkitExec-4YTAMLBD.js → pythonRapidkitExec-VAW5XE4Z.js} +1 -1
- package/dist/verified-goal-WM34TTGE.js +1 -0
- package/dist/{workspace-XWKEBPS3.js → workspace-HGUZWNAB.js} +1 -1
- package/dist/{workspace-agent-sync-FQU6VIEU.js → workspace-agent-sync-GEN3KBAX.js} +1 -1
- package/dist/{workspace-context-DPDGFTWJ.js → workspace-context-4WIWFW26.js} +1 -1
- package/dist/workspace-contract-7DXK4GF5.js +1 -0
- package/dist/{workspace-explain-OU2PEVYO.js → workspace-explain-TE2LGOAV.js} +1 -1
- package/dist/workspace-foundation-J3NNRMI3.js +1 -0
- package/dist/workspace-graph-stream-PQI7OGCE.js +1 -0
- package/dist/workspace-graph-token-efficiency-2I4X374C.js +1 -0
- package/dist/{workspace-intelligence-625UN27X.js → workspace-intelligence-6FS26JOQ.js} +1 -1
- package/dist/{workspace-intelligence-runner-YQWX5VAM.js → workspace-intelligence-runner-XYUPCSLN.js} +1 -1
- package/dist/workspace-knowledge-graph-SWCKDTPF.js +1 -0
- package/dist/workspace-knowledge-graph-contract-L3CLAM2M.js +1 -0
- package/dist/{workspace-knowledge-graph-query-ON45H6Y7.js → workspace-knowledge-graph-query-FZXSPWGK.js} +1 -1
- package/dist/workspace-knowledge-graph-snapshot-M572JRB4.js +1 -0
- package/dist/workspace-mcp-serve-IBMTFQDY.js +3 -0
- package/dist/workspace-model-ZL6WCICX.js +1 -0
- package/dist/{workspace-onboarding-DRFJWRLH.js → workspace-onboarding-X3PWRIIS.js} +1 -1
- package/dist/{workspace-registry-summary-VSOBKAJG.js → workspace-registry-summary-LJN4WHIZ.js} +1 -1
- package/dist/workspace-repair-engine-NX7I632M.js +3 -0
- package/dist/workspace-run-6GT5OBQ5.js +1 -0
- package/dist/{workspace-verify-7ENGIY4S.js → workspace-verify-USRRIM2F.js} +1 -1
- package/dist/workspace-watch-43YZPLF7.js +1 -0
- package/docs/ci-workflows.md +1 -1
- package/docs/commands-reference.md +3 -1
- package/docs/creating-workspaces-and-projects.md +49 -8
- package/docs/real-world-qualification.md +7 -0
- package/docs/workspace-knowledge-graph.md +36 -0
- package/docs/workspace-operations.md +22 -0
- package/docs/workspace-repair-engine.md +17 -0
- package/package.json +1 -1
- package/dist/analyze-K6JDMF5C.js +0 -1
- package/dist/autopilot-release-NUQKFKKK.js +0 -1
- package/dist/capabilities-command-VBLZXP2T.js +0 -1
- package/dist/chunk-4PUJVYRM.js +0 -1
- package/dist/chunk-A4BK7C7M.js +0 -1
- package/dist/chunk-GPGEJVVO.js +0 -4
- package/dist/chunk-GXPOT3A7.js +0 -144
- package/dist/chunk-KCJ3VS6R.js +0 -1
- package/dist/chunk-KG3TUTXU.js +0 -2
- package/dist/chunk-NA2NXX5P.js +0 -1
- package/dist/chunk-NBJ6AP7K.js +0 -2
- package/dist/chunk-NVQUBUTY.js +0 -2
- package/dist/chunk-O6R7SE6Y.js +0 -1
- package/dist/chunk-ODJAKGQF.js +0 -49
- package/dist/chunk-PPQL5UTI.js +0 -13
- package/dist/chunk-PTNLVI62.js +0 -16
- package/dist/chunk-QA62UOE4.js +0 -5
- package/dist/chunk-RJIYCDVC.js +0 -1
- package/dist/chunk-SCP5LJNO.js +0 -2
- package/dist/chunk-T5YRFRJV.js +0 -1
- package/dist/chunk-TFOOSYGO.js +0 -8
- package/dist/chunk-TTQVOCG6.js +0 -1
- package/dist/chunk-TVCJKE2U.js +0 -2
- package/dist/chunk-U5WVR74V.js +0 -1
- package/dist/chunk-UDXFUASA.js +0 -691
- package/dist/chunk-UIBBSKJ3.js +0 -94
- package/dist/chunk-VRQLHCE2.js +0 -8
- package/dist/chunk-ZCPT6KC3.js +0 -6
- package/dist/create-2VELRQAX.js +0 -1
- package/dist/goal-pack-HNQHQFRW.js +0 -1
- package/dist/project-intelligence-lens-VWBLAGQ7.js +0 -1
- package/dist/verified-goal-Y4NTKSWH.js +0 -1
- package/dist/workspace-contract-3BWIRSVQ.js +0 -1
- package/dist/workspace-foundation-MHKSQDKT.js +0 -1
- package/dist/workspace-graph-stream-XTSDKRLM.js +0 -1
- package/dist/workspace-graph-token-efficiency-D7CUT6NX.js +0 -1
- package/dist/workspace-knowledge-graph-3ZBPSAS7.js +0 -1
- package/dist/workspace-knowledge-graph-snapshot-ZI4W735H.js +0 -1
- package/dist/workspace-mcp-serve-PYKYJIE6.js +0 -3
- package/dist/workspace-model-ETCLINRB.js +0 -1
- package/dist/workspace-repair-engine-XZLHR27V.js +0 -3
- package/dist/workspace-run-YXI5L466.js +0 -1
- package/dist/workspace-watch-2YFSB2WL.js +0 -1
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import {f,e}from'./chunk-ILIBOMYL.js';import {a,b as b$1}from'./chunk-VRGEPPUB.js';import {a as a$1,b as b$3}from'./chunk-X7FYEKLI.js';import {c as c$1,d}from'./chunk-HCFWT42C.js';import {q,r,t,s,v}from'./chunk-J7QYANXK.js';import {a as a$2,e as e$2}from'./chunk-CCDGHPEJ.js';import {b as b$2}from'./chunk-D65FCQIO.js';import {f as f$1,e as e$1}from'./chunk-NZ3WZYD5.js';import {s as s$1}from'./chunk-MOSXTVPU.js';import u from'chalk';import c from'fs';import y from'path';var H=e$1.readiness;function K(n){return n.vulnerableDependencies>0?`${n.vulnerableDependencies} known dependency vulnerability finding(s) reported`:`${n.blockingFindings} blocking dependency/security finding(s) reported`}var U=f$1.readiness;function B(n,e){let t=y.resolve(n);if(!b$1(t))return t;let a=M(e,"workspace.contract.json");if(c.existsSync(a))try{let o=JSON.parse(c.readFileSync(a,"utf-8")),s=Array.isArray(o.projects)?o.projects:[];for(let i of s){let l=m(i),p=typeof l.relativePath=="string"?l.relativePath.trim():"";if(p)return y.join(e,p)}}catch{}let r=T(e),d=Array.isArray(r.payload?.projects)?r.payload.projects:[];for(let o of d){let s=m(o),i=typeof s.path=="string"?s.path.trim():"";if(i)return y.resolve(i)}return t}function z(n){let e=q(n);return r(e,n)?"go":t(e,n)?"java":s(e,n)?"node":v(e,n)?"python":"unknown"}function _(n,e){if(!c.existsSync(n))return null;let t=c.readdirSync(n).filter(a=>a.endsWith(".json")&&e.some(r=>r.test(a))).map(a=>y.join(n,a));return t.length===0?null:(t.sort((a,r)=>c.statSync(r).mtimeMs-c.statSync(a).mtimeMs),t[0])}function m(n){return n&&typeof n=="object"&&!Array.isArray(n)?n:{}}function J(n){for(let e of n)if(c.existsSync(e))return e;return null}function M(n,...e){let t=s$1(n,...e);return J(t)??t[0]}function b(n,e){let t=a$2(n,`.workspai/reports/${e}`);return J([t,y.join(n,".rapidkit","reports",e)])??t}async function Q(n){let{readWorkspaceRegistrySummary:e,resolveWorkspaceRegisteredProjects:t}=await import('./workspace-registry-summary-LJN4WHIZ.js'),a=await e(n);return a?a.projectCount:(await t(n)).summary.projectCount}function X(n,e,t){let a=M(n,"toolchain.lock");if(!c.existsSync(a))return {gate:"env",status:"fail",summary:"toolchain.lock is missing",details:["Run workspai bootstrap to pin runtime versions and generate a reproducible toolchain."],evidencePath:a};try{let r=JSON.parse(c.readFileSync(a,"utf-8")),d=m(r.runtime),s=["python","node","go","java"].filter(p=>{let f=m(d[p]);return typeof f.version=="string"&&f.version.trim().length>0});if(s.length===0)return {gate:"env",status:"fail",summary:"No runtime versions are pinned in toolchain.lock",details:["Pin at least one runtime version via workspai setup <runtime> and re-run bootstrap."],evidencePath:a};let l=[...new Set((Array.isArray(e)?e:[e]).filter(p=>p!=="unknown"))].filter(p=>{let f=m(d[p]);return typeof f.version!="string"||f.version.trim().length===0});return l.length>0?{gate:"env",status:"fail",summary:`${t?.hasRegisteredProjects?"Project runtime":"Workspace"}${l.length===1?"":"s"} (${l.join(", ")}) ${l.length===1?"is":"are"} not pinned in toolchain.lock`,details:l.map(f=>`Run workspai setup ${f} and workspai bootstrap to lock ${f} for this workspace.`),evidencePath:a}:{gate:"env",status:"pass",summary:`Pinned runtimes: ${s.join(", ")}`,details:[],evidencePath:a}}catch{return {gate:"env",status:"fail",summary:"toolchain.lock is invalid JSON",details:["Regenerate lockfile with workspai bootstrap."],evidencePath:a}}}function T(n){let e=b(n,"doctor-last-run.json");if(!c.existsSync(e))return {payload:null,path:e};try{let t=JSON.parse(c.readFileSync(e,"utf-8"));return c$1(t,"workspace")?(d(t),{payload:t,path:e}):{payload:null,path:e}}catch{return {payload:null,path:e}}}function Y(n){let e=T(n);if(!e.payload)return {gate:{gate:"doctor",status:"fail",summary:"Doctor evidence is missing",details:["Run workspai doctor workspace --json before release readiness checks."],evidencePath:e.path},payload:null};let t=a$1(e.payload);if(t.hasSystemErrors)return {gate:{gate:"doctor",status:"fail",summary:"Doctor reported system errors",details:["Resolve system-level doctor errors before proceeding."],evidencePath:e.path},payload:e.payload};if(t.blockingFindings>0)return {gate:{gate:"doctor",status:"fail",summary:`Doctor reported ${t.blockingFindings} blocking finding(s)`,details:["Resolve the canonical Doctor findings and regenerate fresh Doctor evidence."],evidencePath:e.path},payload:e.payload};let a=[...t.advisoryFindings>0?[`${t.advisoryFindings} advisory finding(s)`]:[],...t.unknownFindings>0?[`${t.unknownFindings} unknown finding(s)`]:[],...t.contradictionCount>0?[`${t.contradictionCount} evidence contradiction(s)`]:[],...t.missingDiagnosisProjects>0?[`${t.missingDiagnosisProjects} project(s) without canonical diagnosis`]:[],...t.staleEvidence?["stale Doctor evidence"]:[],...t.unknownFreshness?["unknown Doctor evidence freshness"]:[],...t.minimumDiagnosisCompleteness<100?[`diagnosis completeness ${t.minimumDiagnosisCompleteness}%`]:[]];return a.length>0?{gate:{gate:"doctor",status:"warn",summary:"Doctor evidence requires attention",details:a,evidencePath:e.path},payload:e.payload}:{gate:{gate:"doctor",status:"pass",summary:"Doctor checks passed without issues",details:[],evidencePath:e.path},payload:e.payload}}function Z(n){let e=b(n,"analyze-last-run.json");if(!c.existsSync(e))return {gate:"analyze",status:"fail",summary:"Analyze evidence is missing",details:["Run workspai analyze --json before release readiness checks."],evidencePath:e};try{let t=JSON.parse(c.readFileSync(e,"utf-8"));b$2(e$1.analyze,t,e);let a=m(t.summary),r=String(a.verdict??"").toLowerCase(),d=Number(a.score??0),o=m(a.findings),s=Number(o.fail??0);return r==="blocked"||s>0?{gate:"analyze",status:"fail",summary:`Analyze verdict is blocked (score ${d}/100)`,details:["Resolve analyze findings and regenerate analyze-last-run.json."],evidencePath:e}:r==="needs-attention"?{gate:"analyze",status:"warn",summary:`Analyze needs attention (score ${d}/100)`,details:["Review analyze warnings before release."],evidencePath:e}:{gate:"analyze",status:"pass",summary:`Analyze passed (score ${d}/100)`,details:[],evidencePath:e}}catch{return {gate:"analyze",status:"fail",summary:"Analyze evidence is invalid or violates its contract",details:["Re-run workspai analyze --json to regenerate evidence."],evidencePath:e}}}function ee(n){try{let e=JSON.parse(c.readFileSync(n,"utf-8")),t=String(e.status??"").toLowerCase(),a=m(e.summary),r=Number(a.failedChecks??0);return t==="fail"||r>0?{gate:"verify",status:"fail",summary:"Verify-pack contract reports failed checks",details:["Fix failed verify checks and regenerate verify-pack contract evidence."],evidencePath:n}:t==="pass"?{gate:"verify",status:"pass",summary:"Verify-pack contract passed",details:[],evidencePath:n}:{gate:"verify",status:"warn",summary:"Verify-pack contract status is not explicit",details:["Ensure contract status is pass/fail and keep schema aligned with v1 contract."],evidencePath:n}}catch{return {gate:"verify",status:"fail",summary:"Verify-pack contract is invalid JSON",details:["Regenerate verify-pack contract artifact."],evidencePath:n}}}async function te(n,e){if(e.skipVerify)return {gate:"verify",status:"pass",summary:"Verify gate skipped (--skip-verify)",details:["Verification was explicitly skipped for this readiness run."]};let t=[a$2(n,".workspai/reports"),y.join(n,".rapidkit","reports")],a=t[0],r=t.map(s=>_(s,[/verify-pack-contract/i,/^verify.*\.json$/i])).find(s=>typeof s=="string")??null;if(r)return ee(r);let d=a$2(n,e$1.contractVerify),o=t.map(s=>_(s,[/workspace-contract-verify-last-run/i,/workspace-contract-verify/i])).find(s=>typeof s=="string")??null;if(o)try{let s=JSON.parse(c.readFileSync(o,"utf-8")),i=String(s.status??"").toLowerCase();if(i==="passed"||i==="pass")return {gate:"verify",status:"pass",summary:"Workspace contract verification passed (CLI cache)",details:[],evidencePath:o};if(i==="failed"||i==="fail")return {gate:"verify",status:"fail",summary:"Workspace contract verification failed (CLI cache)",details:(Array.isArray(s.violations)?s.violations:[]).slice(0,5),evidencePath:o}}catch{}try{let{verifyWorkspaceContract:s}=await import('./workspace-contract-7DXK4GF5.js'),i=await s({workspacePath:n}),l={schemaVersion:"v1",source:"cli",generatedAt:new Date().toISOString(),status:i.status,contractPath:i.contractPath,projectCount:i.projectCount,checks:i.checks,violations:i.violations};return await e$2(n,e$1.contractVerify,l),i.status==="failed"?{gate:"verify",status:"fail",summary:"Workspace contract verification failed (CLI)",details:i.violations.slice(0,5),evidencePath:d}:{gate:"verify",status:"pass",summary:"Workspace contract verification passed (CLI)",details:[],evidencePath:d}}catch(s){return {gate:"verify",status:"fail",summary:"No verify evidence and workspace contract verification unavailable",details:["Run workspai workspace contract verify --json or export verify-pack contract from CI.",s instanceof Error?s.message:String(s)],evidencePath:y.join(a,"*verify*.json")}}}function ne(n,e){let t=b(e,"doctor-last-run.json");if(!n)return {gate:"dependency",status:"warn",summary:"Dependency risk check skipped (doctor evidence missing)",details:["Run workspai doctor workspace --json to include dependency findings."],evidencePath:t};let a=b$3(n);return a.blockingFindings>0||a.vulnerableDependencies>0?{gate:"dependency",status:"fail",summary:K(a),details:["Resolve the typed dependency/security findings and regenerate focused audit evidence."],evidencePath:t}:a.auditFailed>0?{gate:"dependency",status:"fail",summary:`${a.auditFailed} dependency audit(s) failed`,details:["Repair the audit runner or dependency environment; failed audits are not clean."],evidencePath:t}:a.missingDependencies>0||a.auditUnavailable>0||a.unknownFindings>0||a.advisoryFindings>0?{gate:"dependency",status:"warn",summary:"Dependency evidence is incomplete or requires attention",details:[...a.missingDependencies>0?[`${a.missingDependencies} project(s) have no materialized dependency tree.`]:[],...a.auditUnavailable>0?[`${a.auditUnavailable} audit provider(s) are unavailable or unsupported.`]:[],...a.unknownFindings>0?[`${a.unknownFindings} dependency/security finding(s) remain unknown.`]:[],...a.advisoryFindings>0?[`${a.advisoryFindings} dependency/security advisory finding(s) remain.`]:[]],evidencePath:t}:{gate:"dependency",status:"pass",summary:"No dependency vulnerabilities reported",details:[],evidencePath:t}}function ae(n){return n.some(e=>e.status==="fail")?"fail":n.some(e=>e.status==="warn")?"warn":"pass"}async function se(n,e){return e$2(n,H,e)}async function re(n={}){let e$1=y.resolve(n.startPath??process.cwd()),t=a(e$1)??e$1,a$1=await Q(t)>0,r=a$1&&b$1(e$1)?t:B(e$1,t),d=r===t?"unknown":z(r),o=a$1?d:"unknown";if(a$1&&r===t){let{resolveWorkspaceRegisteredProjects:g}=await import('./workspace-registry-summary-LJN4WHIZ.js');o=(await g(t)).summary.projects.map(q=>z(y.resolve(t,q.relativePath)));}let s=X(t,o,{hasRegisteredProjects:a$1}),i=Y(t),l=Z(t),p=await te(t,{skipVerify:n.skipVerify}),f$1=ne(i.payload,t),w=[s,i.gate,l,p,f$1],h=ae(w),v={schemaVersion:U,generatedAt:new Date().toISOString(),workspacePath:t,projectPath:r,action:n.action,overallStatus:h,blocking:h==="fail",blockingReasons:w.filter(g=>g.status==="fail").map(g=>`${g.gate}: ${g.summary}`),gates:w};if(n.writeReport!==false){let g=f(v,{commandId:"workspaceReadiness",exitCode:h==="fail"?2:h==="warn"?1:0,generatedAt:v.generatedAt,blockers:v.blockingReasons,runId:e()});v.evidencePath=await se(t,g);}return v}function ie(n){return n==="pass"?u.green("PASS"):n==="warn"?u.yellow("WARN"):u.red("FAIL")}function oe(n){return n==="pass"?u.green("PASS"):n==="warn"?u.yellow("WARN"):u.red("FAIL")}async function Se(n){let e=await re({startPath:n.workspace,writeReport:true,skipVerify:n.skipVerify===true});if(n.json)console.log(JSON.stringify(e,null,2));else {console.log(u.bold.cyan(`
|
|
2
|
+
\u{1F6A6} Workspai Release Readiness
|
|
3
|
+
`)),console.log(u.bold(`Workspace: ${u.cyan(y.basename(e.workspacePath))}`)),console.log(u.gray(`Path: ${e.workspacePath}`)),console.log(`Overall: ${oe(e.overallStatus)}`);for(let t of e.gates){console.log(` - ${t.gate}: ${ie(t.status)} ${t.summary}`);for(let a of t.details)console.log(u.gray(` ${a}`));t.evidencePath&&console.log(u.gray(` evidence: ${t.evidencePath}`));}e.evidencePath&&console.log(u.gray(`
|
|
4
|
+
Evidence saved: ${e.evidencePath}`));}n.strict&&e.overallStatus!=="pass"&&process.exit(1);}export{re as a,Se as b};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {c,d}from'./chunk-MOSXTVPU.js';import {m,k as k$1,j as j$1,b,t,n,i}from'./chunk-
|
|
1
|
+
import {c,d}from'./chunk-MOSXTVPU.js';import {m,k as k$1,j as j$1,b,t,n,i}from'./chunk-RGNCL5OB.js';import {a}from'./chunk-2FIX2MDC.js';import wt from'crypto';import tt from'os';import l from'path';import*as p from'fs-extra';import {execa}from'execa';var yt=["version","project","create","add","list","info","upgrade","diff","doctor","license","commands","reconcile","rollback","uninstall","checkpoint","optimize","snapshot","frameworks","modules","merge"],M=new Set(yt);var g=a();async function et(t){for(let e of [c,d]){let r=l.join(t,e);if(await p.pathExists(r))try{let n=await p.readJson(r);if(n&&typeof n=="object")return n}catch{return null}}return null}function O(){let t=[],e=i=>{let o=i?.trim();o&&t.push(o);};e(process.env.RAPIDKIT_BRIDGE_PYTHON),e(process.env.RAPIDKIT_PYTHON_CMD),e(process.env.POETRY_PYTHON);let r=_();(r.startsWith("/")||r.startsWith(".")||r.startsWith(".."))&&!r.startsWith("file:")&&e(m(l.join(l.resolve(r),".venv")));for(let i of k$1())i.args.length===1&&i.args[0]==="--version"&&e(i.command);for(let i of j$1())e(i);return [...new Set(t)]}function v(t,e){return t==="py"?["-3",...e]:e}function H(t){if(!t)return t;let e=["Installed Poetry version does not support '--no-update'. Falling back to 'poetry lock'."];return t.split(/\r?\n/).filter(i=>!e.some(o=>i.includes(o))).join(`
|
|
2
2
|
`)}var y=class extends Error{code;constructor(e,r){super(r),this.code=e;}};function D(t){if(t instanceof y)switch(t.code){case "PYTHON_NOT_FOUND":return `Workspai could not find Python (python3/python/py) on your PATH.
|
|
3
3
|
Install Python 3.10+ and ensure \`${i()}\` is available, then retry.
|
|
4
4
|
Tip: if you are inside a RapidKit project, use the local ./rapidkit launcher.`;case "BRIDGE_VENV_CREATE_FAILED":return `Workspai failed to create its bridge virtual environment.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import {b}from'./chunk-
|
|
1
|
+
import {b}from'./chunk-L22EABIC.js';import {c,d,a,b as b$1}from'./chunk-MOSXTVPU.js';import n from'fs';import o from'path';function _(t){return b({startPath:t})?.workspacePath??null}function k(t){let s=o.resolve(t),p=n.existsSync(o.join(s,c))||n.existsSync(o.join(s,d))||n.existsSync(o.join(s,a,"workspace.json"))||n.existsSync(o.join(s,b$1,"workspace.json")),A=n.existsSync(o.join(s,a,"project.json"))||n.existsSync(o.join(s,a,"context.json"))||n.existsSync(o.join(s,b$1,"project.json"))||n.existsSync(o.join(s,b$1,"context.json"));return p&&!A}export{_ as a,k as b};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {n,i,j,h as h$1}from'./chunk-FY4IIAIF.js';import {a}from'./chunk-HTYMXMQM.js';import {c}from'./chunk-S5KTATOU.js';import {d as d$1}from'./chunk-P5PSZQPB.js';import {e as e$2}from'./chunk-CCDGHPEJ.js';import {a as a$1}from'./chunk-AFIFZTOY.js';import {e as e$1,d,b}from'./chunk-EWZZUQBR.js';import {f,e}from'./chunk-NZ3WZYD5.js';import k from'path';import V from'fs-extra';import {spawnSync}from'child_process';function ue(){let e={...process.env};return delete e.GIT_DIR,delete e.GIT_WORK_TREE,delete e.GIT_INDEX_FILE,delete e.GIT_PREFIX,e}function F(e,t,a){let r=spawnSync("git",t,{cwd:e,env:ue(),encoding:"utf8",stdio:["ignore","pipe","ignore"]});if(r.status!==0)return {ok:false,stdout:""};let c=r.stdout??"";return {ok:true,stdout:a?.preserveWhitespace?c:c.trim()}}function ge(e){let t=e.replace(/\\/g,"/").replace(/^\.\//,"");return t===".workspai/AGENT-GROUNDING.md"?true:[".workspai/reports/",".workspai/cache/",".rapidkit/reports/",".rapidkit/cache/"].some(a=>t.startsWith(a))}function ke(e){let t=[],a=[],r=[];for(let c of e.split(`
|
|
2
|
+
`)){if(!c.trim())continue;let n=c.slice(0,2),i=c.slice(3).trim();if(i&&!ge(i)){if(n==="??"){a.push(i);continue}n.includes("D")&&r.push(i),t.push(i);}}return {changedFiles:[...new Set(t)].sort(),untrackedFiles:[...new Set(a)].sort(),deletedFiles:[...new Set(r)].sort()}}function Q(e,t){let a={available:false,dirty:false,changedFiles:[],untrackedFiles:[],deletedFiles:[]},r=F(e,["rev-parse","--is-inside-work-tree"]);if(!r.ok||r.stdout!=="true")return a;let c=F(e,["rev-parse","--abbrev-ref","HEAD"]),n=F(e,["rev-parse","HEAD"]),i=F(e,["status","--porcelain=v1","--untracked-files=all"],{preserveWhitespace:true}),p=ke(i.stdout),m=p.changedFiles.length>0||p.untrackedFiles.length>0||p.deletedFiles.length>0;return {available:true,branch:c.ok?c.stdout:void 0,commit:n.ok?n.stdout:void 0,ref:t?.ref,dirty:m,changedFiles:p.changedFiles,untrackedFiles:p.untrackedFiles,deletedFiles:p.deletedFiles}}var oe=f.snapshot,L=f.diff,_=e.snapshot,ae=e.diff,he=f.impact,we=e.impact;function ye(e){if(e.model.projectTopology||!e.model.graph||e.modelHash!==e$1(e.model))return null;let t={...e.model,projectTopology:e.model.graph,graph:e.model.graph};return {...e,modelHash:d(t),model:t}}function ne(e){let t=e.trim().toLowerCase();return t==="git"||t.startsWith("git:")}function We(e){let t=e.trim();return t.toLowerCase()==="git"?"HEAD":t.toLowerCase().startsWith("git:")&&t.slice(4).trim()||"HEAD"}function se(e,t){return k.isAbsolute(t)?t:k.join(e,t)}async function be(e){let t=await V.readJson(e);if(!t||typeof t!="object"||Array.isArray(t))throw new Error(`Workspace model input is not a JSON object: ${e}`);let a=t;if(a.schemaVersion===oe){a$1(t,"contracts/workspace-intelligence/workspace-model-snapshot.v1.json",`Workspace model snapshot ${e}`);let r=a;if(!r.model||r.model.schemaVersion!==h$1)throw new Error(`Invalid workspace model snapshot: ${e}`);let c=d(r.model);if(r.modelHash!==c){let n=ye(r);if(!n)throw new Error(`Workspace model snapshot hash mismatch: ${e}`);return {model:n.model,hash:n.modelHash}}return {model:r.model,hash:r.modelHash}}if(a.schemaVersion===h$1){a$1(t,"contracts/workspace-intelligence/workspace-model.v1.json",`Workspace model ${e}`);let r=a;return {model:r,hash:d(r)}}throw a.schemaVersion===L?new Error(`workspace diff --from received a diff report (${k.basename(e)}). Use a workspace model snapshot or model report as baseline, e.g. ${_}. To analyze an existing diff report, run: npx workspai workspace impact --from ${k.basename(e)} --json`):new Error(`Unsupported workspace model input schema: ${String(a.schemaVersion)}`)}async function ve(e){let t=await V.readJson(e);if(!t||typeof t!="object"||Array.isArray(t))throw new Error(`Workspace diff input is not a JSON object: ${e}`);let a=t;if(a.schemaVersion!==L)return null;a$1(t,"contracts/workspace-intelligence/workspace-model-diff.v1.json",`Workspace model diff ${e}`);let r=a;if(!r.currentModel||r.currentModel.schemaVersion!==h$1||!r.summary||!Array.isArray(r.changes))throw new Error(`Invalid workspace model diff report: ${e}`);if(r.toHash!==d(r.currentModel))throw new Error(`Workspace model diff current-model hash mismatch: ${e}`);return r}async function Ye(e){let t=e.model??await n({workspacePath:e.workspacePath,includeAbsolutePaths:e.includeAbsolutePaths,includeEvidence:e.includeEvidence,observableScanDepth:e.observableScanDepth,now:e.now});return {schemaVersion:oe,generatedAt:(e.now??new Date).toISOString(),modelHash:d(t),modelRef:i,model:t}}async function Qe(e,t){return e$2(t,_,d$1(e))}function x(e){return {name:e.name,path:e.path,kind:e.kind,category:e.category,runtime:e.runtime,framework:e.framework,generator:e.generator,supportTier:e.supportTier,commands:e.commands,importantFiles:e.importantFiles}}function w(e,t){e.push(t);}function Me(e,t){let a=[],r=["name","profile","type"],c=["workspaceType","surfaces","runtimeFamilies","businessCapabilities"];for(let n of r){let i=e.workspace[n],p=t.workspace[n];b(i)!==b(p)&&w(a,{type:"workspace.changed",severity:"info",target:`workspace.${n}`,message:`Workspace metadata field changed: ${String(n)}`,before:i,after:p});}for(let n of c){let i=e.identity[n],p=t.identity[n];b(i)!==b(p)&&w(a,{type:"workspace.changed",severity:"info",target:`identity.${n}`,message:`Workspace identity field changed: ${String(n)}`,before:i,after:p});}return b(e.policies)!==b(t.policies)&&w(a,{type:"workspace.changed",severity:"warning",target:"policies",message:"Workspace policy summary changed.",before:e.policies,after:t.policies}),b(e.discovery)!==b(t.discovery)&&w(a,{type:"workspace.changed",severity:"info",target:"discovery",message:"Workspace discovery settings changed.",before:e.discovery,after:t.discovery}),e.contracts.exists!==t.contracts.exists&&w(a,{type:"workspace.changed",severity:t.contracts.exists?"info":"warning",target:t.contracts.workspaceContractPath,message:"Workspace contract presence changed.",before:e.contracts.exists,after:t.contracts.exists}),a}function je(e,t){let a=e.validation??null,r=t.validation??null;return b(a)===b(r)?[]:[{type:"validation.changed",severity:r?.status==="failed"?"critical":"warning",target:"validation",message:"Workspace model validation changed.",before:a,after:r}]}function Ie(e,t){let a=[],r=new Map(e.projects.map(n=>[n.path,n])),c=new Map(t.projects.map(n=>[n.path,n]));for(let[n,i]of c.entries()){let p=r.get(n);if(!p){w(a,{type:"project.added",severity:"info",target:n,message:`Project added: ${i.name}`,after:x(i)});continue}let m=x(p),l=x(i);if(b(m)!==b(l)){let u=p.runtime!==i.runtime||p.framework!==i.framework;w(a,{type:"project.changed",severity:u?"warning":"info",target:n,message:`Project changed: ${i.name}`,before:m,after:l});}}for(let[n,i]of r.entries())c.has(n)||w(a,{type:"project.removed",severity:"warning",target:n,message:`Project removed: ${i.name}`,before:x(i)});return a.sort((n,i)=>`${n.type}:${n.target}`.localeCompare(`${i.type}:${i.target}`))}async function Pe(e){let t=k.resolve(e.workspacePath),a=ne(e.fromPath),r=a?We(e.fromPath):void 0,c=e.fromPath;if(a){let f=k.join(t,_);if(!await V.pathExists(f))throw new Error("Git-aware workspace diff requires an existing snapshot at .workspai/reports/workspace-model-snapshot.json. Run: npx workspai workspace snapshot --json");c=_;}let n$1=se(t,c),i$1=await be(n$1),p=e.model??await n({workspacePath:t,includeAbsolutePaths:e.includeAbsolutePaths,includeEvidence:e.includeEvidence,observableScanDepth:e.observableScanDepth,now:e.now}),m=d(p),l=[...Me(i$1.model,p),...Ie(i$1.model,p),...je(i$1.model,p)],u;e.includeGitObservation!==false&&(u=e.gitObservation??Q(t,{ref:r}),u.available&&Ee(l,u,p));let v=l.filter(f=>f.type.startsWith("git.")).length,R=i$1.hash!==m,y=a?`git:${r??"HEAD"}`:k.relative(t,n$1).split(k.sep).join("/");return {schemaVersion:L,generatedAt:(e.now??new Date).toISOString(),fromRef:y,toRef:i,fromHash:i$1.hash,toHash:m,summary:{changed:R||v>0,addedProjects:l.filter(f=>f.type==="project.added").length,removedProjects:l.filter(f=>f.type==="project.removed").length,changedProjects:l.filter(f=>f.type==="project.changed").length,workspaceChanges:l.filter(f=>f.type==="workspace.changed").length,validationChanges:l.filter(f=>f.type==="validation.changed").length,gitChangedFiles:v},git:u?.available?Oe(u,r):{available:false,dirty:false,changedFiles:0,untrackedFiles:0,deletedFiles:0},changes:l,currentModel:p}}async function Ze(e,t){return e$2(t,ae,d$1(e))}function I(e){return {none:0,low:1,medium:2,high:3,critical:4}[e]}function Z(e){return e.reduce((t,a)=>I(a)>I(t)?a:t,"none")}var N=["none","low","medium","high","critical"];function Re(e){let t=Math.max(1,I(e)-1);return N[t]}function Ce(e){let t=Math.min(N.length-1,I(e)+1);return N[t]}function ee(e){return e.join(" ")}function h(e,t,a,r){return {id:e,label:t,scope:r.scope,project:r.project,display:ee(["npx","workspai",...a]),execute:ee(["npx","--yes","--package","workspai","workspai",...a]),required:r.required!==false}}function te(e){let t=`project:${e.name}`,a=e.commands.fleetStages;return [h(`project.${e.name}.init`,`Run init for ${e.name}`,["workspace","run","init","--scope",t,"--json"],{scope:"project",project:e.name,required:a.includes("init")}),h(`project.${e.name}.test`,`Run tests for ${e.name}`,["workspace","run","test","--scope",t,"--json"],{scope:"project",project:e.name,required:a.includes("test")}),h(`project.${e.name}.build`,`Run build for ${e.name}`,["workspace","run","build","--scope",t,"--json"],{scope:"project",project:e.name,required:a.includes("build")}),h(`project.${e.name}.start`,`Run start for ${e.name}`,["workspace","run","start","--scope",t,"--json"],{scope:"project",project:e.name,required:a.includes("start")})]}function T(){return [h("workspace.doctor","Run workspace doctor",["doctor","workspace","--json"],{scope:"workspace"}),h("workspace.contract.verify","Verify workspace contract",["workspace","contract","verify","--json"],{scope:"workspace"}),h("workspace.readiness","Run release readiness",["readiness","--json"],{scope:"workspace"}),h("workspace.analyze","Run workspace analyze",["analyze","--json"],{scope:"workspace",required:false}),h("workspace.pipeline","Run governance pipeline",["pipeline","--json"],{scope:"workspace",required:false}),h("workspace.doctor-fix","Verify doctor fix result",["doctor","workspace","--fix","--json"],{scope:"workspace",required:false})]}function Se(e,t){let a=t.split(k.sep).join("/");return e.projects.filter(c=>{let n=c.path.split(k.sep).join("/");return a===n||a.startsWith(`${n}/`)}).sort((c,n)=>n.path.length-c.path.length)[0]}function Ee(e,t,a){let r=new Set(e.map(n=>n.target)),c=(n,i)=>{let p=i.split(k.sep).join("/"),m=`git:${p}`;if(r.has(m))return;let l=Se(a,p),u=l?`${l.name} (${l.path})`:"workspace";w(e,{type:n,severity:n==="git.deleted"?"warning":"info",target:m,message:`Git ${n==="git.untracked"?"untracked":n==="git.deleted"?"deleted":"changed"} file affects ${u}: ${p}`,after:{path:p,project:l?.name,projectPath:l?.path}}),r.add(m);};for(let n of t.changedFiles)c("git.file.changed",n);for(let n of t.untrackedFiles)c("git.untracked",n);for(let n of t.deletedFiles)c("git.deleted",n);}function Oe(e,t){return {available:true,ref:t??e.ref,branch:e.branch,commit:e.commit,dirty:e.dirty,changedFiles:e.changedFiles.length,untrackedFiles:e.untrackedFiles.length,deletedFiles:e.deletedFiles.length}}function Ae(e){let t=new Set,a=[];for(let r of e){let c=`${r.scope}:${r.project??""}:${r.display}`;t.has(c)||(t.add(c),a.push(r));}return a}function De(e){return e.type==="project.removed"?"high":e.severity==="critical"?"critical":e.severity==="warning"?"high":("medium")}function $e(e,t){return e.severity==="critical"?"critical":e.target==="policies"||e.target.includes("contract")?"high":e.type==="validation.changed"?(t?.projectCount??0)===0?"low":"high":e.target==="evidence"?"low":e.severity==="warning"?"medium":"low"}function Fe(e){return e.affectedProjects>0||e.projectCount>0||!e.changes.every(a=>a.severity==="critical"?false:a.type.startsWith("git.")||a.type==="validation.changed")?e.risk:I(e.risk)>=I("high")||e.risk==="medium"?"low":e.risk}function re(e,t){if(!e||e==="workspace")return true;let a=(e.startsWith("project:")?e.slice(8):e).trim().toLowerCase();return [t.name,t.path,k.basename(t.path),t.absolutePath].filter(r=>typeof r=="string"&&r.trim().length>0).map(r=>r.trim().toLowerCase()).includes(a)}function xe(e){if(!e.changed)return {headline:"No workspace model impact detected.",bullets:["The current workspace model matches the provided snapshot/report."],unsafeAssumptions:["Do not claim runtime verification passed unless a report exists."]};let t=e.affectedProjects.map(a=>a.project?.name??a.target);return {headline:`Workspace impact risk: ${e.risk}.`,bullets:[`Affected projects: ${t.length?t.join(", "):"none"}.`,`Workspace-level items: ${e.workspaceImpact.length}.`,"Use the verification plan before recommending apply, rollback, or release actions."],unsafeAssumptions:["Do not infer test/build success from impact alone.","Do not apply fixes without project scope and verification evidence.","Use display commands for users and execute commands for automation."]}}async function et(e){let t=k.resolve(e.workspacePath),a$1=ne(e.fromPath),r=e.diff;if(!r&&!a$1){let o=se(t,e.fromPath);r=await ve(o)??void 0;}r||(r=await Pe({workspacePath:t,fromPath:e.fromPath,includeAbsolutePaths:e.includeAbsolutePaths,includeEvidence:e.includeEvidence,includeGitObservation:e.includeGitObservation,gitObservation:e.gitObservation,now:e.now,model:e.model}));let c$1=new Map(r.currentModel.projects.map(o=>[o.path,o])),n=new Map(r.currentModel.projects.map(o=>[o.name,o])),i=r.changes.filter(o=>o.type.startsWith("project.")),p=new Map;for(let o of i){let d=(c$1.get(o.target)??(typeof o.before?.name=="string"?n.get(o.before.name):void 0))?.path??o.target,W=p.get(d)??[];W.push(o),p.set(d,W);}let m=[];for(let[o,s]of p.entries()){let d=c$1.get(o);if(d&&!re(e.scope,d))continue;let W=Z(s.map(De)),C=d?.name??(typeof s[0]?.before?.name=="string"?String(s[0].before.name):o);m.push({id:`project:${C}`,scope:"project",target:o,title:`Project impact: ${C}`,summary:s.map(M=>M.message).join(" "),risk:W,reasons:s.map(M=>`${M.type}: ${M.message}`),project:d?{name:d.name,path:d.path,kind:d.kind,runtime:d.runtime,framework:d.framework,supportTier:d.supportTier,...d.generator?{generator:d.generator}:{}}:void 0,verification:d?te(d):T()});}let l=j(r.currentModel),u=l?a(l):void 0,v=new Set(m.map(o=>o.project?.name).filter(o=>typeof o=="string")),R=new Map;for(let o of m)if(o.project?.name){let s=u?.byId.get(o.project.name);s&&(o.centrality={fanIn:s.fanIn,fanOut:s.fanOut,reach:s.reach,betweenness:s.betweenness,isHotspot:s.isHotspot},s.isHotspot&&(o.risk=Ce(o.risk),o.reasons=[...o.reasons,`graph.hotspot: critical-path project with ${s.reach} transitive dependent(s); risk escalated.`])),o.origin="direct",o.distance=0,R.set(o.project.name,o.risk);}let y=[],f=0;if(l&&v.size>0){let o=c(l,v);for(let s of o.values()){if(s.distance===0||v.has(s.id))continue;let d=n.get(s.id);if(d&&!re(e.scope,d))continue;let W=s.path[0],C=s.path[s.path.length-2]??W,M=R.get(W)??"medium",de=Re(M),j=u?.byId.get(s.id);f=Math.max(f,s.distance),y.push({id:`transitive:${s.id}`,scope:"project",target:d?.path??s.id,title:`Transitive impact: ${s.id}`,summary:`Depends on changed project ${W}${s.via?` via ${s.via}`:""} (distance ${s.distance}).`,risk:de,reasons:[`graph.dependent: depends on ${C}${s.via?` via ${s.via}`:""} (path ${s.path.join(" -> ")})`],project:d?{name:d.name,path:d.path,kind:d.kind,runtime:d.runtime,framework:d.framework,supportTier:d.supportTier,...d.generator?{generator:d.generator}:{}}:void 0,verification:d?te(d):T(),origin:"transitive",distance:s.distance,path:s.path,via:s.via,...j?{centrality:{fanIn:j.fanIn,fanOut:j.fanOut,reach:j.reach,betweenness:j.betweenness,isHotspot:j.isHotspot}}:{}});}}y.sort((o,s)=>o.target.localeCompare(s.target));let ie=u?u.hotspots.flatMap(o=>{let s=u.byId.get(o);return s?[{project:o,fanIn:s.fanIn,fanOut:s.fanOut,reach:s.reach,betweenness:s.betweenness}]:[]}):[],ce=r.changes.filter(o=>!o.type.startsWith("project.")),K=r.currentModel.summary?.projectCount??r.currentModel.projects.length,P=ce.map(o=>({id:`workspace:${o.target}`,scope:"workspace",target:o.target,title:`Workspace impact: ${o.target}`,summary:o.message,risk:$e(o,{projectCount:K}),reasons:[`${o.type}: ${o.message}`],verification:T()})),B=Ae([...m.flatMap(o=>o.verification),...y.flatMap(o=>o.verification),...P.flatMap(o=>o.verification),...r.summary.changed?T():[]]).filter(o=>o.required),pe=Z([...m.map(o=>o.risk),...y.map(o=>o.risk),...P.map(o=>o.risk)]),q=Fe({risk:pe,affectedProjects:m.length,projectCount:K,changes:r.changes}),z={changed:r.summary.changed,risk:q,affectedProjects:m.length,workspaceItems:P.length,recommendedCommands:B.length,blastRadius:{directlyAffected:m.length,transitivelyAffected:y.length,maxDistance:f,graphEdges:l?.edges.length??0}};return {schemaVersion:he,generatedAt:(e.now??new Date).toISOString(),fromRef:r.fromRef,diffRef:ae,workspace:{name:r.currentModel.workspace.name,profile:r.currentModel.workspace.profile,type:r.currentModel.workspace.type},summary:z,affectedProjects:m.sort((o,s)=>o.target.localeCompare(s.target)),transitiveImpact:y,criticalPathHotspots:ie,workspaceImpact:P.sort((o,s)=>o.target.localeCompare(s.target)),verificationPlan:B,agentBrief:xe({changed:z.changed,risk:q,affectedProjects:m,workspaceImpact:P}),diff:r}}async function tt(e,t){return e$2(t,we,d$1(e))}export{Q as a,oe as b,L as c,_ as d,ae as e,he as f,we as g,ye as h,ne as i,We as j,Ye as k,Qe as l,Pe as m,Ze as n,T as o,et as p,tt as q};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import {a as a$2}from'./chunk-2647BYBC.js';import {a}from'./chunk-D5YJOQYK.js';import {j}from'./chunk-FY4IIAIF.js';import {a as a$1}from'./chunk-GR6442P7.js';import {d,c}from'./chunk-EWZZUQBR.js';import {e,i}from'./chunk-NZ3WZYD5.js';import f from'path';import {createHash}from'crypto';import {createReadStream}from'fs';import {execFile}from'child_process';import {promisify}from'util';import S from'fs-extra';import {parseAllDocuments}from'yaml';var Ko=e.knowledgeGraph;function No(e$1,t){if(e$1.source.kind!=="workspace-model")throw new Error(`Workspace knowledge graph is not bound to the canonical workspace model (source: ${e$1.source.kind}).`);if(e$1.source.artifact!==e.model)throw new Error(`Workspace knowledge graph source artifact is ${e$1.source.artifact}; expected ${e.model}.`);if(e$1.source.hashAlgorithm!=="sha256")throw new Error(`Workspace knowledge graph source hash algorithm is ${e$1.source.hashAlgorithm}; expected sha256.`);let o=d(t);if(e$1.source.hash!==o)throw new Error("Workspace knowledge graph is stale: its source hash does not match the canonical workspace model.");if(e$1.workspace.name!==t.workspace.name||(e$1.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=j(t);if(!i)throw new Error("Canonical workspace model has no project topology for the workspace knowledge graph.");let s=n=>({...n,generatedAt:"<ignored>"});if(c(s(e$1.projectTopology))!==c(s(i)))throw new Error("Workspace knowledge graph project topology does not match the canonical workspace model.")}var we=new Set([".git",".hg",".svn",".workspai",".rapidkit",".venv","venv","vendor","node_modules","dist","build","target","coverage",".next",".turbo",".cache",".vscode-test","graphify-out",".pytest_cache",".mypy_cache",".ruff_cache",".tox",".gradle","fixture","fixtures","__fixtures__","testdata"]),Ze=new Set(["AGENTS.md","CLAUDE.md","GEMINI.md","QWEN.md"]);function at(e,t){let o=B(f.relative(e,t));return Ze.has(f.posix.basename(o))||/(?:^|\/)\.amazonq\/rules\/workspai-agent-entry\.md$/u.test(o)}var ct=new Set(["test","tests","spec","specs","e2e","integration","integration-tests","integration_tests","__tests__","fixture","fixtures","__fixtures__","testdata"]),dt=new Set(["examples","samples","worked"]);function Pe(e,t){let o=f.relative(e,t).split(f.sep).map(s=>s.toLowerCase()),i=f.basename(t).toLowerCase();return o.some(s=>ct.has(s))||/(?:\.test|\.spec|_test)\.[a-z0-9]+$/i.test(i)||/^test_.+\.[a-z0-9]+$/i.test(i)||/(?:tests?|specs?)\.(?:cs|fs|vb|java|kt|kts)$/i.test(i)}function $e(e,t){return f.relative(e,t).split(f.sep).map(o=>o.toLowerCase()).some(o=>dt.has(o))}function Z(e,t){return Pe(e,t)||$e(e,t)}function te(e,t){return f.relative(e,t).split(f.sep).some(o=>o.toLowerCase()==="generated")}var ve=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"]),lt=new Set([...ve,"go.work","go.work.sum"]),pt=new Set(["get","put","post","delete","options","head","patch","trace"]),x=new Set([".c",".cc",".cpp",".cs",".dart",".ex",".exs",".go",".h",".hpp",".java",".cjs",".cts",".js",".jsx",".kt",".kts",".mjs",".mts",".php",".py",".r",".rb",".rs",".scala",".svelte",".swift",".ts",".tsx",".vue",".clj",".cljs",".fs",".fsx",".lua",".vb"]);function q(e,t){let o=f.extname(e).toLowerCase();return o===".h"&&t==="cpp"?"cpp":{".c":"c",".cc":"cpp",".cpp":"cpp",".cs":"csharp",".dart":"dart",".ex":"elixir",".exs":"elixir",".go":"go",".h":"c",".hpp":"cpp",".java":"java",".cjs":"javascript",".cts":"typescript",".js":"javascript",".jsx":"javascript",".kt":"kotlin",".kts":"kotlin",".mjs":"javascript",".mts":"typescript",".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"}[o]??o.slice(1)}var ft=new Set(["external","third_party","third-party","vendor","vendors","vendored"]),ut=new Set(["app","apps","cli","cmd","core","extensions","internal","lib","packages","services","src"]);function Re(e,t){let i=B(f.relative(t,e)).split("/").filter(Boolean),s=i[0]?.toLowerCase()??"";return (i.some(a=>ft.has(a.toLowerCase()))?1e3:0)+(ut.has(s)?-100:0)+Math.min(i.length,20)}function mt(e,t,o){if(e.length<=t)return [...e];let i=[...e].sort((r,c)=>Re(r,o)-Re(c,o)||r.localeCompare(c)),s=new Map;for(let r of i){let c=q(r),d=s.get(c)??[];d.push(r),s.set(c,d);}let n=new Set,a=Math.max(1,Math.min(25,Math.floor(t/Math.max(s.size,1))));for(let r of [...s.values()])for(let c of r.slice(0,a))n.add(c);for(let r of i){if(n.size>=t)break;n.add(r);}return [...n].sort((r,c)=>r.localeCompare(c))}function he(e,t,o){let i=[],s=e.split(/\r?\n/);for(let n=0;n<s.length&&i.length<o;n+=1)for(let a of t){let c=s[n].match(a.pattern)?.[1]?.trim();if(c){i.push({name:c,line:n+1,detail:a.detail});break}}return i}var gt=[{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*(?:export\s+)?(?:declare\s+)?(?:const|let|var)\s+([A-Za-z_$][\w$]*)/,detail:"value"},{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*type\s+([A-Za-z_]\w*)\s+/,detail:"type"},{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*(?:public|protected|internal)\s+(?:(?:static|virtual|override|abstract|async|sealed|final|synchronized|native|unsafe|partial|extern|new)\s+)*(?:<[^>]+>\s*)?[A-Za-z_$][\w$<>,.?\[\]: ]*\s+([A-Za-z_$][\w$]*)\s*\(/,detail:"method"},{pattern:/^\s*(?:pub(?:\([^)]*\))?\s+)?(?:async\s+)?fn\s+([A-Za-z_]\w*)/,detail:"function"},{pattern:/^\s*(?:pub(?:\([^)]*\))?\s+)?(?:struct|trait|enum|type)\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"}],Je=[{pattern:/^\s*import(?:.+?from\s*)?["']([^"']+)["']/,detail:"import"},{pattern:/require\(["']([^"']+)["']\)/,detail:"require"}],He=[{pattern:/^\s*from\s+([A-Za-z0-9_.]+)\s+import\s+/,detail:"import"},{pattern:/^\s*import\s+([A-Za-z0-9_.]+)(?:\s|$)/,detail:"import"}],ht=[{pattern:/^\s*#\s*include\s*["<]([^">]+)[">]/,detail:"include"}],yt=[{pattern:/^\s*use\s+([A-Za-z0-9_:*.-]+)/,detail:"use"}],vt=[{pattern:/^\s*import\s+(?:static\s+)?([A-Za-z0-9_.*]+)\s*;?/,detail:"import"}],bt=[{pattern:/^\s*(?:global\s+)?using\s+([A-Za-z0-9_.]+)/,detail:"using"}],kt=[{pattern:/^\s*import\s+(?:[A-Za-z0-9_.]+\s+)?["']([^"']+)["']/,detail:"import"}],Ue=[{pattern:/^\s*require(?:_relative)?\s+["']([^"']+)["']/,detail:"require"}],wt=[{pattern:/^\s*use\s+([A-Za-z0-9_\\]+)/,detail:"use"}],Pt=[{pattern:/^\s*(?:alias|import|require|use)\s+([A-Za-z0-9_.]+)/,detail:"import"}],$t=[{pattern:/^\s*import\s+["']([^"']+)["']/,detail:"import"}],jt=[{pattern:/\brequire\s*\(?\s*["']([^"']+)["']/,detail:"require"}],It=[{pattern:/^\s*(?:library|require)\s*\(\s*["']?([^"')\s]+)["']?/,detail:"import"}],Ct=[...Je,...He,{pattern:/^\s*(?:import|using|use)\s+([A-Za-z0-9_:.*\\/.-]+)/,detail:"import"},...Ue];function Et(e){let t=f.extname(e).toLowerCase();return [".cjs",".cts",".js",".jsx",".mjs",".mts",".ts",".tsx",".vue",".svelte"].includes(t)?Je:t===".py"?He:[".c",".cc",".cpp",".h",".hpp"].includes(t)?ht:t===".rs"?yt:[".java",".kt",".kts",".scala"].includes(t)?vt:[".cs",".fs",".fsx",".vb"].includes(t)?bt:t===".go"?kt:t===".rb"?Ue:t===".php"?wt:[".ex",".exs"].includes(t)?Pt:t===".dart"?$t:t===".lua"?jt:t===".r"?It:Ct}function Rt(e,t,o,i,s){let n=f.extname(e).toLowerCase()===".py",a=[];if(n){let c=t.match(/^\.+/)?.[0].length??0,d=c>0?f.dirname(e):f.resolve(i??"");for(let p=1;p<c;p+=1)d=f.dirname(d);let l=t.slice(c).replace(/\./g,f.sep);a.push(l?f.join(d,l):d);}else if(t.startsWith("."))a.push(f.resolve(f.dirname(e),t));else if(s==="include")a.push(f.resolve(f.dirname(e),t)),i&&a.push(f.resolve(i,t));else return null;let r=new Set;for(let c of a){r.add(c);let d=f.extname(c).toLowerCase(),l=x.has(d);if(n&&(r.add(`${c}.py`),r.add(f.join(c,"__init__.py"))),l){let p=c.slice(0,-d.length);if([".js",".jsx",".mjs"].includes(d))for(let h of [".ts",".tsx",".js",".jsx",".mjs"])r.add(`${p}${h}`);}else for(let p of x)r.add(`${c}${p}`),r.add(f.join(c,`index${p}`));}return [...r].find(c=>o.has(f.resolve(c)))??null}function At(e,t){let o=t.trimStart(),i=f.extname(e).toLowerCase();return [".py",".rb",".sh",".bash",".zsh"].includes(i)?o.startsWith("#"):[".sql",".lua",".hs"].includes(i)?o.startsWith("--"):o.startsWith("//")||o.startsWith("/*")||o.startsWith("*")}function St(e,t){if(f.extname(e).toLowerCase()!==".py")return t;let o=null;return t.split(/\r?\n/).map(i=>{let s=0,n="";for(;s<i.length;){if(o){let l=i.indexOf(o,s);if(l<0)return n;s=l+3,o=null;continue}let a=i.indexOf("'''",s),r=i.indexOf('"""',s),c=i.indexOf("#",s),d=a<0?r:r<0?a:Math.min(a,r);if(c>=0&&(d<0||c<d)){n+=i.slice(s,c);break}if(d<0){n+=i.slice(s);break}n+=i.slice(s,d),o=i.startsWith("'''",d)?"'''":'"""',s=d+3;}return n}).join(`
|
|
2
|
+
`)}function _t(e,t){if(![".js",".jsx",".mjs",".ts",".tsx"].includes(f.extname(e).toLowerCase()))return t;let o=false,i=false;return t.split(/\r?\n/).map(s=>{let n="",a=null,r=false;for(let c=0;c<s.length;c+=1){let d=s[c],l=s[c+1];if(o){n+=" ",d==="*"&&l==="/"&&(n+=" ",c+=1,o=false);continue}if(i){n+=" ",d==="`"&&!r&&(i=false),r=d==="\\"&&!r,d!=="\\"&&(r=false);continue}if(a){n+=d,d===a&&!r&&(a=null),r=d==="\\"&&!r,d!=="\\"&&(r=false);continue}if(d==="/"&&l==="/")return n.padEnd(s.length," ");if(d==="/"&&l==="*"){n+=" ",c+=1,o=true;continue}if(d==="`"){n+=" ",i=true,r=false;continue}(d==="'"||d==='"')&&(a=d),n+=d;}return n}).join(`
|
|
3
|
+
`)}function Ve(e,t){return _t(e,St(e,t))}var Tt=[{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 ce(e){return createHash("sha256").update(e).digest("hex")}function E(e,t){return `wkg:${e}:${ce(`${e}\0${t}`).slice(0,20)}`}function B(e){return e.replace(/\\/g,"/")}function re(e){let t=B(e).replace(/^\.\//,"");return !t||t.startsWith("/")||/^[A-Za-z]:\//.test(t)||t.split("/").includes("..")?"unknown":t}function C(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:null}function P(e){return typeof e=="string"&&e.trim()?e.trim():void 0}function N(e){if(Array.isArray(e))return e.filter(o=>typeof o=="string").map(o=>o.trim()).filter(Boolean).sort();let t=C(e);return t?Object.keys(t).map(o=>o.trim()).filter(Boolean).sort():[]}function Ft(e){if(Array.isArray(e))return e.map(o=>typeof o=="string"?o.split("=",1)[0]?.trim():"").filter(o=>!!o).sort();let t=C(e);return t?Object.keys(t).sort():[]}function Mt(e){return Object.fromEntries(Object.entries(e).filter(t=>t[1]!==void 0).sort(([t],[o])=>t.localeCompare(o)))}async function ne(e,t){let o=[],i=[e],s=0;for(;s<i.length&&o.length<t;){let n=i[s++],a;try{a=await S.readdir(n,{withFileTypes:true});}catch{continue}a.sort((r,c)=>r.name.localeCompare(c.name));for(let r of a){if(o.length>=t)break;if(r.isSymbolicLink())continue;let c=f.join(n,r.name);r.isDirectory()?!we.has(r.name)&&!a$1(r.name)&&i.push(c):r.isFile()&&(at(e,c)||o.push(c));}}return o.sort((n,a)=>n.localeCompare(a))}async function Ye(e,t=1024){let o=[],i=[e],s=0;for(;s<i.length&&o.length<t;){let n=i[s++],a;try{a=await S.readdir(n,{withFileTypes:true});}catch{continue}a.sort((r,c)=>r.name.localeCompare(c.name));for(let r of a){if(r.isSymbolicLink())continue;let c=f.join(n,r.name);if(r.isDirectory())!we.has(r.name)&&!a$1(r.name)&&i.push(c);else if(r.isFile()&<.has(r.name)&&(o.push(c),o.length>=t))break}}return o.sort((n,a)=>n.localeCompare(a))}async function Xe(e){return new Promise(t=>{let o=createHash("sha256"),i=createReadStream(e);i.on("data",s=>o.update(s)),i.on("error",s=>{t(`unreadable:${s.code??"unknown"}`);}),i.on("end",()=>t(o.digest("hex")));})}var Ot=promisify(execFile);async function V(e,t){let o=await Ot("git",t,{cwd:e,encoding:"buffer",maxBuffer:268435456,windowsHide:true});return Buffer.isBuffer(o.stdout)?o.stdout:Buffer.from(o.stdout)}function Lt(){return [".",...[...we].sort((e,t)=>e.localeCompare(t)).map(e=>`:(exclude,glob)**/${e}/**`),...[...Ze].sort((e,t)=>e.localeCompare(t)).map(e=>`:(exclude,glob)**/${e}`),":(exclude,glob)**/.amazonq/rules/workspai-agent-entry.md"]}async function Wt(e){try{let t=(await V(e.root,["rev-parse","--show-prefix"])).toString("utf8").trim().replace(/\\/gu,"/"),o=t?`${t.replace(/^\/+|\/+$/gu,"")}/`:"";if(f.posix.isAbsolute(o)||o==="../"||o.startsWith("../")||o.includes("/../"))return null;let i=Lt(),[s,n,a,r,c,d]=await Promise.all([V(e.root,["ls-files","--full-name","-s","--",...i]),V(e.root,["diff","--no-ext-diff","--no-textconv","--binary","HEAD","--",...i]),V(e.root,["ls-files","--full-name","--others","--exclude-standard","-z","--",...i]),V(e.root,["ls-files","--full-name","--others","--ignored","--exclude-standard","-z","--",...i]),V(e.root,["ls-files","-v","--",...i]),V(e.root,["ls-files","--full-name","-s","--",...i])]);if(c.toString("utf8").split(/\r?\n/u).some(v=>/^[a-z] /u.test(v)))return null;let l=e.files.map(v=>{let m=B(f.relative(e.root,v));return `${o}${m}`});if(d.toString("utf8").split(/\r?\n/u).filter(v=>v.startsWith("160000 ")).map(v=>v.split(" ",2)[1]).filter(v=>!!v).map(v=>v.replace(/\\/gu,"/").replace(/\/$/u,"")).some(v=>l.some(m=>m.startsWith(`${v}/`))))return null;let h=new Set(l),u=Buffer.concat([a,r]).toString("utf8").split("\0").filter(Boolean).map(v=>v.replace(/\\/gu,"/")).filter(v=>h.has(v)),y=await Qe([...new Set(u)].sort((v,m)=>v.localeCompare(m)),16,async v=>{let m=o?v.slice(o.length):v;return {path:m,hash:await Xe(f.resolve(e.root,...m.split("/").filter(Boolean)))}}),k=createHash("sha256");k.update(`git-worktree-v2\0${e.kind}\0${e.id}\0${e.fileLimit}\0`),k.update(s),k.update(createHash("sha256").update(n).digest());for(let v of y)k.update(`${v.path}\0${v.hash}\0`);return {kind:e.kind,id:e.id,strategy:"git-worktree-v2",hash:k.digest("hex"),fileCount:e.files.length,fileLimit:e.fileLimit,truncated:e.files.length>=e.fileLimit}}catch{return null}}async function Qe(e,t,o){let i=new Array(e.length),s=0,n=Array.from({length:Math.min(t,Math.max(e.length,1))},async()=>{for(;s<e.length;){let a=s++;i[a]=await o(e[a]);}});return await Promise.all(n),i}async function Ae(e){let t=await Wt(e);if(t)return t;let o=await Qe(e.files,16,async s=>({path:B(f.relative(e.root,s)),hash:await Xe(s)}));o.sort((s,n)=>s.path.localeCompare(n.path));let i=createHash("sha256");i.update(`content-merkle-v1\0${e.kind}\0${e.id}\0${e.fileLimit}\0`);for(let s of o)i.update(`${s.path}\0${s.hash}\0`);return {kind:e.kind,id:e.id,strategy:"content-merkle-v1",hash:i.digest("hex"),fileCount:o.length,fileLimit:e.fileLimit,truncated:o.length>=e.fileLimit}}async function zt(e){let t=f.resolve(e.workspacePath),o=[...e.projects].sort((a,r)=>a.id.localeCompare(r.id)),i=e.inventories?.workspaceFiles??await ne(t,e.workspaceFileLimit),s=await Promise.all([Ae({kind:"workspace",id:"workspace",root:t,files:i,fileLimit:e.workspaceFileLimit}),...o.map(async a=>{let r=a.absolutePath?f.resolve(a.absolutePath):f.resolve(t,a.path),c=e.inventories?.projectFiles?.get(a.id)??[...new Set([...await ne(r,e.projectFileLimit),...await Ye(r)])].sort((d,l)=>d.localeCompare(l));return Ae({kind:"project",id:a.id,root:r,files:c,fileLimit:e.projectFileLimit})})]);s.sort((a,r)=>a.kind.localeCompare(r.kind)||a.id.localeCompare(r.id));let n=createHash("sha256");n.update("workspace-knowledge-graph-inputs.v1\0hybrid-git-content-v2\0");for(let a of s)n.update(`${a.kind}\0${a.id}\0${a.hash}\0${a.fileCount}\0${a.fileLimit}\0${a.truncated}\0`);return {schemaVersion:"workspace-knowledge-graph-inputs.v1",strategy:"hybrid-git-content-v2",hashAlgorithm:"sha256",hash:n.digest("hex"),scopes:s}}async function X(e){let t=await S.readFile(e,"utf8");if(e.toLowerCase().endsWith(".json")){let o=JSON.parse(t),i=C(o);return i?[i]:[]}return parseAllDocuments(t,{logLevel:"silent"}).map(o=>C(o.toJSON())).filter(o=>o!==null)}function oe(e){return [...new Set([...e.workspaceFiles,...e.projects.flatMap(t=>e.filesByProject.get(t.id)??[])])].sort((t,o)=>t.localeCompare(o))}function de(e){return /^(?:openapi|swagger)(?:\.[^.]+)?\.(?:json|ya?ml)$/i.test(f.basename(e))}function Se(e){let t=f.basename(e).toLowerCase();return /\.(?:graphql|gql|proto)$/.test(t)||/^asyncapi(?:\.[^.]+)?\.(?:json|ya?ml)$/.test(t)}function _e(e){let t=f.basename(e),o=B(e);return !/(?:^|\/)\.devcontainer(?:\/|$)/i.test(o)&&/^Dockerfile(?:\..+)?$/i.test(t)||/\.tf$/i.test(t)||t==="Chart.yaml"}function Te(e){return /(?:^|[\\/])(?:README|ARCHITECTURE|CONTRIBUTING|SECURITY)\.md$/i.test(e)}function Kt(e,t){let o=B(f.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|\.drone\.ya?ml|\.travis\.ya?ml|appveyor\.ya?ml)$/i.test(o)||/^\.circleci\/config\.ya?ml$/i.test(o)||/^\.buildkite\/pipeline\.ya?ml$/i.test(o)||/^\.tekton\/.+\.ya?ml$/i.test(o)||/^prow\/[^/]+\.(?:sh|py)$/i.test(o)}function Fe(e,t){let o=B(f.relative(e,t));return /(?:^|\/)(?:adr|adrs|decisions)(?:\/).+\.md$/i.test(o)||/(?:^|\/)ADR[-_0-9].+\.md$/i.test(o)}async function Me(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 s=f.join(o,i);await S.pathExists(s)&&t.add(s);}for(let o of oe(e))/^(?:docker-)?compose(?:\.[a-z0-9_-]+)*\.ya?ml$/i.test(f.basename(o))&&t.add(o);return [...t].sort((o,i)=>o.localeCompare(i))}async function Oe(e){let o=[e.workspacePath,...e.projects.map(s=>s.root)].flatMap(s=>[f.join(s,"CODEOWNERS"),f.join(s,".github","CODEOWNERS"),f.join(s,"docs","CODEOWNERS")]);for(let s of oe(e))f.basename(s)==="OWNERS"&&o.push(s);let i=await Promise.all(o.map(async s=>await S.pathExists(s)?s:null));return [...new Set(i.filter(s=>!!s))].sort((s,n)=>s.localeCompare(n))}function Le(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=>Kt(o.root,i))))].sort((o,i)=>o.localeCompare(i))}async function We(e){let t=[];for(let o of oe(e))if(/\.ya?ml$/i.test(o))try{(await X(o)).some(s=>{let n=C(s.metadata);return !!(P(s.apiVersion)&&P(s.kind)&&P(n?.name))})&&t.push(o);}catch{}return t.sort((o,i)=>o.localeCompare(i))}function U(e,t){let o=f.resolve(t);return e.filter(i=>o===i.root||o.startsWith(`${i.root}${f.sep}`)).sort((i,s)=>s.root.length-i.root.length)[0]??null}var be=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;emptyLabelDiagnostics=new Set;artifactPath(t,o){if(o){let i=B(f.relative(o.root,t));return re(f.posix.join(o.artifactPrefix,i))}return re(f.relative(this.workspacePath,t))}async addProof(t){let o;if(t.absolutePath){if(!this.contentHashes.has(t.absolutePath))try{this.contentHashes.set(t.absolutePath,ce(await S.readFile(t.absolutePath)));}catch{this.contentHashes.set(t.absolutePath,null);}o=this.contentHashes.get(t.absolutePath)??void 0;}let i=re(t.artifact),s=E("proof",[t.provider,i,t.pointer??"",t.line??"",t.detail??""].join("\0"));return this.proofs.has(s)||this.proofs.set(s,{id:s,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}:{}}),s}addEntity(t){let o=E(t.kind,t.key),i=Mt(t.attributes??{}),s=this.entities.get(o),n=t.label.trim(),a=n||s?.label||t.key.trim()||t.kind;!n&&!this.emptyLabelDiagnostics.has(o)&&(this.emptyLabelDiagnostics.add(o),this.diagnostics.push({code:"graph.knowledge.empty_label_normalized",severity:"warning",message:`An empty ${t.kind} label was normalized to ${a}.`,entityIds:[o],recommendation:"Inspect the provider proof and preserve a non-empty source identifier before publishing the entity."}));let r={...s?.attributes??{}};for(let[l,p]of Object.entries(i)){if(l in r&&JSON.stringify(r[l])!==JSON.stringify(p)){if(t.mergeArrayAttributes?.includes(l)&&Array.isArray(r[l])&&Array.isArray(p)){r[l]=p;continue}let h=`${o}\0${l}`;this.attributeConflicts.has(h)||(this.attributeConflicts.add(h),this.diagnostics.push({code:"graph.knowledge.attribute_conflict",severity:"warning",message:`Conflicting ${l} values were observed for ${t.kind} ${a}.`,entityIds:[o],recommendation:"Inspect the entity proof paths and make the authoritative source explicit."}));continue}r[l]=p;}let c=[...new Set([...s?.identity.aliases??[],...t.aliases??[]].map(l=>l.trim()).filter(Boolean))].sort(),d=[...new Set([...s?.proofIds??[],...t.proofIds??[]])].sort();return this.entities.set(o,{id:o,kind:t.kind,label:a,...t.projectId?{projectId:t.projectId}:{},identity:{key:t.key,scope:t.projectId?"project":"workspace",aliases:c,fingerprint:ce(JSON.stringify({kind:t.kind,key:t.key,attributes:r}))},attributes:r,proofIds:d}),o}addRelation(t){let o=E("relation",`${t.from}\0${t.kind}\0${t.to}`),i=this.relations.get(o),s=[...new Set([...i?.proofIds??[],...t.proofIds])].sort(),n=new Set(s.map(c=>this.proofs.get(c)?.provider).filter(Boolean)).size,a=t.trust??i?.trust??"observed",r=n>=2&&a!=="ambiguous"?"corroborated":a;return this.relations.set(o,{id:o,from:t.from,to:t.to,kind:t.kind,derivation:t.derivation??i?.derivation??"extracted",trust:r,confidence:r==="corroborated"?"high":t.confidence??i?.confidence??"high",proofIds:s}),o}};function Q(e){let t=[],o=null;for(let i of e.split(/\r?\n/)){let s=i.match(/^\s*\[\[([^\]]+)\]\]\s*(?:#.*)?$/)?.[1]?.trim()??i.match(/^\s*\[([^\]]+)\]\s*(?:#.*)?$/)?.[1]?.trim();if(s){o&&t.push({name:o.name,body:o.lines.join(`
|
|
4
|
+
`)}),o={name:s,lines:[]};continue}o?.lines.push(i);}return o&&t.push({name:o.name,body:o.lines.join(`
|
|
5
|
+
`)}),t}function Nt(e){return [...e.matchAll(/["']([^"']+)["']/g)].map(t=>t[1])}function le(e,t){let o=t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),i=new RegExp(`^\\s*${o}\\s*=\\s*\\[`,"m").exec(e);if(!i)return [];let s=i.index+i[0].lastIndexOf("["),n=null,a=false;for(let r=s+1;r<e.length;r+=1){let c=e[r];if(n){c===n&&!a&&(n=null),a=c==="\\"&&!a,c!=="\\"&&(a=false);continue}if(c==="'"||c==='"'){n=c;continue}if(c==="]")return Nt(e.slice(s+1,r))}return []}function ze(e){return e.trim().match(/^([A-Za-z0-9][A-Za-z0-9_.-]*)/)?.[1]??""}function je(e){return e.replace(/\.(?:workspace|version|path|git|optional|features|default-features|package)$/,"")}function Bt(e){let t=Q(e).find(({name:i})=>i==="workspace.package")?.body;if(!t)return {};let o=i=>{let s=i.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return t.match(new RegExp(`^\\s*${s}\\s*=\\s*["']([^"']+)["']`,"m"))?.[1]};return {edition:o("edition"),rustVersion:o("rust-version"),version:o("version")}}function ae(e,t,o){let i=Q(e).find(({name:r})=>r==="package")?.body;if(!i)return o;let s=t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),n=i.match(new RegExp(`^\\s*${s}\\s*=\\s*["']([^"']+)["']`,"m"))?.[1];return n||(new RegExp(`^\\s*${s}(?:\\.workspace\\s*=\\s*true|\\s*=\\s*\\{[^}]*\\bworkspace\\s*=\\s*true[^}]*\\})`,"m").test(i)?o:void 0)}function Dt(e){let t=Q(e).find(({name:i})=>i==="toolchain")?.body;if(!t)return {components:[],targets:[]};let o=i=>{let s=i.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return t.match(new RegExp(`^\\s*${s}\\s*=\\s*["']([^"']+)["']`,"m"))?.[1]};return {channel:o("channel"),profile:o("profile"),components:le(t,"components").sort(),targets:le(t,"targets").sort()}}function Gt(e,t,o={}){let i=f.basename(e);try{if(i==="package.json"||i==="composer.json"){let r=JSON.parse(t);return {ecosystem:i==="package.json"?"npm":"composer",name:P(r.name),version:P(r.version),dependencies:[...N(r.dependencies),...N(r.devDependencies),...N(r.require),...N(r["require-dev"])].filter((c,d,l)=>l.indexOf(c)===d).sort(),metadata:i==="package.json"?{entrypoints:[P(r.main),P(r.module),P(r.types)].filter(c=>!!c),exports:C(r.exports)?Object.keys(C(r.exports)).sort():P(r.exports)?["."]:[],executables:C(r.bin)?Object.keys(C(r.bin)).sort():P(r.bin)?[P(r.name)??"default"]:[],runtimeConstraints:Object.entries(C(r.engines)??{}).map(([c,d])=>`${c}:${String(d)}`).sort()}:void 0}}if(i==="deno.json"||i==="deno.jsonc"){let r=JSON.parse(t.replace(/\/\*[\s\S]*?\*\/|^\s*\/\/.*$/gm,""));return {ecosystem:"deno",name:P(r.name),version:P(r.version),dependencies:N(r.imports)}}}catch{}let s=r=>t.match(r)?.[1]?.trim();if(i==="pyproject.toml"){let c=Q(t).filter(({name:d})=>d==="project"||d==="project.optional-dependencies"||d==="dependency-groups"||d==="tool.poetry.dependencies"||/^tool\.poetry\.group\.[^.]+\.dependencies$/.test(d)).flatMap(({name:d,body:l})=>d==="project"?le(l,"dependencies").map(ze):d==="project.optional-dependencies"||d==="dependency-groups"?[...l.matchAll(/^\s*(?:["']([^"']+)["']|([A-Za-z0-9_.-]+))\s*=\s*\[/gm)].flatMap(p=>le(l,p[1]??p[2])).map(ze):[...l.matchAll(/^\s*(?:["']([^"']+)["']|([A-Za-z0-9_.-]+))\s*=/gm)].map(p=>p[1]??p[2]).filter(p=>p!=="python"));return {ecosystem:"python",name:s(/^(?:name)\s*=\s*["']([^"']+)["']/m),version:s(/^(?:version)\s*=\s*["']([^"']+)["']/m),dependencies:c.filter(Boolean).filter((d,l,p)=>p.indexOf(d)===l).sort(),metadata:{requiresPython:s(/^requires-python\s*=\s*["']([^"']+)["']/m)??"unknown"}}}if(i==="go.mod")return {ecosystem:"go",name:s(/^module\s+(\S+)/m),dependencies:[...t.matchAll(/^\s*([A-Za-z0-9_.~/-]+)\s+v\d+/gm)].map(r=>r[1]).sort(),metadata:{goVersion:s(/^go\s+(\S+)/m)??"unknown"}};if(i==="Cargo.toml"){let r=Q(t).filter(({name:c})=>/(?:^|\.)(?:dev-|build-)?dependencies$/.test(c)).map(({body:c})=>c).join(`
|
|
6
|
+
`);return {ecosystem:"cargo",name:ae(t,"name",void 0),version:ae(t,"version",o.version),dependencies:[...r.matchAll(/^\s*(?:["']([^"']+)["']|([A-Za-z0-9_.-]+))\s*=/gm)].map(c=>c[1]??c[2]).map(je).filter((c,d,l)=>l.indexOf(c)===d).sort(),metadata:{edition:ae(t,"edition",o.edition)??"unknown",rustVersion:ae(t,"rust-version",o.rustVersion)??"unknown",features:Q(t).find(({name:c})=>c==="features")?.body.match(/^\s*([A-Za-z0-9_.-]+)\s*=/gm)?.map(c=>c.split("=",1)[0].trim()).sort()??[]}}}if(i==="pom.xml"){let r=[...t.matchAll(/<dependency>([\s\S]*?)<\/dependency>/g)].map(c=>{let d=c[1].match(/<groupId>([^<]+)<\/groupId>/)?.[1]?.trim(),l=c[1].match(/<artifactId>([^<]+)<\/artifactId>/)?.[1]?.trim();return d&&l?`${d}:${l}`:l}).filter(c=>!!c);return {ecosystem:"maven",name:s(/<artifactId>([^<]+)<\/artifactId>/),version:s(/<version>([^<]+)<\/version>/),dependencies:r.filter((c,d,l)=>l.indexOf(c)===d).sort(),metadata:{groupId:s(/<groupId>([^<]+)<\/groupId>/)??"unknown",packaging:s(/<packaging>([^<]+)<\/packaging>/)??"jar"}}}if(/\.(?:cs|fs|vb)proj$/i.test(i))return {ecosystem:"nuget",name:s(/<AssemblyName>([^<]+)<\/AssemblyName>/)??i.replace(/\.[^.]+$/,""),version:s(/<Version>([^<]+)<\/Version>/),dependencies:[...t.matchAll(/<PackageReference\s+Include=["']([^"']+)["']/g)].map(r=>r[1]).sort(),metadata:{targetFrameworks:(s(/<TargetFrameworks?>([^<]+)<\/TargetFrameworks?>/)??"unknown").split(";"),rootNamespace:s(/<RootNamespace>([^<]+)<\/RootNamespace>/)??"unknown"}};let n={"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"},a=i==="requirements.txt"?t.split(/\r?\n/).map(r=>r.trim().match(/^([A-Za-z0-9_.-]+)/)?.[1]):i.startsWith("build.gradle")?[...t.matchAll(/(?:implementation|api|compileOnly|runtimeOnly|testImplementation)\s*\(?["']([^:"']+):([^:"']+)/g)].map(r=>`${r[1]}:${r[2]}`):i==="Gemfile"?[...t.matchAll(/^\s*gem\s+["']([^"']+)["']/gm)].map(r=>r[1]):i==="mix.exs"?[...t.matchAll(/\{:\s*([A-Za-z0-9_]+)\s*,/g)].map(r=>r[1]):i==="pubspec.yaml"?[...t.matchAll(/^\s{2}([A-Za-z0-9_]+):\s+/gm)].map(r=>r[1]):i==="Package.swift"?[...t.matchAll(/\.package\s*\(\s*url:\s*["']([^"']+)["']/g)].map(r=>r[1]):i==="CMakeLists.txt"?[...t.matchAll(/find_package\s*\(\s*([A-Za-z0-9_.+-]+)/gi)].map(r=>r[1]):i==="project.clj"||i==="deps.edn"?[...t.matchAll(/\[?([A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+)\s+/g)].map(r=>r[1]):i==="build.sbt"?[...t.matchAll(/["']([^"']+)["']\s*%%?\s*["']([^"']+)["']/g)].map(r=>`${r[1]}:${r[2]}`):[];return {ecosystem:n[i]??"unknown",dependencies:a.filter(r=>!!r).filter((r,c,d)=>d.indexOf(r)===c).sort()}}function qt(e){let t=new Set,o=i=>{let s=i.replace(/\/\/.*$/u,"").trim().replace(/^["']|["']$/gu,"").replace(/\\/gu,"/");s&&s!=="("&&s!==")"&&t.add(s);};for(let i of e.matchAll(/^\s*use\s*\(([\s\S]*?)^\s*\)/gmu))for(let s of (i[1]??"").split(/\r?\n/u))o(s);for(let i of e.matchAll(/^\s*use\s+([^\s(][^\r\n]*)$/gmu))o(i[1]??"");return [...t].sort((i,s)=>i.localeCompare(s))}function Ke(e,t){let o=e==="cargo"?je(t):t;return e==="cargo"?o.toLowerCase().replace(/[-_]/g,""):o.toLowerCase()}function xt(e,t){let o=[...e.entities.values()].filter(s=>s.kind==="package"&&s.projectId===t),i=new Map;for(let s of o){let n=String(s.attributes.ecosystem??"unknown");for(let a of new Set([s.label,...s.identity.aliases])){let r=`${n}\0${Ke(n,a)}`,c=i.get(r)??[];c.push(s),i.set(r,c);}}for(let s of o){let n=String(s.attributes.ecosystem??"unknown"),a=Array.isArray(s.attributes.dependencies)?s.attributes.dependencies.filter(r=>typeof r=="string"):[];for(let r of a){let c=`${n}\0${Ke(n,r)}`,d=(i.get(c)??[]).filter(h=>h.id!==s.id);if(d.length!==1)continue;let l=d[0];e.addRelation({from:s.id,to:l.id,kind:"depends-on",trust:"authoritative",derivation:"authored",confidence:"high",proofIds:s.proofIds});let p=E("module",`dependency:${n}:${je(r)}`);e.relations.delete(E("relation",`${s.id}\0depends-on\0${p}`));}}for(let s of [...e.entities.values()]){if(s.kind!=="module"||s.projectId)continue;[...e.relations.values()].some(a=>a.from===s.id||a.to===s.id)||e.entities.delete(s.id);}}var Zt={id:"workspace-foundation",version:"1.0.0",async run(e){let{state:t}=e,o=await t.addProof({provider:this.id,artifact:i.workspaceContract,absolutePath:f.join(e.workspacePath,".workspai","workspace.contract.json"),trust:"authoritative",derivation:"authored",detail:"Workspace identity and project registry boundary"}),i$1=t.addEntity({kind:"workspace",key:`workspace:${t.workspaceName}`,label:t.workspaceName,aliases:[t.workspaceName],proofIds:[o]});for(let s of e.projects){let n=e.filesByProject.get(s.id)??[],a=n.find(m=>/[\\/]\.(?:workspai|rapidkit)[\\/](?:project|context)\.json$/.test(m)),r=n.find(m=>ve.has(f.basename(m))),c=a??r,d=await t.addProof({provider:this.id,artifact:c?t.artifactPath(c,s):re(f.posix.join(s.artifactPrefix,".workspai/project.json")),...c?{absolutePath:c}:{},trust:a?"authoritative":"observed",derivation:a?"authored":"inferred",detail:`Project ${s.id}`}),l=t.addEntity({kind:"project",key:`project:${s.id}`,label:s.id,projectId:s.id,aliases:[s.id,s.path],attributes:{path:s.path,runtime:s.runtime,runtimeCandidates:s.runtimeCandidates,framework:s.framework,kit:s.kit,kind:s.kind,category:s.category,...s.governance?{governanceCiStatus:s.governance.ci.status,governanceReleaseStatus:s.governance.release.status,governanceOwnershipStatus:s.governance.ownership.status,governanceProviders:[s.governance.ci.provider,s.governance.release.provider,s.governance.ownership.provider].filter(m=>!!m)}:{}},proofIds:[d]});t.addRelation({from:i$1,to:l,kind:"contains",trust:"authoritative",derivation:"authored",proofIds:[d]});let p=new Set,h=[],u=n.find(m=>f.resolve(m)===f.resolve(s.root,"go.work")),y;if(u)try{let m=await S.readFile(u,"utf8"),b=qt(m),j=t.artifactPath(u,s),w=await t.addProof({provider:this.id,artifact:j,absolutePath:u,pointer:"/use",trust:"authoritative",derivation:"authored",confidence:"high",detail:`Go workspace with ${b.length} member(s)`}),$=t.addEntity({kind:"module",key:`go-workspace:${s.id}:${j}`,label:`${s.id} Go workspace`,projectId:s.id,aliases:["go.work"],attributes:{ecosystem:"go",manifest:j,members:b},proofIds:[w]});t.addRelation({from:l,to:$,kind:"contains",trust:"authoritative",derivation:"authored",proofIds:[w]}),y={entityId:$,members:b,proofId:w};}catch{}let k={},v=n.find(m=>f.resolve(m)===f.resolve(s.root,"Cargo.toml"));if(v)try{k=Bt(await S.readFile(v,"utf8"));}catch{}for(let m of n){let b=f.basename(m);if(/^(?:\.env\.example|\.env\.sample|\.env\.template)$/i.test(b))try{let w=await S.readFile(m,"utf8");for(let $ of w.split(/\r?\n/)){let _=$.match(/^\s*([A-Za-z_][A-Za-z0-9_]*)\s*=/)?.[1];_&&p.add(_);}}catch{}let j=Pe(s.root,m);if(j&&h.push(m),!(j||$e(s.root,m))&&!(!ve.has(b)&&!/\.(?:cs|fs|vb)proj$/i.test(b)))try{let w=await S.readFile(m,"utf8"),$=Gt(m,w,k),_=t.artifactPath(m,s),R=await t.addProof({provider:this.id,artifact:_,absolutePath:m,pointer:"/",confidence:$.name?"high":"medium",detail:`${$.ecosystem} manifest`}),I=t.addEntity({kind:"package",key:`package:${s.id}:${$.ecosystem}:${$.name??"anonymous"}:${_}`,label:$.name??`${s.id}/${B(f.relative(s.root,m))}`,projectId:s.id,aliases:[b,...$.name?[$.name]:[]],attributes:{ecosystem:$.ecosystem,version:$.version,manifest:_,dependencies:$.dependencies,...$.metadata??{}},proofIds:[R]});t.addRelation({from:l,to:I,kind:"contains",proofIds:[R]});for(let F of $.dependencies.slice(0,500)){let T=t.addEntity({kind:"module",key:`dependency:${$.ecosystem}:${F}`,label:F,aliases:[F],attributes:{ecosystem:$.ecosystem,external:true},proofIds:[R]});t.addRelation({from:I,to:T,kind:"depends-on",trust:"authoritative",derivation:"authored",proofIds:[R]});}}catch{}}if(y){let m=[...t.entities.values()].filter(b=>b.kind==="package"&&b.projectId===s.id);for(let b of y.members){let j=t.artifactPath(f.join(s.root,b,"go.mod"),s),w=m.find($=>$.attributes.manifest===j);w&&t.addRelation({from:y.entityId,to:w.id,kind:"contains",trust:"authoritative",derivation:"authored",confidence:"high",proofIds:[...new Set([y.proofId,...w.proofIds])]});}}if(xt(t,s.id),p.size>0){let m=n.find(b=>/^\.env\.(?:example|sample|template)$/i.test(f.basename(b)));if(m){let b=await t.addProof({provider:this.id,artifact:t.artifactPath(m,s),absolutePath:m,detail:"Public environment template keys only; values are intentionally excluded"}),j=t.addEntity({kind:"environment",key:`environment:${s.id}:template`,label:`${s.id} environment contract`,projectId:s.id,attributes:{keys:[...p].sort(),valuesEmitted:false},proofIds:[b]});t.addRelation({from:l,to:j,kind:"configured-by",proofIds:[b]});}}if(h.length>0){let m=await t.addProof({provider:this.id,artifact:t.artifactPath(h[0],s),absolutePath:h[0],detail:`${h.length} test file(s) discovered`}),b=t.addEntity({kind:"test-suite",key:`tests:${s.id}`,label:`${s.id} tests`,projectId:s.id,attributes:{fileCount:h.length},proofIds:[m]});t.addRelation({from:b,to:l,kind:"tests",proofIds:[m]});let j=new Map;for(let w of h){if(!x.has(f.extname(w).toLowerCase()))continue;let $=q(w,s.runtime),_=j.get($)??[];_.push(w),j.set($,_);}for(let[w,$]of [...j].sort(([_],[R])=>_.localeCompare(R))){let _=await t.addProof({provider:this.id,artifact:t.artifactPath($[0],s),absolutePath:$[0],detail:`${$.length} ${w} test source file(s) discovered`}),R=t.addEntity({kind:"test-suite",key:`tests:${s.id}:${w}`,label:`${s.id} ${w} tests`,projectId:s.id,attributes:{fileCount:$.length,language:w},proofIds:[_]});t.addRelation({from:R,to:l,kind:"tests",proofIds:[_]});}}}}};function ye(e){return e.replace(/~/g,"~0").replace(/\//g,"~1")}function Ne(e){if(Array.isArray(e))return e.length;let t=C(e);return t?Object.keys(t).length:0}var Jt={id:"vscode-extension-manifest",version:"1.1.0",async applicable(e){for(let t of e.projects){let o=(e.filesByProject.get(t.id)??[]).filter(i=>f.basename(i).toLowerCase()==="package.json");for(let i of o)try{let s=C(await S.readJson(i));if(P(C(s?.engines)?.vscode)||C(s?.contributes))return true}catch{}}return false},async run(e){for(let t of e.projects){let o=(e.filesByProject.get(t.id)??[]).filter(i=>f.basename(i).toLowerCase()==="package.json").sort((i,s)=>i.localeCompare(s));for(let i of o){let s=null;try{s=C(await S.readJson(i));}catch{continue}let n=C(s?.contributes),a=P(C(s?.engines)?.vscode);if(!a&&!n)continue;let r=f.dirname(i),c=f.resolve(r)===f.resolve(t.root),d=f.relative(t.root,r).split(f.sep).join("/"),l=P(s?.name)??(d&&d!=="."?d:t.id),p=e.state.artifactPath(i,t),h=await e.state.addProof({provider:this.id,artifact:p,absolutePath:i,pointer:"/",trust:"authoritative",derivation:"authored",confidence:"high",detail:`VS Code extension manifest for ${l}`}),u=e.state.addEntity({kind:"project",key:`project:${t.id}`,label:t.id,projectId:t.id}),y=c?e.state.addEntity({kind:"project",key:`project:${t.id}`,label:t.id,projectId:t.id,attributes:{vscodeExtension:true,vscodeEngine:a,extensionEntry:P(s?.main)??P(s?.browser),extensionKind:N(s?.extensionKind),activationEvents:N(s?.activationEvents),contributionCounts:Object.entries(n??{}).map(([I,F])=>`${I}:${Ne(F)}`).sort()},proofIds:[h]}):e.state.addEntity({kind:"package",key:`vscode-extension:${t.id}:${d}`,label:l,projectId:t.id,attributes:{surface:"vscode-extension",extensionPath:d,manifest:p,vscodeEngine:a,extensionEntry:P(s?.main)??P(s?.browser),extensionKind:N(s?.extensionKind),activationEvents:N(s?.activationEvents),contributionCounts:Object.entries(n??{}).map(([I,F])=>`${I}:${Ne(F)}`).sort()},proofIds:[h]});c||e.state.addRelation({from:u,to:y,kind:"contains",trust:"authoritative",derivation:"authored",confidence:"high",proofIds:[h]});let k=Array.isArray(n?.commands)?n.commands:[],v=C(n?.menus),m=Object.values(v??{}).flatMap(I=>Array.isArray(I)?I:[]),b=Array.isArray(n?.keybindings)?n.keybindings:[];for(let[I,F]of k.entries()){let T=C(F),W=P(T?.command);if(!W)continue;let M=`/contributes/commands/${I}`,L=await e.state.addProof({provider:this.id,artifact:p,absolutePath:i,pointer:M,trust:"authoritative",derivation:"authored",confidence:"high",detail:`VS Code command ${W}`}),K=m.filter(g=>P(C(g)?.command)===W).length,D=b.filter(g=>P(C(g)?.command)===W).length,G=e.state.addEntity({kind:"api",key:`vscode-command:${t.id}:${W}`,label:W,projectId:t.id,aliases:[P(T?.title),P(T?.shortTitle)].filter(g=>!!g),attributes:{surface:"vscode-command",title:P(T?.title),shortTitle:P(T?.shortTitle),category:P(T?.category),enablement:P(T?.enablement),icon:P(T?.icon),menuCount:K,keybindingCount:D,manifest:p,pointer:M},proofIds:[L]});e.state.addRelation({from:y,to:G,kind:"exposes",trust:"authoritative",derivation:"authored",confidence:"high",proofIds:[L]});}let j=C(n?.viewsContainers),w=new Map;for(let[I,F]of Object.entries(j??{}))if(Array.isArray(F))for(let[T,W]of F.entries()){let M=C(W),L=P(M?.id);if(!L)continue;let K=`/contributes/viewsContainers/${ye(I)}/${T}`,D=await e.state.addProof({provider:this.id,artifact:p,absolutePath:i,pointer:K,trust:"authoritative",derivation:"authored",detail:`VS Code view container ${L}`}),G=e.state.addEntity({kind:"service",key:`vscode-view-container:${t.id}:${L}`,label:L,projectId:t.id,aliases:[P(M?.title)].filter(g=>!!g),attributes:{surface:"vscode-view-container",title:P(M?.title),location:I,icon:P(M?.icon),manifest:p,pointer:K},proofIds:[D]});w.set(L,G),e.state.addRelation({from:y,to:G,kind:"contains",trust:"authoritative",derivation:"authored",proofIds:[D]});}let $=C(n?.views);for(let[I,F]of Object.entries($??{}))if(Array.isArray(F))for(let[T,W]of F.entries()){let M=C(W),L=P(M?.id);if(!L)continue;let K=`/contributes/views/${ye(I)}/${T}`,D=await e.state.addProof({provider:this.id,artifact:p,absolutePath:i,pointer:K,trust:"authoritative",derivation:"authored",detail:`VS Code view ${L}`}),G=e.state.addEntity({kind:"service",key:`vscode-view:${t.id}:${L}`,label:L,projectId:t.id,aliases:[P(M?.name),P(M?.contextualTitle)].filter(g=>!!g),attributes:{surface:M?.type==="webview"?"vscode-webview":"vscode-view",name:P(M?.name),contextualTitle:P(M?.contextualTitle),containerId:I,viewType:P(M?.type)??"tree",manifest:p,pointer:K},proofIds:[D]});e.state.addRelation({from:w.get(I)??y,to:G,kind:"contains",trust:"authoritative",derivation:"authored",proofIds:[D]});}let _=Array.isArray(n?.configuration)?n.configuration:n?.configuration?[n.configuration]:[];for(let[I,F]of _.entries()){let T=C(F),W=C(T?.properties);for(let[M,L]of Object.entries(W??{})){let K=C(L),G=`${Array.isArray(n?.configuration)?`/contributes/configuration/${I}`:"/contributes/configuration"}/properties/${ye(M)}`,g=await e.state.addProof({provider:this.id,artifact:p,absolutePath:i,pointer:G,trust:"authoritative",derivation:"authored",detail:`VS Code configuration ${M}`}),A=e.state.addEntity({kind:"schema",key:`vscode-configuration:${t.id}:${M}`,label:M,projectId:t.id,attributes:{surface:"vscode-configuration",title:P(T?.title),type:P(K?.type),scope:P(K?.scope),description:P(K?.description)??P(K?.markdownDescription),manifest:p,pointer:G},proofIds:[g]});e.state.addRelation({from:y,to:A,kind:"configured-by",trust:"authoritative",derivation:"authored",proofIds:[g]});}}let R=Array.isArray(n?.chatParticipants)?n.chatParticipants:[];for(let[I,F]of R.entries()){let T=C(F),W=P(T?.id);if(!W)continue;let M=`/contributes/chatParticipants/${I}`,L=await e.state.addProof({provider:this.id,artifact:p,absolutePath:i,pointer:M,trust:"authoritative",derivation:"authored",detail:`VS Code chat participant ${W}`}),K=e.state.addEntity({kind:"api",key:`vscode-chat-participant:${t.id}:${W}`,label:W,projectId:t.id,aliases:[P(T?.name),P(T?.fullName)].filter(D=>!!D),attributes:{surface:"vscode-chat-participant",name:P(T?.name),fullName:P(T?.fullName),description:P(T?.description),manifest:p,pointer:M},proofIds:[L]});e.state.addRelation({from:y,to:K,kind:"exposes",trust:"authoritative",derivation:"authored",proofIds:[L]});}}}}};function Be(e,t){let o=[],i=false;for(let s of e.split(/\r?\n/)){let n=s.match(/^\s*\[([^\]]+)\]\s*(?:#.*)?$/)?.[1]?.trim();if(n){i=n===t;continue}if(!i||/^\s*(?:#|$)/.test(s))continue;let a=s.match(/^\s*(?:"([^"]+)"|'([^']+)'|([A-Za-z0-9_.-]+))\s*=\s*["']([^"']+)["']/),r=a?.[1]??a?.[2]??a?.[3],c=a?.[4];r&&c&&o.push([r,c]);}return o}var Ht={id:"python-project-manifest",version:"1.0.0",async applicable(e){for(let t of e.projects){let o=(e.filesByProject.get(t.id)??[]).find(i=>f.dirname(i)===t.root&&f.basename(i).toLowerCase()==="pyproject.toml");if(o)try{if(Be(await S.readFile(o,"utf8"),"project.scripts").length>0)return true}catch{}}return false},async run(e){for(let t of e.projects){let o=(e.filesByProject.get(t.id)??[]).find(c=>f.dirname(c)===t.root&&f.basename(c).toLowerCase()==="pyproject.toml");if(!o)continue;let i=await S.readFile(o,"utf8"),s=Be(i,"project.scripts"),n=e.state.artifactPath(o,t),a=await e.state.addProof({provider:this.id,artifact:n,absolutePath:o,pointer:"/project",trust:"authoritative",derivation:"authored",detail:"Python project manifest"}),r=e.state.addEntity({kind:"project",key:`project:${t.id}`,label:t.id,projectId:t.id,attributes:{pythonProject:true,requiresPython:i.match(/^requires-python\s*=\s*["']([^"']+)["']/m)?.[1],buildBackend:i.match(/^build-backend\s*=\s*["']([^"']+)["']/m)?.[1],consoleScriptCount:s.length},proofIds:[a]});for(let[c,d]of s){let l=`/project/scripts/${c}`,p=await e.state.addProof({provider:this.id,artifact:n,absolutePath:o,pointer:l,trust:"authoritative",derivation:"authored",detail:`Python console script ${c}`}),h=e.state.addEntity({kind:"api",key:`python-console-script:${t.id}:${c}`,label:c,projectId:t.id,aliases:[d],attributes:{surface:"python-console-script",entrypoint:d,manifest:n,pointer:l},proofIds:[p]});e.state.addRelation({from:r,to:h,kind:"exposes",trust:"authoritative",derivation:"authored",proofIds:[p]});}}}},Ut={id:"source-language-inventory",version:"1.1.0",applicable(e){return e.projects.some(t=>(e.semanticFilesByProject.get(t.id)??[]).some(o=>x.has(f.extname(o).toLowerCase())))},async run(e){for(let t of e.projects){let o=e.semanticFilesByProject.get(t.id)??[],i=(e.filesByProject.get(t.id)??[]).find(d=>/^rust-toolchain(?:\.toml)?$/i.test(f.basename(d))),s,n;if(i)try{s=Dt(await S.readFile(i,"utf8")),n=await e.state.addProof({provider:this.id,artifact:e.state.artifactPath(i,t),absolutePath:i,pointer:"/toolchain",derivation:"authored",trust:"authoritative",confidence:"high",detail:"Rust toolchain contract"});}catch{}let a=o.filter(d=>x.has(f.extname(d).toLowerCase())),r=new Map;for(let d of a){let l=q(d,t.runtime),p=r.get(l)??{files:[],production:[],tests:[],examples:[],generated:[],extensions:new Set};p.files.push(d),p.extensions.add(f.extname(d).toLowerCase()),te(t.root,d)&&p.generated.push(d),Pe(t.root,d)?p.tests.push(d):$e(t.root,d)?p.examples.push(d):p.production.push(d),r.set(l,p);}let c=E("project",`project:${t.id}`);for(let[d,l]of [...r].sort(([p],[h])=>p.localeCompare(h))){let p=[l.production[0],l.tests[0],l.examples[0],l.generated[0],l.files[0]].filter((v,m,b)=>!!v&&b.indexOf(v)===m),h=await Promise.all(p.map(v=>e.state.addProof({provider:this.id,artifact:e.state.artifactPath(v,t),absolutePath:v,derivation:"extracted",trust:"observed",confidence:"high",detail:`${d} source-language inventory evidence`}))),u=[...l.production.length>0?["production"]:[],...l.tests.length>0?["test"]:[],...l.examples.length>0?["example"]:[],...l.generated.length>0?["generated"]:[]],y=d==="rust"&&n?[...h,n]:h,k=e.state.addEntity({kind:"language",key:`language:${t.id}:${d}`,label:`${t.id} programming language: ${d}`,projectId:t.id,aliases:[d,`${d} source`,`${d} programming language`,"programming languages actually used"],attributes:{language:d,usage:"source-build-test",roles:u,fileCount:l.files.length,productionFileCount:l.production.length,testFileCount:l.tests.length,exampleFileCount:l.examples.length,generatedFileCount:l.generated.length,extensions:[...l.extensions].sort(),inventoryTruncated:o.length>=e.semanticScanLimit,...d==="rust"&&s?{toolchainChannel:s.channel,toolchainProfile:s.profile,toolchainComponents:s.components,toolchainTargets:s.targets}:{}},proofIds:y});e.state.addRelation({from:c,to:k,kind:"uses-language",derivation:"extracted",trust:"observed",confidence:o.length>=e.semanticScanLimit?"medium":"high",proofIds:y});}o.length>=e.semanticScanLimit&&e.state.diagnostics.push({code:"graph.provider.source_language_inventory.limit_reached",severity:"warning",message:`Language inventory for ${t.id} reached ${e.semanticScanLimit} files. Counts are lower bounds.`,recommendation:"Increase maxFilesPerProject or use a scoped project run before treating language counts as complete."});}}},Vt={id:"source-structure",version:"1.0.0",applicable(e){return e.projects.some(t=>(e.filesByProject.get(t.id)??[]).some(o=>x.has(f.extname(o).toLowerCase())&&!Z(t.root,o)))},async run(e){for(let t of e.projects){let o=(e.filesByProject.get(t.id)??[]).filter(d=>!Z(t.root,d)),i=e.semanticFilesByProject.get(t.id)??o,s=mt(i.filter(d=>x.has(f.extname(d).toLowerCase())&&!Z(t.root,d)),1e3,t.root),n=new Set(i.filter(d=>!Z(t.root,d)).map(d=>f.resolve(d))),a=new Map;await Promise.all(o.map(async d=>{try{let l=await S.stat(d);if(l.isFile()&&l.size<=2*1024*1024){let p=f.resolve(d);n.add(p),a.set(p,l.size);}}catch{}}));let r=0,c=0;for(let d of s){let l;try{if((await S.stat(d)).size>2*1024*1024)continue;l=await S.readFile(d,"utf8");}catch{continue}let p=Ve(d,l),h=e.state.artifactPath(d,t),u=await e.state.addProof({provider:this.id,artifact:h,absolutePath:d,derivation:"extracted",trust:"observed",confidence:"high",detail:`${q(d,t.runtime)} source file`}),y=e.state.addEntity({kind:"file",key:`file:${t.id}:${h}`,label:h,projectId:t.id,aliases:[f.basename(d)],attributes:{artifact:h,language:q(d,t.runtime),bytes:Buffer.byteLength(l),...te(t.root,d)?{generated:true}:{}},proofIds:[u]});e.state.addRelation({from:E("project",`project:${t.id}`),to:y,kind:"contains",proofIds:[u]});let k=he(p,Et(d),250);for(let m of k){let b=await e.state.addProof({provider:this.id,artifact:h,absolutePath:d,line:m.line,derivation:"extracted",trust:"observed",confidence:"medium",detail:`${m.detail}: ${m.name}`}),j=Rt(d,m.name,n,t.root,m.detail);if(j){let w=e.state.artifactPath(j,t),$=E("file",`file:${t.id}:${w}`);if(!e.state.entities.has($)){let _=await S.stat(j).catch(()=>null),R=await e.state.addProof({provider:this.id,artifact:w,..._?.isFile()&&_.size<=2*1024*1024?{absolutePath:j}:{},derivation:"extracted",trust:"observed",confidence:"high",detail:"Locally imported artifact resolved from the project inventory"}),I=e.state.addEntity({kind:"file",key:`file:${t.id}:${w}`,label:w,projectId:t.id,aliases:[f.basename(j)],attributes:{artifact:w,language:q(j,t.runtime),bytes:a.get(f.resolve(j))??(_?.isFile()?_.size:void 0)},proofIds:[R]});e.state.addRelation({from:E("project",`project:${t.id}`),to:I,kind:"contains",proofIds:[R]});}e.state.addRelation({from:y,to:$,kind:"imports",confidence:"high",proofIds:[b]});}else {let w=m.name.startsWith(".");w&&(c+=1);let $=q(d,t.runtime),_=!w&&($==="javascript"||$==="typescript")?m.name.startsWith("@")?m.name.split("/").slice(0,2).join("/"):m.name.split("/")[0]:null,R=_?E("module",`dependency:npm:${_}`):null,I=R?e.state.entities.get(R):void 0,F=I?e.state.addEntity({kind:"module",key:I.identity.key,label:I.label,aliases:[...I.identity.aliases,m.name],attributes:I.attributes,proofIds:[...I.proofIds,b]}):e.state.addEntity({kind:"module",key:`module:${t.id}:${m.name}`,label:m.name,projectId:t.id,aliases:[m.name],attributes:{specifier:m.name,resolution:w?"unresolved-local":"external"},proofIds:[b]});e.state.addRelation({from:y,to:F,kind:"imports",confidence:w?"low":"medium",proofIds:[b]});}}if(r<1e4){let m=he(p,gt,Math.min(100,1e4-r));r+=m.length;for(let b of m){let j=await e.state.addProof({provider:this.id,artifact:h,absolutePath:d,line:b.line,derivation:"extracted",trust:"observed",confidence:"medium",detail:`${b.detail}: ${b.name}`}),w=e.state.addEntity({kind:"symbol",key:`symbol:${t.id}:${h}:${b.detail}:${b.name}`,label:b.name,projectId:t.id,attributes:{symbolKind:b.detail,language:q(d,t.runtime),...te(t.root,d)?{generated:true}:{}},proofIds:[j]});e.state.addRelation({from:y,to:w,kind:"defines",confidence:"medium",proofIds:[j]});}}let v=t.framework!=="vscode-extension"&&t.kind!=="extension";for(let m of v?he(p,Tt,100):[]){let b=l.split(/\r?\n/)[m.line-1]??"";if(At(d,b))continue;let j=b.match(/(?:@|\.|\[|^\s*)(get|post|put|delete|patch|options|head)/i)?.[1]?.toUpperCase()??"HTTP",w=await e.state.addProof({provider:this.id,artifact:h,absolutePath:d,line:m.line,derivation:"extracted",trust:"observed",confidence:"medium",detail:`${j} ${m.name}`}),$=e.state.addEntity({kind:"endpoint",key:`source-endpoint:${t.id}:${h}:${j}:${m.name}`,label:`${j} ${m.name||"/"}`,projectId:t.id,attributes:{method:j,path:m.name||"/",source:h},proofIds:[w]});e.state.addRelation({from:y,to:$,kind:"defines",confidence:"medium",proofIds:[w]});}}(s.length>=1e3||r>=1e4)&&e.state.diagnostics.push({code:"graph.provider.source_structure.limit_reached",severity:"info",message:`Source extraction for ${t.id} sampled ${s.length} file(s) from ${o.length} indexed candidate(s).`,recommendation:"Use bounded graph search, evidence, and path queries for proof-backed retrieval; do not treat the sampled symbol inventory as exhaustive."}),c>0&&e.state.diagnostics.push({code:"graph.provider.source_structure.unresolved_local_imports",severity:"warning",message:`${c} 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."});}}},Yt={id:"source-symbol-binding",version:"1.0.0",applicable(e){return [...e.state.entities.values()].some(t=>t.kind==="symbol")},async run(e){let t=0,o=0,i=1e4;for(let s of e.projects){let n=[...e.state.entities.values()].filter(l=>l.projectId===s.id),a=n.filter(l=>l.kind==="file"),r=new Map(n.filter(l=>l.kind==="symbol").map(l=>[l.id,l])),c=new Map,d=new Map;for(let l of e.state.relations.values()){if(l.kind==="defines"&&r.has(l.to)){let p=c.get(l.from)??[];p.push(r.get(l.to)),c.set(l.from,p);}if(l.kind==="imports"){let p=e.state.entities.get(l.to);if(p?.kind!=="file"||p.projectId!==s.id)continue;let h=d.get(l.from)??new Set;h.add(l.to),d.set(l.from,h);}}for(let l of a){if(o>=i)break;let p=P(l.attributes.artifact);if(!p)continue;let h=p.startsWith(`${s.artifactPrefix}/`)?p.slice(s.artifactPrefix.length+1):p,u=f.resolve(s.root,...h.split("/")),y;try{let m=await S.stat(u);if(!m.isFile()||m.size>2*1024*1024)continue;y=Ve(u,await S.readFile(u,"utf8"));}catch{continue}let k=[...c.get(l.id)??[],...[...d.get(l.id)??[]].flatMap(m=>c.get(m)??[])],v=new Map;for(let m of k){if(m.label.length<3)continue;let b=v.get(m.label)??[];b.some(j=>j.id===m.id)||b.push(m),v.set(m.label,b);}for(let[m,b]of v){let j=m.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),w=new RegExp(`\\b${j}\\s*\\(`,"g"),$=[...y.matchAll(w)];if($.length===0)continue;if(b.length!==1){t+=$.length;continue}let _=b[0];for(let R of $.slice(0,20)){if(o>=i)break;let I=y.slice(0,R.index??0).split(/\r?\n/).length;if(_.proofIds.some(T=>e.state.proofs.get(T)?.line===I))continue;let F=await e.state.addProof({provider:this.id,artifact:p,absolutePath:u,line:I,derivation:"extracted",trust:"observed",confidence:"medium",detail:`Unambiguous local call to ${m}`});e.state.addRelation({from:l.id,to:_.id,kind:"calls",derivation:"extracted",trust:"observed",confidence:"medium",proofIds:[F]}),o+=1;}}}}t>0&&e.state.diagnostics.push({code:"graph.provider.source_symbol_binding.ambiguous_calls",severity:"info",message:`${t} call site(s) were left unbound because more than one proven local symbol matched.`,recommendation:"Provide compiler or language-server semantic evidence when exact overload or dynamic dispatch resolution is required."});}};function Xt(e){let i=e.slice(0,12e3).match(/^[\t ]*(?:\/\/|#|\/\*+|\*|<!--|--)[\t ]*(?:code generated by|generated from:|this file is autogenerated from:|@generated by)\s*(?:(?:\/\/|#|\*|--)[\t ]*)?[`"']?([^`"'\s;*,]+)/im)?.[1]?.replace(/^\.\//,"").replace(/[.,:]+$/,"")??"";return !i||!f.posix.basename(i.replace(/\\/g,"/"))?null:i}function Qt(e,t){let o=0,i=null,s=false;for(let n=t;n<e.length;n+=1){let a=e[n];if(i){a===i&&!s&&(i=null),s=a==="\\"&&!s,a!=="\\"&&(s=false);continue}if(a==='"'){i=a;continue}if(a==="("&&(o+=1),a===")"&&(o-=1,o===0))return e.slice(t+1,n)}return null}function eo(e){let t=[],o=/(?<![A-Za-z0-9_:])(?:deno_core::)?extension!\s*\(/g;for(let i of e.matchAll(o)){let s=(i.index??0)+i[0].lastIndexOf("("),n=Qt(e,s);if(!n)continue;let a=n.match(/^\s*([A-Za-z_][A-Za-z0-9_]*)\s*,/)?.[1];if(!a)continue;let r=[...new Set([...n.matchAll(/\bops\s*=\s*\[([\s\S]*?)\]/g)].flatMap(d=>[...d[1].matchAll(/\b(op_[A-Za-z0-9_]+)\b/g)].map(l=>l[1])))].sort(),c=[...new Set([...n.matchAll(/\b(?:esm|js|lazy_loaded_esm|lazy_loaded_js)\s*=\s*\[([\s\S]*?)\]/g)].flatMap(d=>[...d[1].matchAll(/["']([^"']+\.(?:[cm]?[jt]s|tsx?|jsx?))["']/g)].map(l=>l[1])))].sort();t.push({name:a,line:e.slice(0,i.index??0).split(/\r?\n/).length,operations:r,scripts:c});}return t}function De(e,t){let o=e.indexOf(t);return o<0?void 0:e.slice(0,o).split(/\r?\n/).length}var to={id:"runtime-bridge-semantics",version:"1.0.0",async applicable(e){for(let t of e.projects)for(let o of e.semanticFilesByProject.get(t.id)??[])if(!(f.extname(o).toLowerCase()!==".rs"||Z(t.root,o)))try{let i=await S.readFile(o,"utf8");if(/(?<![A-Za-z0-9_:])(?:deno_core::)?extension!\s*\(/.test(i))return true}catch{}return false},async run(e){for(let t of e.projects){let i=(e.semanticFilesByProject.get(t.id)??[]).filter(s=>f.extname(s).toLowerCase()===".rs"&&!Z(t.root,s));for(let s of i){let n="";try{if((await S.stat(s)).size>2*1024*1024)continue;n=await S.readFile(s,"utf8");}catch{continue}let a=eo(n);if(a.length===0)continue;let r=e.state.artifactPath(s,t),c=await e.state.addProof({provider:this.id,artifact:r,absolutePath:s,derivation:"extracted",trust:"observed",confidence:"high",detail:"Deno Core Rust extension declaration"}),d=e.state.addEntity({kind:"file",key:`file:${t.id}:${r}`,label:r,projectId:t.id,aliases:[f.basename(s)],attributes:{artifact:r,language:"rust",runtimeBridge:"deno-core"},proofIds:[c]});e.state.addRelation({from:E("project",`project:${t.id}`),to:d,kind:"contains",proofIds:[c]});for(let l of a){let p=await e.state.addProof({provider:this.id,artifact:r,absolutePath:s,line:l.line,derivation:"extracted",trust:"observed",confidence:"high",detail:`Deno Core extension ${l.name}`}),h=e.state.addEntity({kind:"protocol",key:`runtime-bridge:${t.id}:deno-core:${r}:${l.name}`,label:`${l.name} Rust JavaScript runtime bridge`,projectId:t.id,aliases:[l.name,`${l.name} cross-language bridge`,"Rust JavaScript TypeScript bridge"],attributes:{mechanism:"deno_core::extension!",languages:["javascript","rust","typescript"]},proofIds:[p]});e.state.addRelation({from:E("project",`project:${t.id}`),to:h,kind:"contains",proofIds:[p]}),e.state.addRelation({from:d,to:h,kind:"implements-protocol",proofIds:[p]});for(let y of ["rust","javascript","typescript"]){let k=E("language",`language:${t.id}:${y}`);e.state.entities.has(k)&&e.state.addRelation({from:h,to:k,kind:"uses-language",proofIds:[p]});}let u=new Map;for(let y of l.operations){let k=De(n,y),v=await e.state.addProof({provider:this.id,artifact:r,absolutePath:s,...k?{line:k}:{},derivation:"extracted",trust:"observed",confidence:"high",detail:`Rust op2 bridge operation ${y}`}),m=e.state.addEntity({kind:"symbol",key:`symbol:${t.id}:${r}:function:${y}`,label:y,projectId:t.id,aliases:[`rust:${y}`,`javascript:${y}`],attributes:{symbolKind:"function",language:"rust",bridgeMechanism:"op2"},proofIds:[v]});u.set(y,m),e.state.addRelation({from:d,to:m,kind:"defines",proofIds:[v]}),e.state.addRelation({from:m,to:h,kind:"implements-protocol",proofIds:[v,p]});}for(let y of l.scripts){let k=f.resolve(f.dirname(s),y);if(!await S.pathExists(k))continue;let v="";try{v=await S.readFile(k,"utf8");}catch{continue}let m=e.state.artifactPath(k,t),b=await e.state.addProof({provider:this.id,artifact:m,absolutePath:k,derivation:"extracted",trust:"observed",confidence:"high",detail:`${l.name} JavaScript/TypeScript extension source`}),j=e.state.addEntity({kind:"file",key:`file:${t.id}:${m}`,label:m,projectId:t.id,aliases:[f.basename(k)],attributes:{artifact:m,language:q(k,t.runtime),runtimeBridge:"deno-core"},proofIds:[b]});e.state.addRelation({from:d,to:j,kind:"references",confidence:"high",proofIds:[p,b]}),e.state.addRelation({from:j,to:h,kind:"implements-protocol",proofIds:[b,p]});for(let[w,$]of u){let _=De(v,w);if(!_)continue;let R=await e.state.addProof({provider:this.id,artifact:m,absolutePath:k,line:_,derivation:"extracted",trust:"observed",confidence:"high",detail:`JavaScript/TypeScript call to Rust operation ${w}`});e.state.addRelation({from:j,to:$,kind:"calls",confidence:"high",proofIds:[R,p]});}}}}}}},oo=/^[A-Z][A-Za-z0-9_]{3,}$/,so=new Set(["Client","Config","Context","Data","Error","Event","Message","Options","Request","Response","Result","Schema","Type","Value"]),io={id:"polyglot-semantics",version:"1.0.0",applicable(e){return e.projects.some(t=>new Set((t.runtimeCandidates??[]).filter(i=>i&&i!=="unknown"&&i!=="generic")).size>1||a$2(t.root).polyglot)},async run(e){for(let t of e.projects){let o=E("project",`project:${t.id}`),i=e.filesByProject.get(t.id)??[],s=a$2(t.root),n=[...e.state.entities.values()].filter(c=>c.kind==="package"&&c.projectId===t.id);for(let c of s.units){let d=c.runtime,l=f.resolve(t.root,c.manifest),p=e.state.artifactPath(l,t),h=n.find(m=>m.attributes.manifest===p),u=h?.proofIds??[await e.state.addProof({provider:this.id,artifact:p,absolutePath:l,derivation:"extracted",trust:"observed",confidence:"high",detail:`${d} runtime-unit manifest`})],y=e.state.artifactPath(f.dirname(l),t),k=Object.fromEntries(c.stages.map(m=>[m.stage,m.command])),v=e.state.addEntity({kind:"runtime-unit",key:`runtime-unit:${t.id}:${d}:${p}`,label:`${d}:${y}:${f.basename(l)}`,projectId:t.id,aliases:[d,y],attributes:{runtime:d,root:y,ecosystem:c.ecosystem,role:c.role,manifest:p,stages:Object.keys(k).sort(),orchestrationMode:"native-manifest"},proofIds:u});e.state.addRelation({from:o,to:v,kind:"contains",confidence:"high",proofIds:u}),h&&e.state.addRelation({from:v,to:h.id,kind:"configured-by",confidence:"high",proofIds:u});for(let m of c.stages){let{stage:b,command:j}=m,w=e.state.addEntity({kind:"lifecycle-stage",key:`lifecycle-stage:${t.id}:${d}:${p}:${b}`,label:`${b} \xB7 ${d}:${y}:${f.basename(l)}`,projectId:t.id,aliases:[`${d}:${b}`,b],attributes:{stage:b,command:j,runtime:d,workingDirectory:y,commandConfidence:m.confidence,preflight:m.preflight},proofIds:u});e.state.addRelation({from:v,to:w,kind:"contains",confidence:"high",proofIds:u});}}for(let c of i.filter(d=>x.has(f.extname(d).toLowerCase()))){let d="";try{d=await S.readFile(c,"utf8");}catch{continue}let l=Xt(d);if(!l)continue;let p=e.state.artifactPath(c,t),h=E("file",`file:${t.id}:${p}`);if(!e.state.entities.has(h))continue;let u=await e.state.addProof({provider:this.id,artifact:p,absolutePath:c,line:1,derivation:"extracted",trust:"observed",confidence:"high",detail:`Generated from ${l}`}),y=e.state.entities.get(h);y&&e.state.addEntity({kind:"file",key:y.identity.key,label:y.label,projectId:t.id,aliases:y.identity.aliases,attributes:{...y.attributes,generated:true},proofIds:[...y.proofIds,u]});let k=[...e.state.relations.values()].filter(w=>w.kind==="defines"&&w.from===h).map(w=>e.state.entities.get(w.to)).filter(w=>w?.kind==="symbol");for(let w of k)e.state.addEntity({kind:"symbol",key:w.identity.key,label:w.label,projectId:t.id,aliases:w.identity.aliases,attributes:{...w.attributes,generated:true},proofIds:[...w.proofIds,u]});let v=l.replace(/^\.\//,"").replace(/[.,:]$/,""),b=[f.resolve(t.root,v),f.resolve(f.dirname(c),v)].find(w=>i.includes(w));if(b){let w=e.state.artifactPath(b,t),$=E("file",`file:${t.id}:${w}`);if(e.state.entities.has($)){e.state.addRelation({from:h,to:$,kind:"generated-by",derivation:"extracted",trust:"observed",confidence:"high",proofIds:[u]});continue}}let j=e.state.addEntity({kind:"schema",key:`generation-source:${t.id}:${v}`,label:f.posix.basename(v),projectId:t.id,aliases:[v],attributes:{sourceReference:v,discoveredFromGeneratedHeader:true},proofIds:[u]});e.state.addRelation({from:h,to:j,kind:"generated-from",derivation:"extracted",trust:"observed",confidence:"medium",proofIds:[u]});}let a=[...e.state.entities.values()].filter(c=>c.projectId===t.id&&c.kind==="symbol"&&c.attributes.generated===true&&c.attributes.symbolKind==="type"&&typeof c.attributes.language=="string"&&oo.test(c.label)&&!so.has(c.label)),r=new Map;for(let c of a){let d=r.get(c.label)??[];d.push(c),r.set(c.label,d);}for(let[c,d]of [...r.entries()].filter(([,l])=>new Set(l.map(p=>p.attributes.language)).size>1).sort(([l],[p])=>l.localeCompare(p)).slice(0,1e3)){let l=d.sort((k,v)=>String(k.attributes.language).localeCompare(String(v.attributes.language))||k.id.localeCompare(v.id)),p=[...new Set(l.map(k=>String(k.attributes.language)))],h=[...new Set(l.flatMap(k=>k.proofIds))],u=e.state.addEntity({kind:"protocol",key:`protocol:${t.id}:${c}`,label:c,projectId:t.id,aliases:p.map(k=>`${k}:${c}`),attributes:{languages:p,implementationCount:l.length,source:"generated-types"},proofIds:h});for(let k of l)e.state.addRelation({from:k.id,to:u,kind:"implements-protocol",derivation:"inferred",trust:"corroborated",confidence:"high",proofIds:k.proofIds});let y=l[0];for(let k of l.slice(1))e.state.addRelation({from:k.id,to:y.id,kind:"equivalent-to",derivation:"inferred",trust:"corroborated",confidence:"high",proofIds:[...y.proofIds,...k.proofIds]});}}}},ro={id:"workspace-service-contract",version:"1.0.0",applicable(e){return !!e.contract?.projects.some(t=>t.ports.length>0||t.contracts.owns.length>0||t.contracts.apis.length>0||t.contracts.publishes.length>0||t.contracts.consumes.length>0||t.contracts.env.length>0)},async run(e){if(!e.contract)return;let t=new Map;for(let o of [...e.contract.projects].sort((i,s)=>i.slug.localeCompare(s.slug))){let i$1=o.contracts;if(o.ports.length===0&&i$1.owns.length===0&&i$1.apis.length===0&&i$1.publishes.length===0&&i$1.consumes.length===0&&i$1.env.length===0)continue;let s=await e.state.addProof({provider:this.id,artifact:i.workspaceContract,absolutePath:f.join(e.workspacePath,".workspai","workspace.contract.json"),pointer:`/projects/${o.slug}/contracts`,trust:"authoritative",derivation:"authored",detail:`Service contract for ${o.slug}`}),n=E("project",`project:${o.slug}`),a=e.state.addEntity({kind:"service",key:`contract-service:${o.slug}`,label:o.slug,projectId:o.slug,attributes:{ports:o.ports.map(r=>`${r.protocol}:${r.port}`),owns:[...i$1.owns].sort(),environmentKeys:[...i$1.env].sort()},proofIds:[s]});e.state.addRelation({from:n,to:a,kind:"implements",trust:"authoritative",derivation:"authored",proofIds:[s]});for(let r of [...i$1.apis].sort((c,d)=>c.name.localeCompare(d.name))){let c=e.state.addEntity({kind:"api",key:`contract-api:${o.slug}:${r.name}:${r.basePath}`,label:r.name,projectId:o.slug,attributes:{basePath:r.basePath},proofIds:[s]});e.state.addRelation({from:a,to:c,kind:"exposes",trust:"authoritative",derivation:"authored",proofIds:[s]});}for(let r of [...i$1.publishes,...i$1.consumes].sort())t.has(r)||t.set(r,e.state.addEntity({kind:"queue",key:`event:${r}`,label:r,attributes:{protocol:"workspace-event"},proofIds:[s]}));for(let r of [...i$1.publishes].sort()){let c=t.get(r);c&&e.state.addRelation({from:a,to:c,kind:"publishes",trust:"authoritative",derivation:"authored",proofIds:[s]});}for(let r of [...i$1.consumes].sort()){let c=t.get(r);c&&e.state.addRelation({from:a,to:c,kind:"consumes",trust:"authoritative",derivation:"authored",proofIds:[s]});}}}},no={id:"openapi",version:"1.0.0",applicable(e){return e.projects.some(t=>(e.filesByProject.get(t.id)??[]).some(de))},async run(e){for(let t of e.projects){let o=(e.filesByProject.get(t.id)??[]).filter(de);for(let i of o){let s;try{s=await X(i);}catch(n){e.state.diagnostics.push({code:"graph.provider.openapi.parse_failed",severity:"warning",message:`Could not parse ${e.state.artifactPath(i,t)}: ${n instanceof Error?n.message:String(n)}`});continue}for(let n of s){if(!("openapi"in n)&&!("swagger"in n))continue;let a=C(n.info),r=P(a?.title)??`${t.id} API`,c=await e.state.addProof({provider:this.id,artifact:e.state.artifactPath(i,t),absolutePath:i,pointer:"/info",trust:"authoritative",detail:"Authored OpenAPI contract"}),d=E("project",`project:${t.id}`),l=e.state.addEntity({kind:"api",key:`api:${t.id}:${r}`,label:r,projectId:t.id,attributes:{version:P(a?.version),specification:P(n.openapi)??P(n.swagger)},proofIds:[c]});e.state.addRelation({from:d,to:l,kind:"exposes",trust:"authoritative",derivation:"authored",proofIds:[c]});let p=C(C(n.components)?.schemas)??C(n.definitions),h=new Map;for(let y of Object.keys(p??{}).sort()){let k=await e.state.addProof({provider:this.id,artifact:e.state.artifactPath(i,t),absolutePath:i,pointer:`/components/schemas/${y}`,trust:"authoritative",detail:`OpenAPI schema ${y}`}),v=e.state.addEntity({kind:"schema",key:`schema:${t.id}:${r}:${y}`,label:y,projectId:t.id,proofIds:[k]});h.set(y,v),e.state.addRelation({from:l,to:v,kind:"contains",trust:"authoritative",derivation:"authored",proofIds:[k]});}let u=C(n.paths);for(let y of Object.keys(u??{}).sort()){let k=C(u?.[y]);for(let v of Object.keys(k??{}).filter(m=>pt.has(m.toLowerCase())).sort()){let m=C(k?.[v]),b=`/paths/${y.replace(/~/g,"~0").replace(/\//g,"~1")}/${v}`,j=await e.state.addProof({provider:this.id,artifact:e.state.artifactPath(i,t),absolutePath:i,pointer:b,trust:"authoritative",detail:`${v.toUpperCase()} ${y}`}),w=e.state.addEntity({kind:"endpoint",key:`endpoint:${t.id}:${r}:${v.toUpperCase()}:${y}`,label:`${v.toUpperCase()} ${y}`,projectId:t.id,aliases:N(m?.tags),attributes:{method:v.toUpperCase(),path:y,operationId:P(m?.operationId),deprecated:typeof m?.deprecated=="boolean"?m.deprecated:void 0,tags:N(m?.tags)},proofIds:[j]});e.state.addRelation({from:l,to:w,kind:"contains",trust:"authoritative",derivation:"authored",proofIds:[j]});let $=JSON.stringify(m??{});for(let[_,R]of h)$.includes(`/${_}`)&&e.state.addRelation({from:w,to:R,kind:"references",trust:"authoritative",derivation:"authored",proofIds:[j]});}}}}}}},ke=5e3;function Y(e,t){let o=B(f.relative(e,t)).toLowerCase(),i=0;return /(^|\/)(routes?|handlers?|controllers?|server|httpapi)(\/|$)/.test(o)&&(i+=100),/(?:^|\/)(?:api|routes?|handlers?|controllers?|server)(?:\.[a-z0-9]+)$/.test(o)&&(i+=80),/(^|\/)(src|app|lib)(\/|$)/.test(o)&&(i+=20),/(^|\/)(protocol|sdk|client)(\/|$)/.test(o)&&(i-=30),i}function ao(e,t){for(let o of ['"',"'","`"]){let i=e.indexOf(`${o}${t}${o}`);if(i>=0)return i}return -1}var co={id:"authored-api-implementation-binding",version:"1.0.0",applicable(e){return [...e.state.entities.values()].some(t=>t.kind==="endpoint"&&typeof t.attributes.operationId=="string")},async run(e){for(let t of e.projects){let o=new Map;for(let n of e.state.entities.values()){let a=n.attributes.operationId;if(n.kind!=="endpoint"||n.projectId!==t.id||typeof a!="string"||a.trim().length===0)continue;let r=o.get(a)??[];r.push(n),o.set(a,r);}if(o.size===0)continue;let i=(e.semanticFilesByProject.get(t.id)??[]).filter(n=>x.has(f.extname(n).toLowerCase())&&!Z(t.root,n)&&!te(t.root,n)).sort((n,a)=>Y(t.root,a)-Y(t.root,n)||n.localeCompare(a)).slice(0,ke),s=new Map;for(let n of i){let a;try{let c=await S.stat(n);if(!c.isFile()||c.size>2*1024*1024)continue;a=await S.readFile(n,"utf8");}catch{continue}let r=Y(t.root,n);if(!(r<50))for(let c of o.keys()){let d=ao(a,c);if(d<0)continue;let l=s.get(c);l&&(l.score>r||l.score===r&&l.file.localeCompare(n)<=0)||s.set(c,{file:n,contents:a,offset:d,score:r});}}for(let[n,a]of s){let r=e.state.artifactPath(a.file,t),c=a.contents.slice(0,a.offset).split(/\r?\n/).length,d=await e.state.addProof({provider:this.id,artifact:r,absolutePath:a.file,line:c,derivation:"extracted",trust:"observed",confidence:"high",detail:`Production handler binds OpenAPI operation ${n}`}),l=e.state.addEntity({kind:"file",key:`file:${t.id}:${r}`,label:r,projectId:t.id,aliases:[f.basename(a.file)],attributes:{artifact:r,language:q(a.file,t.runtime),bytes:Buffer.byteLength(a.contents)},proofIds:[d]});e.state.addRelation({from:E("project",`project:${t.id}`),to:l,kind:"contains",derivation:"extracted",trust:"observed",proofIds:[d]});for(let p of o.get(n)??[])e.state.addRelation({from:l,to:p.id,kind:"implements",derivation:"extracted",trust:"corroborated",confidence:"high",proofIds:[...p.proofIds,d]});}}}},lo=8,po=/(?:^|[,{\n]\s*)["']?(?:routes?|upstreams?|virtualHosts?|pathPrefix)["']?\s*[:=]/im;function Ge(e,t){let o=f.extname(e).toLowerCase();if(/\.(?:json|ya?ml|toml)$/i.test(e))return /(?:route|routing|gateway|proxy|ingress|server)/i.test(f.basename(e))?po.exec(t)?.index??-1:-1;let i=o===".py"?[/\b(?:include_router|add_api_route|mount)\s*\(/]:[".js",".jsx",".mjs",".cjs",".ts",".tsx",".mts",".cts"].includes(o)?[/\b(?:router|app)\.(?:use|route|register)\s*\(/,/\b(?:registerRoutes?|configureRoutes?)\s*\(/i,/\b(?:routeModule|routeMatcher|routesManifest|appPathsManifest)\b/]:o===".go"?[/\.\s*InstallAPIGroups?\s*\(/,/\.\s*registerResourceHandlers\s*\(/,/\b(?:registerRoutes?|configureRoutes?)\s*\(/i]:[".java",".kt",".kts",".scala",".cs",".fs",".fsx",".vb"].includes(o)?[/\b(?:RouterFunction|RequestMappingHandlerMapping|MapControllers|MapGroup)\s*[<(]/,/\b(?:registerRoutes?|configureRoutes?)\s*\(/i,/\bregister(?:Rest)?(?:Action|Handler)\s*\(/]:o===".rb"?[/\broutes\.draw\s+do\b/,/\b(?:resources|namespace)\s+[:"']/]:[/\b(?:registerRoutes?|configureRoutes?)\s*\(/i];for(let s of i){let n=s.exec(t);if(n)return n.index}return -1}var fo={id:"dynamic-api-registration-binding",version:"1.0.0",applicable(e){return [...e.state.entities.values()].some(t=>t.kind==="api")?e.projects.some(t=>(e.semanticFilesByProject.get(t.id)??[]).filter(o=>(x.has(f.extname(o).toLowerCase())||/\.(?:json|ya?ml|toml)$/i.test(o))&&(Y(t.root,o)>=20||/\.(?:json|ya?ml|toml)$/i.test(o))&&!Z(t.root,o)&&!te(t.root,o)&&!de(o)).slice(0,ke).some(o=>{try{let i=S.statSync(o);return i.isFile()&&i.size<=2*1024*1024&&Ge(o,S.readFileSync(o,"utf8"))>=0}catch{return false}})):false},async run(e){for(let t of e.projects){let o=[...e.state.entities.values()].filter(a=>a.kind==="api"&&a.projectId===t.id);if(o.length===0)continue;let i=(e.semanticFilesByProject.get(t.id)??[]).filter(a=>(x.has(f.extname(a).toLowerCase())||/\.(?:json|ya?ml|toml)$/i.test(a))&&!Z(t.root,a)&&!te(t.root,a)&&!de(a)&&(Y(t.root,a)>=20||/\.(?:json|ya?ml|toml)$/i.test(a))).sort((a,r)=>Y(t.root,r)-Y(t.root,a)||a.localeCompare(r)).slice(0,ke),s=0,n=Math.max(1,o.length*lo);for(let a of i){if(s>=n)break;let r;try{let y=await S.stat(a);if(!y.isFile()||y.size>2*1024*1024)continue;r=await S.readFile(a,"utf8");}catch{continue}let c=Ge(a,r);if(c<0)continue;let d=o.length===1?o:o.filter(y=>y.label.toLowerCase().split(/[^a-z0-9]+/).filter(k=>k.length>=4).some(k=>r.toLowerCase().includes(k)));if(d.length===0)continue;let l=e.state.artifactPath(a,t),p=await e.state.addProof({provider:this.id,artifact:l,absolutePath:a,line:r.slice(0,c).split(/\r?\n/).length,derivation:"extracted",trust:"observed",confidence:"high",detail:/\.(?:json|ya?ml|toml)$/i.test(a)?"Configuration-driven API topology registration":"Runtime-generated API topology registration"}),h=e.state.addEntity({kind:"file",key:`file:${t.id}:${l}`,label:l,projectId:t.id,aliases:[f.basename(a)],attributes:{artifact:l,language:q(a,t.runtime)},proofIds:[p]}),u=e.state.addEntity({kind:"runtime-unit",key:`dynamic-api-registration:${t.id}:${l}`,label:`${f.basename(a)} API registration`,projectId:t.id,attributes:{mechanism:/\.(?:json|ya?ml|toml)$/i.test(a)?"configuration-driven-routing":"runtime-generated-routing"},proofIds:[p]});e.state.addRelation({from:E("project",`project:${t.id}`),to:u,kind:"contains",derivation:"extracted",trust:"observed",proofIds:[p]}),e.state.addRelation({from:u,to:h,kind:"configured-by",derivation:"extracted",trust:"observed",proofIds:[p]});for(let y of d)e.state.addRelation({from:u,to:y.id,kind:"implements",derivation:"extracted",trust:"corroborated",confidence:"high",proofIds:[...y.proofIds,p]});s+=1;}}}},uo={id:"interface-contracts",version:"1.0.0",applicable(e){return e.projects.some(t=>(e.filesByProject.get(t.id)??[]).some(Se))},async run(e){for(let t of e.projects){let o=(e.filesByProject.get(t.id)??[]).filter(Se);for(let i of o){let s=e.state.artifactPath(i,t),n=f.extname(i).toLowerCase();if(n===".graphql"||n===".gql"){let a=await S.readFile(i,"utf8"),r=await e.state.addProof({provider:this.id,artifact:s,absolutePath:i,trust:"authoritative",derivation:"authored",detail:"GraphQL schema"}),c=e.state.addEntity({kind:"api",key:`graphql:${t.id}:${s}`,label:`${t.id} GraphQL API`,projectId:t.id,attributes:{specification:"graphql",artifact:s},proofIds:[r]});e.state.addRelation({from:E("project",`project:${t.id}`),to:c,kind:"exposes",trust:"authoritative",derivation:"authored",proofIds:[r]});for(let d of a.matchAll(/^\s*(?:type|input|interface|enum|scalar|union)\s+([A-Za-z_]\w*)/gm)){let l=e.state.addEntity({kind:"schema",key:`graphql-schema:${t.id}:${s}:${d[1]}`,label:d[1],projectId:t.id,proofIds:[r]});e.state.addRelation({from:c,to:l,kind:"contains",trust:"authoritative",derivation:"authored",proofIds:[r]});}continue}if(n===".proto"){let a=await S.readFile(i,"utf8"),r=ce(a.replace(/\r\n/g,`
|
|
7
|
+
`).trim()),c=a.match(/^\s*package\s+([A-Za-z_][\w.]*)\s*;/m)?.[1],d=c||"unscoped",l=r.slice(0,16),p=await e.state.addProof({provider:this.id,artifact:s,absolutePath:i,trust:"authoritative",derivation:"authored",detail:"Protocol Buffers contract"});for(let h of a.matchAll(/^\s*service\s+([A-Za-z_]\w*)/gm)){let u=e.state.addEntity({kind:"api",key:`protobuf-service:${d}:${h[1]}:${l}`,label:h[1],aliases:[...c?[`${c}.${h[1]}`]:[],h[1]],attributes:{specification:"protobuf",package:c,definitionHash:r},proofIds:[p]});e.state.addRelation({from:E("project",`project:${t.id}`),to:u,kind:"exposes",trust:"authoritative",derivation:"authored",proofIds:[p]});}for(let h of a.matchAll(/^\s*message\s+([A-Za-z_]\w*)/gm)){let u=e.state.addEntity({kind:"schema",key:`protobuf-message:${d}:${h[1]}:${l}`,label:h[1],aliases:[...c?[`${c}.${h[1]}`]:[],h[1]],attributes:{specification:"protobuf",package:c,definitionHash:r},proofIds:[p]});e.state.addRelation({from:E("project",`project:${t.id}`),to:u,kind:"contains",trust:"authoritative",derivation:"authored",proofIds:[p]});}continue}try{let a=(await X(i))[0];if(!a||!("asyncapi"in a))continue;let r=await e.state.addProof({provider:this.id,artifact:s,absolutePath:i,trust:"authoritative",derivation:"authored",detail:"AsyncAPI contract"}),c=e.state.addEntity({kind:"api",key:`asyncapi:${t.id}:${s}`,label:P(C(a.info)?.title)??`${t.id} AsyncAPI`,projectId:t.id,attributes:{specification:`asyncapi ${String(a.asyncapi)}`,artifact:s},proofIds:[r]});e.state.addRelation({from:E("project",`project:${t.id}`),to:c,kind:"exposes",trust:"authoritative",derivation:"authored",proofIds:[r]});for(let d of Object.keys(C(a.channels)??{}).sort()){let l=e.state.addEntity({kind:"queue",key:`asyncapi-channel:${t.id}:${d}`,label:d,projectId:t.id,attributes:{protocol:"asyncapi"},proofIds:[r]});e.state.addRelation({from:c,to:l,kind:"publishes",trust:"authoritative",derivation:"authored",proofIds:[r]});}}catch{}}}}},mo={id:"infrastructure-as-code",version:"1.0.0",applicable(e){return oe(e).some(_e)},async run(e){let t=oe(e).filter(_e);for(let o of t){let i=U(e.projects,o),s=i?.id??e.state.workspaceName,n=i?E("project",`project:${i.id}`):E("workspace",`workspace:${e.state.workspaceName}`),a=e.state.artifactPath(o,i),r=await S.readFile(o,"utf8"),c=await e.state.addProof({provider:this.id,artifact:a,absolutePath:o,trust:"authoritative",derivation:"authored",detail:"Infrastructure definition"});if(/^Dockerfile/i.test(f.basename(o))){let l=[...r.matchAll(/^\s*FROM\s+([^\s]+)(?:\s+AS\s+([^\s]+))?/gim)],p=e.state.addEntity({kind:"container",key:`dockerfile:${s}:${a}`,label:`${s} container image`,...i?{projectId:i.id}:{},attributes:{artifact:a,baseImages:l.map(h=>h[1])},proofIds:[c]});e.state.addRelation({from:n,to:p,kind:"deploys",trust:"authoritative",derivation:"authored",proofIds:[c]});continue}if(/\.tf$/i.test(o)){for(let l of r.matchAll(/^\s*resource\s+["']([^"']+)["']\s+["']([^"']+)["']/gm)){let p=l[1],h=/(?:db|sql|rds|database)/i.test(p)?"database":/(?:queue|kafka|sqs|pubsub|servicebus)/i.test(p)?"queue":"deployment",u=e.state.addEntity({kind:h,key:`terraform:${s}:${p}:${l[2]}`,label:`${p}.${l[2]}`,...i?{projectId:i.id}:{},attributes:{resourceType:p,artifact:a},proofIds:[c]});e.state.addRelation({from:n,to:u,kind:"deploys",trust:"authoritative",derivation:"authored",proofIds:[c]});}continue}let d=e.state.addEntity({kind:"deployment",key:`helm:${s}:${a}`,label:`${s} Helm chart`,...i?{projectId:i.id}:{},attributes:{artifact:a,format:"helm"},proofIds:[c]});e.state.addRelation({from:n,to:d,kind:"deploys",trust:"authoritative",derivation:"authored",proofIds:[c]});}}};function qe(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 go={id:"compose",version:"1.0.0",async applicable(e){return (await Me(e)).length>0},async run(e){let t=[];for(let o of await Me(e)){let i;try{i=(await X(o))[0];}catch(l){e.state.diagnostics.push({code:"graph.provider.compose.parse_failed",severity:"warning",message:`Could not parse ${e.state.artifactPath(o)}: ${l instanceof Error?l.message:String(l)}`});}let s=C(i?.services);if(!s)continue;let n=U(e.projects,o),a=e.state.artifactPath(o,n),r=f.basename(o).toLowerCase().startsWith("docker-compose")?"docker-compose":"compose",c=`${n?.id??"workspace"}:${f.posix.dirname(a)}:${r}`,d=l=>`compose-service:${c}:${l}`;for(let l of Object.keys(s).sort()){let p=C(s[l]),h=p?.build,u=P(h)??P(C(h)?.context),y=u?U(e.projects,f.resolve(f.dirname(o),u)):e.projects.find(R=>R.id.toLowerCase()===l.toLowerCase()||f.basename(R.path).toLowerCase()===l.toLowerCase())??n,k=await e.state.addProof({provider:this.id,artifact:a,absolutePath:o,pointer:`/services/${l}`,trust:"authoritative",derivation:"authored",detail:`Compose service ${l}`}),v=P(p?.image),m=d(l),b=e.state.entities.get(E("service",m)),j=Array.isArray(b?.attributes.ports)?b.attributes.ports.filter(R=>typeof R=="string"):[],w=Array.isArray(b?.attributes.networks)?b.attributes.networks.filter(R=>typeof R=="string"):[],$=Array.isArray(b?.attributes.environmentKeys)?b.attributes.environmentKeys.filter(R=>typeof R=="string"):[],_=e.state.addEntity({kind:"service",key:m,label:l,...y?.id||b?.projectId?{projectId:y?.id??b?.projectId}:{},attributes:{image:v??b?.attributes.image,ports:[...new Set([...j,...N(p?.ports).map(String)])].sort((R,I)=>R.localeCompare(I)),networks:[...new Set([...w,...N(p?.networks)])].sort((R,I)=>R.localeCompare(I)),environmentKeys:[...new Set([...$,...Ft(p?.environment)])].sort((R,I)=>R.localeCompare(I))},proofIds:[...b?.proofIds??[],k],mergeArrayAttributes:["ports","networks","environmentKeys"]});if(y&&e.state.addRelation({from:E("project",`project:${y.id}`),to:_,kind:"contains",trust:"authoritative",derivation:"authored",proofIds:[k]}),v){let R=e.state.addEntity({kind:qe(v),key:`image:${v}`,label:v,...y?{projectId:y.id}:{},attributes:{image:v},proofIds:[k]});e.state.addRelation({from:_,to:R,kind:qe(v)==="container"?"runs-on":"depends-on",trust:"authoritative",derivation:"authored",proofIds:[k]});}}for(let l of Object.keys(s).sort()){let p=C(s[l]);for(let h of N(p?.depends_on)){let u=await e.state.addProof({provider:this.id,artifact:a,absolutePath:o,pointer:`/services/${l}/depends_on/${h}`,trust:"authoritative",derivation:"authored",detail:`${l} depends on ${h}`});t.push({from:E("service",d(l)),to:E("service",d(h)),proofId:u});}}}for(let o of t)!e.state.entities.has(o.from)||!e.state.entities.has(o.to)||e.state.addRelation({from:o.from,to:o.to,kind:"depends-on",trust:"authoritative",derivation:"authored",proofIds:[o.proofId]});}},ho={id:"documentation",version:"1.0.0",applicable(e){return oe(e).some(Te)},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 s=i.filter(n=>Te(n)&&!e.projects.some(a=>n.startsWith(`${a.root}${f.sep}`)&&Z(a.root,n)));for(let n of s){if(t.has(n))continue;t.add(n);let a=U(e.projects,n),c=(await S.readFile(n,"utf8")).match(/^#\s+(.+)$/m)?.[1]?.trim()??f.basename(n),d=await e.state.addProof({provider:this.id,artifact:e.state.artifactPath(n,a),absolutePath:n,line:1,trust:"authoritative",derivation:"authored",detail:`Documentation: ${c}`}),l=e.state.addEntity({kind:"document",key:`document:${e.state.artifactPath(n,a)}`,label:c,...a?{projectId:a.id}:{},attributes:{artifact:e.state.artifactPath(n,a)},proofIds:[d]}),p=a?E("project",`project:${a.id}`):E("workspace",`workspace:${e.state.workspaceName}`);e.state.addRelation({from:l,to:p,kind:"documents",trust:"authoritative",derivation:"authored",proofIds:[d]});}}}},yo={id:"kubernetes",version:"1.0.0",async applicable(e){return (await We(e)).length>0},async run(e){for(let t of await We(e)){let o=U(e.projects,t),i=o?E("project",`project:${o.id}`):E("workspace",`workspace:${e.state.workspaceName}`),s=await X(t);for(let n=0;n<s.length;n+=1){let a=s[n],r=P(a.kind),c=C(a.metadata),d=P(c?.name);if(!r||!d)continue;let l=P(c?.namespace)??"default",p=/Deployment|StatefulSet|DaemonSet/i.test(r)?"deployment":/Service|Ingress/i.test(r)?"service":/ConfigMap|Secret/i.test(r)?"environment":"deployment",h=await e.state.addProof({provider:this.id,artifact:e.state.artifactPath(t,o),absolutePath:t,pointer:`/documents/${n}`,trust:"authoritative",derivation:"authored",detail:`${r} ${l}/${d}`}),u=e.state.addEntity({kind:p,key:`kubernetes:${r}:${l}:${d}`,label:`${r}/${d}`,...o?{projectId:o.id}:{},attributes:{resourceKind:r,namespace:l,secret:r==="Secret",keys:r==="Secret"||r==="ConfigMap"?Object.keys(C(a.data)??{}).sort():void 0},proofIds:[h]});e.state.addRelation({from:i,to:u,kind:p==="deployment"?"deploys":"contains",trust:"authoritative",derivation:"authored",proofIds:[h]});let y=e.state.addEntity({kind:"environment",key:`kubernetes-namespace:${l}`,label:`Kubernetes namespace ${l}`,attributes:{namespace:l},proofIds:[h]});e.state.addRelation({from:u,to:y,kind:"runs-on",trust:"authoritative",derivation:"authored",proofIds:[h]});}}}},vo={id:"ci-workflow",version:"1.0.0",applicable(e){return Le(e).length>0},async run(e){let t=Le(e);for(let o of t){let i=U(e.projects,o),s=e.state.artifactPath(o,i),n=f.basename(o)==="Jenkinsfile",a=B(f.relative(i?.root??e.workspacePath,o)),r=/^prow\/[^/]+\.(?:sh|py)$/i.test(a),c=f.basename(o),d=[],l=[];if(n||r){let u=await S.readFile(o,"utf8");n?d=[...u.matchAll(/\bstage\s*\(\s*["']([^"']+)["']/g)].map(y=>y[1]):(c=`${f.basename(o)} \xB7 Prow`,d=[f.basename(o).replace(/\.(?:sh|py)$/i,"")],l=["external-provider"]);}else {let u;try{u=(await X(o))[0];}catch{continue}if(!u)continue;if(c=P(u.name)??c,/^\.gitlab-ci\./i.test(a)){let y=new Set(["stages","variables","workflow","include","default","image","services","cache","before_script","after_script"]);d=Object.keys(u).filter(k=>!k.startsWith(".")&&!y.has(k)).sort();}else d=[...new Set([...Object.keys(C(u.jobs)??{}),...Object.keys(C(C(u.workflows)?.jobs)??{}),...N(u.stages)])].sort();l=N(u.on);}d.length===0&&(d=["pipeline"]);let p=await e.state.addProof({provider:this.id,artifact:s,absolutePath:o,...!n&&!r?{pointer:"/jobs"}:{},trust:"authoritative",derivation:"authored",detail:"CI/CD workflow"}),h=e.state.addEntity({kind:"pipeline",key:`pipeline:${s}`,label:c,...i?{projectId:i.id}:{},attributes:{jobs:d,triggers:l,artifact:s},proofIds:[p]});e.state.addRelation({from:i?E("project",`project:${i.id}`):E("workspace",`workspace:${e.state.workspaceName}`),to:h,kind:"contains",trust:"authoritative",derivation:"authored",proofIds:[p]});}}},bo={id:"codeowners",version:"1.1.0",async applicable(e){return (await Oe(e)).length>0},async run(e){for(let t of await Oe(e)){let o=U(e.projects,t);if(f.basename(t)==="OWNERS"){let n=await X(t);for(let a of n)for(let r of ["approvers","reviewers"]){let c=Array.isArray(a[r])?a[r]:[];for(let d=0;d<c.length;d+=1){let l=P(c[d]);if(!l)continue;let p=l.startsWith("@")?l:`@${l}`,h=await e.state.addProof({provider:this.id,artifact:e.state.artifactPath(t,o),absolutePath:t,pointer:`/${r}/${d}`,trust:"authoritative",derivation:"authored",detail:`${r}: ${p}`}),u=e.state.addEntity({kind:"owner",key:`owner:${p.toLowerCase()}`,label:p,aliases:[l,p],proofIds:[h]});e.state.addRelation({from:u,to:o?E("project",`project:${o.id}`):E("workspace",`workspace:${e.state.workspaceName}`),kind:"owns",trust:"authoritative",derivation:"authored",proofIds:[h]});}}continue}let s=(await S.readFile(t,"utf8")).split(/\r?\n/);for(let n=0;n<s.length;n+=1){let a=s[n].trim();if(!a||a.startsWith("#"))continue;let[r,...c]=a.split(/\s+/);for(let d of c.filter(l=>l.startsWith("@"))){let l=await e.state.addProof({provider:this.id,artifact:e.state.artifactPath(t,o),absolutePath:t,line:n+1,trust:"authoritative",derivation:"authored",detail:`${r} ${d}`}),p=e.state.addEntity({kind:"owner",key:`owner:${d.toLowerCase()}`,label:d,aliases:[d],proofIds:[l]}),h=e.projects.filter(y=>{let k=r.replace(/^\//,"").replace(/\*.*$/,""),v=f.dirname(t),m=[".github","docs"].includes(f.basename(v))?f.dirname(v):v,b=B(f.relative(m,y.root));return k&&(b==="."||b.startsWith(k.replace(/\/$/,""))||y.path.startsWith(k.replace(/\/$/,"")))}),u=h.length>0?h.map(y=>E("project",`project:${y.id}`)):o?[E("project",`project:${o.id}`)]:[E("workspace",`workspace:${e.state.workspaceName}`)];for(let y of u)e.state.addRelation({from:p,to:y,kind:"owns",trust:"authoritative",derivation:"authored",proofIds:[l]});}}}}},ko={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=>Fe(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 s=i.files.filter(n=>Fe(i.root,n));for(let n of s){if(t.has(n))continue;t.add(n);let a=U(e.projects,n),r=await S.readFile(n,"utf8"),c=r.match(/^#\s+(.+)$/m)?.[1]?.trim()??f.basename(n,".md"),d=r.match(/^status\s*:\s*(.+)$/im)?.[1]?.trim(),l=await e.state.addProof({provider:this.id,artifact:e.state.artifactPath(n,a),absolutePath:n,line:1,trust:"authoritative",derivation:"authored",detail:`Architecture decision: ${c}`}),p=e.state.addEntity({kind:"decision",key:`decision:${e.state.artifactPath(n,a)}`,label:c,...a?{projectId:a.id}:{},attributes:{status:d,artifact:e.state.artifactPath(n,a)},proofIds:[l]}),h=a?E("project",`project:${a.id}`):E("workspace",`workspace:${e.state.workspaceName}`);e.state.addRelation({from:h,to:p,kind:"decided-by",trust:"authoritative",derivation:"authored",proofIds:[l]});}}}},xe=[Zt,Jt,Ht,Ut,Vt,Yt,to,io,ro,no,co,fo,uo,go,mo,yo,vo,bo,ho,ko];async function wo(e$1,t){for(let o of t.edges){let i=[];for(let s of o.evidence){let n=re(s.file);i.push(await e$1.addProof({provider:"project-topology",artifact:n,absolutePath:f.resolve(e$1.workspacePath,n),derivation:o.source==="inferred"?"inferred":"authored",trust:o.source==="inferred"?"observed":"authoritative",confidence:o.confidence,detail:s.detail??`${o.kind} relationship`}));}i.length===0&&i.push(await e$1.addProof({provider:"project-topology",artifact:e.model,derivation:"inferred",trust:"ambiguous",confidence:o.confidence,detail:`${o.kind} relationship without source locator`})),e$1.addRelation({from:E("project",`project:${o.from}`),to:E("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 Po(e){let t=[...e.entities.values()].filter(i=>i.kind==="endpoint"),o=new Map;for(let i of t){let s=String(i.attributes.method??"").toUpperCase(),n=String(i.attributes.path??"");if(!i.projectId||!s||!n)continue;let a=`${i.projectId}\0${s}\0${n}`,r=o.get(a)??[];r.push(i),o.set(a,r);}for(let i of o.values()){if(i.length<2)continue;let s=i.find(n=>n.proofIds.some(a=>e.proofs.get(a)?.trust==="authoritative"));if(s)for(let n of i.filter(a=>a.id!==s.id))e.addRelation({from:n.id,to:s.id,kind:"implements",derivation:"extracted",trust:"corroborated",confidence:"high",proofIds:[...n.proofIds,...s.proofIds]});}}function ie(e,t){let o=[...new Set(e)],i=o.filter(s=>t.has(s)).length;return {eligibleCount:o.length,boundCount:i,unknownCount:o.length-i,coverageRatio:o.length===0?null:i/o.length}}function $o(e,t){let o=e.filter(u=>u.kind==="project").map(u=>u.id),i=e.filter(u=>u.kind==="endpoint").map(u=>u.id),s=new Set(i),n=e.filter(u=>u.kind==="api"&&!!u.projectId).map(u=>u.id),a=new Set(n),r=new Map(e.map(u=>[u.id,u.kind])),c=new Set(t.filter(u=>u.kind==="implements"||u.kind==="defines"&&r.get(u.from)==="file"&&r.get(u.to)==="endpoint").flatMap(u=>s.has(u.from)?[u.from]:s.has(u.to)?[u.to]:[])),d=new Set(t.filter(u=>u.kind==="implements"&&(r.get(u.from)==="runtime-unit"||r.get(u.to)==="runtime-unit")).flatMap(u=>a.has(u.from)?[u.from]:a.has(u.to)?[u.to]:[])),l=new Set(t.filter(u=>u.kind==="tests").flatMap(u=>[u.from,u.to]).filter(u=>o.includes(u))),p=new Set(t.filter(u=>u.kind==="deploys").flatMap(u=>[u.from,u.to]).filter(u=>o.includes(u))),h=new Set(t.filter(u=>u.kind==="owns").flatMap(u=>[u.from,u.to]).filter(u=>o.includes(u)));return {apiImplementation:ie(i,c),apiRuntimeRegistration:ie(n,d),projectTests:ie(o,l),projectDeployment:ie(o,p),projectOwnership:ie(o,h)}}async function Bo(e){let t=f.resolve(e.workspacePath),o=e.now??new Date,i=e.projects.map(g=>{let A=g.absolutePath?f.resolve(g.absolutePath):f.resolve(t,g.path),z=f.relative(t,A),H=z.startsWith(`..${f.sep}`)||z===".."||f.isAbsolute(z);return {...g,root:A,artifactPrefix:H?`external/${g.id}`:B(z||g.id)}}).sort((g,A)=>g.id.localeCompare(A.id)),s=new be(t,o,e.workspace.name),n=Math.max(100,Math.min(e.maxFilesPerProject??2e3,1e4)),a$1=Math.min(Math.max(n*10,2e4),5e4),r=new Map(await Promise.all(i.map(async g=>[g.id,await Ye(g.root)]))),c=new Map(await Promise.all(i.map(async g=>[g.id,[...new Set([...await ne(g.root,n),...r.get(g.id)??[]])].sort((A,z)=>A.localeCompare(z))]))),d=new Map(await Promise.all(i.map(async g=>[g.id,[...new Set([...await ne(g.root,a$1),...r.get(g.id)??[]])].sort((A,z)=>A.localeCompare(z))]))),l=Math.min(n*Math.max(i.length,1),2e4),p=await ne(t,l),h=await zt({workspacePath:t,projects:i,projectFileLimit:a$1,workspaceFileLimit:l,inventories:{workspaceFiles:p,projectFiles:d}}),u=new Map(h.scopes.filter(g=>g.kind==="project").map(g=>[g.id,g.hash])),y=new Map((e.previousGraph?.source.inputs?.scopes??[]).filter(g=>g.kind==="project").map(g=>[g.id,g.hash])),k=new Map((e.previousGraph?.providers??[]).filter(g=>g.id!=="incremental-project-cache").map(g=>[g.id,g.version])),v=xe.every(g=>k.get(g.id)===g.version),m=e.previousGraph?.workspace.name===e.workspace.name&&v&&u.size>0&&u.size===y.size&&[...u.keys()].every(g=>y.has(g)),b=new Set(m?[...u].filter(([g,A])=>y.get(g)===A).map(([g])=>g):[]),j=i.filter(g=>!b.has(g.id));if(e.previousGraph&&b.size>0){let g=e.previousGraph.entities.filter(O=>O.projectId&&b.has(O.projectId)),A=new Set(g.map(O=>O.id)),z=e.previousGraph.relations.filter(O=>A.has(O.from)&&A.has(O.to)),H=new Set([...g,...z].flatMap(O=>O.proofIds));for(let O of e.previousGraph.proofs)H.has(O.id)&&s.proofs.set(O.id,O);for(let O of g)s.entities.set(O.id,O);for(let O of z)s.relations.set(O.id,O);s.providers.push({id:"incremental-project-cache",version:"1.0.0",status:"passed",permission:"filesystem-read",discoveredEntities:g.length,discoveredRelations:z.length,proofCount:H.size,diagnostics:[`Reused ${b.size} unchanged project scope(s); rescanning ${j.length}.`]});}let w={workspacePath:t,projects:i,filesByProject:c,semanticFilesByProject:d,semanticScanLimit:a$1,workspaceFiles:p,now:o,maxFilesPerProject:n,contract:e.contract??null,state:s},$=new Set(["vscode-extension-manifest","python-project-manifest","source-language-inventory","source-structure","source-symbol-binding","runtime-bridge-semantics","polyglot-semantics","workspace-service-contract","openapi","authored-api-implementation-binding","dynamic-api-registration-binding","interface-contracts"]),_={...w,projects:j};for(let g of xe){let A={entities:s.entities.size,relations:s.relations.size,proofs:s.proofs.size,diagnostics:s.diagnostics.length},z="passed",H=null;try{let J=b.size>0&&$.has(g.id)?_:w;if(!(g.applicable?await g.applicable(J):true))z="skipped";else {await g.run(J);let et=s.entities.size-A.entities,tt=s.relations.size-A.relations,ot=s.proofs.size-A.proofs;et===0&&tt===0&&ot===0?(z="partial",s.diagnostics.push({code:`graph.provider.${g.id}.empty_result`,severity:"warning",message:`${g.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."})):s.diagnostics.length>A.diagnostics&&(z="partial");}}catch(J){z="failed";let pe=J instanceof Error?J.message:String(J);H=pe,s.diagnostics.push({code:`graph.provider.${g.id}.failed`,severity:"warning",message:`${g.id} provider failed: ${pe}`,recommendation:"Repair the referenced source artifact and rerun workspace graph emit."});}let O=s.diagnostics.slice(A.diagnostics).map(J=>`${J.code}: ${J.message}`);H&&O.length===0&&O.push(H),s.providers.push({id:g.id,version:g.version,status:z,permission:"filesystem-read",discoveredEntities:s.entities.size-A.entities,discoveredRelations:s.relations.size-A.relations,proofCount:s.proofs.size-A.proofs,diagnostics:O});}Po(s),await wo(s,e.projectTopology);let R=[...s.entities.values()].sort((g,A)=>g.id.localeCompare(A.id)),I=[...s.relations.values()].sort((g,A)=>g.id.localeCompare(A.id)),F=[...s.proofs.values()].sort((g,A)=>g.id.localeCompare(A.id)),T=R.filter(g=>g.proofIds.length>0).length,W=I.filter(g=>g.proofIds.length>0).length,M=s.providers.filter(g=>g.status!=="failed").length,L=e.projectTopology.diagnostics?.filter(g=>g.code==="graph.edges.missing").flatMap(g=>g.nodeIds??[])??[];L.length>0&&s.diagnostics.push({code:"graph.knowledge.project_relationships_unknown",severity:"warning",message:`${L.length} project(s) have no proven inter-project relationship. This is unknown topology, not proof of independence.`,entityIds:L.map(g=>E("project",`project:${g}`)),recommendation:"Author service contracts or add OpenAPI, Compose, Kubernetes, package or import evidence."});let K=s.diagnostics.filter(g=>g.code.includes("unknown")||g.code.includes("unresolved")||g.code.includes("limit_reached")||g.code.endsWith(".empty_result")).reduce((g,A)=>g+Math.max(A.entityIds?.length??0,A.relationIds?.length??0,1),0),D=$o(R,I),G=Object.values(D).reduce((g,A)=>g+A.unknownCount,0);return {schemaVersion:a,generatedAt:o.toISOString(),source:{...e.source,inputs:h},workspace:e.workspace,projectTopology:e.projectTopology,entities:R,relations:I,proofs:F,providers:[...s.providers].sort((g,A)=>g.id.localeCompare(A.id)),quality:{entityCount:R.length,relationCount:I.length,proofCount:F.length,entityProofCoverageRatio:R.length===0?1:T/R.length,relationProofCoverageRatio:I.length===0?1:W/I.length,providerSuccessRatio:s.providers.length===0?1:M/s.providers.length,conflictCount:s.diagnostics.filter(g=>g.code.includes("conflict")).length,unknownCount:K+G,bindingCoverage:D,portable:true,secretValuesEmitted:false},diagnostics:[...s.diagnostics].sort((g,A)=>g.code.localeCompare(A.code)||g.message.localeCompare(A.message))}}function Do(e,t){return E(e,t)}
|
|
8
|
+
export{Ko as a,No as b,zt as c,Bo as d,Do as e};
|