workspai 0.53.0 → 0.55.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/artifact-remediation-plan.v1.json +22 -3
- package/contracts/doctor-project-evidence.v1.json +21 -2
- package/contracts/doctor-remediation-plan.v1.json +22 -3
- package/contracts/doctor-workspace-evidence.v1.json +21 -2
- package/contracts/extension-cli-compatibility.v1.json +1 -1
- package/contracts/studio-card-repair-capabilities.v1.json +65 -1
- package/contracts/workspace-intelligence/doctor-dependency-repair-transaction.v1.json +52 -13
- package/contracts/workspace-intelligence/workspace-repair-proposal.v1.json +8 -0
- package/contracts/workspace-intelligence/workspace-repair-transaction.v1.json +57 -6
- package/contracts/workspace-repair-capabilities.v1.json +104 -0
- package/dist/{artifact-remediation-plan-CJSPCMWA.js → artifact-remediation-plan-O3YIULQN.js} +1 -1
- package/dist/autopilot-release-EZXOGAVE.js +1 -0
- package/dist/chunk-4GPKQFPY.js +1 -0
- package/dist/chunk-B5AY55A5.js +1 -0
- package/dist/chunk-CEIJIFY7.js +88 -0
- package/dist/{chunk-2FJW6GSW.js → chunk-HUPLAFZQ.js} +1 -1
- package/dist/{chunk-HOVJUP7K.js → chunk-KJYLCZRI.js} +1 -1
- package/dist/{chunk-OLX6LX77.js → chunk-NWQ5VWUW.js} +3 -3
- package/dist/chunk-TEHQ7XKK.js +3 -0
- package/dist/chunk-UFOCUHG3.js +1 -0
- package/dist/{chunk-3GRKUP5W.js → chunk-W3HXTCSY.js} +6 -6
- package/dist/{chunk-HRN5J6PW.js → chunk-WSAFBPS5.js} +1 -1
- package/dist/{create-R6A7EHQZ.js → create-3NSOY7CA.js} +1 -1
- package/dist/{doctor-KNIYGDM7.js → doctor-UEFFNAUD.js} +1 -1
- package/dist/index.js +147 -147
- package/dist/{pipeline-PVCLAQDI.js → pipeline-ZYKDWUKK.js} +1 -1
- package/dist/{pythonRapidkitExec-YR7P5LWG.js → pythonRapidkitExec-4YTAMLBD.js} +1 -1
- package/dist/{verified-goal-MCSNMA3P.js → verified-goal-PE2PGAHF.js} +1 -1
- package/dist/{workspace-B53XH35L.js → workspace-C4UETGY7.js} +1 -1
- package/dist/{workspace-foundation-FFNCK5ZD.js → workspace-foundation-3EVAQ5X6.js} +1 -1
- package/dist/{workspace-intelligence-runner-JNCQLUH7.js → workspace-intelligence-runner-GLC666ER.js} +1 -1
- package/dist/{workspace-onboarding-2B7CYZ5H.js → workspace-onboarding-5KO7Z7AD.js} +1 -1
- package/dist/workspace-repair-engine-NMKOWUQP.js +3 -0
- package/dist/workspace-run-2DEVJOVH.js +1 -0
- package/docs/ci-workflows.md +1 -1
- package/docs/doctor-command.md +6 -0
- package/docs/workspace-repair-engine.md +59 -10
- package/package.json +3 -3
- package/dist/autopilot-release-LZWNQQLY.js +0 -1
- package/dist/chunk-27AXFTKW.js +0 -1
- package/dist/chunk-E5YYVFM2.js +0 -1
- package/dist/chunk-SUV7Y2FH.js +0 -3
- package/dist/chunk-T6JI7GYZ.js +0 -88
- package/dist/chunk-ZTKIBREF.js +0 -1
- package/dist/workspace-repair-engine-SRWECKZO.js +0 -3
- package/dist/workspace-run-3U77TMKX.js +0 -1
- /package/dist/{chunk-USMLRNZ7.js → chunk-BQ24743S.js} +0 -0
package/dist/chunk-E5YYVFM2.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import {b,a,c as c$1}from'./chunk-44VJHNZB.js';var c=b.repairTransaction,l=a.repairTransaction,p=c$1.repairTransaction;var g="workspai.workspace-repair-proposal.v1",m="contracts/workspace-intelligence/workspace-repair-proposal.v1.json";var o="workspai.workspace-repair-capabilities.v1",s=[{id:"node",ecosystem:"JavaScript / TypeScript",manifests:["package.json"],lockfiles:["package-lock.json","npm-shrinkwrap.json","pnpm-lock.yaml","yarn.lock","bun.lock","bun.lockb"],packageManagers:["npm","pnpm","yarn","bun"],support:"full",stages:{reconcile:"native",audit:"native",test:"declared",build:"declared"},requiredToolFamilies:["selected package manager"]},{id:"python",ecosystem:"Python",manifests:["pyproject.toml","requirements.txt"],lockfiles:["uv.lock","poetry.lock","requirements.txt"],packageManagers:["uv","poetry","pip"],support:"conditional",stages:{reconcile:"conditional",audit:"conditional",test:"conditional",build:"declared"},requiredToolFamilies:["isolated Python","selected environment manager","pip-audit or governed Doctor audit"],limitation:"A bounded isolated environment and an installed audit surface are required."},{id:"go",ecosystem:"Go",manifests:["go.mod"],lockfiles:["go.sum"],packageManagers:["go modules"],support:"conditional",stages:{reconcile:"native",audit:"conditional",test:"native",build:"native"},requiredToolFamilies:["go","govulncheck"],limitation:"govulncheck must be installed; the engine never fetches an unreviewed tool."},{id:"rust",ecosystem:"Rust",manifests:["Cargo.toml"],lockfiles:["Cargo.lock"],packageManagers:["cargo"],support:"conditional",stages:{reconcile:"native",audit:"conditional",test:"native",build:"native"},requiredToolFamilies:["cargo","cargo-audit"],limitation:"The cargo-audit subcommand must already be installed."},{id:"php-composer",ecosystem:"PHP",manifests:["composer.json"],lockfiles:["composer.lock"],packageManagers:["composer"],support:"full",stages:{reconcile:"native",audit:"native",test:"declared",build:"declared"},requiredToolFamilies:["composer"]},{id:"ruby-bundler",ecosystem:"Ruby",manifests:["Gemfile"],lockfiles:["Gemfile.lock"],packageManagers:["bundler"],support:"conditional",stages:{reconcile:"native",audit:"conditional",test:"declared",build:"declared"},requiredToolFamilies:["bundle","bundle-audit"],limitation:"bundle-audit and the declared Rake tasks must already exist."},{id:"elixir-mix",ecosystem:"Elixir",manifests:["mix.exs"],lockfiles:["mix.lock"],packageManagers:["mix"],support:"conditional",stages:{reconcile:"native",audit:"conditional",test:"native",build:"native"},requiredToolFamilies:["mix","Hex audit task"],limitation:"The project must expose the Hex audit task used by its dependency policy."},{id:"deno",ecosystem:"Deno",manifests:["deno.json","deno.jsonc"],lockfiles:["deno.lock"],packageManagers:["deno"],support:"full",stages:{reconcile:"native",audit:"native",test:"declared",build:"declared"},requiredToolFamilies:["deno"]},{id:"dotnet",ecosystem:".NET",manifests:["*.sln","*.csproj","*.fsproj","*.vbproj"],lockfiles:["Directory.Packages.props","packages.lock.json"],packageManagers:["NuGet / dotnet"],support:"full",stages:{reconcile:"native",audit:"native",test:"native",build:"native"},requiredToolFamilies:["dotnet"]},{id:"jvm-maven",ecosystem:"JVM / Maven",manifests:["pom.xml"],lockfiles:[],packageManagers:["Maven Wrapper","Maven"],support:"conditional",stages:{reconcile:"native",audit:"conditional",test:"native",build:"native"},requiredToolFamilies:["mvnw or mvn","governed Doctor audit"],limitation:"A project-specific dependency audit command must be declared by Doctor evidence."},{id:"jvm-gradle",ecosystem:"JVM / Gradle",manifests:["build.gradle.kts","build.gradle"],lockfiles:["gradle.lockfile","gradle/libs.versions.toml"],packageManagers:["Gradle Wrapper","Gradle"],support:"conditional",stages:{reconcile:"native",audit:"conditional",test:"native",build:"native"},requiredToolFamilies:["gradlew or gradle","governed Doctor audit"],limitation:"A project-specific dependency audit command must be declared by Doctor evidence."}];function v(){return {schemaVersion:o,owner:"Workspai CLI",workflow:["plan","preconditions","approval","checkpoint","execute","reconcile","audit","test","build","canonical-verify","close-or-rollback-or-decision"],invariants:{multiAdapterProjects:true,missingTools:"decision-required",unsupportedEcosystems:"decision-required",silentFallbackToModelExecution:false,approvalBoundToPlanHash:true,canonicalVerificationRequired:true,rollbackConflictDetection:true},adapters:s}}export{c as a,l as b,p as c,g as d,m as e,o as f,s as g,v as h};
|
package/dist/chunk-SUV7Y2FH.js
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import {a as a$2}from'./chunk-ZTKIBREF.js';import {a as a$1}from'./chunk-5XDPQ3CB.js';import {a,e,b}from'./chunk-WIO6L24E.js';import {e as e$1,d}from'./chunk-44VJHNZB.js';import w from'path';import {existsSync}from'fs';import V from'fs-extra';var z=[{artifactKind:"bootstrap-compliance",cardId:"bootstrap",fileNames:["bootstrap-compliance.latest.json"]},{artifactKind:"doctor-workspace",cardId:"doctor",fileNames:["doctor-remediation-plan-last-run.json","doctor-last-run.json"]},{artifactKind:"analyze",cardId:"analyze",fileNames:["analyze-last-run.json"]},{artifactKind:"readiness",cardId:"readiness",fileNames:["release-readiness-last-run.json"]},{artifactKind:"pipeline",cardId:"pipeline",fileNames:["pipeline-last-run.json"]},{artifactKind:"workspace-run",cardId:"workspaceRun",fileNames:["workspace-run-last.json"]},{artifactKind:"workspace-verify",cardId:"workspaceVerify",fileNames:["workspace-verify-last-run.json"]}];function g(e){return e&&typeof e=="object"&&!Array.isArray(e)?e:void 0}function k(e){return Array.isArray(e)?e.filter(t=>typeof t=="string"&&t.trim().length>0):[]}function j(e){return [...new Set(e.map(t=>t.trim()).filter(Boolean))]}function C(e,t,a){return a?t:w.relative(e,t).split(w.sep).join("/")}function L(e){let t=e?.trim()||"npx workspai bootstrap";if(!/(?:^|\s)--ci(?:\s|$)/.test(t)&&/(?:^|\s)--json(?:\s|$)/.test(t))return t.replace(/(?:^|\s)--json(?:\s|$)/,n=>{let o=n.startsWith(" ")?" ":"",i=n.endsWith(" ")?" ":"";return `${o}--ci --json${i}`}).trim();let a=/(?:^|\s)--ci(?:\s|$)/.test(t)?t:`${t} --ci`;return /(?:^|\s)--json(?:\s|$)/.test(a)?a:`${a} --json`}function F(e){return `${JSON.stringify({schemaVersion:d.compatibilityMatrix.schemaVersion,generatedAt:e,source:"workspai workspace remediation-plan",runtimes:{},notes:["Minimal enterprise baseline. Add runtime and toolchain entries as governance matures."]},null,2)}
|
|
2
|
-
`}function q(e){return `${JSON.stringify({schema_version:"1.0",enabled:false,strategy:"on-demand",artifacts:[],created_at:e,note:"Minimal enterprise baseline. Set enabled: true and add artifact entries to activate mirroring."},null,2)}
|
|
3
|
-
`}function W(e){let t=e.payload,a=k(t.blockers),n=k(t.blockingReasons),o=k(t.failures),i=k(t.reasons),c=k(t.policyViolations),s=g(t.summary),p=k(s?.blockers);if(e.artifactKind==="analyze"){let r=(Array.isArray(t.findings)?t.findings:[]).map(l=>g(l)).filter(l=>!!l).map(l=>String(l.message??l.title??l.id??"").trim()).filter(Boolean);return j([...a,...r,...n])}if(e.artifactKind==="workspace-run"){let f=g(t.stages),r=Object.entries(f??{}).flatMap(([l,u])=>{let h=g(u);return (Array.isArray(h?.projects)?h.projects:[]).map(m=>g(m)).filter(m=>!!m).filter(m=>m.status==="failed"||m.ok===false).map(m=>`${l}: ${String(m.project??m.name??"project")} failed`)});return j([...a,...r,...n])}return j([...a,...n,...o,...i,...c,...p])}function A(e){return {id:e.id,artifactKind:e.artifactKind,cardId:e.cardId,title:e.title,order:e.order,phase:e.phase,scope:e.scope??"workspace",...e.projectName?{projectName:e.projectName}:{},...e.projectPath?{projectPath:e.projectPath}:{},...e.sourceStepId?{sourceStepId:e.sourceStepId}:{},...e.dependsOn?{dependsOn:e.dependsOn}:{},...e.strategy?{strategy:structuredClone(e.strategy)}:{},...e.transaction?{transaction:structuredClone(e.transaction)}:{},status:e.status??"ready",mode:e.mode,risk:e.risk,requiresApproval:true,blocker:e.blocker,summary:e.summary,...e.command?{command:e.command}:{},...e.invocation?{invocation:structuredClone(e.invocation)}:{},verifyCommand:e.verifyCommand,cwd:e.cwd??"workspace",files:e.files??[],...e.operation?{operation:e.operation}:{},rollback:e.rollback??(e.operation?{available:true,strategy:"idempotent"}:{available:false,strategy:"none"}),notes:e.notes??[]}}function J(e){return (Array.isArray(e.report.payload.steps)?e.report.payload.steps:[]).flatMap((a,n)=>{let o=g(a),i=typeof o?.id=="string"?o.id.trim():"",c=typeof o?.projectName=="string"?o.projectName.trim():"",s=typeof o?.projectPath=="string"?o.projectPath.trim():"",p=typeof o?.originalCommand=="string"?o.originalCommand.trim():"";if(!o||!i||!c||!s)return [];let f=g(o.studioStatus),r=f?.state==="ready"||f?.state==="review-required"||f?.state==="blocked"||f?.state==="guidance-only"?f.state:"guidance-only",l=o.risk==="safe"||o.risk==="guarded"||o.risk==="invasive"?o.risk:"guarded",u=g(o.preview),h=C(e.workspacePath,s,e.includeAbsolutePaths),y=E({capability:{...o,command:p},absoluteProjectPath:s,includeAbsolutePaths:e.includeAbsolutePaths}),m=T({capability:o,absoluteProjectPath:s,includeAbsolutePaths:e.includeAbsolutePaths}),P=o.executableInCurrentEnvironment===true&&!!y,R=_({strategy:o.strategy,includeAbsolutePaths:e.includeAbsolutePaths}),d=g(o.transaction),b=d?.schemaVersion==="workspai.doctor-dependency-repair-transaction.v1"?structuredClone(d):void 0;return b&&(b.projectPath=h),[A({id:`doctor.${i}`,artifactKind:e.report.artifactKind,cardId:e.report.cardId,title:typeof u?.title=="string"&&u.title.trim()?u.title.trim():`Repair ${c}`,order:e.startOrder+n,phase:typeof o.phase=="string"?o.phase:"doctor-remediation",blocker:typeof u?.summary=="string"&&u.summary.trim()?u.summary.trim():`Doctor remediation is pending for ${c}.`,summary:typeof u?.summary=="string"&&u.summary.trim()?u.summary.trim():`Execute the CLI-authored Doctor step for ${c}.`,mode:P?"run-command":"manual-guidance",risk:l,status:r,...P&&y?{command:y}:{},...P&&m?{invocation:m}:{},verifyCommand:typeof o.verifyCommand=="string"&&o.verifyCommand.trim()?o.verifyCommand.trim():"npx workspai doctor project --json",files:k(o.files).map(v=>{let x=w.isAbsolute(v)?v:w.resolve(s,v);return C(e.workspacePath,x,e.includeAbsolutePaths)}),notes:[`Source Doctor step: ${i}`,...typeof f?.reason=="string"?[f.reason]:[]],scope:"project",projectName:c,projectPath:h,sourceStepId:i,dependsOn:k(o.dependsOn).map(v=>`doctor.${v}`),strategy:R,transaction:b,cwd:"project",...g(o.rollback)?.available===true?{rollback:{available:true,strategy:"manual"}}:{}})]})}function E(e){let t=typeof e.capability.command=="string"?e.capability.command.trim():"";if(e.includeAbsolutePaths&&t)return t;let a=U({operation:e.capability.operation,absoluteProjectPath:e.absoluteProjectPath});if(a)return a$2(a);let n=g(e.capability.invocation),o=typeof n?.executable=="string"?n.executable.trim():"",i=k(n?.args);if(o)return [o,...i].map(s=>/^[a-zA-Z0-9_./:@=+-]+$/.test(s)?s:JSON.stringify(s)).join(" ");if(!t)return;let c=e.absoluteProjectPath.replace(/[.*+?^${}()|[\]\\]/g,"\\$&");return t.replace(new RegExp(`^cd\\s+["']?${c}["']?\\s*&&\\s*`,"i"),"").replaceAll(e.absoluteProjectPath,".")}function T(e){let t=g(e.capability.invocation),a=typeof t?.executable=="string"?t.executable.trim():"",n=k(t?.args);if(!(!a||n.length!==(Array.isArray(t?.args)?t.args.length:0)))return {cwd:e.includeAbsolutePaths?e.absoluteProjectPath:".",executable:a,args:n}}function U(e){let t=g(e.operation);if(!t||typeof t.type!="string")return;let a=structuredClone(t);for(let n of ["path","sourcePath"]){let o=a[n];if(typeof o!="string")continue;let i=w.isAbsolute(o)?w.relative(e.absoluteProjectPath,o):o;if(!i||i===".."||i.startsWith(`..${w.sep}`)||w.isAbsolute(i))return;a[n]=i.split(w.sep).join("/");}return a}function _(e){if(!Array.isArray(e.strategy))return;let t=structuredClone(e.strategy);if(!e.includeAbsolutePaths)for(let a of t)a.invocation&&(a.invocation.cwd=".");return t}function H(e){let t=Array.isArray(e.report.payload.projects)?e.report.payload.projects:e.report.payload.project?[e.report.payload.project]:[],a=new Set,n=[];for(let o of t){let i=g(o);if(!i)continue;let c=typeof i.name=="string"?i.name.trim():"",s=typeof i.path=="string"?i.path.trim():"";if(!c||!s)continue;let p=Array.isArray(i.repairCapabilities)?i.repairCapabilities:Array.isArray(i.probes)?i.probes.map(f=>g(f)?.repairCapability).filter(f=>f!==void 0):[];for(let f of p){let r=g(f),l=typeof r?.id=="string"?r.id.trim():"";if(!r||!l)continue;let u=`${c}:${l}`;if(a.has(u))continue;a.add(u);let h=r.risk==="safe"||r.risk==="guarded"||r.risk==="invasive"?r.risk:"guarded",y=E({capability:r,absoluteProjectPath:s,includeAbsolutePaths:e.includeAbsolutePaths}),m=T({capability:r,absoluteProjectPath:s,includeAbsolutePaths:e.includeAbsolutePaths}),P=r.status==="available"&&!!y,R=g(r.transaction),d=R?.schemaVersion==="workspai.doctor-dependency-repair-transaction.v1"?structuredClone(R):void 0;d&&(d.projectPath=C(e.workspacePath,s,e.includeAbsolutePaths));let b=_({strategy:r.strategy,includeAbsolutePaths:e.includeAbsolutePaths}),v=k(r.files).map(I=>C(e.workspacePath,I,e.includeAbsolutePaths)),x=y?n.find(I=>I.projectName===c&&I.command===y&&I.cwd==="project"):void 0;if(x){x.files=j([...x.files,...v]),x.notes=j([...x.notes,`Also satisfies Doctor capability: ${l}`]);continue}n.push(A({id:`doctor.${c}.${l}`,artifactKind:e.report.artifactKind,cardId:e.report.cardId,title:typeof r.title=="string"&&r.title.trim()?r.title.trim():`Repair ${c}`,order:e.startOrder+n.length,phase:d?"dependency-remediation":"doctor-remediation",blocker:typeof r.reason=="string"&&r.reason.trim()?r.reason.trim():`Doctor remediation is pending for ${c}.`,summary:typeof r.reason=="string"&&r.reason.trim()?r.reason.trim():`Execute the Doctor-authored repair capability for ${c}.`,mode:P?r.canEditFiles===true?"edit-file":"run-command":"manual-guidance",risk:h,status:P?"ready":r.status==="manual"?"guidance-only":"blocked",...y?{command:y}:{},...m?{invocation:m}:{},verifyCommand:typeof r.verifyCommand=="string"&&r.verifyCommand.trim()?r.verifyCommand.trim():"npx workspai doctor project --json",files:v,notes:[`Source Doctor capability: ${l}`,...k(r.limitations)],scope:"project",projectName:c,projectPath:C(e.workspacePath,s,e.includeAbsolutePaths),sourceStepId:l,strategy:b,transaction:d,cwd:"project",...r.operation?{rollback:{available:true,strategy:"manual"}}:{}}));}}return n}function Z(e){let t=[],a=L("npx workspai bootstrap --json");for(let n of e.blockers)n.includes("profile.enterprise.ci")&&t.push(A({id:"bootstrap.enterprise-ci",artifactKind:"bootstrap-compliance",cardId:"bootstrap",title:"Run bootstrap in deterministic CI mode",order:10,phase:"bootstrap-preflight",blocker:n,summary:"Enterprise bootstrap compliance requires --ci for deterministic execution.",mode:"run-command",risk:"safe",command:a,verifyCommand:a})),n.includes("profile.enterprise.compatibility-matrix")&&t.push(A({id:"bootstrap.compatibility-matrix",artifactKind:"bootstrap-compliance",cardId:"bootstrap",title:"Create enterprise compatibility matrix baseline",order:20,phase:"bootstrap-config",blocker:n,summary:"Create the missing compatibility matrix baseline without overwriting user data.",mode:"edit-file",risk:"safe",verifyCommand:a,files:[e$1.compatibilityMatrix],operation:{type:"file-create",path:e$1.compatibilityMatrix,content:F(e.generatedAt),overwrite:false}})),n.includes("profile.enterprise.mirror-config")&&t.push(A({id:"bootstrap.mirror-config",artifactKind:"bootstrap-compliance",cardId:"bootstrap",title:"Create enterprise mirror config baseline",order:30,phase:"bootstrap-config",blocker:n,summary:"Create the missing mirror configuration baseline without enabling mirroring.",mode:"edit-file",risk:"safe",verifyCommand:a,files:[".workspai/mirror-config.json"],operation:{type:"file-create",path:".workspai/mirror-config.json",content:q(e.generatedAt),overwrite:false}}));return t}function G(e){let t=Array.isArray(e.report.payload.steps)?e.report.payload.steps:[],a=[],n=new Map;for(let o of t){let i=g(o),c=g(i?.command),s=typeof i?.id=="string"?i.id.trim():"",p=typeof i?.project=="string"?i.project.trim():"",f=typeof i?.status=="string"?i.status:"",r=typeof c?.display=="string"?c.display.trim():"",l=i?.required===true;if(!s.startsWith("project.")||!p||!l||f!=="fail"&&f!=="missing"||!/^npx\s+workspai\s+workspace\s+run\s+/i.test(r))continue;let u=s.split(".").at(-1)??"stage",h=`workspaceVerify.${s}`,y=n.get(p),m=/(?:^|\s)--no-gates(?:\s|$)/.test(r)?r:`${r} --no-gates`;a.push(A({id:h,artifactKind:e.report.artifactKind,cardId:e.report.cardId,title:typeof i.label=="string"&&i.label.trim()?i.label.trim():`Run ${u} for ${p}`,order:e.startOrder+a.length,phase:"fleet-run",blocker:typeof i.message=="string"&&i.message.trim()?i.message.trim():`${u} evidence is not current for ${p}.`,summary:`Produce fresh ${u} evidence for ${p} without re-entering the blocked aggregate gates.`,mode:"run-command",risk:u==="start"?"guarded":"safe",status:"ready",command:m,verifyCommand:e.ciMode?"npx workspai workspace verify --strict --json":"npx workspai workspace verify --json",scope:"project",projectName:p,projectPath:p,sourceStepId:s,...y?{dependsOn:[y]}:{},cwd:"workspace",notes:[`Source Workspace Verify step: ${s}`,"Aggregate verification must run only after this project evidence producer completes."]})),n.set(p,h);}return a}function Q(e){let t=j(e.blockers.flatMap(n=>{let o=n.match(/(?:project runtimes?|workspace)\s*\(([^)]+)\)\s+(?:is|are) not pinned/i);return o?.[1]?o[1].split(",").map(i=>i.trim().toLowerCase()).filter(i=>/^(python|node|go|java|dotnet|rust|php)$/.test(i)):[]})),a=[];for(let n of t){let o=`readiness.toolchain.${n}.setup`,i=e.blockers.find(c=>c.toLowerCase().includes(`(${n})`))??`The ${n} runtime is not pinned in the canonical workspace toolchain.`;a.push(A({id:o,artifactKind:e.report.artifactKind,cardId:e.report.cardId,title:`Pin ${n} in the workspace toolchain`,order:e.startOrder+a.length,phase:"toolchain-reconciliation",blocker:i,summary:`Detect and persist the current ${n} runtime in the canonical workspace toolchain lock.`,mode:"run-command",risk:"safe",command:`npx workspai setup ${n} --json`,verifyCommand:e.ciMode?"npx workspai readiness --strict --json":"npx workspai readiness --json",notes:["Run from the workspace root so the canonical toolchain.lock is updated."]})),a.push(A({id:`readiness.toolchain.${n}.bootstrap`,artifactKind:e.report.artifactKind,cardId:e.report.cardId,title:`Reconcile the ${n} workspace foundation`,order:e.startOrder+a.length,phase:"toolchain-reconciliation",blocker:`The ${n} runtime pin must be reconciled with the workspace foundation.`,summary:"Refresh the workspace foundation after the runtime pin is written.",mode:"run-command",risk:"guarded",command:"npx workspai bootstrap --ci --json",verifyCommand:e.ciMode?"npx workspai readiness --strict --json":"npx workspai readiness --json",dependsOn:[o]}));}return a}function X(e){if(e.report.artifactKind==="readiness"&&/dependenc(?:y|ies).*vulnerabil|vulnerabil.*dependenc(?:y|ies)|security audit/i.test(e.blocker))return A({id:`${e.report.cardId}.doctor-owner.${e.order}`,artifactKind:e.report.artifactKind,cardId:e.report.cardId,title:"Resolve dependency vulnerability through Doctor",order:e.order,phase:"dependency-remediation",blocker:e.blocker,summary:"Release Readiness is the aggregate gate; use the project-scoped Doctor remediation capability that owns this dependency failure.",mode:"verify-before-fix",risk:"guarded",status:"review-required",command:"npx workspai doctor workspace --plan --json",verifyCommand:e.ciMode?"npx workspai readiness --strict --json":"npx workspai readiness --json",notes:["Read doctor-remediation-plan-last-run.json and execute the matching surface-security-hygiene capability before rerunning Readiness.","Do not treat a Readiness refresh as remediation for a source dependency vulnerability."]});let a={analyze:{title:"Refresh analyze evidence",phase:"analysis",command:"npx workspai analyze --strict --json",verify:"npx workspai analyze --strict --json"},readiness:{title:"Refresh release readiness",phase:"release-readiness",command:e.ciMode?"npx workspai readiness --strict --json":"npx workspai readiness --json",verify:e.ciMode?"npx workspai readiness --strict --json":"npx workspai readiness --json"},pipeline:{title:"Rerun governance pipeline",phase:"governance-pipeline",command:"npx workspai pipeline --json --strict",verify:"npx workspai pipeline --json --strict"},"workspace-run":{title:"Rerun failed workspace stage",phase:"fleet-run",command:e.ciMode?"npx workspai workspace run test --strict --json":"npx workspai workspace run test --json",verify:e.ciMode?"npx workspai workspace run test --strict --json":"npx workspai workspace run test --json"},"workspace-verify":{title:"Refresh workspace verify gate",phase:"verification",command:e.ciMode?"npx workspai workspace verify --strict --json":"npx workspai workspace verify --json",verify:e.ciMode?"npx workspai workspace verify --strict --json":"npx workspai workspace verify --json"},"doctor-workspace":{title:"Use Doctor remediation plan",phase:"doctor-remediation",command:"npx workspai doctor workspace --plan --json",verify:"npx workspai doctor workspace --json"}}[e.report.artifactKind]??{title:"Refresh artifact evidence",phase:"evidence-refresh",command:"npx workspai pipeline --json --strict",verify:"npx workspai pipeline --json --strict"};return A({id:`${e.report.cardId}.refresh.${e.order}`,artifactKind:e.report.artifactKind,cardId:e.report.cardId,title:a.title,order:e.order,phase:a.phase,blocker:e.blocker,summary:"No deterministic file operation is available for this artifact yet; refresh the evidence and continue with the card-specific plan.",mode:e.report.artifactKind==="doctor-workspace"?"verify-before-fix":"run-command",risk:"guarded",status:e.report.artifactKind==="doctor-workspace"?"review-required":"ready",command:a.command,verifyCommand:a.verify,notes:e.report.artifactKind==="doctor-workspace"?["Read doctor-remediation-plan-last-run.json for ordered file-level steps."]:[]})}async function Y(e){let t=[a(e,".workspai/reports"),b(e,".workspai/reports")],a$1=[],n=new Set;for(let o of z)for(let i of o.fileNames){let c=(await Promise.all(t.map(s=>w.join(s,i)))).find(s=>existsSync(s));if(!(!c||n.has(`${o.artifactKind}:${i}`))){n.add(`${o.artifactKind}:${i}`);try{let s=await V.readJSON(c),p=g(s);if(!p)continue;a$1.push({artifactKind:o.artifactKind,cardId:o.cardId,fileName:i,absolutePath:c,payload:p});break}catch{a$1.push({artifactKind:o.artifactKind,cardId:o.cardId,fileName:i,absolutePath:c,payload:{blockers:[`${o.artifactKind}: report exists but could not be parsed.`]}});break}}}return a$1}async function de(e){let t=w.resolve(e.workspacePath),a$2=e.includeAbsolutePaths===true,n=e.ciMode===true,o=new Date().toISOString(),i=a(t,".workspai/reports"),c=await Y(t),s=[],p=1;for(let r of c){if(r.artifactKind==="doctor-workspace"){let d=Array.isArray(r.payload.steps)?J({report:r,workspacePath:t,includeAbsolutePaths:a$2,startOrder:p}):H({report:r,workspacePath:t,includeAbsolutePaths:a$2,startOrder:p});s.push(...d),p+=d.length;continue}let l=W(r);if(l.length===0)continue;if(r.artifactKind==="bootstrap-compliance"){s.push(...Z({blockers:l,generatedAt:o})),p=s.length+1;continue}if(r.artifactKind==="workspace-verify"){let d=G({report:r,startOrder:p,ciMode:n});if(d.length>0){s.push(...d),p+=d.length;continue}}if(r.artifactKind==="readiness"){let d=Q({report:r,blockers:l,startOrder:p,ciMode:n});if(d.length>0){s.push(...d),p+=d.length;continue}}let u=s.some(d=>d.transaction?.kind==="dependency-security"),h=r.artifactKind==="readiness"&&l.some(d=>/dependenc(?:y|ies).*vulnerabil|vulnerabil.*dependenc(?:y|ies)|security audit/i.test(d));if(u&&h)continue;let y=l[0],m=X({report:r,blocker:y,order:p,ciMode:n}),R={readiness:new Set(["bootstrap","doctor"]),pipeline:new Set(["bootstrap","doctor","analyze","readiness"]),workspaceVerify:new Set(["bootstrap","doctor","readiness","workspaceRun"])}[r.cardId];if(r.cardId==="pipeline"){let d=["doctor","analyze","readiness"].find(b=>y.toLowerCase().includes(b));d&&(R=new Set([d]));}if(R){let d=s.filter(b=>R.has(b.cardId)&&b.risk!=="invasive"&&b.status!=="blocked"&&b.status!=="guidance-only").map(b=>b.id);d.length>0&&(m.dependsOn=j([...m.dependsOn??[],...d]),m.notes.push("This aggregate gate must run after its contract-owned upstream remediation actions."));}l.length>1&&m.notes.push(...l.slice(1,8).map(d=>`Related blocker: ${d}`)),s.push(m),p+=1;}let f={safe:s.filter(r=>r.risk==="safe").length,guarded:s.filter(r=>r.risk==="guarded").length,invasive:s.filter(r=>r.risk==="invasive").length};return {schemaVersion:a$1,generatedAt:o,workspace:{name:w.basename(t),...a$2?{path:t}:{}},source:{command:"workspace remediation-plan",reportsDir:C(t,i,a$2),includeAbsolutePaths:a$2,ciMode:n},summary:{artifactsScanned:c.length,cardsCovered:j(s.map(r=>r.cardId)).length,totalActions:s.length,executableActions:s.filter(r=>r.status==="ready").length,risk:f},actions:s}}async function pe(e$2,t){return e(t,e$1.artifactRemediationPlan,e$2)}export{de as a,pe as b};
|