workspai 0.73.0 → 0.74.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/contracts/runtime-command-surface.v1.json +7 -3
- package/dist/analyze-IA33T6MY.js +1 -0
- package/dist/{artifact-remediation-plan-WDK5ISRU.js → artifact-remediation-plan-OVTQM7HN.js} +1 -1
- package/dist/autopilot-release-T327V7QK.js +1 -0
- package/dist/chunk-252EKOR6.js +2 -0
- package/dist/{chunk-3GO7BJ5J.js → chunk-4JJDDL3X.js} +1 -1
- package/dist/chunk-5EVBOUYW.js +3 -0
- package/dist/chunk-5Y4YRYZI.js +12 -0
- package/dist/{chunk-J44PN2FX.js → chunk-773WUMFU.js} +15 -15
- package/dist/{chunk-FRH7AIGY.js → chunk-BTJPTJLT.js} +2 -2
- package/dist/{chunk-OIGI7MP6.js → chunk-C43NXRRE.js} +1 -1
- package/dist/chunk-D6BL7ARI.js +2 -0
- package/dist/chunk-DLLHUG2Q.js +9 -0
- package/dist/chunk-DPC5DKH6.js +2 -0
- package/dist/{chunk-R5OJD5K2.js → chunk-DTLLIA2C.js} +1 -1
- package/dist/{chunk-LDJAUIAG.js → chunk-FYR4FD7K.js} +1 -1
- package/dist/chunk-G6ADWA2B.js +2 -0
- package/dist/chunk-H333GKL4.js +3 -0
- package/dist/{chunk-EDDGQ6LM.js → chunk-H5DRKXXC.js} +1 -1
- package/dist/{chunk-DNKELRK6.js → chunk-IQFXLJIM.js} +1 -1
- package/dist/{chunk-UCNIXOTL.js → chunk-IUOMBLRR.js} +1 -1
- package/dist/chunk-K3FXRBER.js +4 -0
- package/dist/{chunk-TIZCESKY.js → chunk-KCIET26G.js} +1 -1
- package/dist/chunk-LEEOZRWR.js +7 -0
- package/dist/{chunk-T5NBSCVX.js → chunk-NCZJUPG5.js} +49 -49
- package/dist/{chunk-TSYDTKXO.js → chunk-RPM67N7A.js} +1 -1
- package/dist/{chunk-NSMRQOWP.js → chunk-SAZXL36B.js} +1 -1
- package/dist/chunk-SVGUAVMG.js +1 -0
- package/dist/chunk-TBOIXIQA.js +1 -0
- package/dist/chunk-TGDXD4CD.js +1 -0
- package/dist/{chunk-IPZT6WKM.js → chunk-TVSMNF5G.js} +1 -1
- package/dist/{chunk-D3N2WFDV.js → chunk-UHT2SW7O.js} +1 -1
- package/dist/chunk-VLKX5U4H.js +13 -0
- package/dist/chunk-XF65LQ6M.js +1 -0
- package/dist/chunk-ZKYH44ER.js +1 -0
- package/dist/{chunk-TZK2R6RD.js → chunk-ZNKZ2KXR.js} +1 -1
- package/dist/chunk-ZS7JHATN.js +1 -0
- package/dist/{create-XYKXS3JB.js → create-EKA2QG5R.js} +1 -1
- package/dist/doctor-BXSNADVR.js +1 -0
- package/dist/{goal-lifecycle-BIX2JVNO.js → goal-lifecycle-XXWNMIAD.js} +1 -1
- package/dist/{goal-pack-SUWH6K7U.js → goal-pack-NTHYLISY.js} +1 -1
- package/dist/index.js +158 -158
- package/dist/pipeline-JLOC2SUT.js +5 -0
- package/dist/{project-agent-entry-Y3NEHZED.js → project-agent-entry-ZNUHGCVC.js} +1 -1
- package/dist/{project-intelligence-lens-6Q6XSUDJ.js → project-intelligence-lens-W72OUEDW.js} +1 -1
- package/dist/{proof-carrying-change-456TYEDW.js → proof-carrying-change-WLUPMUO7.js} +1 -1
- package/dist/verified-goal-6O2JZOOR.js +1 -0
- package/dist/{workspace-ROUEA3RT.js → workspace-XTIGVLGH.js} +1 -1
- package/dist/{workspace-agent-sync-6UYG33EQ.js → workspace-agent-sync-TN6QDNBR.js} +1 -1
- package/dist/{workspace-context-H7ZXR6VI.js → workspace-context-Y3TNY2XZ.js} +1 -1
- package/dist/{workspace-contract-2V2BI6A3.js → workspace-contract-GRZY7WRD.js} +1 -1
- package/dist/{workspace-explain-IBMTRUSF.js → workspace-explain-KUYHJFLY.js} +1 -1
- package/dist/{workspace-foundation-H5B3TTZD.js → workspace-foundation-ZBUJTR56.js} +1 -1
- package/dist/{workspace-graph-stream-YDEET5LK.js → workspace-graph-stream-KC2XUAE4.js} +1 -1
- package/dist/workspace-graph-token-efficiency-YHXFGH3Z.js +1 -0
- package/dist/{workspace-intelligence-DXKQXTTM.js → workspace-intelligence-26YT6KMN.js} +1 -1
- package/dist/{workspace-intelligence-benchmark-L46EGZZM.js → workspace-intelligence-benchmark-QFVTUBDO.js} +1 -1
- package/dist/{workspace-intelligence-evaluation-QDSOOUHH.js → workspace-intelligence-evaluation-4AB4BBRP.js} +1 -1
- package/dist/{workspace-intelligence-runner-SCB44IXU.js → workspace-intelligence-runner-HVYKHCTX.js} +1 -1
- package/dist/{workspace-knowledge-graph-BNEVFEOW.js → workspace-knowledge-graph-RL3I2FHY.js} +1 -1
- package/dist/{workspace-knowledge-graph-query-GOC365ZR.js → workspace-knowledge-graph-query-TT2KK3SF.js} +1 -1
- package/dist/workspace-knowledge-graph-snapshot-JEJMRQZL.js +1 -0
- package/dist/workspace-marker-7U3NYRPJ.js +1 -0
- package/dist/{workspace-mcp-serve-JLZTTEVG.js → workspace-mcp-serve-2FGRXJG4.js} +1 -1
- package/dist/{workspace-model-XSNLDUI2.js → workspace-model-2ODVOWDQ.js} +1 -1
- package/dist/{workspace-onboarding-IRBVZTT4.js → workspace-onboarding-BY6RUBBH.js} +1 -1
- package/dist/{workspace-python-engine-state-BE4A3BL5.js → workspace-python-engine-state-VCOLSEWV.js} +2 -2
- package/dist/{workspace-registry-summary-CBZDSG6I.js → workspace-registry-summary-VKTJ7PHV.js} +1 -1
- package/dist/workspace-repair-engine-RBM7NCGI.js +3 -0
- package/dist/workspace-run-JCA5WPCR.js +1 -0
- package/dist/{workspace-verify-QTRY7WW3.js → workspace-verify-NFJ7RKKT.js} +1 -1
- package/dist/{workspace-watch-PDQKYBYQ.js → workspace-watch-3DBBB6IP.js} +1 -1
- package/docs/ci-workflows.md +1 -1
- package/package.json +1 -1
- package/dist/analyze-WC2TY5AT.js +0 -1
- package/dist/autopilot-release-LJDRECFW.js +0 -1
- package/dist/chunk-2BCECNIW.js +0 -1
- package/dist/chunk-2LIVMG5C.js +0 -2
- package/dist/chunk-3SNP6M4M.js +0 -2
- package/dist/chunk-4HQU2GQM.js +0 -1
- package/dist/chunk-4JAURS76.js +0 -13
- package/dist/chunk-7O7P4MRD.js +0 -1
- package/dist/chunk-AQNU5RXV.js +0 -2
- package/dist/chunk-CQBM6BBP.js +0 -2
- package/dist/chunk-CY4QZ3PE.js +0 -3
- package/dist/chunk-F6CTGVJA.js +0 -9
- package/dist/chunk-K3O3HENC.js +0 -5
- package/dist/chunk-LGC4CRUF.js +0 -3
- package/dist/chunk-NNQE4DS2.js +0 -2
- package/dist/chunk-NSH7TTSV.js +0 -1
- package/dist/chunk-SO4CGS35.js +0 -4
- package/dist/chunk-UNXG3ZFV.js +0 -1
- package/dist/chunk-VBMWFT7Q.js +0 -1
- package/dist/chunk-ZZWGD3X3.js +0 -12
- package/dist/doctor-LQ7FT6AZ.js +0 -1
- package/dist/pipeline-NSPPWD7U.js +0 -5
- package/dist/verified-goal-GRH5UOJR.js +0 -1
- package/dist/workspace-graph-token-efficiency-XM3LYFUC.js +0 -1
- package/dist/workspace-knowledge-graph-snapshot-2NMV7LEJ.js +0 -1
- package/dist/workspace-marker-XGAWZZDX.js +0 -1
- package/dist/workspace-repair-engine-TDUNQSFJ.js +0 -3
- package/dist/workspace-run-I2W5PIPK.js +0 -1
|
@@ -2975,7 +2975,7 @@
|
|
|
2975
2975
|
},
|
|
2976
2976
|
{
|
|
2977
2977
|
"id": "goal",
|
|
2978
|
-
"usage": "workspai workspace goal <plan|status|verify> <kind|goal-id> [--scope <scope>] [--target <percent>] [--json]",
|
|
2978
|
+
"usage": "workspai workspace goal <plan|status|verify> <kind|goal-id> [--scope <scope>] [--runtime <runtime>] [--target <percent>] [--json]",
|
|
2979
2979
|
"summary": "Plan, resume, and evidence-verify a durable engineering goal for people and agents.",
|
|
2980
2980
|
"options": [
|
|
2981
2981
|
{
|
|
@@ -2990,6 +2990,10 @@
|
|
|
2990
2990
|
"flag": "--scope",
|
|
2991
2991
|
"description": "Limit the operation to a bounded scope such as project:<name>."
|
|
2992
2992
|
},
|
|
2993
|
+
{
|
|
2994
|
+
"flag": "--runtime",
|
|
2995
|
+
"description": "Select the runtime measured by a test-coverage goal."
|
|
2996
|
+
},
|
|
2993
2997
|
{
|
|
2994
2998
|
"flag": "--target",
|
|
2995
2999
|
"description": "Set the required test coverage percentage (0–100)."
|
|
@@ -3028,14 +3032,14 @@
|
|
|
3028
3032
|
"examples": [
|
|
3029
3033
|
"workspai workspace goal plan release-readiness --json",
|
|
3030
3034
|
"workspai workspace goal plan dependency-security --scope project:api --json",
|
|
3031
|
-
"workspai workspace goal plan test-coverage --scope project:web --target 75 --json",
|
|
3035
|
+
"workspai workspace goal plan test-coverage --scope project:web --runtime node --target 75 --json",
|
|
3032
3036
|
"workspai workspace goal verify <goal-id> --json"
|
|
3033
3037
|
]
|
|
3034
3038
|
},
|
|
3035
3039
|
{
|
|
3036
3040
|
"id": "graph",
|
|
3037
3041
|
"usage": "workspai workspace graph [mode] [query|from] [to] [--json]",
|
|
3038
|
-
"summary": "
|
|
3042
|
+
"summary": "Query and export the canonical Knowledge Graph; explain, dot, and mermaid target the project dependency topology.",
|
|
3039
3043
|
"options": [
|
|
3040
3044
|
{
|
|
3041
3045
|
"flag": "--workspace",
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{b as printAnalyzeReport,a as runAnalyze}from'./chunk-DLLHUG2Q.js';
|
package/dist/{artifact-remediation-plan-WDK5ISRU.js → artifact-remediation-plan-OVTQM7HN.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
export{a as buildArtifactRemediationPlan,b as writeArtifactRemediationPlan}from'./chunk-
|
|
1
|
+
export{a as buildArtifactRemediationPlan,b as writeArtifactRemediationPlan}from'./chunk-H333GKL4.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{b as AUTOPILOT_RELEASE_ALIAS_FILENAME,a as AUTOPILOT_RELEASE_LAST_RUN_FILENAME,c as runAutopilotRelease}from'./chunk-4JJDDL3X.js';
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import {r,s as s$1}from'./chunk-VQZ5PI5J.js';import o from'fs-extra';import c from'path';async function s(a){for(let t of [r(a),s$1(a)])try{if(await o.pathExists(t))return await o.readJson(t)}catch{}return null}async function f(a){return (await s(a))?.name?.trim()||c.basename(c.resolve(a))}async function p(a,t){let e=await s(a);e?.metadata&&(t.metadata={...e.metadata,...t.metadata});let r$1=JSON.stringify(t,null,2)+`
|
|
2
|
+
`;await o.outputFile(r(a),r$1,"utf-8");}async function l(a,t){let e=await s(a);return e?(e.metadata={...e.metadata,...t,vscode:t.vscode?{...e.metadata?.vscode,...t.vscode}:e.metadata?.vscode,npm:t.npm?{...e.metadata?.npm,...t.npm}:e.metadata?.npm,python:t.python?{...e.metadata?.python,...t.python}:e.metadata?.python},await p(a,e),true):false}function y(a,t,e,r){return {signature:"RAPIDKIT_WORKSPACE",createdBy:"workspai-cli",version:t,createdAt:new Date().toISOString(),name:a,metadata:{npm:{packageVersion:t,installMethod:e,lastUsedAt:new Date().toISOString()},...r?{python:r}:{}}}}function M(a){if(!a||typeof a!="object")return false;let t=a;return t.signature==="RAPIDKIT_WORKSPACE"&&typeof t.createdBy=="string"&&typeof t.version=="string"&&typeof t.createdAt=="string"&&typeof t.name=="string"}export{s as a,f as b,p as c,l as d,y as e,M as f};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {b}from'./chunk-
|
|
1
|
+
import {b}from'./chunk-LEEOZRWR.js';import {a as a$1,e}from'./chunk-37SWTS2B.js';import {a as a$3}from'./chunk-MGL6DBOR.js';import {g,a,h}from'./chunk-FE5R6EUV.js';import {p,s}from'./chunk-ODK4LCEL.js';import a$2 from'chalk';import re from'fs';import b$1 from'path';import {execa}from'execa';var V="autopilot-release-last-run.json",G="autopilot-release.json";function $(r){try{return JSON.parse(r)}catch{return null}}function Se(r){let e=b$1.resolve(r),n=a$3(e);if(!n)throw new Error("No Workspai workspace found in current directory or parents");return n}async function S(r,e){let n=process.argv[1];if(!n)return {exitCode:1,stdout:"",stderr:"RapidKit entrypoint is unavailable for autopilot execution.",crashed:true};try{let o=await execa(process.execPath,[n,...r],{cwd:e,reject:false,env:{...process.env,RAPIDKIT_AUTOPILOT_CHILD:"1"}});return {exitCode:Number(o.exitCode??1),stdout:o.stdout,stderr:o.stderr,crashed:false}}catch(o){return {exitCode:1,stdout:"",stderr:o instanceof Error?o.message:String(o),crashed:true}}}function oe(r){let e=r.toLowerCase();return e==="pass"?"pass":e==="warn"?"warn":e==="fail"?"fail":"warn"}function ae(r){return r.summary.failed>0||r.gates.results.some(e=>e.status==="fail")?"fail":r.gates.results.some(e=>e.status==="warn")?"warn":"pass"}function be(r){let e=r.filter(o=>o.status!=="skipped");if(e.length===0)return 100;let n=e.reduce((o,t)=>t.status==="pass"?o+1:t.status==="warn"?o+.6:o,0);return Math.round(n/e.length*100)}function Ae(r){return r.executionError?["Re-run: npx workspai autopilot release --mode audit --json","Inspect .workspai/reports/autopilot-release-last-run.json for execution failure details"]:r.blockers.length>0?["Run: npx workspai doctor workspace --plan","Run: npx workspai readiness --json --strict","Run: npx workspai workspace run test --affected --strict"]:r.hasWarnings&&r.mode!=="enforce"?["Review warning-level findings in autopilot report","Optionally run: npx workspai autopilot release --mode safe-fix"]:["Workspace is release-ready based on current autopilot policy"]}async function xe(r,e){await re.promises.mkdir(b$1.dirname(r),{recursive:true}),await re.promises.writeFile(r,`${JSON.stringify(e,null,2)}
|
|
2
2
|
`,"utf-8");}async function ze(r){let e$1=Se(r.workspacePath),n=r.mode,o=[],t=[],L,H,N,q,Q,X=0,f=false,I=0,_=0,W=-1,T=-1,c="skipped",d="skipped",ne=n==="enforce"?["doctor","workspace","--json","--strict"]:["doctor","workspace","--json","--ci"];if(r.skipPipelineStages)o.push({name:"doctor-workspace",status:"skipped",durationMs:0,summary:"doctor stage skipped (pipeline already executed)"},{name:"analyze",status:"skipped",durationMs:0,summary:"analyze stage skipped (pipeline already executed)"},{name:"readiness",status:"skipped",durationMs:0,summary:"readiness stage skipped (pipeline already executed)"});else {let s=Date.now(),l=await S([...ne],e$1),m=Date.now()-s;if(c="pass",l.crashed)c="fail",f=true,t.push(`doctor workspace execution error: ${l.stderr||"unknown error"}`);else if(l.exitCode===1)c="fail",t.push("doctor workspace command failed or reported errors");else if(l.exitCode===2)c="warn",t.push("doctor workspace reported warnings");else if(l.exitCode!==0)c="fail",t.push("doctor workspace command failed");else {let p=$(l.stdout),E=p&&p.healthScore&&typeof p.healthScore=="object"?p.healthScore:{},k=Number(E.errors??0),C=Number(E.warnings??0);Number.isFinite(k)&&k>0?(c="fail",t.push(`doctor workspace reports ${k} error(s)`)):Number.isFinite(C)&&C>0&&(c="warn");}W=o.push({name:"doctor-workspace",status:c,durationMs:m,summary:c==="pass"?"doctor workspace passed":c==="warn"?"doctor workspace reported warnings":"doctor workspace reported errors"})-1,n==="enforce"&&c==="warn"&&t.push("doctor workspace reported warnings under enforce mode");let g$1=Date.now(),w=await S(["analyze","--json"],e$1),P=Date.now()-g$1;H=await g(e$1,p.analyze)??a(e$1,p.analyze);let i="pass";if(w.crashed)i="fail",f=true,t.push(`analyze execution error: ${w.stderr||"unknown error"}`);else if(w.exitCode!==0)i=w.exitCode===2?"warn":"fail",t.push(w.exitCode===2?"analyze reported needs-attention verdict":"analyze command failed or reported blocked verdict");else {let p=$(w.stdout),E=p&&p.summary&&typeof p.summary=="object"?p.summary:{},k=String(E.verdict??"ready");k==="blocked"?(i="fail",t.push("analyze reported blocked verdict")):k==="needs-attention"&&(i="warn");}o.push({name:"analyze",status:i,durationMs:P,summary:i==="pass"?"analyze passed":i==="warn"?"analyze reported needs-attention":"analyze reported blocked verdict"}),n==="enforce"&&i==="warn"&&t.push("analyze reported warnings under enforce mode");let v=Date.now(),h=await S(["readiness","--json"],e$1),y=Date.now()-v;if(d="fail",h.crashed)d="fail",f=true,t.push(`readiness execution error: ${h.stderr||"unknown error"}`);else if(h.exitCode!==0)d="fail",t.push("readiness command failed");else {let p=$(h.stdout),E=String(p?.overallStatus??"fail");if(d=oe(E),typeof p?.evidencePath=="string"&&p.evidencePath.trim().length>0&&(L=p.evidencePath),d==="fail"){let k=Array.isArray(p?.blockingReasons)?p?.blockingReasons.filter(C=>typeof C=="string"):[];k.length>0?t.push(...k.map(C=>`readiness: ${C}`)):t.push("readiness overall status is fail");}}T=o.push({name:"readiness",status:d,durationMs:y,summary:`readiness overall status is ${d}`})-1,n==="enforce"&&d==="warn"&&t.push("readiness reported warnings under enforce mode");}let ie=Date.now(),D=await S(["doctor","workspace","--plan","--json"],e$1),le=Date.now()-ie,R="warn";if(D.crashed)R="fail",f=true,t.push(`doctor remediation plan execution error: ${D.stderr||"unknown error"}`);else if(D.exitCode!==0)R="fail",t.push("doctor remediation plan command failed");else {let s=$(D.stdout),l=s&&s.remediationPlan&&typeof s.remediationPlan=="object"?s.remediationPlan:null,m=Number(l?.totalSteps??0),g=Number(l?.executableSteps??0);Number.isFinite(m)&&m>0&&(I=m),Number.isFinite(g)&&g>0&&(_=g),Number.isFinite(m)&&m===0?R="pass":R="warn";}if(o.push({name:"remediation-plan",status:R,durationMs:le,summary:R==="pass"?"no remediation steps required":"remediation steps available"}),n==="enforce"&&R==="warn"&&t.push("remediation plan has pending steps under enforce mode"),n==="safe-fix"){let s=Date.now(),l=await S(["doctor","workspace","--apply"],e$1),m=Date.now()-s,g=l.crashed||l.exitCode!==0?"fail":"pass";if(l.crashed)f=true,t.push(`doctor remediation apply execution error: ${l.stderr||"unknown error"}`);else if(g==="fail")t.push("doctor remediation apply failed");else {X=_>0?_:I>0?I:1;let w=await S(["doctor","workspace","--json"],e$1);if(w.crashed)c="fail",f=true,t.push(`post-apply doctor execution error: ${w.stderr||"unknown error"}`);else if(w.exitCode!==0)c="fail",t.push("post-apply doctor workspace command failed");else {let i=$(w.stdout),v=i&&i.healthScore&&typeof i.healthScore=="object"?i.healthScore:{},h=Number(v.errors??0),y=Number(v.warnings??0);Number.isFinite(h)&&h>0?(c="fail",t.push(`post-apply doctor reports ${h} error(s)`)):Number.isFinite(y)&&y>0?c="warn":c="pass";}W>=0&&(o[W].status=c,o[W].summary=`doctor workspace post-apply status is ${c}`);let P=await S(["readiness","--json"],e$1);if(P.crashed)d="fail",f=true,t.push(`post-apply readiness execution error: ${P.stderr||"unknown error"}`);else if(P.exitCode!==0)d="fail",t.push("post-apply readiness command failed");else {let i=$(P.stdout),v=String(i?.overallStatus??"fail");if(d=oe(v),typeof i?.evidencePath=="string"&&i.evidencePath.trim().length>0&&(L=i.evidencePath),d==="fail"){let h=Array.isArray(i?.blockingReasons)?i?.blockingReasons.filter(y=>typeof y=="string"):[];h.length>0?t.push(...h.map(y=>`post-apply readiness: ${y}`)):t.push("post-apply readiness overall status is fail");}}T>=0&&(o[T].status=d,o[T].summary=`readiness post-apply overall status is ${d}`);}o.push({name:"remediation-apply",status:g,durationMs:m,summary:g==="pass"?"safe remediation apply completed":"safe remediation apply failed"});}else o.push({name:"remediation-apply",status:"skipped",durationMs:0,summary:"remediation apply is skipped for this mode"});let ce=Date.now(),A="pass",x="workspace test/build completed for selected projects";try{let s=await b({workspacePath:e$1,stage:"test",affected:true,since:r.since,parallel:r.parallel,maxWorkers:r.maxWorkers,strict:true,json:true,enforceGates:false});N=a(e$1,b$1.join(".workspai","reports",a$1)),await e(e$1,s),q=N;let l=ae(s);if(l==="fail")A="fail",x="workspace test stage failed for selected projects",t.push("workspace run test failed for selected projects");else {l==="warn"&&(A="warn",x="workspace test stage completed with warnings",n==="enforce"&&t.push("workspace run test reported warnings under enforce mode"));let m=await b({workspacePath:e$1,stage:"build",affected:true,since:r.since,parallel:r.parallel,maxWorkers:r.maxWorkers,strict:true,json:true,enforceGates:false});await e(e$1,m),Q=N;let g=ae(m);g==="fail"?(A="fail",x="workspace build stage failed for selected projects",t.push("workspace run build failed for selected projects")):g==="warn"&&(A="warn",x="workspace test/build completed with warnings",n==="enforce"&&t.push("workspace run test/build reported warnings under enforce mode"));}}catch(s){A="fail",x="workspace test/build orchestration failed",f=true,t.push(`workspace run orchestration error: ${s instanceof Error?s.message:String(s)}`);}let pe=Date.now()-ce;o.push({name:"workspace-run-test-build",status:A,durationMs:pe,summary:x});let M=o.filter(s=>s.status==="warn").length,ue=o.filter(s=>s.status==="fail").length,F=n==="enforce"?o.some(s=>s.status==="warn"||s.status==="fail"):ue>0,j=[...new Set(t)],O=f||F?Math.max(1,j.length):0,de=O>0?j:[],fe=O===0?j:[],me=be(o),ge=f||F?"blocked":M>0?"partial":"approved",we=f?3:F?1:M>0?2:0,he=Ae({mode:n,executionError:f,blockers:j,hasWarnings:M>0}),Y=a(e$1,".workspai/reports"),ke=b$1.join(Y,V),ye=b$1.join(Y,G),u={schemaVersion:s.autopilotReleaseLastRun.schemaVersion,generatedAt:new Date().toISOString(),workspacePath:e$1,mode:n,summary:{releaseScore:me,verdict:ge,blockers:O,warnings:M,safeFixesApplied:X,manualActions:j.length,exitCode:we},stages:o,blockingReasons:de,warningReasons:fe,nextActions:he,artifacts:{reportPath:ke,aliasEvidencePath:ye,analyzeEvidencePath:H,readinessEvidencePath:L,workspaceRunEvidencePath:N,workspaceRunTestPath:q,workspaceRunBuildPath:Q},enterpriseControls:{jsonReady:true,evidencePath:`.workspai/reports/${V}`,aliasEvidencePath:`.workspai/reports/${G}`}};if(await h(e$1,`.workspai/reports/${V}`,u),await h(e$1,`.workspai/reports/${G}`,u),r.output&&await xe(b$1.resolve(r.output),u),!r.json){console.log(a$2.bold.cyan(`
|
|
3
3
|
\u{1F680} Workspai Autopilot Release
|
|
4
4
|
`)),console.log(a$2.bold(`Workspace: ${a$2.cyan(b$1.basename(e$1))}`)),console.log(a$2.gray(`Path: ${e$1}`)),console.log(a$2.white(`Mode: ${n}`)),console.log(a$2.white(`Verdict: ${u.summary.verdict==="approved"?a$2.green("approved"):u.summary.verdict==="partial"?a$2.yellow("partial"):a$2.red("blocked")}`)),console.log(a$2.white(`Release score: ${u.summary.releaseScore}`));for(let s of u.stages){let l=s.status==="pass"?a$2.green("PASS"):s.status==="warn"?a$2.yellow("WARN"):s.status==="skipped"?a$2.gray("SKIP"):a$2.red("FAIL");console.log(` - ${s.name}: ${l} ${s.summary} (${s.durationMs}ms)`);}if(u.blockingReasons.length>0){console.log(a$2.bold.red(`
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import {h as h$1,j,i,m,a as a$1,c,l,k}from'./chunk-YYELANJO.js';import {u,v as v$1}from'./chunk-VQZ5PI5J.js';import f from'fs';import u$1 from'path';import N from'fs-extra';var ge=[{id:"fastapi.standard",aliases:["fastapi","fastapi.standard"],label:"fastapi \u2014 FastAPI Standard Kit",description:"Core-backed FastAPI service scaffold.",owner:"core",runtime:"python",framework:"fastapi",category:"backend",moduleSupport:true,workspacePythonEngine:"required",stability:"stable",versionPolicy:"tested-baseline"},{id:"fastapi.ddd",aliases:["fastapi.ddd","fastapi-ddd"],label:"fastapi \u2014 FastAPI DDD Kit",description:"Core-backed FastAPI DDD service scaffold.",owner:"core",runtime:"python",framework:"fastapi",category:"backend",moduleSupport:true,workspacePythonEngine:"required",stability:"stable",versionPolicy:"tested-baseline"},{id:"nestjs.standard",aliases:["nestjs","nest","nestjs.standard"],label:"nestjs \u2014 NestJS Standard Kit",description:"Core-backed NestJS service scaffold.",owner:"core",runtime:"node",framework:"nestjs",category:"backend",moduleSupport:true,workspacePythonEngine:"optional",stability:"stable",versionPolicy:"tested-baseline"},{id:"springboot.standard",aliases:["spring","springboot","springboot.standard","java"],label:"spring \u2014 Spring Boot Standard Kit",description:"npm-backed Spring Boot service scaffold.",owner:"npm",runtime:"java",framework:"springboot",category:"backend",moduleSupport:false,workspacePythonEngine:"none",stability:"stable",versionPolicy:"tested-baseline",generator:"springboot",createUsage:"workspai create project springboot.standard <name> [--java-version <major>] [--spring-boot-version <semver>] [--group-id <com.example>] [--package-name <com.example.app>] [--port <number>]"},{id:"gofiber.standard",aliases:["go","go.standard","fiber","gofiber","gofiber.standard","go/fiber"],label:"go/fiber \u2014 Go Fiber Standard Kit",description:"npm-backed Go Fiber service scaffold.",owner:"npm",runtime:"go",framework:"gofiber",category:"backend",moduleSupport:false,workspacePythonEngine:"none",stability:"stable",versionPolicy:"tested-baseline",generator:"gofiber",createUsage:"workspai create project gofiber.standard <name> [--output <dir>]"},{id:"gogin.standard",aliases:["gin","gogin","gogin.standard","go/gin"],label:"go/gin \u2014 Go Gin Standard Kit",description:"npm-backed Go Gin service scaffold.",owner:"npm",runtime:"go",framework:"gogin",category:"backend",moduleSupport:false,workspacePythonEngine:"none",stability:"stable",versionPolicy:"tested-baseline",generator:"gogin",createUsage:"workspai create project gogin.standard <name> [--output <dir>]"},{id:"dotnet.webapi.clean",aliases:["dotnet","dotnet.webapi","dotnet.webapi.clean","aspnet","aspnetcore","asp.net","asp.net-core","csharp","c#"],label:"dotnet \u2014 ASP.NET Core Clean Web API",description:"npm-backed ASP.NET Core Web API with clean architecture boundaries.",owner:"npm",runtime:"dotnet",framework:"dotnet",category:"backend",moduleSupport:false,workspacePythonEngine:"none",stability:"preview",versionPolicy:"tested-baseline",generator:"dotnet-webapi-clean",createUsage:"workspai create project dotnet.webapi.clean <name> [--target-framework net8.0] [--root-namespace <Company.Product>] [--port <number>]"},{id:"rust.axum",aliases:["rust.axum","axum","rust-axum"],label:"rust/axum \u2014 Rust Axum API",description:"Workspai-owned Axum service with health, tests, CI, and container baseline.",owner:"npm",runtime:"rust",framework:"axum",category:"backend",moduleSupport:false,workspacePythonEngine:"none",stability:"preview",versionPolicy:"tested-baseline",generator:"rust-axum",createUsage:"workspai create project rust.axum <name> [--port <number>] [--output <dir>] [--skip-git]"}],Q=new Map;for(let t of ge){Q.set(t.id.toLowerCase(),t);for(let e of t.aliases)Q.set(e.toLowerCase(),t);}function G(t){return t?Q.get(t.trim().toLowerCase())??null:null}function Dt(t){return G(t)?.id??t}function Ot(){return ge.filter(t=>t.owner==="core"||t.generator)}function Tt(t){return G(t)?.owner==="npm"}async function It(t,e){if(!t.generator)throw new Error(`Kit is not backed by an npm generator: ${t.id}`);if(t.generator==="gofiber"){let{generateGoFiberKit:n}=await import('./gofiber-standard-I6ASLOEE.js');await n(e.projectPath,{project_name:e.projectName,module_path:e.projectName,skipGit:e.skipGit,skipInstall:e.skipInstall});return}if(t.generator==="gogin"){let{generateGoGinKit:n}=await import('./gogin-standard-U2LSRLIP.js');await n(e.projectPath,{project_name:e.projectName,module_path:e.projectName,skipGit:e.skipGit,skipInstall:e.skipInstall});return}if(t.generator==="springboot"){let{generateSpringBootKit:n}=await import('./springboot-standard-OC2RS3KC.js');await n(e.projectPath,{project_name:e.projectName,artifact_id:e.projectName,java_version:h(e.args,"--java-version")?.trim(),spring_boot_version:h(e.args,"--spring-boot-version")?.trim(),springdoc_version:h(e.args,"--springdoc-version")?.trim(),group_id:h(e.args,"--group-id")?.trim(),package_name:h(e.args,"--package-name")?.trim(),description:h(e.args,"--description")?.trim(),port:h(e.args,"--port")?.trim(),skipGit:e.skipGit,skipInstall:e.skipInstall});return}if(t.generator==="dotnet-webapi-clean"){let{generateDotnetWebApiCleanKit:n}=await import('./dotnet-webapi-clean-VJX6SGGP.js');await n(e.projectPath,{project_name:e.projectName,target_framework:h(e.args,"--target-framework")?.trim(),root_namespace:h(e.args,"--root-namespace")?.trim(),description:h(e.args,"--description")?.trim(),port:h(e.args,"--port")?.trim(),skipGit:e.skipGit,skipInstall:e.skipInstall});return}if(t.generator==="rust-axum"){let{generateRustAxumKit:n}=await import('./rust-axum-JMV7UPO7.js');await n(e.projectPath,{project_name:e.projectName,description:h(e.args,"--description")?.trim(),port:h(e.args,"--port")?.trim(),skipGit:e.skipGit,skipInstall:e.skipInstall});return}throw new Error(`Unhandled npm kit generator: ${t.generator}`)}function h(t,e){let n=t.indexOf(e);if(n>=0&&n+1<t.length)return t[n+1];let r=t.find(o=>o.startsWith(`${e}=`));return r?r.slice(e.length+1):void 0}var P=["init","dev","start","build","test","lint","format","help"],ye={python:{runtime:"python",displayName:"Python",tier:"first-class",scaffoldSupport:true,importSupport:true,lifecycleCommands:P,moduleCommands:true,doctorSupport:"full",notes:["Core-backed Python projects support RapidKit Core modules and lifecycle commands."]},node:{runtime:"node",displayName:"Node.js",tier:"extended",scaffoldSupport:true,importSupport:true,lifecycleCommands:P,moduleCommands:true,doctorSupport:"full",notes:["Node projects support npm-owned lifecycle commands; NestJS is the first-class Node framework."]},go:{runtime:"go",displayName:"Go",tier:"extended",scaffoldSupport:true,importSupport:true,lifecycleCommands:P,moduleCommands:false,doctorSupport:"readiness",notes:["Go projects support workspace governance and lifecycle commands via Go tooling."]},java:{runtime:"java",displayName:"Java / Spring Boot",tier:"extended",scaffoldSupport:true,importSupport:true,lifecycleCommands:P,moduleCommands:false,doctorSupport:"readiness",notes:["Java projects support Maven/Gradle lifecycle commands and workspace governance."]},dotnet:{runtime:"dotnet",displayName:".NET / ASP.NET Core",tier:"extended",scaffoldSupport:true,importSupport:true,lifecycleCommands:P,moduleCommands:false,doctorSupport:"readiness",notes:[".NET projects support dotnet CLI lifecycle commands and workspace governance."]},php:{runtime:"php",displayName:"PHP",tier:"extended",scaffoldSupport:true,importSupport:true,lifecycleCommands:P,moduleCommands:false,doctorSupport:"readiness",notes:["Laravel projects use the official Composer generator and PHP/Composer lifecycle adapter."]},ruby:{runtime:"ruby",displayName:"Ruby",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["Ruby projects are importable and governed as observed projects until a kit exists."]},rust:{runtime:"rust",displayName:"Rust",tier:"extended",scaffoldSupport:true,importSupport:true,lifecycleCommands:P,moduleCommands:false,doctorSupport:"readiness",notes:["Rust projects support Axum and Tauri scaffolding plus Cargo lifecycle commands."]},elixir:{runtime:"elixir",displayName:"Elixir",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["Elixir projects are importable and governed as observed projects until a kit exists."]},clojure:{runtime:"clojure",displayName:"Clojure",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["Clojure projects are importable and governed as observed projects until a kit exists."]},scala:{runtime:"scala",displayName:"Scala",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["Scala projects are importable and governed as observed projects until a kit exists."]},kotlin:{runtime:"kotlin",displayName:"Kotlin",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["Kotlin projects are importable and governed as observed projects until a kit exists."]},deno:{runtime:"deno",displayName:"Deno",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["Deno projects are importable and governed as observed projects until a kit exists."]},bun:{runtime:"bun",displayName:"Bun",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["init","dev","start","build","test","lint","format","help"],moduleCommands:false,doctorSupport:"observed",notes:["Bun projects are importable and governed as observed projects until a kit exists.","Declared package scripts execute through the Bun-aware npm wrapper; undeclared lifecycle commands remain unavailable."]},c:{runtime:"c",displayName:"C",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["C projects are importable and receive manifest, test, quality, security, and coverage evidence without assuming a package manager."]},cpp:{runtime:"cpp",displayName:"C++",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["C++ projects are importable and receive manifest, test, quality, security, and coverage evidence without assuming a package manager."]},unknown:{runtime:"unknown",displayName:"Unknown",tier:"observed",scaffoldSupport:false,importSupport:true,lifecycleCommands:["help"],moduleCommands:false,doctorSupport:"observed",notes:["Unknown projects are tracked safely but require manual command configuration."]}};function L(t){return ye[t||"unknown"]??ye.unknown}function be(t){return h$1(t).supportTier}function ke(t){let e=L(t.runtime);return {lifecycleCommands:e.lifecycleCommands,moduleCommands:t.moduleSupport&&e.moduleCommands,unsupportedLifecycleCommands:P.filter(n=>!e.lifecycleCommands.includes(n))}}var Ke=["python","node","bun","go","java","dotnet","rust","php"];function A(t){return !!t&&Ke.includes(t)}function U(t,e){return e!=="lint"&&e!=="format"&&e!=="docs"?false:t==="python"}function Ce(t){let e=L(t),n=A(e.runtime),r=Ge[e.runtime]??[],o=Ue[e.runtime]??[];return {runtime:e.runtime,displayName:e.displayName,lifecycleCommands:e.lifecycleCommands,hasExecutor:n,packageManagers:r,primaryFiles:o,notes:e.notes}}var Ge={python:["poetry","pip","uv"],node:["npm","pnpm","yarn","bun"],go:["go"],java:["maven","gradle"],dotnet:["dotnet"],php:["composer"],ruby:["bundle"],rust:["cargo"],elixir:["mix"],kotlin:["gradle"],deno:["deno"],bun:["bun"]},Ue={python:["pyproject.toml","requirements.txt","requirements.in"],node:["package.json"],go:["go.mod"],java:["pom.xml","build.gradle","build.gradle.kts"],dotnet:["*.csproj","*.sln"],php:["composer.json"],ruby:["Gemfile"],rust:["Cargo.toml"],elixir:["mix.exs"],kotlin:["settings.gradle.kts"],deno:["deno.json","deno.jsonc"],bun:["package.json","bunfig.toml",".bunfig.toml"]};function F(t,e){let n=j(t)?null:t,r=i({runtime:typeof n?.runtime=="string"?n.runtime:void 0,framework:typeof n?.framework=="string"?n.framework:void 0,kitName:typeof n?.kit_name=="string"?n.kit_name:typeof n?.kit=="string"?n.kit:void 0});return r.runtime!=="unknown"?r.runtime:m(e,n).runtime}function he(t,e={}){let n=t;for(;;){for(let o of u(n,"project.json"))if(f.existsSync(o))try{return JSON.parse(f.readFileSync(o,"utf8"))}catch{return null}if(e.searchParents===false)break;let r=u$1.dirname(n);if(r===n)break;n=r;}return null}function Xt(t,e){return F(t,e)==="go"}function Qt(t,e){return F(t,e)==="node"}function Zt(t,e){return F(t,e)==="java"}function en(t,e){return F(t,e)==="dotnet"}function tn(t,e){return F(t,e)==="python"}var Je=["project.json","context.json","file-hashes.json"];async function mn(t){let e=u$1.resolve(t),n=[];for(let r of Je){let o=v$1(e,r);if(await N.pathExists(o))continue;let i=u$1.join(e,".rapidkit",r);if(!await N.pathExists(i))continue;let p=await N.readJson(i);await N.ensureDir(u$1.dirname(o));let g=`${o}.${process.pid}.${Date.now()}.tmp`;try{await N.writeJson(g,p,{spaces:2}),await N.move(g,o,{overwrite:false}),n.push(o);}finally{await N.remove(g).catch(()=>{});}}return n}function qe(t){for(let e of u(t,"context.json"))if(f.existsSync(e))try{return JSON.parse(f.readFileSync(e,"utf8"))}catch{return null}return null}function Ye(t){let e=t?.engine;return e==="npm"||e==="pip"||e==="python"||e==="poetry"||e==="venv"||e==="pipx"||e==="uv"?e:"unknown"}function He(t,e){if(t?.module_support===false||e?.module_support===false||!t&&e)return false;let n=typeof t?.kit_name=="string"?t.kit_name:typeof t?.kit=="string"?t.kit:typeof e?.kit=="string"?e.kit:void 0,r=n?G(n):void 0;return r?.owner==="core"&&r.moduleSupport===true}function Ve(t,e,n){let r=j(e)?null:e,o=i({runtime:typeof r?.runtime=="string"?r.runtime:typeof n?.runtime=="string"?n.runtime:void 0,framework:typeof r?.framework=="string"?r.framework:typeof n?.framework=="string"?n.framework:void 0,kitName:typeof r?.kit_name=="string"?r.kit_name:typeof r?.kit=="string"?r.kit:typeof n?.kit=="string"?n.kit:void 0});return o.key!=="unknown"?o:m(t,r)}function je(t){let e=u$1.resolve(t);if(![...u(e,"project.json"),...u(e,"context.json")].some(p=>f.existsSync(p)))return null;let r=he(e),o=qe(e),i=Ve(e,r,o);return {projectRoot:e,projectJson:r,contextJson:o,detection:i,moduleSupport:He(r,o),engine:Ye(o)}}var ze=["build","dev","start","test","lint","format"],ee=["init","test","build","start"],gn=["lint","format","docs"];function yn(t){return !!t&&ze.includes(t)}var Xe={dev:["dev","start:dev","watch"],start:["start","start:prod","preview"],build:["build","compile"],test:["test","test:unit","test:ci"],lint:["lint","eslint"],format:["format","prettier"]},we={nestjs:{dev:["dev","start:dev"],start:["start","start:prod"],build:["build"],test:["test","test:e2e"],lint:["lint"],format:["format"]},express:{dev:["dev","start:dev"],start:["start"],build:["build"],test:["test"],lint:["lint"],format:["format"]},fastify:{dev:["dev","start:dev"],start:["start"],build:["build"],test:["test"],lint:["lint"],format:["format"]},koa:{dev:["dev","start:dev"],start:["start"],build:["build"],test:["test"],lint:["lint"],format:["format"]}};function Qe(t){let e=u$1.join(t,"package.json");if(!f.existsSync(e))return {};try{let r=JSON.parse(f.readFileSync(e,"utf8")).scripts??{};return Object.fromEntries(Object.entries(r).filter(o=>typeof o[1]=="string"))}catch{return {}}}function Ze(t,e){let n=e?c(e):"unknown",r=n!=="unknown"?a$1(n,t):[],o=e?we[e]?.[t]??[]:[],i=Xe[t]??[],p=[...r,...o,...i];return [...new Set(p)]}function Pe(t,e,n){let r=Qe(t),o=new Set(Object.keys(r));if(o.has(e))return {scriptName:e,source:"package.json"};for(let i of Ze(e,n?.framework))if(o.has(i))return {scriptName:i,source:a$1(c(n?.framework??"unknown"),e).includes(i)||we[n?.framework??""]?.[e]?.includes(i)?"framework-candidate":"generic-candidate"};return null}function ne(t){return f.existsSync(u$1.join(t,"package.json"))}function et(t){try{let e=JSON.parse(f.readFileSync(u$1.join(t,"package.json"),"utf8"));return typeof e.packageManager!="string"?null:e.packageManager.trim().match(/^(npm|pnpm|yarn|bun)(?:@|$)/)?.[1]??null}catch{return null}}function J(t){let e=et(t);return e||(f.existsSync(u$1.join(t,"bun.lock"))||f.existsSync(u$1.join(t,"bunfig.toml"))?"bun":f.existsSync(u$1.join(t,"pnpm-lock.yaml"))?"pnpm":f.existsSync(u$1.join(t,"yarn.lock"))?"yarn":f.existsSync(u$1.join(t,"package-lock.json"))?"npm":f.existsSync(u$1.join(t,"pnpm-workspace.yaml"))?"pnpm":"npm")}function vn(t,e,n=J(t)){return n==="npm"?`npm run ${e}`:`${n} run ${e}`}function Nn(t,e=J(t)){return `${e} install`}var tt="polyglot-lifecycle-plan.v1",Me=new Set([".git",".workspai",".rapidkit",".venv","bin","build","dist","node_modules","obj","target","third_party","vendor","fixture","fixtures","__fixtures__","testdata"]);function D(t,e){return u$1.relative(t,e).split(u$1.sep).join("/")||"."}function nt(t){let e=new Set,n=(r,o)=>{if(o>4)return;let i=[];try{i=f.readdirSync(r,{withFileTypes:true});}catch{return}for(let p of i){if(p.isDirectory()){Me.has(p.name)||n(u$1.join(r,p.name),o+1);continue}if(!p.isFile()||!p.name.endsWith(".go")||p.name.endsWith("_test.go"))continue;let g=u$1.join(r,p.name);try{let c=f.readFileSync(g,"utf8");/^\s*package\s+main\b/m.test(c)&&/^\s*func\s+main\s*\(/m.test(c)&&e.add(D(t,r));}catch{}}};return n(t,0),e.size===1?[...e][0]:null}function ve(t,e,n){let r=false;for(let o of t.split(/\r?\n/)){let i=o.match(/^\s*\[([^\]]+)\]\s*(?:#.*)?$/)?.[1]?.trim();if(i!==void 0){r=i===e;continue}if(r&&new RegExp(`^\\s*${n}\\s*=`).test(o))return true}return false}function rt(t,e){let n=[],r=(o,i)=>{if(i>e)return;let p=[];try{p=f.readdirSync(o,{withFileTypes:true});}catch{return}for(let g of p.sort((c,y)=>c.name.localeCompare(y.name))){let c=u$1.join(o,g.name);if(g.isDirectory()){Me.has(g.name)||r(c,i+1);continue}g.isFile()&&(["package.json","deno.json","deno.jsonc","pyproject.toml","go.mod","Cargo.toml","pom.xml","build.gradle","build.gradle.kts","build.sbt","deps.edn","composer.json","Gemfile","mix.exs","CMakeLists.txt","meson.build"].includes(g.name)||/\.(?:cs|fs|vb)proj$/i.test(g.name))&&n.push(c);}};return r(t,0),n}function ot(t,e){let n=D(t,e).toLowerCase().split("/"),r=n.findIndex(o=>["test","tests","spec","specs","e2e","integration","integration-tests","eval","evals","bench","benchmark","benchmarks","benchmark-app","benchmark-apps"].includes(o));return r<0?false:n.length-r>2}function it(t){if(u$1.basename(t)!=="package.json")return true;try{let e=u$1.dirname(t),n=JSON.parse(f.readFileSync(t,"utf8")),r=i=>{let p=n[i];return !!(p&&typeof p=="object"&&Object.keys(p).length>0)},o=n.scripts&&typeof n.scripts=="object"?n.scripts:{};return ["dependencies","devDependencies","optionalDependencies","peerDependencies"].some(r)||["preinstall","install","postinstall","prepare","init","test","build","start"].some(i=>typeof o[i]=="string")||["package-lock.json","pnpm-lock.yaml","yarn.lock","bun.lock","bun.lockb"].some(i=>f.existsSync(u$1.join(e,i)))||Ae(t).length>0||f.existsSync(u$1.join(e,"pnpm-workspace.yaml"))}catch{return true}}function st(t,e){let n=u$1.basename(e);return n!=="build.gradle"&&n!=="build.gradle.kts"||u$1.dirname(e)===t?false:f.existsSync(u$1.join(t,"settings.gradle"))||f.existsSync(u$1.join(t,"settings.gradle.kts"))}function at(t,e){if(u$1.basename(e)!=="CMakeLists.txt")return false;let n=u$1.dirname(e),r=u$1.dirname(n);for(;r.startsWith(`${t}${u$1.sep}`)||r===t;){let o=u$1.join(r,"CMakeLists.txt");if(f.existsSync(o))try{let i=f.readFileSync(o,"utf8");for(let p of i.matchAll(/add_subdirectory\s*\(\s*["']?([^\s)"']+)/giu)){let g=p[1];if(g&&u$1.resolve(r,g)===n)return true}}catch{}if(r===t)break;r=u$1.dirname(r);}return false}function Ne(t,e){let n=t.match(new RegExp(`^\\s*${e}\\s*=\\s*\\[([\\s\\S]*?)\\]`,"m"));return n?.[1]?[...n[1].matchAll(/["']([^"']+)["']/g)].map(r=>r[1]??""):[]}function Ae(t){try{let e=JSON.parse(f.readFileSync(t,"utf8"));if(Array.isArray(e.workspaces))return e.workspaces.filter(n=>typeof n=="string");if(e.workspaces&&typeof e.workspaces=="object"&&!Array.isArray(e.workspaces)){let n=e.workspaces.packages;return Array.isArray(n)?n.filter(r=>typeof r=="string"):[]}}catch{}return []}function ct(t){if(!f.existsSync(t))return [];try{let e=f.readFileSync(t,"utf8"),n=e.match(/^packages\s*:\s*\[([^\]]*)\]/m)?.[1];return n!==void 0?[...n.matchAll(/["']([^"']+)["']/g)].map(o=>o[1]??""):[...(e.match(/^packages\s*:\s*\n((?:^[ \t]+-.*\n?)*)/m)?.[1]??"").matchAll(/^[ \t]+-[ \t]+["']?([^"'#\n]+?)["']?[ \t]*$/gm)].map(o=>(o[1]??"").trim())}catch{return []}}function Re(t,e){let n=e.replace(/^\.\//,"").replace(/\/$/,""),r="^";for(let o=0;o<n.length;o+=1){let i=n[o]??"";i==="*"&&n[o+1]==="*"?(r+=".*",o+=1):i==="*"?r+="[^/]*":i==="?"?r+="[^/]":r+=i.replace(/[|\\{}()[\]^$+?.]/g,"\\$&");}return new RegExp(`${r}$`).test(t)}function lt(t,e){let n=D(t.root,e);return n==="."||n.startsWith("../")||!t.patterns.some(o=>!o.startsWith("!")&&Re(n,o))?false:!t.exclusions.some(o=>Re(n,o))}function ut(t){return t.filter(e=>u$1.basename(e)==="package.json").map(e=>{let n=u$1.dirname(e),r=[...Ae(e),...ct(u$1.join(n,"pnpm-workspace.yaml"))];return {root:n,patterns:r.filter(o=>!o.startsWith("!")),exclusions:r.filter(o=>o.startsWith("!")).map(o=>o.slice(1))}}).filter(e=>e.patterns.length>0)}function pt(t){return t.filter(e=>u$1.basename(e)==="Cargo.toml").map(e=>{try{let n=f.readFileSync(e,"utf8");return /^\s*\[workspace\]\s*$/m.test(n)?{root:u$1.dirname(e),patterns:Ne(n,"members"),exclusions:Ne(n,"exclude")}:null}catch{return null}}).filter(e=>!!e?.patterns.length)}function Ee(t,e,n){if(u$1.basename(t)!==n)return false;let r=u$1.dirname(t);return e.some(o=>o.root!==r&<(o,r))}function a(t,e,n="high"){return {stage:t,command:e,confidence:n,preflight:"executable-and-inputs"}}function mt(t,e){let n={};try{let i=JSON.parse(e);i.scripts&&typeof i.scripts=="object"&&!Array.isArray(i.scripts)&&(n=i.scripts);}catch{}let r=J(t),o=i=>`${r} run ${i}`;return [a("init",r==="yarn"?"yarn install":`${r} install`),...typeof n.test=="string"?[a("test",o("test"))]:[],...typeof n.build=="string"?[a("build",o("build"))]:[],...typeof n.start=="string"?[a("start",o("start"))]:[]]}function dt(t,e){let n=u$1.basename(e),r=u$1.dirname(e),o=D(t,r),i=D(t,e),p=i.toLowerCase().split("/"),g=p.some(l=>["example","examples","sample","samples","worked","eval","evals","bench","benchmark","benchmarks","benchmark-app","benchmark-apps"].includes(l))?"example":p.some(l=>["test","tests","e2e","integration","integration-tests"].includes(l))?"test":p.some(l=>["script","scripts","tool","tools","tooling"].includes(l))?"tooling":"production",c="";try{c=f.readFileSync(e,"utf8");}catch{return null}let y,b,k;if(n==="package.json"){let l=f.existsSync(u$1.join(r,"bun.lock"))||f.existsSync(u$1.join(r,"bun.lockb"))||f.existsSync(u$1.join(r,"bunfig.toml"))||f.existsSync(u$1.join(r,".bunfig.toml"));y=l?"bun":"node",b=l?"bun":"npm",k=mt(r,c);}else if(n==="deno.json"||n==="deno.jsonc"){y="deno",b="deno";let l={};try{let C=JSON.parse(c);C.tasks&&typeof C.tasks=="object"&&!Array.isArray(C.tasks)&&(l=C.tasks);}catch{}k=[...typeof l.test=="string"?[a("test","deno task test")]:[a("test","deno test","medium")],...typeof l.build=="string"?[a("build","deno task build")]:[],...typeof l.start=="string"?[a("start","deno task start")]:typeof l.dev=="string"?[a("start","deno task dev","medium")]:[]];}else if(n==="pyproject.toml"){y="python",b="python";let l=/^\s*\[tool\.poetry\]\s*$/m.test(c),C=ve(c,"tool.poetry.scripts","start")||ve(c,"project.scripts","start");k=[a("init",l?"poetry install":"python -m pip install -e ."),...f.existsSync(u$1.join(r,"tests"))||/\[tool\.pytest/i.test(c)?[a("test",l?"poetry run pytest":"python -m pytest")]:[],.../\[build-system\]/.test(c)?[a("build",l?"poetry build":"python -m build","medium")]:[],...C?[a("start",l?"poetry run start":"start","medium")]:[]];}else if(n==="go.mod"){y="go",b="go";let l=nt(r);k=[a("init","go mod download"),a("test","go test ./..."),a("build","go build ./..."),...l?[a("start",l==="."?"go run .":`go run ./${l}`)]:[]];}else if(n==="Cargo.toml")y="rust",b="cargo",k=[a("init","cargo fetch"),a("test","cargo test"),a("build","cargo build"),...f.existsSync(u$1.join(r,"src","main.rs"))?[a("start","cargo run")]:[]];else if(n==="pom.xml"){y="java",b="maven";let l=f.existsSync(u$1.join(r,"mvnw"))?"./mvnw":"mvn";k=[a("init",`${l} dependency:go-offline`),a("test",`${l} test`),a("build",`${l} package`)];}else if(n==="build.gradle"||n==="build.gradle.kts"){y=/(?:kotlin|org\.jetbrains\.kotlin)/i.test(c)?"kotlin":"java",b="gradle";let l=f.existsSync(u$1.join(r,"gradlew"))?"./gradlew":"gradle";k=[a("init",`${l} dependencies`),a("test",`${l} test`),a("build",`${l} build`)];}else if(n==="build.sbt")y="scala",b="sbt",k=[a("init","sbt update"),a("test","sbt test"),a("build","sbt compile")];else if(n==="deps.edn")y="clojure",b="clojure-cli",k=[a("init","clojure -P"),.../:test\b/.test(c)?[a("test","clojure -X:test","medium")]:[]];else if(/\.(?:cs|fs|vb)proj$/i.test(n)){y="dotnet",b="nuget";let l=g==="test"||/<IsTestProject>\s*true\s*<\/IsTestProject>/i.test(c)||/PackageReference\s+Include=["']Microsoft\.NET\.Test\.Sdk["']/i.test(c);k=[a("init",`dotnet restore ${n}`),...l?[a("test",`dotnet test ${n}`)]:[],a("build",`dotnet build ${n}`),...!l&&/<Project\s+Sdk=["']Microsoft\.NET\.Sdk\.Web["']/i.test(c)?[a("start",`dotnet run --project ${n}`)]:[]];}else if(n==="composer.json"){y="php",b="composer";let l={};try{let C=JSON.parse(c);C.scripts&&typeof C.scripts=="object"&&!Array.isArray(C.scripts)&&(l=C.scripts);}catch{}k=[a("init","composer install"),...typeof l.test<"u"?[a("test","composer test")]:f.existsSync(u$1.join(r,"vendor","bin","phpunit"))||f.existsSync(u$1.join(r,"phpunit.xml"))||f.existsSync(u$1.join(r,"phpunit.xml.dist"))?[a("test","vendor/bin/phpunit","medium")]:[],...typeof l.build<"u"?[a("build","composer build")]:[],...typeof l.start<"u"?[a("start","composer start")]:[]];}else if(n==="Gemfile"){y="ruby",b="bundler";let l=f.existsSync(u$1.join(r,"bin","rails")),C=l||/\bgem\s+['\"]rails['\"]/.test(c),I=f.existsSync(u$1.join(r,"spec"))||/\bgem\s+['\"]rspec(?:-rails)?['\"]/.test(c),H=f.existsSync(u$1.join(r,"test"));k=[a("init","bundle install"),...H&&C?[a("test","bundle exec rails test")]:I?[a("test","bundle exec rspec")]:f.existsSync(u$1.join(r,"Rakefile"))?[a("test","bundle exec rake test","medium")]:[],...l?[a("start","bundle exec rails server")]:[]];}else if(n==="mix.exs")y="elixir",b="mix",k=[a("init","mix deps.get"),a("test","mix test"),a("build","mix compile"),.../(?:phoenix|phx\.server)/i.test(c)?[a("start","mix phx.server")]:[]];else if(n==="CMakeLists.txt")y=/(?:\bcxx\b|\bcplusplus\b|\bc\+\+\b)/iu.test(c)?"cpp":"c",b="cmake",k=[a("init","cmake -S . -B build"),a("test","ctest --test-dir build --output-on-failure","medium"),a("build","cmake --build build")];else if(n==="meson.build")y=/(?:cpp|c\+\+)/iu.test(c)?"cpp":"c",b="meson",k=[a("init","meson setup build"),a("test","meson test -C build","medium"),a("build","meson compile -C build")];else return null;return {id:`${y}:${o}:${u$1.basename(i)}`,runtime:y,ecosystem:b,role:g,root:o,manifest:i,stages:k}}function _e(t,e={}){let n=u$1.resolve(t),r=rt(n,Math.max(0,Math.min(e.maxDepth??4,12))),o=ut(r),i=pt(r),p=r.filter(c=>!ot(n,c)).filter(c=>!st(n,c)).filter(c=>!at(n,c)).filter(c=>it(c)).filter(c=>!Ee(c,o,"package.json")).filter(c=>!Ee(c,i,"Cargo.toml")).map(c=>dt(n,c)).filter(c=>!!c).filter(c=>e.includeExamples===true||c.role!=="example").sort((c,y)=>c.runtime.localeCompare(y.runtime)||c.root.localeCompare(y.root)||c.manifest.localeCompare(y.manifest)),g=[...new Set(p.map(c=>c.runtime))].sort();return {schemaVersion:tt,projectRoot:".",polyglot:g.length>1,runtimes:g,units:p}}function Le(t){let e=Ce(t);return e.runtime==="unknown"&&t!=="unknown"?null:{runtime:e.runtime,displayName:e.displayName,supportedCommands:e.lifecycleCommands,packageManagers:e.packageManagers,primaryFiles:e.primaryFiles,notes:e.notes,hasExecutor:e.hasExecutor}}function re(t){try{let e=f.readFileSync(t,"utf8");return /^\s*package\s+main\b/m.test(e)&&/\bfunc\s+main\s*\(/m.test(e)}catch{return false}}function ie(t){let e=u$1.join(t,"main.go");if(re(e))return "./.";try{if(f.readdirSync(t,{withFileTypes:true}).filter(o=>o.isFile()&&o.name.endsWith(".go")).map(o=>u$1.join(t,o.name)).filter(re).length>0)return "./."}catch{}let n=u$1.join(t,"cmd");try{let r=f.readdirSync(n,{withFileTypes:true}).filter(o=>o.isDirectory()).map(o=>({name:o.name,mainPath:u$1.join(n,o.name,"main.go")})).filter(o=>re(o.mainPath)).map(o=>`./cmd/${o.name}`).sort();return r.length===1?r[0]:null}catch{return null}}function gt(t){try{let e=u$1.join(t,"Makefile");return f.existsSync(e)?f.readFileSync(e,"utf8"):""}catch{return ""}}function v(t,e){let n=gt(t);return n?new RegExp(`^${e}\\s*:`,"m").test(n):false}function d(t){try{return f.existsSync(t)}catch{return false}}function _(t){try{return d(t)?f.readFileSync(t,"utf8"):""}catch{return ""}}function yt(t){let e=[t];for(;e.length>0;){let n=e.shift();if(!n)break;let r=[];try{r=f.readdirSync(n,{withFileTypes:true});}catch{continue}for(let o of r){if(o.name==="node_modules"||o.name===".git"||o.name==="dist")continue;let i=u$1.join(n,o.name);if(o.isFile()&&o.name.endsWith(".csproj"))return true;o.isDirectory()&&e.push(i);}}return false}function De(t,e){let n=d(u$1.join(t,"pyproject.toml")),r=d(u$1.join(t,"requirements.txt"))||d(u$1.join(t,"requirements.in")),o=d(u$1.join(t,"manage.py"));switch(e){case "init":return n||r;case "dev":case "start":return n||o||r;case "test":return n||r||d(u$1.join(t,"tests"));case "build":return n||r;case "lint":case "format":return n||r||o||d(u$1.join(t,"setup.py"))||d(u$1.join(t,"setup.cfg"));default:return false}}function bt(t,e){if(!d(u$1.join(t,"go.mod")))return false;switch(e){case "init":return true;case "dev":return v(t,"run")||ie(t)!==null;case "test":return true;case "build":return true;case "start":return v(t,"run")||ie(t)!==null;case "lint":return d(u$1.join(t,".golangci.yml"))||d(u$1.join(t,".golangci.yaml"))||v(t,"lint");case "format":return true;default:return false}}function kt(t,e,n){let r=d(u$1.join(t,"pom.xml")),o=d(u$1.join(t,"build.gradle"))||d(u$1.join(t,"build.gradle.kts"));if(!r&&!o)return false;let i=_(u$1.join(t,"pom.xml")),p=[_(u$1.join(t,"build.gradle")),_(u$1.join(t,"build.gradle.kts"))].join(`
|
|
2
|
+
`),g=n==="springboot"||i.includes("spring-boot-maven-plugin")||/org\.springframework\.boot|id\s*\(?\s*['"]org\.springframework\.boot['"]/u.test(p),c=g||/<mainClass>\s*[^<]+\s*<\/mainClass>/iu.test(i)||/\bmainClass(?:Name)?\s*(?:=|\.)/u.test(p);switch(e){case "init":case "test":case "build":return true;case "dev":return g;case "start":return c;case "lint":return v(t,"lint")||i.includes("checkstyle")||i.includes("spotless-maven-plugin")||p.includes("checkstyle")||p.includes("spotless");case "format":return v(t,"format")||i.includes("spotless-maven-plugin")||p.includes("spotless");default:return false}}function Ct(t,e){if(!yt(t))return false;switch(e){case "init":case "dev":case "test":case "build":case "start":return true;case "lint":return v(t,"lint")||_(u$1.join(t,"Directory.Build.props")).includes("EnforceCodeStyleInBuild");case "format":return v(t,"format")||d(u$1.join(t,".editorconfig"));default:return false}}function Oe(t,e,n){return e==="init"?ne(t):Pe(t,e,{framework:n})!==null}function St(t,e,n){switch(e){case "php":return n==="init"&&d(u$1.join(t,"composer.json"));case "ruby":return n==="init"&&d(u$1.join(t,"Gemfile"));case "rust":return d(u$1.join(t,"Cargo.toml"))?n==="init"||n==="test"||n==="build"||n==="start":false;case "elixir":return n==="init"&&d(u$1.join(t,"mix.exs"));case "deno":return d(u$1.join(t,"deno.json"))||d(u$1.join(t,"deno.jsonc"))?n==="init"||n==="dev"||n==="test"||n==="start":n==="init"&&d(u$1.join(t,"package.json"));case "bun":return d(u$1.join(t,"bunfig.toml"))||d(u$1.join(t,".bunfig.toml"))||d(u$1.join(t,"bun.lock"))?n==="init"||n==="dev"||n==="test"||n==="build"||n==="start":n==="init"&&d(u$1.join(t,"package.json"));default:return false}}function ht(t){try{let e=JSON.parse(_(u$1.join(t,"composer.json")));return new Set(Object.keys(e.scripts??{}))}catch{return new Set}}function jt(t,e){if(!d(u$1.join(t,"composer.json")))return false;let n=ht(t),r=d(u$1.join(t,"artisan"));switch(e){case "init":return true;case "dev":return r||n.has("dev");case "start":return r||n.has("start");case "test":return r||n.has("test");case "build":return n.has("build");case "lint":return n.has("lint")||n.has("analyse")||n.has("analyze");case "format":return n.has("format")||n.has("fmt")||d(u$1.join(t,"pint.json"))||d(u$1.join(t,"vendor","bin","pint"));default:return false}}function xt(t,e){let n=u$1.join(t,"Cargo.toml");if(!d(n))return false;if(e==="dev"||e==="start"){let r=_(n);if(!/^\s*\[package\]\s*$/m.test(r))return false;let i=/^\s*\[\[bin\]\]\s*$/m.test(r),g=!/^\s*autobins\s*=\s*false\s*(?:#.*)?$/m.test(r)&&d(u$1.join(t,"src","main.rs"));return i||g}return e==="init"||e==="build"||e==="test"||e==="lint"||e==="format"}function Y(t,e,n,r){if(U(e,n))return De(t,n);if(!A(e))return St(t,e,n);switch(e){case "node":return Oe(t,n,r);case "bun":return Oe(t,n,r);case "python":return De(t,n);case "go":return bt(t,n);case "java":return kt(t,n,r);case "dotnet":return Ct(t,n);case "rust":return xt(t,n);case "php":return jt(t,n);default:return false}}function wt(t,e,n){return ["init","dev","start","build","test","lint","format"].filter(o=>Y(t,e,o,n))}function Te(t){let e=ke({runtime:t.runtime,moduleSupport:t.moduleSupport});if(!t.projectPath)return e;let n=wt(t.projectPath,t.runtime,t.framework),r=new Set(["help"]);for(let i of n)e.lifecycleCommands.includes(i)&&r.add(i);t.runtime==="node"&&ne(t.projectPath)&&r.add("init");let o=[...r].sort();return {lifecycleCommands:o,moduleCommands:e.moduleCommands,unsupportedLifecycleCommands:e.lifecycleCommands.filter(i=>!o.includes(i)).sort()}}var ce=["version","commands","doctor","project","help"],T=["init","dev","start","build","test","lint","format"],le=["add","modules","upgrade","diff","merge","reconcile","rollback","uninstall","checkpoint","snapshot","optimize"],ue=["create","list","info","frameworks","license"];ce.filter(t=>t!=="help");function vt(t){let e=u$1.resolve(t);for(;;){if([...u(e,"project.json"),...u(e,"context.json")].some(o=>f.existsSync(o)))return e;let r=u$1.dirname(e);if(r===e)break;e=r;}return null}function O(t,e){return {command:t,...e}}var Nt=new Set(["dev","lint","format"]),Rt=new Set(ee);function Et(t,e){return e?Rt.has(t)?{executionScope:"fleet",fleetEligible:true}:Nt.has(t)?{executionScope:"local-only",fleetEligible:false}:{executionScope:"local-only",fleetEligible:false}:{executionScope:"local-only",fleetEligible:false}}function Mt(t,e){return U(e.runtime,t)?"core":"runtime"}function At(t,e,n,r){return !t||!r.lifecycleCommands.includes(e)?false:Y(t,n.runtime,e,n.key)}function _t(t,e){let n=!!t&&(e.runtime==="python"||A(e.runtime)&&Y(t,e.runtime,"build",e.key));return O("docs",{owner:e.runtime==="python"?"core":"runtime",status:n?"supported":"unsupported",reason:n?e.runtime==="python"?"Documentation generation is delegated to Python Core for this project.":"Project documentation commands are available through the npm wrapper for this runtime.":"Documentation commands require a supported Python or npm-executor project manifest."})}function Lt(t){let e=u$1.resolve(t),n=vt(t);return n||(k(e).length>0?e:null)}function Ft(t=process.cwd()){let e=Lt(t),n=e?je(e):null,r=n?.detection??m(t,n?.projectJson??null),o=n?.moduleSupport??false,i=n?.engine??"unknown",p=Le(r.runtime),g=L(r.runtime),c=e?l(e):[],y=[r.runtime,...c.filter(s=>s!==r.runtime)].filter((s,S,B)=>s!=="unknown"&&B.indexOf(s)===S);y.length===0&&y.push("unknown");let b=y.filter(s=>s!=="unknown").length>1,k=Te({runtime:r.runtime,moduleSupport:o,projectPath:e??void 0,framework:r.key}),l$1={};for(let s of ce)l$1[s]=O(s,{owner:"npm",status:"supported",reason:s==="project"?"The npm CLI owns the project command surface and delegates only Core-specific detection operations.":s==="help"?"Help is available for every Workspai project through the npm CLI.":"Universal command available across Workspai project types."});for(let s of T){let S=At(e,s,r,k),B=Mt(s,r),V=Et(s,S);l$1[s]=O(s,{owner:B,status:S?"supported":"unsupported",executionScope:V.executionScope,fleetEligible:V.fleetEligible,reason:S?B==="core"?`Delegated to Python Core for ${r.displayName} projects.`:V.fleetEligible?`Handled by runtime adapter and eligible for workspace fleet stages (${s}).`:s==="dev"?"Local development command only; workspace fleet excludes dev by design.":r.runtime==="node"?`Handled by npm/pnpm/yarn via the resolved ${s} script in package.json.`:`Handled by the ${p?.displayName??r.displayName} runtime adapter for local project execution.`:e?r.runtime==="node"?`No ${s} script was found in package.json for this ${r.displayName} project.`:A(r.runtime)?`The ${r.displayName} runtime is tracked, but ${s} is not available from detected project manifests.`:`${r.displayName} is tracked as an observed runtime; ${s} requires project manifests or explicit scripts.`:"No Workspai project was detected."});}if(b)for(let s of T){let S=l$1[s];S&&(S.reason=`Composite runtime boundary detected (${y.join(", ")}). The project-local shortcut describes only the primary ${r.runtime} adapter; workspace fleet planning covers detected nested runtime units separately through \`workspace run <stage> --plan\`. ${S.reason??""}`.trim());}l$1.docs=_t(e,r);for(let s of le)l$1[s]=O(s,{owner:o?"core":"none",status:o?"supported":"unsupported",reason:o?"Core module/template command supported for this project.":`Core module/template commands are not available for ${r.displayName} projects.`});for(let s of ue)l$1[s]=O(s,{owner:s==="create"?"npm":"core",status:"global",reason:s==="create"?"Create is orchestrated by npm for multi-language workspace support.":"Engine catalog command; not specific to the selected project runtime."});let C=Object.values(l$1),I=C.filter(s=>T.includes(s.command)).filter(s=>s.status==="supported"),H=e?new Set(_e(e).units.flatMap(s=>s.stages.map(S=>S.stage))):new Set,Be=ee.filter(s=>I.some(S=>S.fleetEligible===true&&S.command===s)||H.has(s)),$e=I.filter(s=>s.executionScope==="local-only").map(s=>s.command).sort();return {schemaVersion:1,scope:"project",projectRoot:e,engine:i,runtime:r.runtime,runtimeCandidates:y,compositeRuntime:b,lifecycleCoverage:b?"primary-runtime-only":"complete",framework:r.key,frameworkDisplayName:r.displayName,frameworkConfidence:r.confidence,frameworkSupportTier:be(r.key),runtimeSupportTier:g.tier,runtimeDoctorSupport:g.doctorSupport,moduleSupport:o,fleetStages:Be,localOnlyCommands:$e,commandMap:l$1,supportedCommands:C.filter(s=>s.status==="supported").map(s=>s.command).sort(),unsupportedCommands:C.filter(s=>s.status==="unsupported").map(s=>s.command).sort(),globalCommands:C.filter(s=>s.status==="global").map(s=>s.command).sort()}}function kr(t,e=process.cwd()){let n=t[0];return n?Ft(e).commandMap[n]??null:null}function Cr(t){if(t[0]==="project"&&t[1]==="commands")return true;if(t[0]==="commands"&&t.includes("--scope")){let e=t.indexOf("--scope");return t[e+1]==="project"}return t.some(e=>e==="--scope=project")&&t[0]==="commands"}function Sr(t,e){return [`Workspai command not supported for this project: ${t.command}`,"",`Project: ${e.projectRoot??"not detected"}`,`Runtime: ${e.runtime}`,`Framework: ${e.frameworkDisplayName}`,`Reason: ${t.reason??"Unsupported for this project type."}`,"","Run `workspai project commands` to inspect supported commands for this project."].join(`
|
|
3
|
+
`)}export{Nn as A,_e as B,vt as C,Ft as D,kr as E,Cr as F,Sr as G,G as a,Dt as b,Ot as c,Tt as d,It as e,L as f,be as g,A as h,F as i,he as j,Xt as k,Qt as l,Zt as m,en as n,tn as o,mn as p,je as q,ze as r,gn as s,yn as t,Pe as u,ie as v,v as w,Te as x,J as y,vn as z};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import {a}from'./chunk-HCFOVANQ.js';import {m,h,i}from'./chunk-TGDXD4CD.js';import {B}from'./chunk-5EVBOUYW.js';import {a as a$1}from'./chunk-GR6442P7.js';import {d,c}from'./chunk-EWZZUQBR.js';import {p,t}from'./chunk-ODK4LCEL.js';import u from'path';import {createHash}from'crypto';import {createReadStream}from'fs';import {execFile}from'child_process';import {promisify}from'util';import _ from'fs-extra';import {parseAllDocuments}from'yaml';var Ts=p.knowledgeGraph;function Ms(e,t){if(e.source.kind!=="workspace-model")throw new Error(`Workspace knowledge graph is not bound to the canonical workspace model (source: ${e.source.kind}).`);if(e.source.artifact!==p.model)throw new Error(`Workspace knowledge graph source artifact is ${e.source.artifact}; expected ${p.model}.`);if(e.source.hashAlgorithm!=="sha256")throw new Error(`Workspace knowledge graph source hash algorithm is ${e.source.hashAlgorithm}; expected sha256.`);let s=d(t);if(e.source.hash!==s)throw new Error("Workspace knowledge graph is stale: its source hash does not match the canonical workspace model.");if(e.workspace.name!==t.workspace.name||(e.workspace.profile??void 0)!==(t.workspace.profile??void 0))throw new Error("Workspace knowledge graph identity does not match the canonical workspace model.");let o=m(t);if(!o)throw new Error("Canonical workspace model has no project topology for the workspace knowledge graph.");let i=n=>({...n,generatedAt:"<ignored>"});if(c(i(e.projectTopology))!==c(i(o)))throw new Error("Workspace knowledge graph project topology does not match the canonical workspace model.")}function Pt(e){return {path:e.path,...e.runtime!==void 0?{runtime:e.runtime}:{},...e.runtimeCandidates!==void 0?{runtimeCandidates:e.runtimeCandidates}:{},...e.framework!==void 0?{framework:e.framework}:{},...e.kit!==void 0?{kit:e.kit}:{},...e.kind!==void 0?{kind:e.kind}:{},...e.category!==void 0?{category:e.category}:{},...e.governance?{governanceCiStatus:e.governance.ci.status,governanceReleaseStatus:e.governance.release.status,governanceOwnershipStatus:e.governance.ownership.status,governanceProviders:[e.governance.ci.provider,e.governance.release.provider,e.governance.ownership.provider].filter(t=>!!t)}:{}}}var Nt=5e5,Kt=2e6;function be(e,t){if(e!==void 0&&Number.isFinite(e)&&e>0)return Math.floor(e);let s=process.env[t];if(!s)return;let o=Number.parseInt(s,10);return Number.isFinite(o)&&o>0?o:void 0}var $t=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"]),jt=new Set(["AGENTS.md","CLAUDE.md","GEMINI.md","QWEN.md"]),It=new Set([".workspai-workspace"]),Gt=[/(?:^|\/)\.agents\/skills\/workspai-[^/]+\//u,/(?:^|\/)\.amazonq\/rules\/workspai-[^/]+\.md$/u,/(?:^|\/)\.claude\/(?:rules|skills)\/(?:workspai-|rapidkit-)[^/]+(?:\/|$)/u,/(?:^|\/)\.cursor\/(?:rules|skills)\/(?:workspai-|rapidkit-)[^/]+(?:\/|$)/u,/(?:^|\/)\.grok\/(?:rules|skills)\/workspai-[^/]+(?:\/|$)/u,/(?:^|\/)\.github\/agents\/workspai-[^/]+\.agent\.md$/u,/(?:^|\/)\.github\/(?:instructions|prompts|skills)\/(?:workspai-|rapidkit-)[^/]+(?:\/|$)/u,/(?:^|\/)\.github\/copilot-instructions\.md$/u,/(?:^|\/)\.windsurf\/rules\/workspai-[^/]+\.md$/u,/(?:^|\/)\.windsurfrules$/u,/(?:^|\/)\.vscode\/(?:workspai|rapidkit)-agent-hooks\.json$/u];function Ne(e,t){let s=D(u.relative(e,t));return jt.has(u.posix.basename(s))||It.has(u.posix.basename(s))||Gt.some(o=>o.test(s))}var Dt=new Set(["test","tests","spec","specs","e2e","integration","integration-tests","integration_tests","__tests__","fixture","fixtures","__fixtures__","testdata"]),qt=new Set(["examples","samples","worked"]);function Ke(e,t){let s=u.relative(e,t).split(u.sep).map(i=>i.toLowerCase()),o=u.basename(t).toLowerCase();return s.some(i=>Dt.has(i))||/(?:\.test|\.spec|_test)\.[a-z0-9]+$/i.test(o)||/^test_.+\.[a-z0-9]+$/i.test(o)||/(?:tests?|specs?)\.(?:cs|fs|vb|java|kt|kts)$/i.test(o)}function Ge(e,t){return u.relative(e,t).split(u.sep).map(s=>s.toLowerCase()).some(s=>qt.has(s))}function ee(e,t){return Ke(e,t)||Ge(e,t)}function ue(e,t){return u.relative(e,t).split(u.sep).some(s=>s.toLowerCase()==="generated")}var Be=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"]),Zt=new Set([...Be,"go.work","go.work.sum"]),Ht=new Set(["get","put","post","delete","options","head","patch","trace"]),te=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"]),it=new Set([...te,".adb",".ads",".asm",".bash",".bat",".cl",".cob",".cu",".cuh",".erl",".f",".f03",".f08",".f77",".f90",".f95",".fish",".for",".gql",".graphql",".groovy",".hip",".hrl",".hs",".hlsl",".jl",".ll",".m",".metal",".mir",".mlir",".mm",".nim",".pas",".pl",".pm",".proto",".ps1",".s",".sh",".sol",".sql",".sv",".td",".thrift",".v",".vhd",".vhdl",".zig",".zsh"]);function J(e,t){let s=u.extname(e).toLowerCase();return s===".h"&&t==="cpp"?"cpp":{".c":"c",".adb":"ada",".ads":"ada",".asm":"assembly",".bash":"shell",".bat":"batch",".cc":"cpp",".cl":"opencl",".cob":"cobol",".cpp":"cpp",".cs":"csharp",".cu":"cuda",".cuh":"cuda",".dart":"dart",".erl":"erlang",".ex":"elixir",".exs":"elixir",".f":"fortran",".f03":"fortran",".f08":"fortran",".f77":"fortran",".f90":"fortran",".f95":"fortran",".fish":"shell",".for":"fortran",".gql":"graphql",".go":"go",".graphql":"graphql",".groovy":"groovy",".h":"c",".hip":"hip",".hpp":"cpp",".hrl":"erlang",".hs":"haskell",".hlsl":"hlsl",".java":"java",".jl":"julia",".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",".ll":"llvm-ir",".m":"objective-c",".metal":"metal",".mir":"llvm-mir",".mlir":"mlir",".mm":"objective-cpp",".nim":"nim",".pas":"pascal",".pl":"perl",".pm":"perl",".proto":"protobuf",".ps1":"powershell",".s":"assembly",".sh":"shell",".sol":"solidity",".sql":"sql",".sv":"systemverilog",".td":"tablegen",".thrift":"thrift",".v":"verilog",".vb":"visual-basic",".vhd":"vhdl",".vhdl":"vhdl",".zig":"zig",".zsh":"shell"}[s]??s.slice(1)}var Ut=new Set(["external","third_party","third-party","vendor","vendors","vendored"]),Jt=new Set(["app","apps","cli","cmd","core","extensions","internal","lib","packages","services","src"]);function rt(e,t){let o=D(u.relative(t,e)).split("/").filter(Boolean),i=o[0]?.toLowerCase()??"";return (o.some(l=>Ut.has(l.toLowerCase()))?1e3:0)+(Jt.has(i)?-100:0)+Math.min(o.length,20)}function Vt(e,t,s){if(e.length<=t)return [...e];let o=[...e].sort((c,r)=>rt(c,s)-rt(r,s)||c.localeCompare(r)),i=new Map;for(let c of o){let r=J(c),d=i.get(r)??[];d.push(c),i.set(r,d);}let n=new Set,l=Math.max(1,Math.min(25,Math.floor(t/Math.max(i.size,1))));for(let c of [...i.values()])for(let r of c.slice(0,l))n.add(r);for(let c of o){if(n.size>=t)break;n.add(c);}return [...n].sort((c,r)=>c.localeCompare(r))}function Yt(e,t){let s=D(u.relative(t,e)).split("/").filter(Boolean);if(s.length===0)return "<root>";let o=s[0].toLowerCase();return ["app","apps","cmd","components","crates","modules","packages","plugins","services"].includes(o)&&s[1]?`${o}/${s[1].toLowerCase()}`:o}function Pe(e,t,s){let o=[...new Set(e)].sort((d,a)=>d.localeCompare(a));if(o.length<=t)return o;let i=new Set,n=o.filter(d=>Zt.has(u.basename(d))).sort((d,a)=>D(u.relative(s,d)).split("/").length-D(u.relative(s,a)).split("/").length||d.localeCompare(a));for(let d of n){if(i.size>=t)break;i.add(d);}let l=new Map;for(let d of o){if(i.has(d))continue;let a=`${Yt(d,s)}\0${J(d)}`,p=l.get(a)??[];p.push(d),l.set(a,p);}let c=[...l.entries()].sort(([d],[a])=>d.localeCompare(a)),r=0;for(;i.size<t;){let d=false;for(let[,a]of c){let p=a[r];if(p&&(i.add(p),d=true,i.size>=t))break}if(!d)break;r+=1;}return [...i].sort((d,a)=>d.localeCompare(a))}function Qt(e){let t=Math.max(0,e.eligibleFiles),s=Math.min(25e3,Math.max(5e3,Math.ceil(t*.2))),o=Math.max(100,Math.min(e.deepOverride??s,Math.max(t,100),1e5)),i=Math.min(1e5,Math.max(25e3,o*4,Math.ceil(t*.6))),n=Math.max(o,Math.min(e.semanticOverride??i,Math.max(t,o),25e4)),l=Math.min(2e4,Math.max(2e3,Math.ceil(Math.min(t,o)*.25))),c=Math.max(100,Math.min(e.sourceOverride??l,o,5e4));return {semanticFileBudget:n,deepFileBudget:o,sourceExtractionFileBudget:c}}function Me(e,t,s){let o=[],i=e.split(/\r?\n/);for(let n=0;n<i.length&&o.length<s;n+=1)for(let l of t){let r=i[n].match(l.pattern)?.[1]?.trim();if(r){o.push({name:r,line:n+1,detail:l.detail});break}}return o}var Xt=[{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"}],Et=[{pattern:/^\s*import(?:.+?from\s*)?["']([^"']+)["']/,detail:"import"},{pattern:/require\(["']([^"']+)["']\)/,detail:"require"}],Ct=[{pattern:/^\s*from\s+([A-Za-z0-9_.]+)\s+import\s+/,detail:"import"},{pattern:/^\s*import\s+([A-Za-z0-9_.]+)(?:\s|$)/,detail:"import"}],eo=[{pattern:/^\s*#\s*include\s*["<]([^">]+)[">]/,detail:"include"}],to=[{pattern:/^\s*use\s+([A-Za-z0-9_:*.-]+)/,detail:"use"}],oo=[{pattern:/^\s*import\s+(?:static\s+)?([A-Za-z0-9_.*]+)\s*;?/,detail:"import"}],so=[{pattern:/^\s*(?:global\s+)?using\s+([A-Za-z0-9_.]+)/,detail:"using"}],io=[{pattern:/^\s*import\s+(?:[A-Za-z0-9_.]+\s+)?["']([^"']+)["']/,detail:"import"}],Rt=[{pattern:/^\s*require(?:_relative)?\s+["']([^"']+)["']/,detail:"require"}],ro=[{pattern:/^\s*use\s+([A-Za-z0-9_\\]+)/,detail:"use"}],no=[{pattern:/^\s*(?:alias|import|require|use)\s+([A-Za-z0-9_.]+)/,detail:"import"}],ao=[{pattern:/^\s*import\s+["']([^"']+)["']/,detail:"import"}],co=[{pattern:/\brequire\s*\(?\s*["']([^"']+)["']/,detail:"require"}],lo=[{pattern:/^\s*(?:library|require)\s*\(\s*["']?([^"')\s]+)["']?/,detail:"import"}],po=[...Et,...Ct,{pattern:/^\s*(?:import|using|use)\s+([A-Za-z0-9_:.*\\/.-]+)/,detail:"import"},...Rt];function uo(e){let t=u.extname(e).toLowerCase();return [".cjs",".cts",".js",".jsx",".mjs",".mts",".ts",".tsx",".vue",".svelte"].includes(t)?Et:t===".py"?Ct:[".c",".cc",".cpp",".h",".hpp"].includes(t)?eo:t===".rs"?to:[".java",".kt",".kts",".scala"].includes(t)?oo:[".cs",".fs",".fsx",".vb"].includes(t)?so:t===".go"?io:t===".rb"?Rt:t===".php"?ro:[".ex",".exs"].includes(t)?no:t===".dart"?ao:t===".lua"?co:t===".r"?lo:po}function fo(e,t,s,o,i){let n=u.extname(e).toLowerCase()===".py",l=[];if(n){let r=t.match(/^\.+/)?.[0].length??0,d=r>0?u.dirname(e):u.resolve(o??"");for(let p=1;p<r;p+=1)d=u.dirname(d);let a=t.slice(r).replace(/\./g,u.sep);l.push(a?u.join(d,a):d);}else if(t.startsWith("."))l.push(u.resolve(u.dirname(e),t));else if(i==="include")l.push(u.resolve(u.dirname(e),t)),o&&l.push(u.resolve(o,t));else return null;let c=new Set;for(let r of l){c.add(r);let d=u.extname(r).toLowerCase(),a=te.has(d);if(n&&(c.add(`${r}.py`),c.add(u.join(r,"__init__.py"))),a){let p=r.slice(0,-d.length);if([".js",".jsx",".mjs"].includes(d))for(let f of [".ts",".tsx",".js",".jsx",".mjs"])c.add(`${p}${f}`);}else for(let p of te)c.add(`${r}${p}`),c.add(u.join(r,`index${p}`));}return [...c].find(r=>s.has(u.resolve(r)))??null}function go(e,t){let s=t.trimStart(),o=u.extname(e).toLowerCase();return [".py",".rb",".sh",".bash",".zsh"].includes(o)?s.startsWith("#"):[".sql",".lua",".hs"].includes(o)?s.startsWith("--"):s.startsWith("//")||s.startsWith("/*")||s.startsWith("*")}function mo(e,t){if(u.extname(e).toLowerCase()!==".py")return t;let s=null;return t.split(/\r?\n/).map(o=>{let i=0,n="";for(;i<o.length;){if(s){let a=o.indexOf(s,i);if(a<0)return n;i=a+3,s=null;continue}let l=o.indexOf("'''",i),c=o.indexOf('"""',i),r=o.indexOf("#",i),d=l<0?c:c<0?l:Math.min(l,c);if(r>=0&&(d<0||r<d)){n+=o.slice(i,r);break}if(d<0){n+=o.slice(i);break}n+=o.slice(i,d),s=o.startsWith("'''",d)?"'''":'"""',i=d+3;}return n}).join(`
|
|
2
|
+
`)}function ho(e,t){if(![".js",".jsx",".mjs",".ts",".tsx"].includes(u.extname(e).toLowerCase()))return t;let s=false,o=false;return t.split(/\r?\n/).map(i=>{let n="",l=null,c=false;for(let r=0;r<i.length;r+=1){let d=i[r],a=i[r+1];if(s){n+=" ",d==="*"&&a==="/"&&(n+=" ",r+=1,s=false);continue}if(o){n+=" ",d==="`"&&!c&&(o=false),c=d==="\\"&&!c,d!=="\\"&&(c=false);continue}if(l){n+=d,d===l&&!c&&(l=null),c=d==="\\"&&!c,d!=="\\"&&(c=false);continue}if(d==="/"&&a==="/")return n.padEnd(i.length," ");if(d==="/"&&a==="*"){n+=" ",r+=1,s=true;continue}if(d==="`"){n+=" ",o=true,c=false;continue}(d==="'"||d==='"')&&(l=d),n+=d;}return n}).join(`
|
|
3
|
+
`)}function St(e,t){return ho(e,mo(e,t))}var ke=[{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"}],vo=[{pattern:/@Router\s+([^\s]+)\s+\[(?:get|post|put|delete|patch|options|head)\]/i,detail:"swagger route"},{pattern:/\b[A-Za-z_]\w*\.(?:GET|POST|PUT|DELETE|PATCH|OPTIONS|HEAD)\s*\(\s*["']([^"']+)["']/,detail:"go router route"}],yo=[{pattern:/\.route\s*\(\s*["']([^"']+)["']\s*,\s*(?:routing::)?(?:get|post|put|delete|patch|options|head)\s*\(/i,detail:"rust router route"}],bo=[{pattern:/\b[A-Za-z_]\w*\.Map(?:Get|Post|Put|Delete|Patch|Methods)\s*\(\s*["']([^"']+)["']/i,detail:"dotnet route"},{pattern:/\b[A-Za-z_]\w*\.MapHealthChecks\s*\(\s*["']([^"']+)["']/i,detail:"dotnet health route"}];function ko(e){let t=u.extname(e).toLowerCase();return t===".go"?[...ke,...vo]:t===".rs"?[...ke,...yo]:t===".cs"?[...ke,...bo]:ke}function wo(e,t){return t==="swagger route"?e.match(/\[(get|post|put|delete|patch|options|head)\]/i)?.[1]?.toUpperCase()??"HTTP":t==="rust router route"?e.match(/,\s*(?:routing::)?(get|post|put|delete|patch|options|head)\s*\(/i)?.[1]?.toUpperCase()??"HTTP":t==="dotnet health route"?"GET":t==="dotnet route"?e.match(/\.Map(Get|Post|Put|Delete|Patch|Methods)\s*\(/i)?.[1]?.toUpperCase()??"HTTP":e.match(/(?:@|\.|\[|^\s*)(get|post|put|delete|patch|options|head)/i)?.[1]?.toUpperCase()??"HTTP"}function $e(e){return createHash("sha256").update(e).digest("hex")}function C(e,t){return `wkg:${e}:${$e(`${e}\0${t}`).slice(0,20)}`}function D(e){return e.replace(/\\/g,"/")}function he(e){let t=D(e).replace(/^\.\//,"");return !t||t.startsWith("/")||/^[A-Za-z]:\//.test(t)||t.split("/").includes("..")?"unknown":t}function E(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 H(e){if(Array.isArray(e))return e.filter(s=>typeof s=="string").map(s=>s.trim()).filter(Boolean).sort();let t=E(e);return t?Object.keys(t).map(s=>s.trim()).filter(Boolean).sort():[]}function Po(e){if(Array.isArray(e))return e.map(s=>typeof s=="string"?s.split("=",1)[0]?.trim():"").filter(s=>!!s).sort();let t=E(e);return t?Object.keys(t).sort():[]}function $o(e){return Object.fromEntries(Object.entries(e).filter(t=>t[1]!==void 0).sort(([t],[s])=>t.localeCompare(s)))}async function jo(e,t,s=[]){let o=[],i=[e],n=s.map(r=>u.resolve(r)),l=r=>{let d=u.resolve(r);return n.some(a=>d===a||d.startsWith(`${a}${u.sep}`))},c=0;for(;c<i.length&&o.length<t;){let r=i[c++],d;try{d=await _.readdir(r,{withFileTypes:true});}catch{continue}d.sort((a,p)=>a.name.localeCompare(p.name));for(let a of d){if(o.length>=t)break;if(a.isSymbolicLink())continue;let p=u.join(r,a.name);l(p)||(a.isDirectory()?!$t.has(a.name)&&!a$1(a.name)&&i.push(p):a.isFile()&&(Ne(e,p)||o.push(p)));}}return o.sort((r,d)=>r.localeCompare(d))}async function De(e){return new Promise(t=>{let s=createHash("sha256"),o=createReadStream(e);o.on("data",i=>s.update(i)),o.on("error",i=>{t(`unreadable:${i.code??"unknown"}`);}),o.on("end",()=>t(s.digest("hex")));})}var Io=promisify(execFile);async function Z(e,t){let s=await Io("git",t,{cwd:e,encoding:"buffer",maxBuffer:268435456,windowsHide:true});return Buffer.isBuffer(s.stdout)?s.stdout:Buffer.from(s.stdout)}function qe(){return [".",...[...$t].sort((e,t)=>e.localeCompare(t)).map(e=>`:(exclude,glob)**/${e}/**`),...[...jt].sort((e,t)=>e.localeCompare(t)).map(e=>`:(exclude,glob)**/${e}`),...[...It].sort((e,t)=>e.localeCompare(t)).map(e=>`:(exclude,glob)**/${e}`),":(exclude,glob)**/.agents/skills/workspai-*/**",":(exclude,glob)**/.amazonq/rules/workspai-*.md",":(exclude,glob)**/.claude/rules/workspai-*.md",":(exclude,glob)**/.claude/rules/rapidkit-*.md",":(exclude,glob)**/.claude/skills/workspai-*/**",":(exclude,glob)**/.cursor/rules/workspai-*.*",":(exclude,glob)**/.cursor/rules/rapidkit-*.*",":(exclude,glob)**/.cursor/skills/workspai-*/**",":(exclude,glob)**/.grok/rules/workspai-*.md",":(exclude,glob)**/.grok/skills/workspai-*/**",":(exclude,glob)**/.github/agents/workspai-*.agent.md",":(exclude,glob)**/.github/copilot-instructions.md",":(exclude,glob)**/.github/instructions/workspai-*.md",":(exclude,glob)**/.github/instructions/rapidkit-*.md",":(exclude,glob)**/.github/prompts/workspai-*.md",":(exclude,glob)**/.github/prompts/rapidkit-*.md",":(exclude,glob)**/.github/skills/workspai-*/**",":(exclude,glob)**/.github/skills/rapidkit-*/**",":(exclude,glob)**/.windsurf/rules/workspai-*.md",":(exclude,glob)**/.windsurfrules",":(exclude,glob)**/.vscode/workspai-agent-hooks.json",":(exclude,glob)**/.vscode/rapidkit-agent-hooks.json"]}function Le(e){return e.toString("utf8").split("\0").filter(Boolean).map(t=>t.replace(/\\/gu,"/"))}async function Eo(e,t,s=[]){try{await Z(e,["rev-parse","--show-toplevel"]);let o=qe(),[i,n,l]=await Promise.all([Z(e,["ls-files","--stage","-z","--",...o]),Z(e,["ls-files","--deleted","-z","--",...o]),Z(e,["ls-files","--others","--exclude-standard","-z","--",...o])]),c=new Set(Le(n)),r=i.toString("utf8").split("\0").filter(Boolean).flatMap(v=>{let m=v.match(/^(\d{6}) [0-9a-f]+ \d\t([\s\S]+)$/u);if(!m)return [];let[,h,y]=m,b=y.replace(/\\/gu,"/");return h==="120000"||h==="160000"||c.has(b)?[]:[b]}),p=(await Ee([...new Set([...r,...Le(l)])],64,async v=>{let m=u.normalize(v);if(u.isAbsolute(m)||m===".."||m.startsWith(`..${u.sep}`))return null;let h=u.resolve(e,m);try{let y=await _.lstat(h);return y.isFile()&&!y.isSymbolicLink()?v:null}catch{return null}})).filter(v=>v!==null).map(v=>u.resolve(e,...v.split("/").filter(Boolean))).filter(v=>!Ne(e,v)).filter(v=>!s.some(m=>v===u.resolve(m)||v.startsWith(`${u.resolve(m)}${u.sep}`))).sort((v,m)=>v.localeCompare(m)),f=p.length>t;return {files:f?Pe(p,t,e):p,eligibleFileCount:p.length,eligibleFileCountExact:true,truncated:f,fileLimit:t,strategy:"git-index-worktree-v1"}}catch{return null}}async function ve(e,t,s=[]){let o=await Eo(e,t,s);if(o)return o;let i=await jo(e,t+1,s),n=i.length>t;return {files:n?Pe(i,t,e):i,eligibleFileCount:i.length,eligibleFileCountExact:!n,truncated:n,fileLimit:t,strategy:"filesystem-bfs-v1"}}async function Co(e){try{let t=(await Z(e.root,["rev-parse","--show-prefix"])).toString("utf8").trim().replace(/\\/gu,"/"),s=t?`${t.replace(/^\/+|\/+$/gu,"")}/`:"";if(u.posix.isAbsolute(s)||s==="../"||s.startsWith("../")||s.includes("/../"))return null;let o=qe(),[i,n,l,c,r,d]=await Promise.all([Z(e.root,["ls-files","--full-name","-s","--",...o]),Z(e.root,["diff","--no-ext-diff","--no-textconv","--binary","HEAD","--",...o]),Z(e.root,["ls-files","--full-name","--others","--exclude-standard","-z","--",...o]),Z(e.root,["ls-files","--full-name","--others","--ignored","--exclude-standard","-z","--",...o]),Z(e.root,["ls-files","-v","--",...o]),Z(e.root,["ls-files","--full-name","-s","--",...o])]);if(r.toString("utf8").split(/\r?\n/u).some(y=>/^[a-z] /u.test(y)))return null;let a=e.files.map(y=>{let b=D(u.relative(e.root,y));return `${s}${b}`});if(d.toString("utf8").split(/\r?\n/u).filter(y=>y.startsWith("160000 ")).map(y=>y.split(" ",2)[1]).filter(y=>!!y).map(y=>y.replace(/\\/gu,"/").replace(/\/$/u,"")).some(y=>a.some(b=>b.startsWith(`${y}/`))))return null;let f=new Set(a),v=Buffer.concat([l,c]).toString("utf8").split("\0").filter(Boolean).map(y=>y.replace(/\\/gu,"/")).filter(y=>f.has(y)),m=await Ee([...new Set(v)].sort((y,b)=>y.localeCompare(b)),16,async y=>{let b=s?y.slice(s.length):y;return {path:b,hash:await De(u.resolve(e.root,...b.split("/").filter(Boolean)))}}),h=createHash("sha256");h.update(`git-worktree-v2\0${e.kind}\0${e.id}\0${e.fileLimit}\0`),h.update(i),h.update(createHash("sha256").update(n).digest());for(let y of m)h.update(`${y.path}\0${y.hash}\0`);return {kind:e.kind,id:e.id,strategy:"git-worktree-v2",hash:h.digest("hex"),fileCount:e.files.length,fileLimit:e.fileLimit,truncated:e.files.length>=e.fileLimit}}catch{return null}}async function Ro(e){try{let t=(await Z(e.root,["rev-parse","--show-prefix"])).toString("utf8").trim().replace(/\\/gu,"/"),s=t?`${t.replace(/^\/+|\/+$/gu,"")}/`:"";if(u.posix.isAbsolute(s)||s==="../"||s.startsWith("../")||s.includes("/../"))return null;let o=qe(),[i,n,l,c]=await Promise.all([Z(e.root,["ls-files","--full-name","-s","--",...o]),Z(e.root,["diff","--no-ext-diff","--no-textconv","--binary","HEAD","--",...o]),Z(e.root,["ls-files","--full-name","--others","--exclude-standard","-z","--",...o]),Z(e.root,["ls-files","-v","--",...o])]);if(c.toString("utf8").split(/\r?\n/u).some(p=>/^[a-z] /u.test(p)))return null;let r=(e.excludedRoots??[]).map(p=>u.resolve(p)),d=(await Ee([...new Set(Le(l))].sort((p,f)=>p.localeCompare(f)),16,async p=>{if(s&&!p.startsWith(s))return null;let f=s?p.slice(s.length):p,v=u.normalize(f);if(!f||u.isAbsolute(v)||v===".."||v.startsWith(`..${u.sep}`))return null;let m=u.resolve(e.root,v);if(r.some(h=>m===h||m.startsWith(`${h}${u.sep}`))||Ne(e.root,m))return null;try{let h=await _.lstat(m);if(!h.isFile()||h.isSymbolicLink())return null}catch{return null}return {path:f,hash:await De(m)}})).filter(p=>p!==null),a=createHash("sha256");a.update(`git-worktree-v2\0${e.kind}\0${e.id}\0${e.fileLimit}\0`),a.update(i),a.update(createHash("sha256").update(n).digest());for(let p of d)a.update(`${p.path}\0${p.hash}\0`);return a.digest("hex")===e.expectedHash}catch{return null}}async function Ee(e,t,s){let o=new Array(e.length),i=0,n=Array.from({length:Math.min(t,Math.max(e.length,1))},async()=>{for(;i<e.length;){let l=i++;o[l]=await s(e[l]);}});return await Promise.all(n),o}async function We(e){let t=[...new Set(e.files)].sort((d,a)=>d.localeCompare(a)),s=e.eligibleFileCount??t.length,o=s>e.fileLimit||t.length>e.fileLimit,i=t.slice(0,e.fileLimit),n=await Co({...e,files:i}),l={eligibleFileCount:s,eligibleFileCountExact:e.eligibleFileCountExact??!o,inventoryMode:o?"emergency-bounded":"complete",...e.inventoryStrategy?{inventoryStrategy:e.inventoryStrategy}:{},...e.selection?{selection:e.selection}:{}};if(n)return {...n,fileCount:i.length,truncated:o,...l};let c=await Ee(i,16,async d=>({path:D(u.relative(e.root,d)),hash:await De(d)}));c.sort((d,a)=>d.path.localeCompare(a.path));let r=createHash("sha256");r.update(`content-merkle-v1\0${e.kind}\0${e.id}\0${e.fileLimit}\0`);for(let d of c)r.update(`${d.path}\0${d.hash}\0`);return {kind:e.kind,id:e.id,strategy:"content-merkle-v1",hash:r.digest("hex"),fileCount:c.length,fileLimit:e.fileLimit,truncated:o,...l}}async function So(e){let t=u.resolve(e.workspacePath),s=[...e.projects].sort((r,d)=>r.id.localeCompare(d.id)),o=s.map(r=>r.absolutePath?u.resolve(r.absolutePath):u.resolve(t,r.path)),i=e.inventories?.workspaceInventory??(e.inventories?.workspaceFiles?{files:[...e.inventories.workspaceFiles],eligibleFileCount:e.inventories.workspaceFiles.length,eligibleFileCountExact:e.inventories.workspaceFiles.length<=e.workspaceFileLimit,truncated:e.inventories.workspaceFiles.length>e.workspaceFileLimit,fileLimit:e.workspaceFileLimit,strategy:"filesystem-bfs-v1"}:await ve(t,e.workspaceFileLimit,o)),n=i.files.filter(r=>!o.some(d=>r===d||r.startsWith(`${d}${u.sep}`))),l={...i,files:n,eligibleFileCount:i.eligibleFileCountExact&&!i.truncated?n.length:i.eligibleFileCount},c=await Promise.all([We({kind:"workspace",id:"workspace",root:t,files:l.files,fileLimit:e.workspaceFileLimit,eligibleFileCount:l.eligibleFileCount,eligibleFileCountExact:l.eligibleFileCountExact,inventoryStrategy:l.strategy}),...s.map(async r=>{let d=r.absolutePath?u.resolve(r.absolutePath):u.resolve(t,r.path),a=e.inventories?.projectFiles?.get(r.id),p=e.inventories?.projectInventories?.get(r.id)??(a?{files:[...a],eligibleFileCount:a.length,eligibleFileCountExact:a.length<=e.projectFileLimit,strategy:"filesystem-bfs-v1"}:await ve(d,e.projectFileLimit)),f=e.inventories?.scanBudgetsByProject?.get(r.id);return We({kind:"project",id:r.id,root:d,files:p.files,fileLimit:e.projectFileLimit,eligibleFileCount:p.eligibleFileCount,eligibleFileCountExact:p.eligibleFileCountExact,inventoryStrategy:p.strategy,...f?{selection:{strategy:"component-language-round-robin-v1",semanticFileCount:Math.min(p.files.length,f.semanticFileBudget),semanticFileBudget:f.semanticFileBudget,deepFileCount:Math.min(p.files.length,f.deepFileBudget),deepFileBudget:f.deepFileBudget,sourceExtractionFileBudget:f.sourceExtractionFileBudget}}:{}})})]);return c.sort((r,d)=>r.kind.localeCompare(d.kind)||r.id.localeCompare(d.id)),At(c)}function At(e){let t=[...e].sort((o,i)=>o.kind.localeCompare(i.kind)||o.id.localeCompare(i.id)),s=createHash("sha256");s.update("workspace-knowledge-graph-inputs.v1\0hybrid-git-content-v2\0");for(let o of t)s.update(`${o.kind}\0${o.id}\0${o.hash}\0${o.fileCount}\0${o.fileLimit}\0${o.truncated}\0${o.eligibleFileCount??o.fileCount}\0${o.eligibleFileCountExact??!o.truncated}\0${o.inventoryMode??(o.truncated?"emergency-bounded":"complete")}\0${o.inventoryStrategy??"unknown"}\0${o.selection?c(o.selection):""}\0`);return {schemaVersion:"workspace-knowledge-graph-inputs.v1",strategy:"hybrid-git-content-v2",hashAlgorithm:"sha256",hash:s.digest("hex"),scopes:t}}async function Os(e){if(At(e.expected.scopes).hash!==e.expected.hash)return false;let t=u.resolve(e.workspacePath),s=[...e.projects].sort((n,l)=>n.id.localeCompare(l.id)),o=s.map(n=>n.absolutePath?u.resolve(n.absolutePath):u.resolve(t,n.path)),i=new Map(s.map(n=>[n.id,n]));for(let n of e.expected.scopes){let l=n.kind==="project"?i.get(n.id):void 0;if(n.kind==="project"&&!l)return false;let c$1=l?l.absolutePath?u.resolve(l.absolutePath):u.resolve(t,l.path):t;if(n.strategy==="git-worktree-v2"){let v=await Ro({kind:n.kind,id:n.id,root:c$1,fileLimit:n.fileLimit,expectedHash:n.hash,...n.kind==="workspace"?{excludedRoots:o}:{}});if(v!==null){if(!v)return false;continue}}let r=await ve(c$1,n.fileLimit,n.kind==="workspace"?o:[]),d=n.kind==="workspace"?r.files.filter(v=>!o.some(m=>v===m||v.startsWith(`${m}${u.sep}`))):r.files,a={...r,files:d,eligibleFileCount:r.eligibleFileCountExact&&!r.truncated?d.length:r.eligibleFileCount},p=n.selection?{strategy:"component-language-round-robin-v1",semanticFileCount:Math.min(a.files.length,n.selection.semanticFileBudget),semanticFileBudget:n.selection.semanticFileBudget,deepFileCount:Math.min(a.files.length,n.selection.deepFileBudget),deepFileBudget:n.selection.deepFileBudget,sourceExtractionFileBudget:n.selection.sourceExtractionFileBudget}:void 0,f=await We({kind:n.kind,id:n.id,root:c$1,files:a.files,fileLimit:n.fileLimit,eligibleFileCount:a.eligibleFileCount,eligibleFileCountExact:a.eligibleFileCountExact,inventoryStrategy:a.strategy,...p?{selection:p}:{}});if(c(f)!==c(n))return false}return true}async function ae(e){let t=await _.readFile(e,"utf8");if(e.toLowerCase().endsWith(".json")){let s=JSON.parse(t),o=E(s);return o?[o]:[]}return parseAllDocuments(t,{logLevel:"silent"}).map(s=>E(s.toJSON())).filter(s=>s!==null)}function fe(e){return [...new Set([...e.workspaceFiles,...e.projects.flatMap(t=>e.filesByProject.get(t.id)??[])])].sort((t,s)=>t.localeCompare(s))}function je(e){return /^(?:openapi|swagger)(?:\.[^.]+)?\.(?:json|ya?ml)$/i.test(u.basename(e))}function nt(e){let t=u.basename(e).toLowerCase();return /\.(?:graphql|gql|proto)$/.test(t)||/^asyncapi(?:\.[^.]+)?\.(?:json|ya?ml)$/.test(t)}function at(e){let t=u.basename(e),s=D(e);return !/(?:^|\/)\.devcontainer(?:\/|$)/i.test(s)&&/^Dockerfile(?:\..+)?$/i.test(t)||/\.tf$/i.test(t)||t==="Chart.yaml"}function ct(e){return /(?:^|[\\/])(?:README|ARCHITECTURE|CONTRIBUTING|SECURITY)\.md$/i.test(e)}function Ao(e,t){let s=D(u.relative(e,t));return /^\.github\/workflows\/.+\.ya?ml$/i.test(s)||/^(?:\.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(s)||/^\.circleci\/config\.ya?ml$/i.test(s)||/^\.buildkite\/pipeline\.ya?ml$/i.test(s)||/^\.tekton\/.+\.ya?ml$/i.test(s)||/^prow\/[^/]+\.(?:sh|py)$/i.test(s)}function dt(e,t){let s=D(u.relative(e,t));return /(?:^|\/)(?:adr|adrs|decisions)(?:\/).+\.md$/i.test(s)||/(?:^|\/)ADR[-_0-9].+\.md$/i.test(s)}async function lt(e){let t=new Set;for(let s of [e.workspacePath,...e.projects.map(o=>o.root)])for(let o of ["compose.yml","compose.yaml","docker-compose.yml","docker-compose.yaml"]){let i=u.join(s,o);await _.pathExists(i)&&t.add(i);}for(let s of fe(e))/^(?:docker-)?compose(?:\.[a-z0-9_-]+)*\.ya?ml$/i.test(u.basename(s))&&t.add(s);return [...t].sort((s,o)=>s.localeCompare(o))}async function pt(e){let s=[e.workspacePath,...e.projects.map(i=>i.root)].flatMap(i=>[u.join(i,"CODEOWNERS"),u.join(i,".github","CODEOWNERS"),u.join(i,".gitlab","CODEOWNERS"),u.join(i,"docs","CODEOWNERS")]);for(let i of fe(e))u.basename(i)==="OWNERS"&&s.push(i);let o=await Promise.all(s.map(async i=>await _.pathExists(i)?i:null));return [...new Set(o.filter(i=>!!i))].sort((i,n)=>i.localeCompare(n))}function ut(e){let t=[{root:e.workspacePath,files:e.workspaceFiles},...e.projects.map(s=>({root:s.root,files:e.filesByProject.get(s.id)??[]}))];return [...new Set(t.flatMap(s=>s.files.filter(o=>Ao(s.root,o))))].sort((s,o)=>s.localeCompare(o))}async function ft(e){let t=[];for(let s of fe(e))if(/\.ya?ml$/i.test(s))try{(await ae(s)).some(i=>{let n=E(i.metadata);return !!(P(i.apiVersion)&&P(i.kind)&&P(n?.name))})&&t.push(s);}catch{}return t.sort((s,o)=>s.localeCompare(o))}function ie(e,t){let s=u.resolve(t);return e.filter(o=>s===o.root||s.startsWith(`${o.root}${u.sep}`)).sort((o,i)=>i.root.length-o.root.length)[0]??null}var xe=class{constructor(t,s,o){this.workspacePath=t;this.now=s;this.workspaceName=o;}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,s){if(s){let o=D(u.relative(s.root,t));return he(u.posix.join(s.artifactPrefix,o))}return he(u.relative(this.workspacePath,t))}async addProof(t){let s;if(t.absolutePath){if(!this.contentHashes.has(t.absolutePath))try{this.contentHashes.set(t.absolutePath,$e(await _.readFile(t.absolutePath)));}catch{this.contentHashes.set(t.absolutePath,null);}s=this.contentHashes.get(t.absolutePath)??void 0;}let o=he(t.artifact),i=C("proof",[t.provider,o,t.pointer??"",t.line??"",t.detail??""].join("\0"));return this.proofs.has(i)||this.proofs.set(i,{id:i,provider:t.provider,artifact:o,...t.pointer?{pointer:t.pointer}:{},...t.line?{line:t.line}:{},...t.column?{column:t.column}:{},...s?{contentHash:s}:{},observedAt:this.now.toISOString(),derivation:t.derivation??"extracted",trust:t.trust??"observed",confidence:t.confidence??"high",freshness:"fresh",...t.detail?{detail:t.detail}:{}}),i}addEntity(t){let s=C(t.kind,t.key),o=$o(t.attributes??{}),i=this.entities.get(s),n=t.label.trim(),l=n||i?.label||t.key.trim()||t.kind;!n&&!this.emptyLabelDiagnostics.has(s)&&(this.emptyLabelDiagnostics.add(s),this.diagnostics.push({code:"graph.knowledge.empty_label_normalized",severity:"warning",message:`An empty ${t.kind} label was normalized to ${l}.`,entityIds:[s],recommendation:"Inspect the provider proof and preserve a non-empty source identifier before publishing the entity."}));let c={...i?.attributes??{}};for(let[a,p]of Object.entries(o)){if(a in c&&JSON.stringify(c[a])!==JSON.stringify(p)){if(t.mergeArrayAttributes?.includes(a)&&Array.isArray(c[a])&&Array.isArray(p)){c[a]=p;continue}let f=`${s}\0${a}`;this.attributeConflicts.has(f)||(this.attributeConflicts.add(f),this.diagnostics.push({code:"graph.knowledge.attribute_conflict",severity:"warning",message:`Conflicting ${a} values were observed for ${t.kind} ${l}.`,entityIds:[s],recommendation:"Inspect the entity proof paths and make the authoritative source explicit."}));continue}c[a]=p;}let r=[...new Set([...i?.identity.aliases??[],...t.aliases??[]].map(a=>a.trim()).filter(Boolean))].sort(),d=[...new Set([...i?.proofIds??[],...t.proofIds??[]])].sort();return this.entities.set(s,{id:s,kind:t.kind,label:l,...t.projectId?{projectId:t.projectId}:{},identity:{key:t.key,scope:t.projectId?"project":"workspace",aliases:r,fingerprint:$e(JSON.stringify({kind:t.kind,key:t.key,attributes:c}))},attributes:c,proofIds:d}),s}addRelation(t){let s=C("relation",`${t.from}\0${t.kind}\0${t.to}`),o=this.relations.get(s),i=[...new Set([...o?.proofIds??[],...t.proofIds])].sort(),n=new Set(i.map(r=>this.proofs.get(r)?.provider).filter(Boolean)).size,l=t.trust??o?.trust??"observed",c=n>=2&&l!=="ambiguous"?"corroborated":l;return this.relations.set(s,{id:s,from:t.from,to:t.to,kind:t.kind,derivation:t.derivation??o?.derivation??"extracted",trust:c,confidence:c==="corroborated"?"high":t.confidence??o?.confidence??"high",proofIds:i}),s}};function pe(e){let t=[],s=null;for(let o of e.split(/\r?\n/)){let i=o.match(/^\s*\[\[([^\]]+)\]\]\s*(?:#.*)?$/)?.[1]?.trim()??o.match(/^\s*\[([^\]]+)\]\s*(?:#.*)?$/)?.[1]?.trim();if(i){s&&t.push({name:s.name,body:s.lines.join(`
|
|
4
|
+
`)}),s={name:i,lines:[]};continue}s?.lines.push(o);}return s&&t.push({name:s.name,body:s.lines.join(`
|
|
5
|
+
`)}),t}function Fo(e){return [...e.matchAll(/["']([^"']+)["']/g)].map(t=>t[1])}function Ie(e,t){let s=t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),o=new RegExp(`^\\s*${s}\\s*=\\s*\\[`,"m").exec(e);if(!o)return [];let i=o.index+o[0].lastIndexOf("["),n=null,l=false;for(let c=i+1;c<e.length;c+=1){let r=e[c];if(n){r===n&&!l&&(n=null),l=r==="\\"&&!l,r!=="\\"&&(l=false);continue}if(r==="'"||r==='"'){n=r;continue}if(r==="]")return Fo(e.slice(i+1,c))}return []}function gt(e){return e.trim().match(/^([A-Za-z0-9][A-Za-z0-9_.-]*)/)?.[1]??""}function Ze(e){return e.replace(/\.(?:workspace|version|path|git|optional|features|default-features|package)$/,"")}function _o(e){let t=pe(e).find(({name:o})=>o==="workspace.package")?.body;if(!t)return {};let s=o=>{let i=o.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return t.match(new RegExp(`^\\s*${i}\\s*=\\s*["']([^"']+)["']`,"m"))?.[1]};return {edition:s("edition"),rustVersion:s("rust-version"),version:s("version")}}function we(e,t,s){let o=pe(e).find(({name:c})=>c==="package")?.body;if(!o)return s;let i=t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),n=o.match(new RegExp(`^\\s*${i}\\s*=\\s*["']([^"']+)["']`,"m"))?.[1];return n||(new RegExp(`^\\s*${i}(?:\\.workspace\\s*=\\s*true|\\s*=\\s*\\{[^}]*\\bworkspace\\s*=\\s*true[^}]*\\})`,"m").test(o)?s:void 0)}function To(e){let t=pe(e).find(({name:o})=>o==="toolchain")?.body;if(!t)return {components:[],targets:[]};let s=o=>{let i=o.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return t.match(new RegExp(`^\\s*${i}\\s*=\\s*["']([^"']+)["']`,"m"))?.[1]};return {channel:s("channel"),profile:s("profile"),components:Ie(t,"components").sort(),targets:Ie(t,"targets").sort()}}function Mo(e,t,s={}){let o=u.basename(e);try{if(o==="package.json"||o==="composer.json"){let c=JSON.parse(t);return {ecosystem:o==="package.json"?"npm":"composer",name:P(c.name),version:P(c.version),dependencies:[...H(c.dependencies),...H(c.devDependencies),...H(c.require),...H(c["require-dev"])].filter((r,d,a)=>a.indexOf(r)===d).sort(),metadata:o==="package.json"?{entrypoints:[P(c.main),P(c.module),P(c.types)].filter(r=>!!r),exports:E(c.exports)?Object.keys(E(c.exports)).sort():P(c.exports)?["."]:[],executables:E(c.bin)?Object.keys(E(c.bin)).sort():P(c.bin)?[P(c.name)??"default"]:[],runtimeConstraints:Object.entries(E(c.engines)??{}).map(([r,d])=>`${r}:${String(d)}`).sort()}:void 0}}if(o==="deno.json"||o==="deno.jsonc"){let c=JSON.parse(t.replace(/\/\*[\s\S]*?\*\/|^\s*\/\/.*$/gm,""));return {ecosystem:"deno",name:P(c.name),version:P(c.version),dependencies:H(c.imports)}}}catch{}let i=c=>t.match(c)?.[1]?.trim();if(o==="pyproject.toml"){let r=pe(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:a})=>d==="project"?Ie(a,"dependencies").map(gt):d==="project.optional-dependencies"||d==="dependency-groups"?[...a.matchAll(/^\s*(?:["']([^"']+)["']|([A-Za-z0-9_.-]+))\s*=\s*\[/gm)].flatMap(p=>Ie(a,p[1]??p[2])).map(gt):[...a.matchAll(/^\s*(?:["']([^"']+)["']|([A-Za-z0-9_.-]+))\s*=/gm)].map(p=>p[1]??p[2]).filter(p=>p!=="python"));return {ecosystem:"python",name:i(/^(?:name)\s*=\s*["']([^"']+)["']/m),version:i(/^(?:version)\s*=\s*["']([^"']+)["']/m),dependencies:r.filter(Boolean).filter((d,a,p)=>p.indexOf(d)===a).sort(),metadata:{requiresPython:i(/^requires-python\s*=\s*["']([^"']+)["']/m)??"unknown"}}}if(o==="go.mod")return {ecosystem:"go",name:i(/^module\s+(\S+)/m),dependencies:[...t.matchAll(/^\s*([A-Za-z0-9_.~/-]+)\s+v\d+/gm)].map(c=>c[1]).sort(),metadata:{goVersion:i(/^go\s+(\S+)/m)??"unknown"}};if(o==="Cargo.toml"){let c=pe(t).filter(({name:r})=>/(?:^|\.)(?:dev-|build-)?dependencies$/.test(r)).map(({body:r})=>r).join(`
|
|
6
|
+
`);return {ecosystem:"cargo",name:we(t,"name",void 0),version:we(t,"version",s.version),dependencies:[...c.matchAll(/^\s*(?:["']([^"']+)["']|([A-Za-z0-9_.-]+))\s*=/gm)].map(r=>r[1]??r[2]).map(Ze).filter((r,d,a)=>a.indexOf(r)===d).sort(),metadata:{edition:we(t,"edition",s.edition)??"unknown",rustVersion:we(t,"rust-version",s.rustVersion)??"unknown",features:pe(t).find(({name:r})=>r==="features")?.body.match(/^\s*([A-Za-z0-9_.-]+)\s*=/gm)?.map(r=>r.split("=",1)[0].trim()).sort()??[]}}}if(o==="pom.xml"){let c=[...t.matchAll(/<dependency>([\s\S]*?)<\/dependency>/g)].map(r=>{let d=r[1].match(/<groupId>([^<]+)<\/groupId>/)?.[1]?.trim(),a=r[1].match(/<artifactId>([^<]+)<\/artifactId>/)?.[1]?.trim();return d&&a?`${d}:${a}`:a}).filter(r=>!!r);return {ecosystem:"maven",name:i(/<artifactId>([^<]+)<\/artifactId>/),version:i(/<version>([^<]+)<\/version>/),dependencies:c.filter((r,d,a)=>a.indexOf(r)===d).sort(),metadata:{groupId:i(/<groupId>([^<]+)<\/groupId>/)??"unknown",packaging:i(/<packaging>([^<]+)<\/packaging>/)??"jar"}}}if(/\.(?:cs|fs|vb)proj$/i.test(o))return {ecosystem:"nuget",name:i(/<AssemblyName>([^<]+)<\/AssemblyName>/)??o.replace(/\.[^.]+$/,""),version:i(/<Version>([^<]+)<\/Version>/),dependencies:[...t.matchAll(/<PackageReference\s+Include=["']([^"']+)["']/g)].map(c=>c[1]).sort(),metadata:{targetFrameworks:(i(/<TargetFrameworks?>([^<]+)<\/TargetFrameworks?>/)??"unknown").split(";"),rootNamespace:i(/<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"},l=o==="requirements.txt"?t.split(/\r?\n/).map(c=>c.trim().match(/^([A-Za-z0-9_.-]+)/)?.[1]):o.startsWith("build.gradle")?[...t.matchAll(/(?:implementation|api|compileOnly|runtimeOnly|testImplementation)\s*\(?["']([^:"']+):([^:"']+)/g)].map(c=>`${c[1]}:${c[2]}`):o==="Gemfile"?[...t.matchAll(/^\s*gem\s+["']([^"']+)["']/gm)].map(c=>c[1]):o==="mix.exs"?[...t.matchAll(/\{:\s*([A-Za-z0-9_]+)\s*,/g)].map(c=>c[1]):o==="pubspec.yaml"?[...t.matchAll(/^\s{2}([A-Za-z0-9_]+):\s+/gm)].map(c=>c[1]):o==="Package.swift"?[...t.matchAll(/\.package\s*\(\s*url:\s*["']([^"']+)["']/g)].map(c=>c[1]):o==="CMakeLists.txt"?[...t.matchAll(/find_package\s*\(\s*([A-Za-z0-9_.+-]+)/gi)].map(c=>c[1]):o==="project.clj"||o==="deps.edn"?[...t.matchAll(/\[?([A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+)\s+/g)].map(c=>c[1]):o==="build.sbt"?[...t.matchAll(/["']([^"']+)["']\s*%%?\s*["']([^"']+)["']/g)].map(c=>`${c[1]}:${c[2]}`):[];return {ecosystem:n[o]??"unknown",dependencies:l.filter(c=>!!c).filter((c,r,d)=>d.indexOf(c)===r).sort()}}function Oo(e){let t=new Set,s=o=>{let i=o.replace(/\/\/.*$/u,"").trim().replace(/^["']|["']$/gu,"").replace(/\\/gu,"/");i&&i!=="("&&i!==")"&&t.add(i);};for(let o of e.matchAll(/^\s*use\s*\(([\s\S]*?)^\s*\)/gmu))for(let i of (o[1]??"").split(/\r?\n/u))s(i);for(let o of e.matchAll(/^\s*use\s+([^\s(][^\r\n]*)$/gmu))s(o[1]??"");return [...t].sort((o,i)=>o.localeCompare(i))}function mt(e,t){let s=e==="cargo"?Ze(t):t;return e==="cargo"?s.toLowerCase().replace(/[-_]/g,""):s.toLowerCase()}function Bo(e,t){let s=[...e.entities.values()].filter(i=>i.kind==="package"&&i.projectId===t),o=new Map;for(let i of s){let n=String(i.attributes.ecosystem??"unknown");for(let l of new Set([i.label,...i.identity.aliases])){let c=`${n}\0${mt(n,l)}`,r=o.get(c)??[];r.push(i),o.set(c,r);}}for(let i of s){let n=String(i.attributes.ecosystem??"unknown"),l=Array.isArray(i.attributes.dependencies)?i.attributes.dependencies.filter(c=>typeof c=="string"):[];for(let c of l){let r=`${n}\0${mt(n,c)}`,d=(o.get(r)??[]).filter(f=>f.id!==i.id);if(d.length!==1)continue;let a=d[0];e.addRelation({from:i.id,to:a.id,kind:"depends-on",trust:"authoritative",derivation:"authored",confidence:"high",proofIds:i.proofIds});let p=C("module",`dependency:${n}:${Ze(c)}`);e.relations.delete(C("relation",`${i.id}\0depends-on\0${p}`));}}for(let i of [...e.entities.values()]){if(i.kind!=="module"||i.projectId)continue;[...e.relations.values()].some(l=>l.from===i.id||l.to===i.id)||e.entities.delete(i.id);}}var Lo={id:"workspace-foundation",version:"1.0.0",scanTier:"complete-inventory",async run(e){let{state:t$1}=e,s=await t$1.addProof({provider:this.id,artifact:t.workspaceContract,absolutePath:u.join(e.workspacePath,".workspai","workspace.contract.json"),trust:"authoritative",derivation:"authored",detail:"Workspace identity and project registry boundary"}),o=t$1.addEntity({kind:"workspace",key:`workspace:${t$1.workspaceName}`,label:t$1.workspaceName,aliases:[t$1.workspaceName],proofIds:[s]});for(let i of e.projects){let n=e.filesByProject.get(i.id)??[],l=n.find(b=>/[\\/]\.(?:workspai|rapidkit)[\\/](?:project|context)\.json$/.test(b)),c=n.find(b=>Be.has(u.basename(b))),r=l??c,d=await t$1.addProof({provider:this.id,artifact:r?t$1.artifactPath(r,i):he(u.posix.join(i.artifactPrefix,".workspai/project.json")),...r?{absolutePath:r}:{},trust:l?"authoritative":"observed",derivation:l?"authored":"inferred",detail:`Project ${i.id}`}),a=t$1.addEntity({kind:"project",key:`project:${i.id}`,label:i.id,projectId:i.id,aliases:[i.id,i.path],attributes:Pt(i),proofIds:[d]});t$1.addRelation({from:o,to:a,kind:"contains",trust:"authoritative",derivation:"authored",proofIds:[d]});let p=new Set,f=[],v=n.find(b=>u.resolve(b)===u.resolve(i.root,"go.work")),m;if(v)try{let b=await _.readFile(v,"utf8"),w=Oo(b),R=t$1.artifactPath(v,i),k=await t$1.addProof({provider:this.id,artifact:R,absolutePath:v,pointer:"/use",trust:"authoritative",derivation:"authored",confidence:"high",detail:`Go workspace with ${w.length} member(s)`}),$=t$1.addEntity({kind:"module",key:`go-workspace:${i.id}:${R}`,label:`${i.id} Go workspace`,projectId:i.id,aliases:["go.work"],attributes:{ecosystem:"go",manifest:R,members:w},proofIds:[k]});t$1.addRelation({from:a,to:$,kind:"contains",trust:"authoritative",derivation:"authored",proofIds:[k]}),m={entityId:$,members:w,proofId:k};}catch{}let h={},y=n.find(b=>u.resolve(b)===u.resolve(i.root,"Cargo.toml"));if(y)try{h=_o(await _.readFile(y,"utf8"));}catch{}for(let b of n){let w=u.basename(b);if(/^(?:\.env\.example|\.env\.sample|\.env\.template)$/i.test(w))try{let k=await _.readFile(b,"utf8");for(let $ of k.split(/\r?\n/)){let S=$.match(/^\s*([A-Za-z_][A-Za-z0-9_]*)\s*=/)?.[1];S&&p.add(S);}}catch{}let R=Ke(i.root,b);if(R&&f.push(b),!(R||Ge(i.root,b))&&!(!Be.has(w)&&!/\.(?:cs|fs|vb)proj$/i.test(w)))try{let k=await _.readFile(b,"utf8"),$=Mo(b,k,h),S=t$1.artifactPath(b,i),I=await t$1.addProof({provider:this.id,artifact:S,absolutePath:b,pointer:"/",confidence:$.name?"high":"medium",detail:`${$.ecosystem} manifest`}),F=t$1.addEntity({kind:"package",key:`package:${i.id}:${$.ecosystem}:${$.name??"anonymous"}:${S}`,label:$.name??`${i.id}/${D(u.relative(i.root,b))}`,projectId:i.id,aliases:[w,...$.name?[$.name]:[]],attributes:{ecosystem:$.ecosystem,version:$.version,manifest:S,dependencies:$.dependencies,...$.metadata??{}},proofIds:[I]});t$1.addRelation({from:a,to:F,kind:"contains",proofIds:[I]});for(let O of $.dependencies.slice(0,500)){let T=t$1.addEntity({kind:"module",key:`dependency:${$.ecosystem}:${O}`,label:O,aliases:[O],attributes:{ecosystem:$.ecosystem,external:true},proofIds:[I]});t$1.addRelation({from:F,to:T,kind:"depends-on",trust:"authoritative",derivation:"authored",proofIds:[I]});}}catch{}}if(m){let b=[...t$1.entities.values()].filter(w=>w.kind==="package"&&w.projectId===i.id);for(let w of m.members){let R=t$1.artifactPath(u.join(i.root,w,"go.mod"),i),k=b.find($=>$.attributes.manifest===R);k&&t$1.addRelation({from:m.entityId,to:k.id,kind:"contains",trust:"authoritative",derivation:"authored",confidence:"high",proofIds:[...new Set([m.proofId,...k.proofIds])]});}}if(Bo(t$1,i.id),p.size>0){let b=n.find(w=>/^\.env\.(?:example|sample|template)$/i.test(u.basename(w)));if(b){let w=await t$1.addProof({provider:this.id,artifact:t$1.artifactPath(b,i),absolutePath:b,detail:"Public environment template keys only; values are intentionally excluded"}),R=t$1.addEntity({kind:"environment",key:`environment:${i.id}:template`,label:`${i.id} environment contract`,projectId:i.id,attributes:{keys:[...p].sort(),valuesEmitted:false},proofIds:[w]});t$1.addRelation({from:a,to:R,kind:"configured-by",proofIds:[w]});}}if(f.length>0){let b=await t$1.addProof({provider:this.id,artifact:t$1.artifactPath(f[0],i),absolutePath:f[0],detail:`${f.length} test file(s) discovered`}),w=t$1.addEntity({kind:"test-suite",key:`tests:${i.id}`,label:`${i.id} tests`,projectId:i.id,attributes:{fileCount:f.length},proofIds:[b]});t$1.addRelation({from:w,to:a,kind:"tests",proofIds:[b]});let R=new Map;for(let k of f){if(!te.has(u.extname(k).toLowerCase()))continue;let $=J(k,i.runtime),S=R.get($)??[];S.push(k),R.set($,S);}for(let[k,$]of [...R].sort(([S],[I])=>S.localeCompare(I))){let S=await t$1.addProof({provider:this.id,artifact:t$1.artifactPath($[0],i),absolutePath:$[0],detail:`${$.length} ${k} test source file(s) discovered`}),I=t$1.addEntity({kind:"test-suite",key:`tests:${i.id}:${k}`,label:`${i.id} ${k} tests`,projectId:i.id,attributes:{fileCount:$.length,language:k},proofIds:[S]});t$1.addRelation({from:I,to:a,kind:"tests",proofIds:[S]});}}}}};function Oe(e){return e.replace(/~/g,"~0").replace(/\//g,"~1")}function ht(e){if(Array.isArray(e))return e.length;let t=E(e);return t?Object.keys(t).length:0}var Wo={id:"vscode-extension-manifest",version:"1.2.0",scanTier:"complete-inventory",async applicable(e){for(let t of e.projects){let s=(e.filesByProject.get(t.id)??[]).filter(o=>u.basename(o).toLowerCase()==="package.json");for(let o of s)try{let i=E(await _.readJson(o));if(P(E(i?.engines)?.vscode)||E(i?.contributes))return true}catch{}}return false},async run(e){for(let t of e.projects){let s=(e.filesByProject.get(t.id)??[]).filter(o=>u.basename(o).toLowerCase()==="package.json").sort((o,i)=>o.localeCompare(i));for(let o of s){let i=null;try{i=E(await _.readJson(o));}catch{continue}let n=E(i?.contributes),l=P(E(i?.engines)?.vscode);if(!l&&!n)continue;let c=u.dirname(o),r=u.resolve(c)===u.resolve(t.root),d=u.relative(t.root,c).split(u.sep).join("/"),a=P(i?.name)??(d&&d!=="."?d:t.id),p=e.state.artifactPath(o,t),f=await e.state.addProof({provider:this.id,artifact:p,absolutePath:o,pointer:"/",trust:"authoritative",derivation:"authored",confidence:"high",detail:`VS Code extension manifest for ${a}`}),v=e.state.addEntity({kind:"project",key:`project:${t.id}`,label:t.id,projectId:t.id}),m=r?e.state.addEntity({kind:"project",key:`project:${t.id}`,label:t.id,projectId:t.id,attributes:{vscodeExtension:true,vscodeEngine:l,extensionEntry:P(i?.main)??P(i?.browser),extensionKind:H(i?.extensionKind),activationEvents:H(i?.activationEvents),contributionCounts:Object.entries(n??{}).map(([F,O])=>`${F}:${ht(O)}`).sort()},proofIds:[f]}):e.state.addEntity({kind:"package",key:`vscode-extension:${t.id}:${d}`,label:a,projectId:t.id,attributes:{surface:"vscode-extension",extensionPath:d,manifest:p,vscodeEngine:l,extensionEntry:P(i?.main)??P(i?.browser),extensionKind:H(i?.extensionKind),activationEvents:H(i?.activationEvents),contributionCounts:Object.entries(n??{}).map(([F,O])=>`${F}:${ht(O)}`).sort()},proofIds:[f]});r||e.state.addRelation({from:v,to:m,kind:"contains",trust:"authoritative",derivation:"authored",confidence:"high",proofIds:[f]});let h=Array.isArray(n?.commands)?n.commands:[],y=E(n?.menus),b=Object.values(y??{}).flatMap(F=>Array.isArray(F)?F:[]),w=Array.isArray(n?.keybindings)?n.keybindings:[];for(let[F,O]of h.entries()){let T=E(O),B=P(T?.command);if(!B)continue;let L=`/contributes/commands/${F}`,x=await e.state.addProof({provider:this.id,artifact:p,absolutePath:o,pointer:L,trust:"authoritative",derivation:"authored",confidence:"high",detail:`VS Code command ${B}`}),q=b.filter(N=>P(E(N)?.command)===B).length,K=w.filter(N=>P(E(N)?.command)===B).length,U=e.state.addEntity({kind:"api",key:`vscode-command:${t.id}:${B}`,label:B,projectId:t.id,aliases:[P(T?.title),P(T?.shortTitle)].filter(N=>!!N),attributes:{surface:"vscode-command",runtimeRegistrationRequired:false,title:P(T?.title),shortTitle:P(T?.shortTitle),category:P(T?.category),enablement:P(T?.enablement),icon:P(T?.icon),menuCount:q,keybindingCount:K,manifest:p,pointer:L},proofIds:[x]});e.state.addRelation({from:m,to:U,kind:"exposes",trust:"authoritative",derivation:"authored",confidence:"high",proofIds:[x]});}let R=E(n?.viewsContainers),k=new Map;for(let[F,O]of Object.entries(R??{}))if(Array.isArray(O))for(let[T,B]of O.entries()){let L=E(B),x=P(L?.id);if(!x)continue;let q=`/contributes/viewsContainers/${Oe(F)}/${T}`,K=await e.state.addProof({provider:this.id,artifact:p,absolutePath:o,pointer:q,trust:"authoritative",derivation:"authored",detail:`VS Code view container ${x}`}),U=e.state.addEntity({kind:"service",key:`vscode-view-container:${t.id}:${x}`,label:x,projectId:t.id,aliases:[P(L?.title)].filter(N=>!!N),attributes:{surface:"vscode-view-container",title:P(L?.title),location:F,icon:P(L?.icon),manifest:p,pointer:q},proofIds:[K]});k.set(x,U),e.state.addRelation({from:m,to:U,kind:"contains",trust:"authoritative",derivation:"authored",proofIds:[K]});}let $=E(n?.views);for(let[F,O]of Object.entries($??{}))if(Array.isArray(O))for(let[T,B]of O.entries()){let L=E(B),x=P(L?.id);if(!x)continue;let q=`/contributes/views/${Oe(F)}/${T}`,K=await e.state.addProof({provider:this.id,artifact:p,absolutePath:o,pointer:q,trust:"authoritative",derivation:"authored",detail:`VS Code view ${x}`}),U=e.state.addEntity({kind:"service",key:`vscode-view:${t.id}:${x}`,label:x,projectId:t.id,aliases:[P(L?.name),P(L?.contextualTitle)].filter(N=>!!N),attributes:{surface:L?.type==="webview"?"vscode-webview":"vscode-view",name:P(L?.name),contextualTitle:P(L?.contextualTitle),containerId:F,viewType:P(L?.type)??"tree",manifest:p,pointer:q},proofIds:[K]});e.state.addRelation({from:k.get(F)??m,to:U,kind:"contains",trust:"authoritative",derivation:"authored",proofIds:[K]});}let S=Array.isArray(n?.configuration)?n.configuration:n?.configuration?[n.configuration]:[];for(let[F,O]of S.entries()){let T=E(O),B=E(T?.properties);for(let[L,x]of Object.entries(B??{})){let q=E(x),U=`${Array.isArray(n?.configuration)?`/contributes/configuration/${F}`:"/contributes/configuration"}/properties/${Oe(L)}`,N=await e.state.addProof({provider:this.id,artifact:p,absolutePath:o,pointer:U,trust:"authoritative",derivation:"authored",detail:`VS Code configuration ${L}`}),ge=e.state.addEntity({kind:"schema",key:`vscode-configuration:${t.id}:${L}`,label:L,projectId:t.id,attributes:{surface:"vscode-configuration",title:P(T?.title),type:P(q?.type),scope:P(q?.scope),description:P(q?.description)??P(q?.markdownDescription),manifest:p,pointer:U},proofIds:[N]});e.state.addRelation({from:m,to:ge,kind:"configured-by",trust:"authoritative",derivation:"authored",proofIds:[N]});}}let I=Array.isArray(n?.chatParticipants)?n.chatParticipants:[];for(let[F,O]of I.entries()){let T=E(O),B=P(T?.id);if(!B)continue;let L=`/contributes/chatParticipants/${F}`,x=await e.state.addProof({provider:this.id,artifact:p,absolutePath:o,pointer:L,trust:"authoritative",derivation:"authored",detail:`VS Code chat participant ${B}`}),q=e.state.addEntity({kind:"api",key:`vscode-chat-participant:${t.id}:${B}`,label:B,projectId:t.id,aliases:[P(T?.name),P(T?.fullName)].filter(K=>!!K),attributes:{surface:"vscode-chat-participant",runtimeRegistrationRequired:false,name:P(T?.name),fullName:P(T?.fullName),description:P(T?.description),manifest:p,pointer:L},proofIds:[x]});e.state.addRelation({from:m,to:q,kind:"exposes",trust:"authoritative",derivation:"authored",proofIds:[x]});}}}}};function vt(e,t){let s=[],o=false;for(let i of e.split(/\r?\n/)){let n=i.match(/^\s*\[([^\]]+)\]\s*(?:#.*)?$/)?.[1]?.trim();if(n){o=n===t;continue}if(!o||/^\s*(?:#|$)/.test(i))continue;let l=i.match(/^\s*(?:"([^"]+)"|'([^']+)'|([A-Za-z0-9_.-]+))\s*=\s*["']([^"']+)["']/),c=l?.[1]??l?.[2]??l?.[3],r=l?.[4];c&&r&&s.push([c,r]);}return s}var xo={id:"python-project-manifest",version:"1.1.0",scanTier:"complete-inventory",async applicable(e){for(let t of e.projects){let s=(e.filesByProject.get(t.id)??[]).find(o=>u.dirname(o)===t.root&&u.basename(o).toLowerCase()==="pyproject.toml");if(s)try{if(vt(await _.readFile(s,"utf8"),"project.scripts").length>0)return true}catch{}}return false},async run(e){for(let t of e.projects){let s=(e.filesByProject.get(t.id)??[]).find(r=>u.dirname(r)===t.root&&u.basename(r).toLowerCase()==="pyproject.toml");if(!s)continue;let o=await _.readFile(s,"utf8"),i=vt(o,"project.scripts"),n=e.state.artifactPath(s,t),l=await e.state.addProof({provider:this.id,artifact:n,absolutePath:s,pointer:"/project",trust:"authoritative",derivation:"authored",detail:"Python project manifest"}),c=e.state.addEntity({kind:"project",key:`project:${t.id}`,label:t.id,projectId:t.id,attributes:{pythonProject:true,requiresPython:o.match(/^requires-python\s*=\s*["']([^"']+)["']/m)?.[1],buildBackend:o.match(/^build-backend\s*=\s*["']([^"']+)["']/m)?.[1],consoleScriptCount:i.length},proofIds:[l]});for(let[r,d]of i){let a=`/project/scripts/${r}`,p=await e.state.addProof({provider:this.id,artifact:n,absolutePath:s,pointer:a,trust:"authoritative",derivation:"authored",detail:`Python console script ${r}`}),f=e.state.addEntity({kind:"api",key:`python-console-script:${t.id}:${r}`,label:r,projectId:t.id,aliases:[d],attributes:{surface:"python-console-script",runtimeRegistrationRequired:false,entrypoint:d,manifest:n,pointer:a},proofIds:[p]});e.state.addRelation({from:c,to:f,kind:"exposes",trust:"authoritative",derivation:"authored",proofIds:[p]});}}}},zo={id:"source-language-inventory",version:"1.2.0",scanTier:"complete-inventory",applicable(e){return e.projects.some(t=>(e.filesByProject.get(t.id)??[]).some(s=>it.has(u.extname(s).toLowerCase())))},async run(e){for(let t of e.projects){let s=e.filesByProject.get(t.id)??[],o=e.inventoryByProject.get(t.id),i=(e.filesByProject.get(t.id)??[]).find(a=>/^rust-toolchain(?:\.toml)?$/i.test(u.basename(a))),n,l;if(i)try{n=To(await _.readFile(i,"utf8")),l=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 c=s.filter(a=>it.has(u.extname(a).toLowerCase())),r=new Map;for(let a of c){let p=J(a,t.runtime),f=r.get(p)??{files:[],production:[],tests:[],examples:[],generated:[],extensions:new Set};f.files.push(a),f.extensions.add(u.extname(a).toLowerCase()),ue(t.root,a)&&f.generated.push(a),Ke(t.root,a)?f.tests.push(a):Ge(t.root,a)?f.examples.push(a):f.production.push(a),r.set(p,f);}let d=C("project",`project:${t.id}`);for(let[a,p]of [...r].sort(([f],[v])=>f.localeCompare(v))){let f=[p.production[0],p.tests[0],p.examples[0],p.generated[0],p.files[0]].filter((b,w,R)=>!!b&&R.indexOf(b)===w),v=await Promise.all(f.map(b=>e.state.addProof({provider:this.id,artifact:e.state.artifactPath(b,t),absolutePath:b,derivation:"extracted",trust:"observed",confidence:"high",detail:`${a} source-language inventory evidence`}))),m=[...p.production.length>0?["production"]:[],...p.tests.length>0?["test"]:[],...p.examples.length>0?["example"]:[],...p.generated.length>0?["generated"]:[]],h=a==="rust"&&l?[...v,l]:v,y=e.state.addEntity({kind:"language",key:`language:${t.id}:${a}`,label:`${t.id} programming language: ${a}`,projectId:t.id,aliases:[a,`${a} source`,`${a} programming language`,"programming languages actually used"],attributes:{language:a,usage:"source-build-test",roles:m,fileCount:p.files.length,productionFileCount:p.production.length,testFileCount:p.tests.length,exampleFileCount:p.examples.length,generatedFileCount:p.generated.length,extensions:[...p.extensions].sort(),inventoryTruncated:o?.truncated??false,...a==="rust"&&n?{toolchainChannel:n.channel,toolchainProfile:n.profile,toolchainComponents:n.components,toolchainTargets:n.targets}:{}},proofIds:h});e.state.addRelation({from:d,to:y,kind:"uses-language",derivation:"extracted",trust:"observed",confidence:o?.truncated?"medium":"high",proofIds:h});}o?.truncated&&e.state.diagnostics.push({code:"graph.provider.source_language_inventory.limit_reached",severity:"warning",message:`Language inventory for ${t.id} reached the ${o.fileLimit}-file emergency bound. Counts are lower bounds.`,recommendation:"Increase inventoryFileLimitPerProject or split the repository into explicit project boundaries before treating language counts as complete."});}}},No={id:"source-structure",version:"1.2.0",scanTier:"adaptive-deep",applicable(e){return e.projects.some(t=>(e.filesByProject.get(t.id)??[]).some(s=>te.has(u.extname(s).toLowerCase())&&!ee(t.root,s)))},async run(e){for(let t of e.projects){let s=(e.deepFilesByProject.get(t.id)??[]).filter(f=>!ee(t.root,f)),o=e.filesByProject.get(t.id)??s,i=e.scanBudgetsByProject.get(t.id)?.sourceExtractionFileBudget??2e3,n=Math.min(1e5,Math.max(1e4,i*10)),l=o.filter(f=>te.has(u.extname(f).toLowerCase())&&!ee(t.root,f)),c=Vt(l,i,t.root),r=new Set(o.filter(f=>!ee(t.root,f)).map(f=>u.resolve(f))),d=new Map;await Promise.all(s.map(async f=>{try{let v=await _.stat(f);if(v.isFile()&&v.size<=2*1024*1024){let m=u.resolve(f);r.add(m),d.set(m,v.size);}}catch{}}));let a=0,p=0;for(let f of c){let v;try{if((await _.stat(f)).size>2*1024*1024)continue;v=await _.readFile(f,"utf8");}catch{continue}let m=St(f,v),h=e.state.artifactPath(f,t),y=await e.state.addProof({provider:this.id,artifact:h,absolutePath:f,derivation:"extracted",trust:"observed",confidence:"high",detail:`${J(f,t.runtime)} source file`}),b=e.state.addEntity({kind:"file",key:`file:${t.id}:${h}`,label:h,projectId:t.id,aliases:[u.basename(f)],attributes:{artifact:h,language:J(f,t.runtime),bytes:Buffer.byteLength(v),...ue(t.root,f)?{generated:true}:{}},proofIds:[y]});e.state.addRelation({from:C("project",`project:${t.id}`),to:b,kind:"contains",proofIds:[y]});let w=Me(m,uo(f),250);for(let k of w){let $=await e.state.addProof({provider:this.id,artifact:h,absolutePath:f,line:k.line,derivation:"extracted",trust:"observed",confidence:"medium",detail:`${k.detail}: ${k.name}`}),S=fo(f,k.name,r,t.root,k.detail);if(S){let I=e.state.artifactPath(S,t),F=C("file",`file:${t.id}:${I}`);if(!e.state.entities.has(F)){let O=await _.stat(S).catch(()=>null),T=await e.state.addProof({provider:this.id,artifact:I,...O?.isFile()&&O.size<=2*1024*1024?{absolutePath:S}:{},derivation:"extracted",trust:"observed",confidence:"high",detail:"Locally imported artifact resolved from the project inventory"}),B=e.state.addEntity({kind:"file",key:`file:${t.id}:${I}`,label:I,projectId:t.id,aliases:[u.basename(S)],attributes:{artifact:I,language:J(S,t.runtime),bytes:d.get(u.resolve(S))??(O?.isFile()?O.size:void 0)},proofIds:[T]});e.state.addRelation({from:C("project",`project:${t.id}`),to:B,kind:"contains",proofIds:[T]});}e.state.addRelation({from:b,to:F,kind:"imports",confidence:"high",proofIds:[$]});}else {let I=k.name.startsWith(".");I&&(p+=1);let F=J(f,t.runtime),O=!I&&(F==="javascript"||F==="typescript")?k.name.startsWith("@")?k.name.split("/").slice(0,2).join("/"):k.name.split("/")[0]:null,T=O?C("module",`dependency:npm:${O}`):null,B=T?e.state.entities.get(T):void 0,L=B?e.state.addEntity({kind:"module",key:B.identity.key,label:B.label,aliases:[...B.identity.aliases,k.name],attributes:B.attributes,proofIds:[...B.proofIds,$]}):e.state.addEntity({kind:"module",key:`module:${t.id}:${k.name}`,label:k.name,projectId:t.id,aliases:[k.name],attributes:{specifier:k.name,resolution:I?"unresolved-local":"external"},proofIds:[$]});e.state.addRelation({from:b,to:L,kind:"imports",confidence:I?"low":"medium",proofIds:[$]});}}if(a<n){let k=Me(m,Xt,Math.min(100,n-a));a+=k.length;for(let $ of k){let S=await e.state.addProof({provider:this.id,artifact:h,absolutePath:f,line:$.line,derivation:"extracted",trust:"observed",confidence:"medium",detail:`${$.detail}: ${$.name}`}),I=e.state.addEntity({kind:"symbol",key:`symbol:${t.id}:${h}:${$.detail}:${$.name}`,label:$.name,projectId:t.id,attributes:{symbolKind:$.detail,language:J(f,t.runtime),...ue(t.root,f)?{generated:true}:{}},proofIds:[S]});e.state.addRelation({from:b,to:I,kind:"defines",confidence:"medium",proofIds:[S]});}}let R=t.framework!=="vscode-extension"&&t.kind!=="extension";for(let k of R?Me(m,ko(f),100):[]){let $=v.split(/\r?\n/)[k.line-1]??"";if(k.detail!=="swagger route"&&go(f,$))continue;let S=wo($,k.detail),I=await e.state.addProof({provider:this.id,artifact:h,absolutePath:f,line:k.line,derivation:"extracted",trust:"observed",confidence:"medium",detail:`${S} ${k.name}`}),F=e.state.addEntity({kind:"endpoint",key:`source-endpoint:${t.id}:${h}:${S}:${k.name}`,label:`${S} ${k.name||"/"}`,projectId:t.id,attributes:{method:S,path:k.name||"/",source:h},proofIds:[I]});e.state.addRelation({from:b,to:F,kind:"defines",confidence:"medium",proofIds:[I]});}}c.length<l.length&&e.state.diagnostics.push({code:"graph.provider.source_structure.limit_reached",severity:"info",message:`Source extraction for ${t.id} sampled ${c.length} file(s) from ${l.length} complete-inventory source candidate(s).`,recommendation:"Use bounded graph search, evidence, and path queries for proof-backed retrieval; do not treat the sampled symbol inventory as exhaustive."}),a>=n&&e.state.diagnostics.push({code:"graph.provider.source_structure.symbol_limit_reached",severity:"info",message:`Symbol extraction for ${t.id} reached its adaptive ${n}-symbol budget across ${c.length} selected source file(s).`,recommendation:"Increase graphSourceBudget when a more exhaustive symbol inventory is worth the additional graph size and extraction cost."}),p>0&&e.state.diagnostics.push({code:"graph.provider.source_structure.unresolved_local_imports",severity:"warning",message:`${p} 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."});}}},Ko={id:"source-symbol-binding",version:"1.0.0",scanTier:"derived",applicable(e){return [...e.state.entities.values()].some(t=>t.kind==="symbol")},async run(e){let t=0;for(let s of e.projects){let o=e.scanBudgetsByProject.get(s.id)?.sourceExtractionFileBudget??2e3,i=Math.min(1e5,Math.max(1e4,o*10)),n=0,l=[...e.state.entities.values()].filter(p=>p.projectId===s.id),c=l.filter(p=>p.kind==="file"),r=new Map(l.filter(p=>p.kind==="symbol").map(p=>[p.id,p])),d=new Map,a=new Map;for(let p of e.state.relations.values()){if(p.kind==="defines"&&r.has(p.to)){let f=d.get(p.from)??[];f.push(r.get(p.to)),d.set(p.from,f);}if(p.kind==="imports"){let f=e.state.entities.get(p.to);if(f?.kind!=="file"||f.projectId!==s.id)continue;let v=a.get(p.from)??new Set;v.add(p.to),a.set(p.from,v);}}for(let p of c){if(n>=i)break;let f=P(p.attributes.artifact);if(!f)continue;let v=f.startsWith(`${s.artifactPrefix}/`)?f.slice(s.artifactPrefix.length+1):f,m=u.resolve(s.root,...v.split("/")),h;try{let w=await _.stat(m);if(!w.isFile()||w.size>2*1024*1024)continue;h=St(m,await _.readFile(m,"utf8"));}catch{continue}let y=[...d.get(p.id)??[],...[...a.get(p.id)??[]].flatMap(w=>d.get(w)??[])],b=new Map;for(let w of y){if(w.label.length<3)continue;let R=b.get(w.label)??[];R.some(k=>k.id===w.id)||R.push(w),b.set(w.label,R);}for(let[w,R]of b){let k=w.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),$=new RegExp(`\\b${k}\\s*\\(`,"g"),S=[...h.matchAll($)];if(S.length===0)continue;if(R.length!==1){t+=S.length;continue}let I=R[0];for(let F of S.slice(0,20)){if(n>=i)break;let O=h.slice(0,F.index??0).split(/\r?\n/).length;if(I.proofIds.some(B=>e.state.proofs.get(B)?.line===O))continue;let T=await e.state.addProof({provider:this.id,artifact:f,absolutePath:m,line:O,derivation:"extracted",trust:"observed",confidence:"medium",detail:`Unambiguous local call to ${w}`});e.state.addRelation({from:p.id,to:I.id,kind:"calls",derivation:"extracted",trust:"observed",confidence:"medium",proofIds:[T]}),n+=1;}}}n>=i&&e.state.diagnostics.push({code:"graph.provider.source_symbol_binding.limit_reached",severity:"info",message:`Source call binding for ${s.id} reached its adaptive ${i}-relation budget.`,recommendation:"Increase graphSourceBudget or use compiler/language-server semantic evidence when more exhaustive call topology is required."});}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 Go(e){let o=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 !o||!u.posix.basename(o.replace(/\\/g,"/"))?null:o}function Do(e,t){let s=0,o=null,i=false;for(let n=t;n<e.length;n+=1){let l=e[n];if(o){l===o&&!i&&(o=null),i=l==="\\"&&!i,l!=="\\"&&(i=false);continue}if(l==='"'){o=l;continue}if(l==="("&&(s+=1),l===")"&&(s-=1,s===0))return e.slice(t+1,n)}return null}function qo(e){let t=[],s=/(?<![A-Za-z0-9_:])(?:deno_core::)?extension!\s*\(/g;for(let o of e.matchAll(s)){let i=(o.index??0)+o[0].lastIndexOf("("),n=Do(e,i);if(!n)continue;let l=n.match(/^\s*([A-Za-z_][A-Za-z0-9_]*)\s*,/)?.[1];if(!l)continue;let c=[...new Set([...n.matchAll(/\bops\s*=\s*\[([\s\S]*?)\]/g)].flatMap(d=>[...d[1].matchAll(/\b(op_[A-Za-z0-9_]+)\b/g)].map(a=>a[1])))].sort(),r=[...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(a=>a[1])))].sort();t.push({name:l,line:e.slice(0,o.index??0).split(/\r?\n/).length,operations:c,scripts:r});}return t}function yt(e,t){let s=e.indexOf(t);return s<0?void 0:e.slice(0,s).split(/\r?\n/).length}var Zo={id:"runtime-bridge-semantics",version:"1.0.0",scanTier:"adaptive-semantic",async applicable(e){for(let t of e.projects)for(let s of e.semanticFilesByProject.get(t.id)??[])if(!(u.extname(s).toLowerCase()!==".rs"||ee(t.root,s)))try{let o=await _.readFile(s,"utf8");if(/(?<![A-Za-z0-9_:])(?:deno_core::)?extension!\s*\(/.test(o))return true}catch{}return false},async run(e){for(let t of e.projects){let o=(e.semanticFilesByProject.get(t.id)??[]).filter(i=>u.extname(i).toLowerCase()===".rs"&&!ee(t.root,i));for(let i of o){let n="";try{if((await _.stat(i)).size>2*1024*1024)continue;n=await _.readFile(i,"utf8");}catch{continue}let l=qo(n);if(l.length===0)continue;let c=e.state.artifactPath(i,t),r=await e.state.addProof({provider:this.id,artifact:c,absolutePath:i,derivation:"extracted",trust:"observed",confidence:"high",detail:"Deno Core Rust extension declaration"}),d=e.state.addEntity({kind:"file",key:`file:${t.id}:${c}`,label:c,projectId:t.id,aliases:[u.basename(i)],attributes:{artifact:c,language:"rust",runtimeBridge:"deno-core"},proofIds:[r]});e.state.addRelation({from:C("project",`project:${t.id}`),to:d,kind:"contains",proofIds:[r]});for(let a of l){let p=await e.state.addProof({provider:this.id,artifact:c,absolutePath:i,line:a.line,derivation:"extracted",trust:"observed",confidence:"high",detail:`Deno Core extension ${a.name}`}),f=e.state.addEntity({kind:"protocol",key:`runtime-bridge:${t.id}:deno-core:${c}:${a.name}`,label:`${a.name} Rust JavaScript runtime bridge`,projectId:t.id,aliases:[a.name,`${a.name} cross-language bridge`,"Rust JavaScript TypeScript bridge"],attributes:{mechanism:"deno_core::extension!",languages:["javascript","rust","typescript"]},proofIds:[p]});e.state.addRelation({from:C("project",`project:${t.id}`),to:f,kind:"contains",proofIds:[p]}),e.state.addRelation({from:d,to:f,kind:"implements-protocol",proofIds:[p]});for(let m of ["rust","javascript","typescript"]){let h=C("language",`language:${t.id}:${m}`);e.state.entities.has(h)&&e.state.addRelation({from:f,to:h,kind:"uses-language",proofIds:[p]});}let v=new Map;for(let m of a.operations){let h=yt(n,m),y=await e.state.addProof({provider:this.id,artifact:c,absolutePath:i,...h?{line:h}:{},derivation:"extracted",trust:"observed",confidence:"high",detail:`Rust op2 bridge operation ${m}`}),b=e.state.addEntity({kind:"symbol",key:`symbol:${t.id}:${c}:function:${m}`,label:m,projectId:t.id,aliases:[`rust:${m}`,`javascript:${m}`],attributes:{symbolKind:"function",language:"rust",bridgeMechanism:"op2"},proofIds:[y]});v.set(m,b),e.state.addRelation({from:d,to:b,kind:"defines",proofIds:[y]}),e.state.addRelation({from:b,to:f,kind:"implements-protocol",proofIds:[y,p]});}for(let m of a.scripts){let h=u.resolve(u.dirname(i),m);if(!await _.pathExists(h))continue;let y="";try{y=await _.readFile(h,"utf8");}catch{continue}let b=e.state.artifactPath(h,t),w=await e.state.addProof({provider:this.id,artifact:b,absolutePath:h,derivation:"extracted",trust:"observed",confidence:"high",detail:`${a.name} JavaScript/TypeScript extension source`}),R=e.state.addEntity({kind:"file",key:`file:${t.id}:${b}`,label:b,projectId:t.id,aliases:[u.basename(h)],attributes:{artifact:b,language:J(h,t.runtime),runtimeBridge:"deno-core"},proofIds:[w]});e.state.addRelation({from:d,to:R,kind:"references",confidence:"high",proofIds:[p,w]}),e.state.addRelation({from:R,to:f,kind:"implements-protocol",proofIds:[w,p]});for(let[k,$]of v){let S=yt(y,k);if(!S)continue;let I=await e.state.addProof({provider:this.id,artifact:b,absolutePath:h,line:S,derivation:"extracted",trust:"observed",confidence:"high",detail:`JavaScript/TypeScript call to Rust operation ${k}`});e.state.addRelation({from:R,to:$,kind:"calls",confidence:"high",proofIds:[I,p]});}}}}}}},Ho=/^[A-Z][A-Za-z0-9_]{3,}$/,Uo=new Set(["Client","Config","Context","Data","Error","Event","Message","Options","Request","Response","Result","Schema","Type","Value"]),Jo={id:"polyglot-semantics",version:"1.1.0",scanTier:"adaptive-deep",applicable(e){return e.projects.some(t=>new Set((t.runtimeCandidates??[]).filter(o=>o&&o!=="unknown"&&o!=="generic")).size>1||B(t.root).polyglot)},async run(e){for(let t of e.projects){let s=C("project",`project:${t.id}`),o=e.deepFilesByProject.get(t.id)??[],i=B(t.root),n=[...e.state.entities.values()].filter(r=>r.kind==="package"&&r.projectId===t.id);for(let r of i.units){let d=r.runtime,a=u.resolve(t.root,r.manifest),p=e.state.artifactPath(a,t),f=n.find(b=>b.attributes.manifest===p),v=f?.proofIds??[await e.state.addProof({provider:this.id,artifact:p,absolutePath:a,derivation:"extracted",trust:"observed",confidence:"high",detail:`${d} runtime-unit manifest`})],m=e.state.artifactPath(u.dirname(a),t),h=Object.fromEntries(r.stages.map(b=>[b.stage,b.command])),y=e.state.addEntity({kind:"runtime-unit",key:`runtime-unit:${t.id}:${d}:${p}`,label:`${d}:${m}:${u.basename(a)}`,projectId:t.id,aliases:[d,m],attributes:{runtime:d,root:m,ecosystem:r.ecosystem,role:r.role,manifest:p,stages:Object.keys(h).sort(),orchestrationMode:"native-manifest"},proofIds:v});e.state.addRelation({from:s,to:y,kind:"contains",confidence:"high",proofIds:v}),f&&e.state.addRelation({from:y,to:f.id,kind:"configured-by",confidence:"high",proofIds:v});for(let b of r.stages){let{stage:w,command:R}=b,k=e.state.addEntity({kind:"lifecycle-stage",key:`lifecycle-stage:${t.id}:${d}:${p}:${w}`,label:`${w} \xB7 ${d}:${m}:${u.basename(a)}`,projectId:t.id,aliases:[`${d}:${w}`,w],attributes:{stage:w,command:R,runtime:d,workingDirectory:m,commandConfidence:b.confidence,preflight:b.preflight},proofIds:v});e.state.addRelation({from:y,to:k,kind:"contains",confidence:"high",proofIds:v});}}for(let r of o.filter(d=>te.has(u.extname(d).toLowerCase()))){let d="";try{d=await _.readFile(r,"utf8");}catch{continue}let a=Go(d);if(!a)continue;let p=e.state.artifactPath(r,t),f=C("file",`file:${t.id}:${p}`);if(!e.state.entities.has(f))continue;let v=await e.state.addProof({provider:this.id,artifact:p,absolutePath:r,line:1,derivation:"extracted",trust:"observed",confidence:"high",detail:`Generated from ${a}`}),m=e.state.entities.get(f);m&&e.state.addEntity({kind:"file",key:m.identity.key,label:m.label,projectId:t.id,aliases:m.identity.aliases,attributes:{...m.attributes,generated:true},proofIds:[...m.proofIds,v]});let h=[...e.state.relations.values()].filter(k=>k.kind==="defines"&&k.from===f).map(k=>e.state.entities.get(k.to)).filter(k=>k?.kind==="symbol");for(let k of h)e.state.addEntity({kind:"symbol",key:k.identity.key,label:k.label,projectId:t.id,aliases:k.identity.aliases,attributes:{...k.attributes,generated:true},proofIds:[...k.proofIds,v]});let y=a.replace(/^\.\//,"").replace(/[.,:]$/,""),w=[u.resolve(t.root,y),u.resolve(u.dirname(r),y)].find(k=>o.includes(k));if(w){let k=e.state.artifactPath(w,t),$=C("file",`file:${t.id}:${k}`);if(e.state.entities.has($)){e.state.addRelation({from:f,to:$,kind:"generated-by",derivation:"extracted",trust:"observed",confidence:"high",proofIds:[v]});continue}}let R=e.state.addEntity({kind:"schema",key:`generation-source:${t.id}:${y}`,label:u.posix.basename(y),projectId:t.id,aliases:[y],attributes:{sourceReference:y,discoveredFromGeneratedHeader:true},proofIds:[v]});e.state.addRelation({from:f,to:R,kind:"generated-from",derivation:"extracted",trust:"observed",confidence:"medium",proofIds:[v]});}let l=[...e.state.entities.values()].filter(r=>r.projectId===t.id&&r.kind==="symbol"&&r.attributes.generated===true&&r.attributes.symbolKind==="type"&&typeof r.attributes.language=="string"&&Ho.test(r.label)&&!Uo.has(r.label)),c=new Map;for(let r of l){let d=c.get(r.label)??[];d.push(r),c.set(r.label,d);}for(let[r,d]of [...c.entries()].filter(([,a])=>new Set(a.map(p=>p.attributes.language)).size>1).sort(([a],[p])=>a.localeCompare(p)).slice(0,1e3)){let a=d.sort((h,y)=>String(h.attributes.language).localeCompare(String(y.attributes.language))||h.id.localeCompare(y.id)),p=[...new Set(a.map(h=>String(h.attributes.language)))],f=[...new Set(a.flatMap(h=>h.proofIds))],v=e.state.addEntity({kind:"protocol",key:`protocol:${t.id}:${r}`,label:r,projectId:t.id,aliases:p.map(h=>`${h}:${r}`),attributes:{languages:p,implementationCount:a.length,source:"generated-types"},proofIds:f});for(let h of a)e.state.addRelation({from:h.id,to:v,kind:"implements-protocol",derivation:"inferred",trust:"corroborated",confidence:"high",proofIds:h.proofIds});let m=a[0];for(let h of a.slice(1))e.state.addRelation({from:h.id,to:m.id,kind:"equivalent-to",derivation:"inferred",trust:"corroborated",confidence:"high",proofIds:[...m.proofIds,...h.proofIds]});}}}},Vo={id:"workspace-service-contract",version:"1.1.0",scanTier:"derived",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$1=new Map;for(let s of [...e.contract.projects].sort((o,i)=>o.slug.localeCompare(i.slug))){let o=s.contracts;if(s.ports.length===0&&o.owns.length===0&&o.apis.length===0&&o.publishes.length===0&&o.consumes.length===0&&o.env.length===0)continue;let i=await e.state.addProof({provider:this.id,artifact:t.workspaceContract,absolutePath:u.join(e.workspacePath,".workspai","workspace.contract.json"),pointer:`/projects/${s.slug}/contracts`,trust:"authoritative",derivation:"authored",detail:`Service contract for ${s.slug}`}),n=C("project",`project:${s.slug}`),l=e.state.addEntity({kind:"service",key:`contract-service:${s.slug}`,label:s.slug,projectId:s.slug,attributes:{ports:s.ports.map(c=>`${c.protocol}:${c.port}`),owns:[...o.owns].sort(),environmentKeys:[...o.env].sort()},proofIds:[i]});e.state.addRelation({from:n,to:l,kind:"implements",trust:"authoritative",derivation:"authored",proofIds:[i]});for(let c of [...o.apis].sort((r,d)=>r.name.localeCompare(d.name))){let r=e.state.addEntity({kind:"api",key:`contract-api:${s.slug}:${c.name}:${c.basePath}`,label:c.name,projectId:s.slug,attributes:{basePath:c.basePath,runtimeRegistrationRequired:true},proofIds:[i]});e.state.addRelation({from:l,to:r,kind:"exposes",trust:"authoritative",derivation:"authored",proofIds:[i]});}for(let c of [...o.publishes,...o.consumes].sort())t$1.has(c)||t$1.set(c,e.state.addEntity({kind:"queue",key:`event:${c}`,label:c,attributes:{protocol:"workspace-event"},proofIds:[i]}));for(let c of [...o.publishes].sort()){let r=t$1.get(c);r&&e.state.addRelation({from:l,to:r,kind:"publishes",trust:"authoritative",derivation:"authored",proofIds:[i]});}for(let c of [...o.consumes].sort()){let r=t$1.get(c);r&&e.state.addRelation({from:l,to:r,kind:"consumes",trust:"authoritative",derivation:"authored",proofIds:[i]});}}}},Yo={id:"openapi",version:"1.1.0",scanTier:"complete-inventory",applicable(e){return e.projects.some(t=>(e.filesByProject.get(t.id)??[]).some(je))},async run(e){for(let t of e.projects){let s=(e.filesByProject.get(t.id)??[]).filter(je);for(let o of s){let i;try{i=await ae(o);}catch(n){e.state.diagnostics.push({code:"graph.provider.openapi.parse_failed",severity:"warning",message:`Could not parse ${e.state.artifactPath(o,t)}: ${n instanceof Error?n.message:String(n)}`});continue}for(let n of i){if(!("openapi"in n)&&!("swagger"in n))continue;let l=E(n.info),c=P(l?.title)??`${t.id} API`,r=await e.state.addProof({provider:this.id,artifact:e.state.artifactPath(o,t),absolutePath:o,pointer:"/info",trust:"authoritative",detail:"Authored OpenAPI contract"}),d=C("project",`project:${t.id}`),a=e.state.addEntity({kind:"api",key:`api:${t.id}:${c}`,label:c,projectId:t.id,attributes:{version:P(l?.version),specification:P(n.openapi)??P(n.swagger),runtimeRegistrationRequired:true},proofIds:[r]});e.state.addRelation({from:d,to:a,kind:"exposes",trust:"authoritative",derivation:"authored",proofIds:[r]});let p=E(E(n.components)?.schemas)??E(n.definitions),f=new Map;for(let m of Object.keys(p??{}).sort()){let h=await e.state.addProof({provider:this.id,artifact:e.state.artifactPath(o,t),absolutePath:o,pointer:`/components/schemas/${m}`,trust:"authoritative",detail:`OpenAPI schema ${m}`}),y=e.state.addEntity({kind:"schema",key:`schema:${t.id}:${c}:${m}`,label:m,projectId:t.id,proofIds:[h]});f.set(m,y),e.state.addRelation({from:a,to:y,kind:"contains",trust:"authoritative",derivation:"authored",proofIds:[h]});}let v=E(n.paths);for(let m of Object.keys(v??{}).sort()){let h=E(v?.[m]);for(let y of Object.keys(h??{}).filter(b=>Ht.has(b.toLowerCase())).sort()){let b=E(h?.[y]),w=`/paths/${m.replace(/~/g,"~0").replace(/\//g,"~1")}/${y}`,R=await e.state.addProof({provider:this.id,artifact:e.state.artifactPath(o,t),absolutePath:o,pointer:w,trust:"authoritative",detail:`${y.toUpperCase()} ${m}`}),k=e.state.addEntity({kind:"endpoint",key:`endpoint:${t.id}:${c}:${y.toUpperCase()}:${m}`,label:`${y.toUpperCase()} ${m}`,projectId:t.id,aliases:H(b?.tags),attributes:{method:y.toUpperCase(),path:m,operationId:P(b?.operationId),deprecated:typeof b?.deprecated=="boolean"?b.deprecated:void 0,tags:H(b?.tags)},proofIds:[R]});e.state.addRelation({from:a,to:k,kind:"contains",trust:"authoritative",derivation:"authored",proofIds:[R]});let $=JSON.stringify(b??{});for(let[S,I]of f)$.includes(`/${S}`)&&e.state.addRelation({from:k,to:I,kind:"references",trust:"authoritative",derivation:"authored",proofIds:[R]});}}}}}}},ze=5e3;function ne(e,t){let s=D(u.relative(e,t)).toLowerCase(),o=0;return /(^|\/)(routes?|handlers?|controllers?|server|httpapi)(\/|$)/.test(s)&&(o+=100),/(?:^|\/)(?:api|routes?|handlers?|controllers?|server)(?:\.[a-z0-9]+)$/.test(s)&&(o+=80),/(^|\/)(src|app|lib)(\/|$)/.test(s)&&(o+=20),/(^|\/)(protocol|sdk|client)(\/|$)/.test(s)&&(o-=30),o}function Qo(e,t){for(let s of ['"',"'","`"]){let o=e.indexOf(`${s}${t}${s}`);if(o>=0)return o}return -1}var Xo={id:"authored-api-implementation-binding",version:"1.0.0",scanTier:"adaptive-semantic",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 s=new Map;for(let n of e.state.entities.values()){let l=n.attributes.operationId;if(n.kind!=="endpoint"||n.projectId!==t.id||typeof l!="string"||l.trim().length===0)continue;let c=s.get(l)??[];c.push(n),s.set(l,c);}if(s.size===0)continue;let o=(e.semanticFilesByProject.get(t.id)??[]).filter(n=>te.has(u.extname(n).toLowerCase())&&!ee(t.root,n)&&!ue(t.root,n)).sort((n,l)=>ne(t.root,l)-ne(t.root,n)||n.localeCompare(l)).slice(0,ze),i=new Map;for(let n of o){let l;try{let r=await _.stat(n);if(!r.isFile()||r.size>2*1024*1024)continue;l=await _.readFile(n,"utf8");}catch{continue}let c=ne(t.root,n);if(!(c<50))for(let r of s.keys()){let d=Qo(l,r);if(d<0)continue;let a=i.get(r);a&&(a.score>c||a.score===c&&a.file.localeCompare(n)<=0)||i.set(r,{file:n,contents:l,offset:d,score:c});}}for(let[n,l]of i){let c=e.state.artifactPath(l.file,t),r=l.contents.slice(0,l.offset).split(/\r?\n/).length,d=await e.state.addProof({provider:this.id,artifact:c,absolutePath:l.file,line:r,derivation:"extracted",trust:"observed",confidence:"high",detail:`Production handler binds OpenAPI operation ${n}`}),a=e.state.addEntity({kind:"file",key:`file:${t.id}:${c}`,label:c,projectId:t.id,aliases:[u.basename(l.file)],attributes:{artifact:c,language:J(l.file,t.runtime),bytes:Buffer.byteLength(l.contents)},proofIds:[d]});e.state.addRelation({from:C("project",`project:${t.id}`),to:a,kind:"contains",derivation:"extracted",trust:"observed",proofIds:[d]});for(let p of s.get(n)??[])e.state.addRelation({from:a,to:p.id,kind:"implements",derivation:"extracted",trust:"corroborated",confidence:"high",proofIds:[...p.proofIds,d]});}}}},es=8,ts=/(?:^|[,{\n]\s*)["']?(?:routes?|upstreams?|virtualHosts?|pathPrefix)["']?\s*[:=]/im;function bt(e,t){let s=u.extname(e).toLowerCase();if(/\.(?:json|ya?ml|toml)$/i.test(e))return /(?:route|routing|gateway|proxy|ingress|server)/i.test(u.basename(e))?ts.exec(t)?.index??-1:-1;let o=s===".py"?[/\b(?:include_router|add_api_route|mount)\s*\(/]:[".js",".jsx",".mjs",".cjs",".ts",".tsx",".mts",".cts"].includes(s)?[/\b(?:router|app)\.(?:use|route|register)\s*\(/,/\b(?:registerRoutes?|configureRoutes?)\s*\(/i,/\b(?:routeModule|routeMatcher|routesManifest|appPathsManifest)\b/]:s===".go"?[/\.\s*InstallAPIGroups?\s*\(/,/\.\s*registerResourceHandlers\s*\(/,/\b(?:registerRoutes?|configureRoutes?)\s*\(/i]:[".java",".kt",".kts",".scala",".cs",".fs",".fsx",".vb"].includes(s)?[/\b(?:RouterFunction|RequestMappingHandlerMapping|MapControllers|MapGroup)\s*[<(]/,/\b(?:registerRoutes?|configureRoutes?)\s*\(/i,/\bregister(?:Rest)?(?:Action|Handler)\s*\(/]:s===".rb"?[/\broutes\.draw\s+do\b/,/\bmount\s+(?:[A-Z][\w:]*|["'])/,/\b(?:resources?|namespace|scope)\s+[:"']/,/\b(?:get|post|put|patch|delete|match)\s+["']/]:[/\b(?:registerRoutes?|configureRoutes?)\s*\(/i];for(let i of o){let n=i.exec(t);if(n)return n.index}return -1}var os={id:"dynamic-api-registration-binding",version:"1.1.0",scanTier:"adaptive-semantic",applicable(e){return [...e.state.entities.values()].some(t=>t.kind==="api")?e.projects.some(t=>(e.semanticFilesByProject.get(t.id)??[]).filter(s=>(te.has(u.extname(s).toLowerCase())||/\.(?:json|ya?ml|toml)$/i.test(s))&&(ne(t.root,s)>=20||/\.(?:json|ya?ml|toml)$/i.test(s))&&!ee(t.root,s)&&!ue(t.root,s)&&!je(s)).slice(0,ze).some(s=>{try{let o=_.statSync(s);return o.isFile()&&o.size<=2*1024*1024&&bt(s,_.readFileSync(s,"utf8"))>=0}catch{return false}})):false},async run(e){for(let t of e.projects){let s=[...e.state.entities.values()].filter(l=>l.kind==="api"&&l.projectId===t.id&&l.attributes.runtimeRegistrationRequired===true);if(s.length===0)continue;let o=(e.semanticFilesByProject.get(t.id)??[]).filter(l=>(te.has(u.extname(l).toLowerCase())||/\.(?:json|ya?ml|toml)$/i.test(l))&&!ee(t.root,l)&&!ue(t.root,l)&&!je(l)&&(ne(t.root,l)>=20||/\.(?:json|ya?ml|toml)$/i.test(l))).sort((l,c)=>ne(t.root,c)-ne(t.root,l)||l.localeCompare(c)).slice(0,ze),i=0,n=Math.max(1,s.length*es);for(let l of o){if(i>=n)break;let c;try{let m=await _.stat(l);if(!m.isFile()||m.size>2*1024*1024)continue;c=await _.readFile(l,"utf8");}catch{continue}let r=bt(l,c);if(r<0)continue;let d=s.length===1?s:s.filter(m=>m.label.toLowerCase().split(/[^a-z0-9]+/).filter(h=>h.length>=4).some(h=>c.toLowerCase().includes(h)));if(d.length===0)continue;let a=e.state.artifactPath(l,t),p=await e.state.addProof({provider:this.id,artifact:a,absolutePath:l,line:c.slice(0,r).split(/\r?\n/).length,derivation:"extracted",trust:"observed",confidence:"high",detail:/\.(?:json|ya?ml|toml)$/i.test(l)?"Configuration-driven API topology registration":"Runtime-generated API topology registration"}),f=e.state.addEntity({kind:"file",key:`file:${t.id}:${a}`,label:a,projectId:t.id,aliases:[u.basename(l)],attributes:{artifact:a,language:J(l,t.runtime)},proofIds:[p]}),v=e.state.addEntity({kind:"runtime-unit",key:`dynamic-api-registration:${t.id}:${a}`,label:`${u.basename(l)} API registration`,projectId:t.id,attributes:{mechanism:/\.(?:json|ya?ml|toml)$/i.test(l)?"configuration-driven-routing":"runtime-generated-routing"},proofIds:[p]});e.state.addRelation({from:C("project",`project:${t.id}`),to:v,kind:"contains",derivation:"extracted",trust:"observed",proofIds:[p]}),e.state.addRelation({from:v,to:f,kind:"configured-by",derivation:"extracted",trust:"observed",proofIds:[p]});for(let m of d)e.state.addRelation({from:v,to:m.id,kind:"implements",derivation:"extracted",trust:"corroborated",confidence:"high",proofIds:[...m.proofIds,p]});i+=1;}}}};function ss(e){let t=[],s=1;for(let r=0;r<e.length;){let d=e[r];if(d===`
|
|
7
|
+
`){s+=1,r+=1;continue}if(/\s|,/.test(d)){r+=1;continue}if(d==="#"){for(;r<e.length&&e[r]!==`
|
|
8
|
+
`;)r+=1;continue}if(e.startsWith('"""',r)){for(r+=3;r<e.length&&!e.startsWith('"""',r);)e[r]===`
|
|
9
|
+
`&&(s+=1),r+=1;r=Math.min(e.length,r+3);continue}if(d==='"'){r+=1;let p=false;for(;r<e.length;){let f=e[r];if(f===`
|
|
10
|
+
`&&(s+=1),f==='"'&&!p){r+=1;break}p=f==="\\"&&!p,f!=="\\"&&(p=false),r+=1;}continue}let a=e.slice(r).match(/^[_A-Za-z][_0-9A-Za-z]*/)?.[0];if(a){t.push({value:a,line:s}),r+=a.length;continue}t.push({value:d,line:s}),r+=1;}let o=new Set(["schema","scalar","type","interface","union","enum","input","directive"]),i=new Set(["query","mutation","subscription","fragment"]),n=[];t[0]?.value==="{"&&n.push({kind:"query",name:`anonymous-${t[0].line}`,line:t[0].line,extended:false});let l=0,c=false;for(let r=0;r<t.length;r+=1){let d=t[r];if(d.value==="}"){l=Math.max(0,l-1);continue}if(l===0&&d.value==="extend"){c=true;continue}if(l===0){let a=d.value;if(o.has(a)){let p=a==="schema"?"schema":a==="directive"?t[r+1]?.value==="@"?t[r+2]?.value:void 0:t[r+1]?.value;p&&/^[_A-Za-z][_0-9A-Za-z]*$/.test(p)&&n.push({kind:a,name:p,line:d.line,extended:c}),c=false;}else if(i.has(a)){let p=t[r+1]?.value,f=p&&/^[_A-Za-z][_0-9A-Za-z]*$/.test(p)?p:`anonymous-${d.line}`;n.push({kind:a,name:f,line:d.line,extended:false}),c=false;}else ["@","&","|"].includes(d.value)||(c=false);}d.value==="{"&&(l+=1);}return n}var is={id:"interface-contracts",version:"1.1.0",scanTier:"complete-inventory",applicable(e){return e.projects.some(t=>(e.filesByProject.get(t.id)??[]).some(nt))},async run(e){for(let t of e.projects){let s=(e.filesByProject.get(t.id)??[]).filter(nt);for(let o of s){let i=e.state.artifactPath(o,t),n=u.extname(o).toLowerCase();if(n===".graphql"||n===".gql"){let l=await _.readFile(o,"utf8"),c=ss(l),r=c.filter(h=>["schema","scalar","type","interface","union","enum","input","directive"].includes(h.kind)),d=c.filter(h=>["query","mutation","subscription","fragment"].includes(h.kind)),a=await e.state.addProof({provider:this.id,artifact:i,absolutePath:o,trust:"authoritative",derivation:"authored",detail:r.length>0?"GraphQL schema contract":"GraphQL executable document"}),p=e.state.addEntity({kind:"file",key:`file:${t.id}:${i}`,label:i,projectId:t.id,aliases:[u.basename(o)],attributes:{artifact:i,language:"graphql",bytes:Buffer.byteLength(l),graphqlDocumentKind:r.length>0&&d.length>0?"mixed":r.length>0?"schema":"executable"},proofIds:[a]});e.state.addRelation({from:C("project",`project:${t.id}`),to:p,kind:"contains",trust:"authoritative",derivation:"authored",proofIds:[a]});let f=e.state.addEntity({kind:"protocol",key:"protocol:graphql",label:"GraphQL",aliases:["graphql"],attributes:{specification:"GraphQL"},proofIds:[a]}),m=r.some(h=>!h.extended&&(h.kind==="schema"||h.kind==="type"&&["Query","Mutation","Subscription"].includes(h.name)))?e.state.addEntity({kind:"api",key:`graphql-api:${t.id}`,label:`${t.id} GraphQL API`,projectId:t.id,attributes:{specification:"graphql",surface:"graphql-schema",runtimeRegistrationRequired:true},proofIds:[a]}):null;m&&(e.state.addRelation({from:C("project",`project:${t.id}`),to:m,kind:"exposes",trust:"authoritative",derivation:"authored",proofIds:[a]}),e.state.addRelation({from:m,to:f,kind:"implements-protocol",trust:"authoritative",derivation:"authored",proofIds:[a]}));for(let h of r){let y=e.state.addEntity({kind:"schema",key:`graphql-schema:${t.id}:${i}:${h.kind}:${h.name}`,label:h.name,projectId:t.id,attributes:{specification:"graphql",definitionKind:h.kind,extended:h.extended,line:h.line},proofIds:[a]});e.state.addRelation({from:p,to:y,kind:"defines",trust:"authoritative",derivation:"authored",proofIds:[a]}),m&&e.state.addRelation({from:m,to:y,kind:"contains",trust:"authoritative",derivation:"authored",proofIds:[a]});}for(let h of d){let y=e.state.addEntity({kind:"symbol",key:`graphql-operation:${t.id}:${i}:${h.kind}:${h.name}`,label:h.name,projectId:t.id,attributes:{language:"graphql",symbolKind:h.kind==="fragment"?"fragment":"operation",operationKind:h.kind,artifact:i,line:h.line},proofIds:[a]});e.state.addRelation({from:p,to:y,kind:"defines",trust:"authoritative",derivation:"authored",proofIds:[a]}),e.state.addRelation({from:y,to:f,kind:"consumes",trust:"authoritative",derivation:"authored",proofIds:[a]});}continue}if(n===".proto"){let l=await _.readFile(o,"utf8"),c=$e(l.replace(/\r\n/g,`
|
|
11
|
+
`).trim()),r=l.match(/^\s*package\s+([A-Za-z_][\w.]*)\s*;/m)?.[1],d=r||"unscoped",a=c.slice(0,16),p=await e.state.addProof({provider:this.id,artifact:i,absolutePath:o,trust:"authoritative",derivation:"authored",detail:"Protocol Buffers contract"});for(let f of l.matchAll(/^\s*service\s+([A-Za-z_]\w*)/gm)){let v=e.state.addEntity({kind:"api",key:`protobuf-service:${d}:${f[1]}:${a}`,label:f[1],aliases:[...r?[`${r}.${f[1]}`]:[],f[1]],attributes:{specification:"protobuf",package:r,definitionHash:c},proofIds:[p]});e.state.addRelation({from:C("project",`project:${t.id}`),to:v,kind:"exposes",trust:"authoritative",derivation:"authored",proofIds:[p]});}for(let f of l.matchAll(/^\s*message\s+([A-Za-z_]\w*)/gm)){let v=e.state.addEntity({kind:"schema",key:`protobuf-message:${d}:${f[1]}:${a}`,label:f[1],aliases:[...r?[`${r}.${f[1]}`]:[],f[1]],attributes:{specification:"protobuf",package:r,definitionHash:c},proofIds:[p]});e.state.addRelation({from:C("project",`project:${t.id}`),to:v,kind:"contains",trust:"authoritative",derivation:"authored",proofIds:[p]});}continue}try{let l=(await ae(o))[0];if(!l||!("asyncapi"in l))continue;let c=await e.state.addProof({provider:this.id,artifact:i,absolutePath:o,trust:"authoritative",derivation:"authored",detail:"AsyncAPI contract"}),r=e.state.addEntity({kind:"api",key:`asyncapi:${t.id}:${i}`,label:P(E(l.info)?.title)??`${t.id} AsyncAPI`,projectId:t.id,attributes:{specification:`asyncapi ${String(l.asyncapi)}`,artifact:i,runtimeRegistrationRequired:true},proofIds:[c]});e.state.addRelation({from:C("project",`project:${t.id}`),to:r,kind:"exposes",trust:"authoritative",derivation:"authored",proofIds:[c]});for(let d of Object.keys(E(l.channels)??{}).sort()){let a=e.state.addEntity({kind:"queue",key:`asyncapi-channel:${t.id}:${d}`,label:d,projectId:t.id,attributes:{protocol:"asyncapi"},proofIds:[c]});e.state.addRelation({from:r,to:a,kind:"publishes",trust:"authoritative",derivation:"authored",proofIds:[c]});}}catch{}}}}},rs={id:"infrastructure-as-code",version:"1.0.0",scanTier:"complete-inventory",applicable(e){return fe(e).some(at)},async run(e){let t=fe(e).filter(at);for(let s of t){let o=ie(e.projects,s),i=o?.id??e.state.workspaceName,n=o?C("project",`project:${o.id}`):C("workspace",`workspace:${e.state.workspaceName}`),l=e.state.artifactPath(s,o),c=await _.readFile(s,"utf8"),r=await e.state.addProof({provider:this.id,artifact:l,absolutePath:s,trust:"authoritative",derivation:"authored",detail:"Infrastructure definition"});if(/^Dockerfile/i.test(u.basename(s))){let a=[...c.matchAll(/^\s*FROM\s+([^\s]+)(?:\s+AS\s+([^\s]+))?/gim)],p=e.state.addEntity({kind:"container",key:`dockerfile:${i}:${l}`,label:`${i} container image`,...o?{projectId:o.id}:{},attributes:{artifact:l,baseImages:a.map(f=>f[1])},proofIds:[r]});e.state.addRelation({from:n,to:p,kind:"deploys",trust:"authoritative",derivation:"authored",proofIds:[r]});continue}if(/\.tf$/i.test(s)){for(let a of c.matchAll(/^\s*resource\s+["']([^"']+)["']\s+["']([^"']+)["']/gm)){let p=a[1],f=/(?:db|sql|rds|database)/i.test(p)?"database":/(?:queue|kafka|sqs|pubsub|servicebus)/i.test(p)?"queue":"deployment",v=e.state.addEntity({kind:f,key:`terraform:${i}:${p}:${a[2]}`,label:`${p}.${a[2]}`,...o?{projectId:o.id}:{},attributes:{resourceType:p,artifact:l},proofIds:[r]});e.state.addRelation({from:n,to:v,kind:"deploys",trust:"authoritative",derivation:"authored",proofIds:[r]});}continue}let d=e.state.addEntity({kind:"deployment",key:`helm:${i}:${l}`,label:`${i} Helm chart`,...o?{projectId:o.id}:{},attributes:{artifact:l,format:"helm"},proofIds:[r]});e.state.addRelation({from:n,to:d,kind:"deploys",trust:"authoritative",derivation:"authored",proofIds:[r]});}}};function kt(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"}function ns(e){if(!e)return;let t=new Set(["version","name","services","networks","volumes","configs","secrets"]),s=new Set(["image","build","command","entrypoint","ports","links","environment","volumes","depends_on","external_links"]),o=Object.entries(e).filter(([i,n])=>{if(t.has(i.toLowerCase()))return false;let l=E(n);return l?Object.keys(l).some(c=>s.has(c)):false});return o.length>0?Object.fromEntries(o):void 0}var as={id:"compose",version:"1.2.0",scanTier:"complete-inventory",async applicable(e){return (await lt(e)).length>0},async run(e){let t=[];for(let s of await lt(e)){let o;try{o=(await ae(s))[0];}catch(a){e.state.diagnostics.push({code:"graph.provider.compose.parse_failed",severity:"warning",message:`Could not parse ${e.state.artifactPath(s)}: ${a instanceof Error?a.message:String(a)}`});}let i=E(o?.services)??ns(o);if(!i)continue;let n=ie(e.projects,s),l=e.state.artifactPath(s,n),c=u.basename(s).toLowerCase().startsWith("docker-compose")?"docker-compose":"compose",r=`${n?.id??"workspace"}:${u.posix.dirname(l)}:${c}`,d=a=>`compose-service:${r}:${a}`;for(let a of Object.keys(i).sort()){let p=E(i[a]),f=p?.build,v=P(f)??P(E(f)?.context),m=v?ie(e.projects,u.resolve(u.dirname(s),v)):e.projects.find(I=>I.id.toLowerCase()===a.toLowerCase()||u.basename(I.path).toLowerCase()===a.toLowerCase())??n,h=await e.state.addProof({provider:this.id,artifact:l,absolutePath:s,pointer:`/services/${a}`,trust:"authoritative",derivation:"authored",detail:`Compose service ${a}`}),y=P(p?.image),b=d(a),w=e.state.entities.get(C("service",b)),R=Array.isArray(w?.attributes.ports)?w.attributes.ports.filter(I=>typeof I=="string"):[],k=Array.isArray(w?.attributes.networks)?w.attributes.networks.filter(I=>typeof I=="string"):[],$=Array.isArray(w?.attributes.environmentKeys)?w.attributes.environmentKeys.filter(I=>typeof I=="string"):[],S=e.state.addEntity({kind:"service",key:b,label:a,...m?.id||w?.projectId?{projectId:m?.id??w?.projectId}:{},attributes:{image:y??w?.attributes.image,ports:[...new Set([...R,...H(p?.ports).map(String)])].sort((I,F)=>I.localeCompare(F)),networks:[...new Set([...k,...H(p?.networks)])].sort((I,F)=>I.localeCompare(F)),environmentKeys:[...new Set([...$,...Po(p?.environment)])].sort((I,F)=>I.localeCompare(F))},proofIds:[...w?.proofIds??[],h],mergeArrayAttributes:["ports","networks","environmentKeys"]});if(m&&e.state.addRelation({from:C("project",`project:${m.id}`),to:S,kind:"contains",trust:"authoritative",derivation:"authored",proofIds:[h]}),y){let I=e.state.addEntity({kind:kt(y),key:`image:${y}`,label:y,...m?{projectId:m.id}:{},attributes:{image:y},proofIds:[h]});e.state.addRelation({from:S,to:I,kind:kt(y)==="container"?"runs-on":"depends-on",trust:"authoritative",derivation:"authored",proofIds:[h]});}}for(let a of Object.keys(i).sort()){let p=E(i[a]);for(let f of H(p?.depends_on)){let v=await e.state.addProof({provider:this.id,artifact:l,absolutePath:s,pointer:`/services/${a}/depends_on/${f}`,trust:"authoritative",derivation:"authored",detail:`${a} depends on ${f}`});t.push({from:C("service",d(a)),to:C("service",d(f)),proofId:v});}}}for(let s of t){if(!e.state.entities.has(s.from)||!e.state.entities.has(s.to)){e.state.proofs.delete(s.proofId);continue}e.state.addRelation({from:s.from,to:s.to,kind:"depends-on",trust:"authoritative",derivation:"authored",proofIds:[s.proofId]});}}},cs={id:"documentation",version:"1.0.0",scanTier:"complete-inventory",applicable(e){return fe(e).some(ct)},async run(e){let t=new Set,s=[e.workspaceFiles,...e.projects.map(o=>e.filesByProject.get(o.id)??[])];for(let o of s){let i=o.filter(n=>ct(n)&&!e.projects.some(l=>n.startsWith(`${l.root}${u.sep}`)&&ee(l.root,n)));for(let n of i){if(t.has(n))continue;t.add(n);let l=ie(e.projects,n),r=(await _.readFile(n,"utf8")).match(/^#\s+(.+)$/m)?.[1]?.trim()??u.basename(n),d=await e.state.addProof({provider:this.id,artifact:e.state.artifactPath(n,l),absolutePath:n,line:1,trust:"authoritative",derivation:"authored",detail:`Documentation: ${r}`}),a=e.state.addEntity({kind:"document",key:`document:${e.state.artifactPath(n,l)}`,label:r,...l?{projectId:l.id}:{},attributes:{artifact:e.state.artifactPath(n,l)},proofIds:[d]}),p=l?C("project",`project:${l.id}`):C("workspace",`workspace:${e.state.workspaceName}`);e.state.addRelation({from:a,to:p,kind:"documents",trust:"authoritative",derivation:"authored",proofIds:[d]});}}}},ds={id:"kubernetes",version:"1.0.0",scanTier:"complete-inventory",async applicable(e){return (await ft(e)).length>0},async run(e){for(let t of await ft(e)){let s=ie(e.projects,t),o=s?C("project",`project:${s.id}`):C("workspace",`workspace:${e.state.workspaceName}`),i=await ae(t);for(let n=0;n<i.length;n+=1){let l=i[n],c=P(l.kind),r=E(l.metadata),d=P(r?.name);if(!c||!d)continue;let a=P(r?.namespace)??"default",p=/Deployment|StatefulSet|DaemonSet/i.test(c)?"deployment":/Service|Ingress/i.test(c)?"service":/ConfigMap|Secret/i.test(c)?"environment":"deployment",f=await e.state.addProof({provider:this.id,artifact:e.state.artifactPath(t,s),absolutePath:t,pointer:`/documents/${n}`,trust:"authoritative",derivation:"authored",detail:`${c} ${a}/${d}`}),v=e.state.addEntity({kind:p,key:`kubernetes:${c}:${a}:${d}`,label:`${c}/${d}`,...s?{projectId:s.id}:{},attributes:{resourceKind:c,namespace:a,secret:c==="Secret",keys:c==="Secret"||c==="ConfigMap"?Object.keys(E(l.data)??{}).sort():void 0},proofIds:[f]});e.state.addRelation({from:o,to:v,kind:p==="deployment"?"deploys":"contains",trust:"authoritative",derivation:"authored",proofIds:[f]});let m=e.state.addEntity({kind:"environment",key:`kubernetes-namespace:${a}`,label:`Kubernetes namespace ${a}`,attributes:{namespace:a},proofIds:[f]});e.state.addRelation({from:v,to:m,kind:"runs-on",trust:"authoritative",derivation:"authored",proofIds:[f]});}}}},ls={id:"ci-workflow",version:"1.0.0",scanTier:"complete-inventory",applicable(e){return ut(e).length>0},async run(e){let t=ut(e);for(let s of t){let o=ie(e.projects,s),i=e.state.artifactPath(s,o),n=u.basename(s)==="Jenkinsfile",l=D(u.relative(o?.root??e.workspacePath,s)),c=/^prow\/[^/]+\.(?:sh|py)$/i.test(l),r=u.basename(s),d=[],a=[];if(n||c){let v=await _.readFile(s,"utf8");n?d=[...v.matchAll(/\bstage\s*\(\s*["']([^"']+)["']/g)].map(m=>m[1]):(r=`${u.basename(s)} \xB7 Prow`,d=[u.basename(s).replace(/\.(?:sh|py)$/i,"")],a=["external-provider"]);}else {let v;try{v=(await ae(s))[0];}catch{continue}if(!v)continue;if(r=P(v.name)??r,/^\.gitlab-ci\./i.test(l)){let m=new Set(["stages","variables","workflow","include","default","image","services","cache","before_script","after_script"]);d=Object.keys(v).filter(h=>!h.startsWith(".")&&!m.has(h)).sort();}else d=[...new Set([...Object.keys(E(v.jobs)??{}),...Object.keys(E(E(v.workflows)?.jobs)??{}),...H(v.stages)])].sort();a=H(v.on);}d.length===0&&(d=["pipeline"]);let p=await e.state.addProof({provider:this.id,artifact:i,absolutePath:s,...!n&&!c?{pointer:"/jobs"}:{},trust:"authoritative",derivation:"authored",detail:"CI/CD workflow"}),f=e.state.addEntity({kind:"pipeline",key:`pipeline:${i}`,label:r,...o?{projectId:o.id}:{},attributes:{jobs:d,triggers:a,artifact:i},proofIds:[p]});e.state.addRelation({from:o?C("project",`project:${o.id}`):C("workspace",`workspace:${e.state.workspaceName}`),to:f,kind:"contains",trust:"authoritative",derivation:"authored",proofIds:[p]});}}},ps={id:"codeowners",version:"1.2.0",scanTier:"complete-inventory",async applicable(e){return (await pt(e)).length>0},async run(e){for(let t of await pt(e)){let s=ie(e.projects,t);if(u.basename(t)==="OWNERS"){let n=await ae(t);for(let l of n)for(let c of ["approvers","reviewers"]){let r=Array.isArray(l[c])?l[c]:[];for(let d=0;d<r.length;d+=1){let a=P(r[d]);if(!a)continue;let p=a.startsWith("@")?a:`@${a}`,f=await e.state.addProof({provider:this.id,artifact:e.state.artifactPath(t,s),absolutePath:t,pointer:`/${c}/${d}`,trust:"authoritative",derivation:"authored",detail:`${c}: ${p}`}),v=e.state.addEntity({kind:"owner",key:`owner:${p.toLowerCase()}`,label:p,aliases:[a,p],proofIds:[f]});e.state.addRelation({from:v,to:s?C("project",`project:${s.id}`):C("workspace",`workspace:${e.state.workspaceName}`),kind:"owns",trust:"authoritative",derivation:"authored",proofIds:[f]});}}continue}let i=(await _.readFile(t,"utf8")).split(/\r?\n/);for(let n=0;n<i.length;n+=1){let l=i[n].trim();if(!l||l.startsWith("#"))continue;let[c,...r]=l.split(/\s+/);for(let d of r.filter(a=>a.startsWith("@"))){let a=await e.state.addProof({provider:this.id,artifact:e.state.artifactPath(t,s),absolutePath:t,line:n+1,trust:"authoritative",derivation:"authored",detail:`${c} ${d}`}),p=e.state.addEntity({kind:"owner",key:`owner:${d.toLowerCase()}`,label:d,aliases:[d],proofIds:[a]}),f=e.projects.filter(m=>{let h=c.replace(/^\//,"").replace(/\*.*$/,""),y=u.dirname(t),b=[".github","docs"].includes(u.basename(y))?u.dirname(y):y,w=D(u.relative(b,m.root));return h&&(w==="."||w.startsWith(h.replace(/\/$/,""))||m.path.startsWith(h.replace(/\/$/,"")))}),v=f.length>0?f.map(m=>C("project",`project:${m.id}`)):s?[C("project",`project:${s.id}`)]:[C("workspace",`workspace:${e.state.workspaceName}`)];for(let m of v)e.state.addRelation({from:p,to:m,kind:"owns",trust:"authoritative",derivation:"authored",proofIds:[a]});}}}}},us={id:"architecture-decisions",version:"1.0.0",scanTier:"complete-inventory",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(s=>dt(t.root,s)))},async run(e){let t=new Set,s=[{root:e.workspacePath,files:e.workspaceFiles},...e.projects.map(o=>({root:o.root,files:e.filesByProject.get(o.id)??[]}))];for(let o of s){let i=o.files.filter(n=>dt(o.root,n));for(let n of i){if(t.has(n))continue;t.add(n);let l=ie(e.projects,n),c=await _.readFile(n,"utf8"),r=c.match(/^#\s+(.+)$/m)?.[1]?.trim()??u.basename(n,".md"),d=c.match(/^status\s*:\s*(.+)$/im)?.[1]?.trim(),a=await e.state.addProof({provider:this.id,artifact:e.state.artifactPath(n,l),absolutePath:n,line:1,trust:"authoritative",derivation:"authored",detail:`Architecture decision: ${r}`}),p=e.state.addEntity({kind:"decision",key:`decision:${e.state.artifactPath(n,l)}`,label:r,...l?{projectId:l.id}:{},attributes:{status:d,artifact:e.state.artifactPath(n,l)},proofIds:[a]}),f=l?C("project",`project:${l.id}`):C("workspace",`workspace:${e.state.workspaceName}`);e.state.addRelation({from:f,to:p,kind:"decided-by",trust:"authoritative",derivation:"authored",proofIds:[a]});}}}},wt=[Lo,Wo,xo,zo,No,Ko,Zo,Jo,Vo,Yo,is,Xo,os,as,rs,ds,ls,ps,cs,us];function fs(e,t,s){let o=e.scanTier;if(!o)return;let i=t.projects;return i.length===0?[{scope:"workspace",scopeId:"workspace",tier:o,status:s==="skipped"?"not-applicable":"complete",eligibleFiles:t.workspaceFiles.length,suppliedFiles:o==="derived"?0:t.workspaceFiles.length,...o==="derived"?{}:{fileBudget:Math.max(t.workspaceFiles.length,1)},selectionStrategy:o==="derived"?"derived":"complete"}]:i.map(n=>{let l=t.inventoryByProject.get(n.id),c=t.scanBudgetsByProject.get(n.id),r=l?.eligibleFileCount??0;if(s==="skipped")return {scope:"project",scopeId:n.id,tier:o,status:"not-applicable",eligibleFiles:r,suppliedFiles:0,selectionStrategy:o==="derived"?"derived":"complete"};if(o==="derived")return {scope:"project",scopeId:n.id,tier:o,status:"complete",eligibleFiles:0,suppliedFiles:0,selectionStrategy:"derived"};let d=o==="complete-inventory"?t.filesByProject.get(n.id)?.length??0:o==="adaptive-semantic"?t.semanticFilesByProject.get(n.id)?.length??0:t.deepFilesByProject.get(n.id)?.length??0,a=o==="complete-inventory"?l?.fileLimit??Math.max(d,1):o==="adaptive-semantic"?c?.semanticFileBudget??Math.max(d,1):c?.deepFileBudget??Math.max(d,1),p=!!l?.truncated||d<r;return {scope:"project",scopeId:n.id,tier:o,status:p?"bounded":"complete",eligibleFiles:r,suppliedFiles:d,fileBudget:Math.max(a,1),selectionStrategy:o==="complete-inventory"?"complete":"component-language-round-robin-v1"}})}async function gs(e,t){for(let s of t.edges){let o=[];for(let i of s.evidence){let n=he(i.file);o.push(await e.addProof({provider:"project-topology",artifact:n,absolutePath:u.resolve(e.workspacePath,n),derivation:s.source==="inferred"?"inferred":"authored",trust:s.source==="inferred"?"observed":"authoritative",confidence:s.confidence,detail:i.detail??`${s.kind} relationship`}));}o.length===0&&o.push(await e.addProof({provider:"project-topology",artifact:p.model,derivation:"inferred",trust:"ambiguous",confidence:s.confidence,detail:`${s.kind} relationship without source locator`})),e.addRelation({from:C("project",`project:${s.from}`),to:C("project",`project:${s.to}`),kind:s.kind==="event-pub-sub"?"consumes":"depends-on",derivation:s.source==="inferred"?"inferred":"authored",trust:s.source==="inferred"?"observed":"authoritative",confidence:s.confidence,proofIds:o});}}function ms(e){let t=[...e.entities.values()].filter(o=>o.kind==="endpoint"),s=new Map;for(let o of t){let i=String(o.attributes.method??"").toUpperCase(),n=String(o.attributes.path??"");if(!o.projectId||!i||!n)continue;let l=`${o.projectId}\0${i}\0${n}`,c=s.get(l)??[];c.push(o),s.set(l,c);}for(let o of s.values()){if(o.length<2)continue;let i=o.find(n=>n.proofIds.some(l=>e.proofs.get(l)?.trust==="authoritative"));if(i)for(let n of o.filter(l=>l.id!==i.id))e.addRelation({from:n.id,to:i.id,kind:"implements",derivation:"extracted",trust:"corroborated",confidence:"high",proofIds:[...n.proofIds,...i.proofIds]});}}async function Bs(e){let t=u.resolve(e.workspacePath),s=e.now??new Date,o=e.projects.map(g=>{let j=g.absolutePath?u.resolve(g.absolutePath):u.resolve(t,g.path),M=u.relative(t,j),G=M.startsWith(`..${u.sep}`)||M===".."||u.isAbsolute(M);return {...g,root:j,artifactPrefix:G?`external/${g.id}`:D(M||g.id)}}).sort((g,j)=>g.id.localeCompare(j.id)),i$1=new xe(t,s,e.workspace.name),n=be(e.inventoryFileLimitPerProject,"WORKSPAI_GRAPH_INVENTORY_LIMIT"),l=be(e.maxFilesPerProject,"WORKSPAI_GRAPH_DEEP_BUDGET"),c$1=be(e.semanticFilesPerProject,"WORKSPAI_GRAPH_SEMANTIC_BUDGET"),r=be(e.sourceFilesPerProject,"WORKSPAI_GRAPH_SOURCE_BUDGET"),d=Math.max(100,Math.min(n??Nt,Kt)),a$1=new Map(await Promise.all(o.map(async g=>[g.id,await ve(g.root,d)]))),p=new Map(o.map(g=>[g.id,a$1.get(g.id)?.files??[]])),f=new Map(o.map(g=>{let j=a$1.get(g.id);return [g.id,Qt({eligibleFiles:j?.files.length??0,...l!==void 0?{deepOverride:l}:{},...c$1!==void 0?{semanticOverride:c$1}:{},...r!==void 0?{sourceOverride:r}:{}})]})),v=new Map(o.map(g=>{let j=a$1.get(g.id)?.files??[],M=f.get(g.id)?.deepFileBudget??j.length;return [g.id,Pe(j,M,g.root)]})),m=new Map(o.map(g=>{let j=a$1.get(g.id)?.files??[],M=f.get(g.id)?.semanticFileBudget??j.length;return [g.id,Pe(j,M,g.root)]})),h$1=await ve(t,d,o.map(g=>g.root)),y=h$1.files.filter(g=>!o.some(j=>g===j.root||g.startsWith(`${j.root}${u.sep}`))),b={...h$1,files:y,eligibleFileCount:h$1.eligibleFileCountExact&&!h$1.truncated?y.length:h$1.eligibleFileCount,truncated:h$1.truncated},w=await So({workspacePath:t,projects:o,projectFileLimit:d,workspaceFileLimit:d,inventories:{workspaceInventory:b,projectInventories:a$1,scanBudgetsByProject:f}});for(let g of w.scopes.filter(j=>j.truncated))i$1.diagnostics.push({code:`graph.input.${g.kind}_file_limit_reached`,severity:"warning",message:`${g.kind==="project"?`Project ${g.id}`:"Workspace"} graph inventory reached the ${g.fileLimit}-file emergency bound. The persisted graph remains usable, but completeness claims must be bounded.`,recommendation:"Increase inventoryFileLimitPerProject for this scope or split the repository into explicit project boundaries before claiming complete source coverage."});let R=new Map(w.scopes.filter(g=>g.kind==="project").map(g=>[g.id,g.hash])),k=new Map((e.previousGraph?.source.inputs?.scopes??[]).filter(g=>g.kind==="project").map(g=>[g.id,g.hash])),$="1.4.0",S=new Map((e.previousGraph?.providers??[]).filter(g=>g.id!=="incremental-project-cache").map(g=>[g.id,g.version])),I=new Map((e.previousGraph?.providers??[]).map(g=>[g.id,g])),F=o.map(g=>u.resolve(g.root)),O=F.some((g,j)=>F.some((M,G)=>G!==j&&(M===g||M.startsWith(`${g}${u.sep}`)))),T=wt.every(g=>S.get(g.id)===g.version)&&I.get("incremental-project-cache")?.version===$,B=!O&&e.previousGraph?.workspace.name===e.workspace.name&&T&&R.size>0&&R.size===k.size&&[...R.keys()].every(g=>k.has(g)),L=new Map((e.previousGraph?.entities??[]).filter(g=>g.kind==="project"&&g.projectId).map(g=>[g.projectId,g])),x=new Map(o.map(g=>[g.id,g])),q=g=>{let j=L.get(g.id);if(!j)return false;let M=Pt(g),G=Object.fromEntries(Object.keys(M).map(W=>[W,j.attributes[W]]));return c(G)===c(M)},K=new Set(B?[...R].filter(([g,j])=>k.get(g)===j&&x.has(g)&&q(x.get(g))).map(([g])=>g):[]),U=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","compose","infrastructure-as-code","kubernetes","ci-workflow","codeowners"]),N=o.filter(g=>!K.has(g.id)),ge=[];if(e.previousGraph&&K.size>0){let g=e.previousGraph.entities.filter(A=>A.projectId&&K.has(A.projectId)),j=new Set(g.map(A=>A.id)),M=new Map(e.previousGraph.entities.map(A=>[A.id,A])),G=new Map(e.previousGraph.proofs.map(A=>[A.id,A])),W=new Set(j),V=true;for(;V;){V=false;for(let A of e.previousGraph.relations){let re=W.has(A.from),le=W.has(A.to);if(re===le)continue;let Ae=re?A.to:A.from,Fe=M.get(Ae);if(!Fe||Fe.projectId!==void 0)continue;[...Fe.proofIds,...A.proofIds].some(Bt=>{let Ye=G.get(Bt)?.provider;return Ye!==void 0&&U.has(Ye)})&&(W.add(Ae),V=true);}}if(N.length===0)for(let A of e.previousGraph.entities)A.projectId===void 0&&A.proofIds.some(re=>{let le=G.get(re)?.provider;return le!==void 0&&U.has(le)})&&W.add(A.id);let z=new Set([...W].filter(A=>!j.has(A))),X=[...g,...e.previousGraph.entities.filter(A=>z.has(A.id))],Y=new Set(X.map(A=>A.id)),Q=e.previousGraph.relations.filter(A=>Y.has(A.from)&&Y.has(A.to));ge=e.previousGraph.relations.filter(A=>{let re=Y.has(A.from),le=Y.has(A.to);return re===le?false:M.get(re?A.to:A.from)?.projectId===void 0});let ye=new Set([...X,...Q].flatMap(A=>A.proofIds));for(let A of e.previousGraph.proofs)ye.has(A.id)&&i$1.proofs.set(A.id,A);for(let A of X)i$1.entities.set(A.id,A);for(let A of Q)i$1.relations.set(A.id,A);i$1.providers.push({id:"incremental-project-cache",version:$,status:"passed",permission:"filesystem-read",discoveredEntities:X.length,discoveredRelations:Q.length,proofCount:ye.size,diagnostics:[`Reused ${K.size} unchanged project scope(s); rescanning ${N.length}.`]});}else i$1.providers.push({id:"incremental-project-cache",version:$,status:"skipped",permission:"filesystem-read",discoveredEntities:0,discoveredRelations:0,proofCount:0,diagnostics:[O?`Overlapping project boundaries require a full scan to preserve deterministic artifact ownership; scanning ${N.length}.`:`No compatible unchanged project scope was reused; scanning ${N.length}.`]});let Ce={workspacePath:t,projects:o,filesByProject:p,deepFilesByProject:v,semanticFilesByProject:m,inventoryByProject:a$1,scanBudgetsByProject:f,workspaceFiles:y,now:s,contract:e.contract??null,state:i$1},Ft={...Ce,projects:N};for(let g of wt){if(K.size>0&&N.length===0&&U.has(g.id)){let z=I.get(g.id);if(z){for(let X of z.diagnostics){let Y=e.previousGraph?.diagnostics.find(Q=>`${Q.code}: ${Q.message}`===X);Y&&!i$1.diagnostics.some(Q=>Q.code===Y.code&&Q.message===Y.message)&&i$1.diagnostics.push(Y);}i$1.providers.push({...z,diagnostics:[...new Set([...z.diagnostics,"Provider evidence reused from unchanged project scopes."])]});continue}}let j={entities:i$1.entities.size,relations:i$1.relations.size,proofs:i$1.proofs.size,diagnostics:i$1.diagnostics.length},M="passed",G=null;try{let z=K.size>0&&U.has(g.id)?Ft:Ce;if(!(g.applicable?await g.applicable(z):true))M="skipped";else {await g.run(z);let Y=i$1.entities.size-j.entities,Q=i$1.relations.size-j.relations,ye=i$1.proofs.size-j.proofs;Y===0&&Q===0&&ye===0?(M="partial",i$1.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."})):i$1.diagnostics.length>j.diagnostics&&(M="partial");}}catch(z){M="failed";let X=z instanceof Error?z.message:String(z);G=X,i$1.diagnostics.push({code:`graph.provider.${g.id}.failed`,severity:"warning",message:`${g.id} provider failed: ${X}`,recommendation:"Repair the referenced source artifact and rerun workspace graph emit."});}let W=i$1.diagnostics.slice(j.diagnostics).map(z=>`${z.code}: ${z.message}`);G&&W.length===0&&W.push(G);let V=fs(g,Ce,M);M==="passed"&&V?.some(z=>z.status==="bounded")&&(M="partial"),i$1.providers.push({id:g.id,version:g.version,status:M,permission:"filesystem-read",discoveredEntities:i$1.entities.size-j.entities,discoveredRelations:i$1.relations.size-j.relations,proofCount:i$1.proofs.size-j.proofs,diagnostics:W,...V?{inputCoverage:V}:{}});}if(e.previousGraph&&ge.length>0){let g=new Map(e.previousGraph.proofs.map(W=>[W.id,W])),j=0,M=0;for(let W of ge)if(!(!i$1.entities.has(W.from)||!i$1.entities.has(W.to))){i$1.relations.has(W.id)||(i$1.relations.set(W.id,W),j+=1);for(let V of W.proofIds){let z=g.get(V);z&&!i$1.proofs.has(V)&&(i$1.proofs.set(V,z),M+=1);}}let G=i$1.providers.find(W=>W.id==="incremental-project-cache");G&&(G.discoveredRelations+=j,G.proofCount+=M,G.diagnostics.push(`Restored ${j} reusable project-to-workspace relation(s) with ${M} additional proof(s).`));}ms(i$1),await gs(i$1,e.projectTopology);let ce=[...i$1.entities.values()].sort((g,j)=>g.id.localeCompare(j.id)),de=[...i$1.relations.values()].sort((g,j)=>g.id.localeCompare(j.id)),He=[...i$1.proofs.values()].sort((g,j)=>g.id.localeCompare(j.id)),_t=ce.filter(g=>g.proofIds.length>0).length,Tt=de.filter(g=>g.proofIds.length>0).length,Mt=i$1.providers.filter(g=>g.status!=="failed").length,Re=e.projectTopology.diagnostics?.filter(g=>g.code==="graph.edges.missing").flatMap(g=>g.nodeIds??[])??[];Re.length>0&&i$1.diagnostics.push({code:"graph.knowledge.project_relationships_unknown",severity:"warning",message:`${Re.length} project(s) have no proven inter-project relationship. This is unknown topology, not proof of independence.`,entityIds:Re.map(g=>C("project",`project:${g}`)),recommendation:"Author service contracts or add OpenAPI, Compose, Kubernetes, package or import evidence."});let Ue=h(ce,de),Je=w.scopes.filter(g=>!g.truncated).length,Ve=w.scopes.length-Je,Se=i$1.providers.reduce((g,j)=>(j.status==="failed"?g.failed+=1:j.status==="skipped"||j.inputCoverage?.every(M=>M.status==="not-applicable")?g.notApplicable+=1:j.status==="partial"||j.inputCoverage?.some(M=>M.status==="bounded")?g.bounded+=1:g.complete+=1,g),{complete:0,bounded:0,notApplicable:0,failed:0}),Ot=Ve>0||Se.bounded>0||Se.failed>0?"bounded":"complete";return {schemaVersion:a,generatedAt:s.toISOString(),source:{...e.source,inputs:w},workspace:e.workspace,projectTopology:e.projectTopology,entities:ce,relations:de,proofs:He,providers:[...i$1.providers].sort((g,j)=>g.id.localeCompare(j.id)),quality:{entityCount:ce.length,relationCount:de.length,proofCount:He.length,entityProofCoverageRatio:ce.length===0?1:_t/ce.length,relationProofCoverageRatio:de.length===0?1:Tt/de.length,providerSuccessRatio:i$1.providers.length===0?1:Mt/i$1.providers.length,conflictCount:i$1.diagnostics.filter(g=>g.code.includes("conflict")).length,unknownCount:i(i$1.diagnostics,Ue),bindingCoverage:Ue,completeness:{status:Ot,inventory:{scopeCount:w.scopes.length,completeScopes:Je,boundedScopes:Ve,eligibleFiles:w.scopes.reduce((g,j)=>g+(j.eligibleFileCount??j.fileCount),0),indexedFiles:w.scopes.reduce((g,j)=>g+j.fileCount,0),eligibleFileCountExact:w.scopes.every(g=>g.eligibleFileCountExact!==false)},providers:Se},portable:true,secretValuesEmitted:false},diagnostics:[...i$1.diagnostics].sort((g,j)=>g.code.localeCompare(j.code)||g.message.localeCompare(j.message))}}function Ls(e,t){return C(e,t)}
|
|
12
|
+
export{Ts as a,Ms as b,So as c,Os as d,Bs as e,Ls as f};
|